不少同学抱怨,在集群的GPU节点上运行caffe程序时,经常出现"Out of Memory"的情况。实际上,如果我们在提交caffe程序到某个GPU节点的同时,指定该节点某个比较空闲的gpu id,便可以避免"Out of Memory"的情况。步骤如下:

1. 在提交任务前,制作一个带有“nvidia-smi”命令的run_gpu.sh文件

#!/bin/bash
#$ -V
#$ -cwd
#$ -j y
#$ -S /bin/bash nvidia-smi

2. 提交run_gpu.sh文件到某个GPU节点(以g0502为例)

qsub -l h=g0502 run_gpu.sh

3. 查看run_gpu.sh任务的运行结果

可以看到,g0502节点有四块gpu,id分别为0, 1, 2, 3。其中0,1和3的内存几乎都已经占满了,只有2稍微空闲一些。所以,若在提交caffe程序到g0502节点上,需要指定运行caffe程序的gpu id为2。否则,提交上去的caffe程序将默认gpu id为0,导致很有可能出现"Out of Memory"的情况。

4. 在提交caffe程序的.sh文件(如caffe_train.sh)中指定gpu id。

 #!/bin/bash
#$ -V
#$ -cwd
#$ -j y
#$ -S /bin/bash ./build/tools/caffe train -gpu -solver models/segnet/segnet_building_solver.prototxt

在.sh文件的第7行,"-gpu 2"的含义为显式指定gpu id为2。

5. 提交caffe_train.sh文件到g0502节点。

qsub -l h=g0502 caffe_train.sh

6. 查看caffe_train.sh.o文件

可以看到,caffe_train.sh文件指定了g0502节点中gpu id为2的gpu来运行caffe程序。这样,我们便可以在很大程度上避免在集群上运行的caffe程序出现"Out of Memory"的情况。

7. 用matcaffe测试训练好的caffemodel时指定gpu id

与训练时一样,用matcaffe测试训练好的caffemodel时,我们也可以显式指定gpu id,以避免出现“Out of Memory"的情况。与在caffe_train.sh文件中指定gpu id不一样,测试时,我们需要在.m文件中显式指定gpu id。而不是在.sh文件中指定。

caffe.set_mode_gpu();
caffe.set_device(2); % set gpu id net = caffe.Net(model, weights,'test');

第2行,caffe.set_device(2),显式指定gpu id为2。

8. 用pycaffe测试训练好的caffemodel时指定gpu id

与matcaffe同理,我们需要在.py文件中显式指定gpu id。

 import caffe
#.....
if __name__ == '__main__':
caffe.set_mode_gpu()
# set gpu_id
caffe.set_device(2);

第6行,caffe.set_device(2),显式指定gpu id为2。

至此,我们便可以通过指定集群某个节点中较为空闲的gpu id来避免出现“Out of Memory"的情况~^_^~

在集群上运行caffe程序时如何避免Out of Memory的更多相关文章

  1. Spark优化之二:集群上运行jar程序,状态一直Accepted且不停止不报错

    如果运行Spark集群时状态一直为Accepted且不停止不报错,比如像下面这样的情况: 15/06/14 11:33:33 INFO yarn.Client: Application report ...

  2. Spark学习之在集群上运行Spark

    一.简介 Spark 的一大好处就是可以通过增加机器数量并使用集群模式运行,来扩展程序的计算能力.好在编写用于在集群上并行执行的 Spark 应用所使用的 API 跟本地单机模式下的完全一样.也就是说 ...

  3. MapReduce编程入门实例之WordCount:分别在Eclipse和Hadoop集群上运行

    上一篇博文如何在Eclipse下搭建Hadoop开发环境,今天给大家介绍一下如何分别分别在Eclipse和Hadoop集群上运行我们的MapReduce程序! 1. 在Eclipse环境下运行MapR ...

  4. IntelliJ IDEA编写的spark程序在远程spark集群上运行

    准备工作 需要有三台主机,其中一台主机充当master,另外两台主机分别为slave01,slave02,并且要求三台主机处于同一个局域网下 通过命令:ifconfig 可以查看主机的IP地址,如下图 ...

  5. 06、部署Spark程序到集群上运行

    06.部署Spark程序到集群上运行 6.1 修改程序代码 修改文件加载路径 在spark集群上执行程序时,如果加载文件需要确保路径是所有节点能否访问到的路径,因此通常是hdfs路径地址.所以需要修改 ...

  6. 在local模式下的spark程序打包到集群上运行

    一.前期准备 前期的环境准备,在Linux系统下要有Hadoop系统,spark伪分布式或者分布式,具体的教程可以查阅我的这两篇博客: Hadoop2.0伪分布式平台环境搭建 Spark2.4.0伪分 ...

  7. [Spark Core] 在 Spark 集群上运行程序

    0. 说明 将 IDEA 下的项目导出为 Jar 包,部署到 Spark 集群上运行. 1. 打包程序 1.0 前提 搭建好 Spark 集群,完成代码的编写. 1.1 修改代码 [添加内容,判断参数 ...

  8. 将java开发的wordcount程序提交到spark集群上运行

    今天来分享下将java开发的wordcount程序提交到spark集群上运行的步骤. 第一个步骤之前,先上传文本文件,spark.txt,然用命令hadoop fs -put spark.txt /s ...

  9. 从认证到调度,K8s 集群上运行的小程序到底经历了什么?

    导读:不知道大家有没有意识到一个现实:大部分时候,我们已经不像以前一样,通过命令行,或者可视窗口来使用一个系统了. 前言 现在我们上微博.或者网购,操作的其实不是眼前这台设备,而是一个又一个集群.通常 ...

随机推荐

  1. PHP入门二【PHP include 和 require的区别】

    include (或 require)语句会获取指定文件中存在的所有文本/代码/标记,并复制到使用 include 语句的文件中.包含文件很有用,如果您需要在网站的多张页面上引用相同的 PHP.HTM ...

  2. LINUX下编译源码时所需提前安装的常用依赖包列表

    yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-deve ...

  3. 由Excel表格导出Latex代码

    Latex提供了不少绘制表格的宏包(参见:http://tug.org/pracjourn/2007-1/mori/),但在latex里画表并不直观,特别是在表格比较大的时候,有时候也需要先用Exce ...

  4. Linux多线程与同步

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 典型的UNIX系统都支持一个进程创建多个线程(thread).在Linux进程基础 ...

  5. WCF与WebService的区别

    1.WebService:严格来说是行业标准,不是技术,使用XML扩展标记语言来表示数据(这个是夸语言和平台的关键).微软的Web服务实现称为ASP.NET Web Service.它使用Soap简单 ...

  6. Log4j源代码学习

    了解log4j的源代码来源于项目中一次需求,我们想将系统所有的warn日志统一收集到common-warn.log的日志中去,以便于系统对其进行监控处理.于是模拟自动生成的error配置完成了warn ...

  7. hibernate一级缓存的源码初窥

    hibernate的一级缓存的存在使得hibernate可以在操作实体化对象的时候减少对于数据库的访问.hibernate的一级缓存实际上就是指的session缓存,它的生命周期和session相同. ...

  8. python多线程

    python多线程有两种用法,一种是在函数中使用,一种是放在类中使用 1.在函数中使用 定义空的线程列表 threads=[] 创建线程 t=threading.Thread(target=函数名,a ...

  9. select下拉框插件(转)

    <!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...

  10. <input type="file" id="camera" multiple="multiple" capture="camera" accept="image/*"> 上传图片,手机调用相册和摄像头

    <input type="file" id="camera" multiple="multiple" capture="ca ...