Linux上最简单的TensorFlow-GPU配置方式

Linux上的驱动配置本就麻烦还危险,再加上CUDA和cuDNN,嗯……,搭好一个环境估计又得多掉几根头发。但是!

这一切其实可以像apt install和pip install一样简单!

下文教程经Linux Mint(Ubuntu系)实证可用,如果不出岔子,feora、opensuse、rhel、sles这几个发行版应该也可以采用这种方式进行配置。

1. 配置软件源

没错,NVIDIA官方是有驱动、CUDA和cuDNN的官方仓库的,所以才可以apt install解决大部分问题。但是添加源的方式不是手动编辑/etc/apt下的配置,而是安装官方提供的软件包,其中打包好了所需的源配置。

1.1. 驱动和CUDA源

地址:https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/

地址中的最后两级目录根据实际选择,示例对应的情况为64位Intel cpu上的Mint 19.1(基于ubuntu 18.04)。

下载目录中名为cuda-repo-*.deb(例如cuda-repo-ubuntu1804_10.1.105-1_amd64.deb)的文件,可能有多个版本,选择最新的就好了,毕竟只是配置一个源而已,越新越好。

sudo dpkg -i cuda-repo-ubuntu1804_10.1.105-1_amd64.deb

dpkg命令执行后会显示还要配置认证密钥,以实际的显式为准,命令形式如下。

sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub

其实就是下载了刚才页面中的.pub文件添加密钥。

1.2. cuDNN源

地址:http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/

同上,下载并且dpkg安装,文件名为nvidia-machine-learning-repo-*.deb,如nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb。

按理上一步已经添加了认证密钥,这里不需要重复了,但还是以dpkg实际显示为标准。

1.3. 更新源

sudo apt update

检查确认一下,

apt search '^cuda$' '^libcudnn'

结果应该显示找得到了对应的包。

2. 安装新版驱动

CUDA对显卡驱动有一定要求,一般来说,在系统和硬件支持范围之内,安装最新的驱动总没错的。

根据系统和硬件情况,进NVIDIA官网https://www.nvidia.com/Download/index.aspx查看。

结果大概这样。

但是不用下载,看个版本号就够了,因为,进入系统的驱动管理器,会发现直接有不同版本的安装选择,用系统工具可比手动安装要安全多了。

安装完后重启,检查一下是不是成功配置好了新驱动。

3. 安装CUDA和cuDNN

截止到TensorFlow的1.13.1版本还不支持CUDA 10.1,所以就用10.0了。

apt install cuda-10-0 libcudnn7-dev

apt install就完事了。

4. 安装Python包

sudo pip3 install tensorflow-gpu

pip install就完事了。

5. 验证

import tensorflow as tf
tf.Session(config=tf.ConfigProto(log_device_placement=True)).run(tf.constant(1) + tf.constant(1))
add: (Add): /job:localhost/replica:0/task:0/device:GPU:0
2019-03-22 23:38:56.880439: I tensorflow/core/common_runtime/placer.cc:1059] add: (Add)/job:localhost/replica:0/task:0/device:GPU:0
Const: (Const): /job:localhost/replica:0/task:0/device:GPU:0
2019-03-22 23:38:56.880525: I tensorflow/core/common_runtime/placer.cc:1059] Const: (Const)/job:localhost/replica:0/task:0/device:GPU:0
Const_1: (Const): /job:localhost/replica:0/task:0/device:GPU:0
2019-03-22 23:38:56.880565: I tensorflow/core/common_runtime/placer.cc:1059] Const_1: (Const)/job:localhost/replica:0/task:0/device:GPU:0
2