最近有机会蹭组里的图形工作站跑DNN,想着终于有机会感受一下GPU的速度,结果网上一看全是细节性的教程,对小白十分不友好。经过一下午的鼓捣,踩了一些坑,最后终于弄好了,在这里全面的记录一下经过,大部分人按这个步骤走应该都能no error。
总述
keras使用CPU和GPU运算没有任何的语法差别,它能自动地判断能不能使用GPU运算,能的话就用GPU,不能则CPU。你只需要在代码开头加上下面这一句就行了,“0”指的是GPU编号,在cmd窗口输入nvidia-smi命令即可查看可用的GPU。
os.environ["CUDA_VISIBLE_DEVICES"]="0"
好,相信大部分人此时运行都会报错,这是因为你没有配置好支持GPU运算的环境,因此想要使用GPU加速运算的主要任务就是配环境!!总的来说,需要配置以下几大部分:
1.tensorflow-gpu
2.适合版本的nvidia驱动、CUDA、cuDNN
没错,就是这么简单,只要你把上面的四个东西装好了,你的神经网络模型就能在GPU上跑起来了,而其中的关键点就是:版本契合!下面我们分开来讲
写本文时我的环境配置:
tensorflow-gpu:2.0
keras:2.3
nvidia driver:441.41
CUDA:10.0
cuDNN:7.6.4 for CUDA 10.9
Tensorflow-gpu
众所周知,keras的底层实现是靠tensorflow,因此想要使用GPU运算,就要下载tensorflow-gpu库。
有人说tensorflow和tensorflow-gpu会干扰,为确保一次成功,建议先将原来的tensorflow、tensorflow-gpu、keras库全部卸载,然后安装版本契合的tensorflow-gpu和keras库。重点是keras要和tensorflow-gpu的版本对应,这可以在官网上查看,或者就在网上搜一下。
NVIDIA driver、CUDA、cuDNN
重点来了,有人不理解这三者的关系,简单解释一下:driver是驱动显卡工作的程序、CUDA是英伟达公司开发的用于GPU运算的框架、cuDNN是这个框架中专用于深度神经网络的库,这三者都能在NVIDIA公司官网上免费下载。
driver
驱动这就不说了,照着tensorflow官网上对应要求的驱动版本下载安装就行了,我记得tensorflow2.0要求的是410.以上,懒得看也可以直接装最新的版本。
CUDA
好多小白倒在了这里,我第一次也踩在这个坑上,请所有看到这里的朋友再打开tensorflow官网仔细看一下GPU运算所需要的版本要求:
仔细看第一行:“CUDA 10.0” 也就是说CUDA版本只能是v10.0,高也不行低也不行。我当时图方便直接装了最新版的CUDA V10.2,结果keras不支持(具体什么坑下面讲),只能卸载重装v10.0,然后就行了。
具体怎么安装CUDA可以参考下面这个链接
https://www.jianshu.com/p/9bdeb033e765
值得一提的是链接中“用VS2013进行编译”这一步是不需要的,在装CUDA时选择自定义安装,取消“Visual Studio”这一项就可以了。
那么现在就来说一说CUDA装错版本会遇到什么事情。看到网上很多人遇到了这个问题:
cudart64_100.dll not found
简单来说,就是CUDA版本装错了。_100是版本号,v10.0是_100,v_10.2就是102,你缺失这个文件就是你版本装错了。很多小机灵鬼说那我把_102重命名为_100不就行了吗?不行,不要问我是怎么知道的。。。还是老老实实卸载重装吧。
卸载的方法就是在控制面板里面把CUDA开头,末尾是错误版本号的程序删掉就行,然后重新安装正确版本号,记得环境变量里面也要修改。重新安装好后需要重启一下pycharm,不然还是会报错。
cuDNN
cuDNN就是CUDA的一个补充库,可以按照上面链接在官网下载,需要做个调查问卷。下载完是个压缩包,解压后把bin、include、lib三个文件夹里的文件复制到CUDA的对应文件夹中就行了。
然后你就可以看到你的keras程序在GPU上跑起来了!说实话真的快很多。。