歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 在集群上運行caffe程序時如何避免Out of Memory

在集群上運行caffe程序時如何避免Out of Memory

日期:2017/3/1 9:15:00   编辑:Linux編程

不少同學抱怨,在集群的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。

1 #!/bin/bash
2 #$ -V
3 #$ -cwd
4 #$ -j y
5 #$ -S /bin/bash
6 
7 ./build/tools/caffe train -gpu 2 -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。

1 import caffe
2 #.....
3 if __name__ == '__main__':
4     caffe.set_mode_gpu()
5     # set gpu_id
6     caffe.set_device(2);

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

至此,我們便可以通過指定集群某個節點中較為空閒的gpu id來避免出現“Out of Memory"的情況~^_^~

Copyright © Linux教程網 All Rights Reserved