目录
OOM
问题:OOM (out of memory)
原因:显存不足
解决:降低batch size,如果batch size=1还不行就只能改小网络
CUDNN_STATUS_INTERNAL_ERROR
问题:could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
原因:使用watch -n 0.1 nvidia-smi监测程序执行过程中显存的变化,发现是显存逐渐增大最后导致显存溢出。tensorflow不控制的时候默认占满显存,在后续持续增长的时候会触发问题。还有一种可能是更新cuda环境,但cuda缓存未更新
解决:控制显存使用,或清理cuda缓存
显存控制方案1:tensorflow代码控制(这里是tf1.x示例,tf2略有不同)参考链接
config = tf.ConfigProto()
config.gpu_options.allow_growth = True
sess = tf.Session(config=config)
显存控制方案2:TF环境变量
代码中增加
import os
os.environ["TF_FORCE_GPU_ALLOW_GROWTH"] = "true"
或设置环境变量
export TF_FORCE_GPU_ALLOW_GROWTH=true
清理cuda缓存
sudo rm -rf ~/.nv/
batch size只能设为1(或比预期小)
问题:batch size设置为1程序正常执行,设置大于1会出现OOM错误
原因:这是cudnn错误,因为cudnn会选择最佳的卷积算法,但是可能会需要比较多的显存。这个跟显卡及驱动有关,作者是出现在更新新显卡后触发
解决:禁用cudnn的这种自动调优,设置环境变量TF_CUDNN_USE_AUTOTUNE=0
代码增加
import os
os.environ["TF_CUDNN_USE_AUTOTUNE"] = "0"
或设置环境变量
export TF_CUDNN_USE_AUTOTUNE=0