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

2. 安装新版驱动

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

2.1. 查看硬件驱动兼容情况

在NVIDIA官网https://www.nvidia.com/Download/index.aspx可以查看自己硬件的驱动支持情况。

结果大概如下,

2.2. 利用系统驱动管理器安装驱动

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

2.3. 利用apt安装驱动

如果没有图形界面的话,也可以用apt命令手动执行安装,

sudo apt install nvidia-driver-<版本号>

3. 安装CUDA和cuDNN

安装好驱动后,最好重启一下系统,并确认是否安装成功。

接下来就是安装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