日常排坑:ubuntu18.04安装TensorFlow-gpu版

     安装TensorFlow-gpu版时,关于驱动问题遇到了很大的坑,这里记录一下。
     TensorFlow-gpu版需要cuda和cudnn的支持,而cuda又需要NVIDIA驱动的支持,三者存在版本匹配的关系。
     最新版的cuda是10.2,除了刚发布的TensorFlow2.0以外,最高的TensorFlow1.16仍旧只支持cuda10.0。因此我们能够选择的cuda最高版本最好不要超过10.0。

安装过程和错误记录

cuda10.0 deb版本安装包

1、安装cuda的仓库
sudo dpkg -i cuda-repo-ubuntu1804-10-0-local-10.0.130-410.48_1.0-1_amd64.deb
sudo apt-key add /var/cuda-repo-10-0-local-10.0.130-410.48/7fa2af80.pub #
sudo aptitude update #
2、安装nvidia驱动

     最初是在nvidia官网下载的驱动,418版本的,结果安装失败,原因不明。
     查了一些资料之后,用下面的命令装了驱动。
     通过下面的命令查看显卡型号、推荐的驱动版本。

ubuntu-drivers devices

     确定自己要安装的驱动版本之后,通过下面的命令安装,其中*代表你要装的驱动的版本号。

sudo apt-get install nvidia-driver-*

     这里我装的是430版本的驱动。装完驱动要重启。

3、安装cuda

     通过下面的命令安装cuda。

sudo aptitude install cuda-runtime-10-0

     这里有一个要注意的地方,一开始我用的是apt-get命令。结果因为一些依赖包的问题,安装失败。换成aptitude就可以了,这里也是感受到了aptitude一些比较好的优点。
     这里安装cuda10.0的时候,由于我用的是deb版本的安装包,因此它会默认安装410版本的显卡驱动。但是由于已经装了430版本的,因此会先自动卸载430再装410,结果在安装过程中应该是编译nvidia内核的时候报错。最终的结果就是显卡驱动是410的,但是nvidia内核是430的。
     查看内核的显卡驱动版本用下面的命令:

cat /proc/drivers/nvidia/version
4、安装cudnn

     通过下面的命令进行安装。

sudo dpkg -i libcudnn7_7.4.1.5-1+cuda10.0_amd64.deb
5、安装TensorFlow-gpu版

     我选择的是TensorFlow1.13.1,采用的是最简单的安装方法。

pip install tensorflow-gpu==1.13.1
6、测试

     用来测试的代码,是在mnist数据集上训练一个cnn网络。训练时发现并没有使用GPU,而且nvidia-smi这个命令无法执行,提示的错误应该是:Failed to initialize NVML: Driver/library version mismatch。(不确定,记不清了)。原因就在于410版本的显卡驱动和内核里的430冲突了。

7、所做的尝试
(1) 卸载410:失败

     为了解决这个冲突的问题,我首先试图卸载410版本的驱动,安装430的。结果由于cuda10.0依赖410驱动,卸载驱动时cuda也会被卸载。而安装cuda又会默认再次安装410驱动。

(2)修改内核430为410:失败

     之后又尝试把内核里的430弄成410,结果查了一些资料后没有结果,于是放弃这个方法。

(3)改安装cuda10.1:失败

     后来看到430版本驱动好像对应的是cuda10.1,因此我决定安装cuda10.1。安装方式和前面差不多,只不过这次由于我安装的是runfile格式的安装包,发现可以选择是否安装显卡驱动。我选择不安装,因为我预先安装了一个430版本的驱动。
     这个安装过程比较顺利,但是在测试的时候发现仍旧无法调用gpu。提示信息意思是TensorFlow尝试调用lib***.so.10.0,结果找不到(因为我们装的是cuda10.1),原因应该就是上面说的目前TensorFlow只支持cuda10.0的。

解决方法:安装runfile格式的cuda10.0

     绕了一圈,还是要装cuda10.0。而deb安装包默认会卸载430版本驱动装410的,410又会遇到编译错误。
     因此在之前安装cuda10.1的启发下,选择用10.0的runfile安装包安装。安装时选择不装驱动,这样驱动是430版本,cuda是10.0。成功安装,测试后可以正常调用gpu进行训练。
     至于怎么确定是否调用了gpu进行训练,一个方法是观察训练时输出的log信息,另一个方法就是通过nvidia-smi命令查看显卡的资源占用情况。一般计算量稍微大些的训练,显卡的占用都会比较高。

总结

     我遇到的问题可能比较个例化,如果cuda10.0自行安装的410驱动不出现错误的话,应该就不会有我遇到的这些曲折了。不过经过这一顿折腾,对cuda、nvidia驱动之间的一些问题,倒是弄明白了一些。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值