在尝试背靠背训练模型时,我遇到了这个问题。我发现GPU内存由于之前的训练而无法使用。因此,我发现最简单的方法是在每次下次训练之前手动刷新GPU内存。
使用nvidia-smi检查GPU内存使用情况:
nvidia-smi
nvidi-smi --gpu-reset
如果其他进程正在积极使用GPU,则以上命令可能不起作用。
或者,您可以使用以下命令列出使用GPU的所有进程:
sudo fuser -v /dev/nvidia*
输出应如下所示:
USER PID ACCESS COMMAND
/dev/nvidia0: root 2216 F...m Xorg
sid 6114 F...m krunner
sid 6116 F...m plasmashell
sid 7227 F...m akonadi_archive
sid 7239 F...m akonadi_mailfil
sid 7249 F...m akonadi_sendlat
sid 18120 F...m chrome
sid 18163 F...m chrome
sid 24154 F...m code
/dev/nvidiactl: root 2216 F...m Xorg
sid 6114 F...m krunner
sid 6116 F...m plasmashell
sid 7227 F...m akonadi_archive
sid 7239 F...m akonadi_mailfil
sid 7249 F...m akonadi_sendlat
sid 18120 F...m chrome
sid 18163 F...m chrome
sid 24154 F...m code
/dev/nvidia-modeset: root 2216 F.... Xorg
sid 6114 F.... krunner
sid 6116 F.... plasmashell
sid 7227 F.... akonadi_archive
sid 7239 F.... akonadi_mailfil
sid 7249 F.... akonadi_sendlat
sid 18120 F.... chrome
sid 18163 F.... chrome
sid 24154 F.... code
从这里,我获得了保存GPU内存的进程的PID,在我的情况下为24154。
使用以下命令通过其PID终止进程
sudo kill -9 MY_PID
用相关的PID替换MY_PID
0
当我开始训练一些神经网络时,它遇到了
CUDA_ERROR_OUT_OF_MEMORY
但是训练可以继续进行而不会出错。因为我想使用真正需要的gpu内存,所以我设置了gpu_options.allow_growth = True
。日志如下:在使用
nvidia-smi
命令后,它得到:在我评论了
gpu_options.allow_growth = True
,我再次训练了网络,一切正常。没有CUDA_ERROR_OUT_OF_MEMORY
的问题。最后,运行nvidia-smi
命令,它将得到:我有两个问题。为什么会出现
CUDA_OUT_OF_MEMORY
并且程序正常进行?为什么在注释allow_growth = True
后内存使用allow_growth = True
小。