tensorflow GPU使用之踩坑记录

用jupyter notebook试验tensorflow minist数据集,经常出现cuda error: out of memory。难道本机显卡GPU太简陋,只有4GB GDDR6不能做这个初级minist运算?
看看以下的实验

在tensorflow程序中设置GPU的显存限制:

# 设置可使用的 gpu 序号
os.environ['CUDA_VISIBLE_DEVICES']='0'
#获取当前物理GPU
gpus=tf.config.experimental.list_physical_devices(device_type='GPU')
#设置Tensorflow固定消耗GPU:0的4GB显存
tf.config.experimental.set_virtual_device_configuration(
    gpus[0],
    [tf.config.experimental.VirtualDeviceConfiguration(memory_limit=4096)]
)
#获取当前虚拟GPU
logical_gpus = tf.config.experimental.list_logical_devices('GPU')
print(' --physical gpu:', len(gpus), 'logical gpus:', len(logical_gpus))

经实际测试,minist手写数字数据集神经网络计算,GPU内存限制在512MB仍可运行,再小就报错。如果不对GPU实施显存限制,执行minist程序可占用3803MB的GPU内存。但512MB和3803MB的运行速度却没有明显区别。

tensorflow占用GPU内存取决于神经网络模型的复杂程度,若占用内存过大而出错,则可减少一次喂入模型的次数BATCH_SIZE。若还不行,只能增加GPU显卡数量,或者通过浏览器运行google colab,其方法于jupyter notebook相同,当然这里会有很多限制,例如要有一个好的跨栏工具,连续运行时间有限制。

终端查看GPU的实时运行状态

watch nvidia-smi

在这里插入图片描述

关于著名的错误:“Failed to get convolution algorithm. This is probably because cuDNN failed to initialize”
看到此提示,各位往往都去检查tensorflow版本,CUDA版本,cuDNN版本之间的匹配问题。其实多半问题出在GPU显卡内存上,tensorflow默认要全部占用GPU显卡内存,以发挥最大性能。而这常常导致out of memory,程序退出不干了。
鄙人GPU内存只有4GB,不限制GPU内存就出现所谓cuDNN初始化错。限制到2GB时,运行中GPU内存使用2762MiB。采用按需分配GPU内存时,使用内存3285MiB。两者比较,运行速度并没有差异。
试验用程序为 cifar10数据集,vgg16模型:
五层卷积:
CBA CBAPD; CBA CBAPD; CBA CBA CBAPD; CBA CBA CBAPD; CBA CBA CBAPD;
三层全连接:两个隐藏层512点,输出层10点。
tensorflow两个版本都能正常运行:
tensorflow-gpu1.15, cuda10.0, cuDNN7.6.5
tensorflow-gpu2.20, cuda 10.1, cuDNN7.6.5

ubuntu查看已安装的tensorflow,cuda,cuDNN版本方法:
文件管理器进入conda的虚拟环境目录,搜索cudnn,可以看到json文件
cudnn-7.6.5-cuda10.0_0.json
这是鄙人的tensorflow-gpu 1.15虚拟环境下配置的CUDA和cuDNN版本,配置关系:
tensorflow-gpu 1.15,CUDA 10.0,cuDNN 7.6.5

而tensorflow-gpu 2.20虚拟环境下找到文件:
cudnn-7.6.5-cuda10.1_0.json
表明配置关系:
tensorflow-gpu 2.20,CUDA 10.1,cuDNN 7.6.5

此外,jupyter notebook只能在进入时,设置GPU。一旦运行了程序,就不能再次设置GPU。
而VSCODE就没有这种限制,可在程序调试中多次更改GPU设置。对比jupyter notebook和Vscode,notebook经常有些莫名其妙的错误,Vscode表现就好很多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值