在集群上运行caffe程序时如何避免Out of Memory
不少同学抱怨,在集群的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的更多相关文章
- Spark优化之二:集群上运行jar程序,状态一直Accepted且不停止不报错
如果运行Spark集群时状态一直为Accepted且不停止不报错,比如像下面这样的情况: 15/06/14 11:33:33 INFO yarn.Client: Application report ...
- Spark学习之在集群上运行Spark
一.简介 Spark 的一大好处就是可以通过增加机器数量并使用集群模式运行,来扩展程序的计算能力.好在编写用于在集群上并行执行的 Spark 应用所使用的 API 跟本地单机模式下的完全一样.也就是说 ...
- MapReduce编程入门实例之WordCount:分别在Eclipse和Hadoop集群上运行
上一篇博文如何在Eclipse下搭建Hadoop开发环境,今天给大家介绍一下如何分别分别在Eclipse和Hadoop集群上运行我们的MapReduce程序! 1. 在Eclipse环境下运行MapR ...
- IntelliJ IDEA编写的spark程序在远程spark集群上运行
准备工作 需要有三台主机,其中一台主机充当master,另外两台主机分别为slave01,slave02,并且要求三台主机处于同一个局域网下 通过命令:ifconfig 可以查看主机的IP地址,如下图 ...
- 06、部署Spark程序到集群上运行
06.部署Spark程序到集群上运行 6.1 修改程序代码 修改文件加载路径 在spark集群上执行程序时,如果加载文件需要确保路径是所有节点能否访问到的路径,因此通常是hdfs路径地址.所以需要修改 ...
- 在local模式下的spark程序打包到集群上运行
一.前期准备 前期的环境准备,在Linux系统下要有Hadoop系统,spark伪分布式或者分布式,具体的教程可以查阅我的这两篇博客: Hadoop2.0伪分布式平台环境搭建 Spark2.4.0伪分 ...
- [Spark Core] 在 Spark 集群上运行程序
0. 说明 将 IDEA 下的项目导出为 Jar 包,部署到 Spark 集群上运行. 1. 打包程序 1.0 前提 搭建好 Spark 集群,完成代码的编写. 1.1 修改代码 [添加内容,判断参数 ...
- 将java开发的wordcount程序提交到spark集群上运行
今天来分享下将java开发的wordcount程序提交到spark集群上运行的步骤. 第一个步骤之前,先上传文本文件,spark.txt,然用命令hadoop fs -put spark.txt /s ...
- 从认证到调度,K8s 集群上运行的小程序到底经历了什么?
导读:不知道大家有没有意识到一个现实:大部分时候,我们已经不像以前一样,通过命令行,或者可视窗口来使用一个系统了. 前言 现在我们上微博.或者网购,操作的其实不是眼前这台设备,而是一个又一个集群.通常 ...
随机推荐
- JDBC三层架构
三层框架: 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI).业务逻辑层(BLL).数据访问层(DAL).区分层次的目的即为了“高内聚,低耦合”的思想. 原理:1:数据访问层:主要是对原始 ...
- HDU 5938 Four Operations(四则运算)
p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-s ...
- git本地提交到远程仓库命令
创建好远程仓库,然后要从本地上传代码到远程仓库: 1.git init 初始化git本地仓库 2. git add 添加到暂存区 3. git commit -am "提交备注" ...
- Android app开发知识小结
Android知识小结 这是一个知识的总结,所以没有详解的讲解. 一.分辨率Android中dp长度.sp字体使用.px像素.in英寸.pt英寸1/72.mm毫米 了解dp首先要知道density,d ...
- Java知识积累3-XML的DOM解析修改和删除方法
import java.io.File; import java.io.IOException; import javax.xml.parsers.DocumentBuilder;import jav ...
- Oracle 修改文件所有者
# chown -R gpadmin /usr/local/greenplum-db # chgrp -R gpadmin /usr/local/greenplum-db
- js实现对移动设备的检测
<script type="text/javascript"> if (browserRedirect()) { location.href = 'http:/phon ...
- 【Java】变量类接口_学习笔记
变量.类和接口 1.变量的类型 实例变量(不以static修饰) 成员变量 类变量(以static修饰) 所有变量 形参(方法签名中定义的变量) 局部变量 方法局部变量(在方法内定义) ...
- tar 解压常用压缩文件格式命令大全
常用压缩文件格式就那么几种,解压命令总结在此: 1 2 3 4 5 6 7 8 tar xzf filename.tar.gz tar xjf filename.tar.bz2 tar xzf f ...
- conflict between "Chinese_PRC_CI_AI" and "Chinese_PRC_CI_AS" in the equal to operation
在SQL SERVICE做关联查询的时候遇到了"conflict between "Chinese_PRC_CI_AI" and "Chinese_PRC_CI ...