torch.nn.DataParallel的多GPU训练导致OOM解决方法

torch.nn.DataParallel()这个方式会每次调用GPU:0,如果0卡被占用就训练不起来了,导致RuntimeError: CUDA error: out of memory。

torch.nn.DataParallel的多GPU训练导致OOM解决方法_第1张图片

这时,我们需要指定显卡,即指定我们想要训练GPU的序号。在此提供两种指定GPU的方法:

首先输入 nvidia-smi查看GPU占用情况和空闲的GPU序号。本人服务器只有两张卡。若要指定在卡1跑,有如下几种方法。

torch.nn.DataParallel的多GPU训练导致OOM解决方法_第2张图片

方法一:cuda(‘cuda:1’)

这种方法就是将有cuda()的地方全部里面指定卡,但是这样改的地方太多,要是再做变动就会很麻烦,而且貌似不可以指定两张卡。

方法二:os.environ[“CUDA_VISIBLE_DEVICES”] = ‘1’(如果指定多张卡,os.environ[“CUDA_VISIBLE_DEVICES”] = ‘1,2’)。

这种方法可以让程序只看到1卡和2卡,这时候机器就会认为1卡就是GPU:0。所以输出报错或者其他输出当前GPU是在GPU:0,但其实是跑在GPU:1上。

如果使用的是pycharm远程连接服务器,可以直接在pycharm中添加环境变量:路径为Run->Edit Configurations->Environment->Envirotment Variable中写入CUDA_VISIBLE_DEVICES=1,如下图所示。

 

你可能感兴趣的:(pytorch,pytorch,深度学习,人工智能)