Ubuntu16安装TensorFlow及配置GPU支持(手动安装对应版本的CUDA,cuDNN)
写在前面
这种安装方法传统的,也是更复杂的
但是作为了解GPU支持的相关配置,网上很多人比较推崇
以下安装主要分为四步:Anaconda -> TensorFlow -> CUDA -> cuDNN
每部安装完成后也给出了安装成功的验证方法,需要立即验证,避免最后出错无法追溯错误
操作Anaconda虚拟环境
默认读者已安装Anaconda,否则阅读另一篇关于Anaconda虚拟环境安装的博客
创建虚拟环境
$ conda create -n yolo python=3.6
进入虚拟环境
$ source activate yolo
修改pip源
#根目录下修改(不存在则创建) ~/.pip/pip.conf
$ mkdir ~/.pip
$ gedit ~/.pip/pip.conf
#粘贴以下内容并保存退出
[global]
index-url=http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
安装指定版本的TensorFlow
$ pip install --upgrade tensorflow-gpu==2.0.0
若不使用==x.x.x制定版本号会安装最新版本,不要吃螃蟹
安装完成后立即测试
无论在base环境或虚拟环境下安装的,请在对应环境下进行测试
$ python
>>> import tensorflow as tf
>>> print(tf.__version__)
有以下返回则安装成功
查看TensorFlow版本号对应的CUDA和cuDNN版本号
对应版本的CUDA和cuDNN请查看:TensorFlow中文手册
比如,翻阅得到一组版本对应关系,之后安装要按照这个来找版本号
-
TensorFlow->2.0.0
-
cuDNN->7.4
-
CUDA->10.0
之后的安装,就记住此处指定的版本号
安装CUDA
对版本号足够了解的也可以直接到docker仓库下载
注意,下载runfile,不要下载deb(坑比较多)
并放到home目录下面去
$ cd /home/用户名
$ sudo ./cuda_10.0.130_410.48_linux.run
按空格按到条款阅读 --More--100%
Do you accept the previously read EULA?
accept/decline/quit: accept
Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 410.48?
(y)es/(n)o/(q)uit: n
#这里一定要选no,否则之前安装的驱动会被顶掉,就白装了
Install the CUDA 10.0 Toolkit?
(y)es/(n)o/(q)uit: y
Enter Toolkit Location
[ default is /usr/local/cuda-10.0 ]: 回车
Do you want to install a symbolic link at /usr/local/cuda?
(y)es/(n)o/(q)uit: y
#在local下面创建软链接
Install the CUDA 10.0 Samples?
(y)es/(n)o/(q)uit: y
Enter CUDA Samples Location
[ default is /home/pyp ]: 回车
接下来会出现
Installing the CUDA Toolkit in /usr/local/cuda-10.0 ...
Installing the CUDA Samples in /home/pyp ...
Copying samples to /home/pyp/NVIDIA_CUDA-10.0_Samples now...
Finished copying samples.
===========
= Summary =
===========
Driver: Not Selected
Toolkit: Installed in /usr/local/cuda-10.0
Samples: Installed in /home/pyp
Please make sure that
- PATH includes /usr/local/cuda-10.0/bin
- LD_LIBRARY_PATH includes /usr/local/cuda-10.0/lib64, or, add /usr/local/cuda-10.0/lib64 to /etc/ld.so.conf and run ldconfig as root
To uninstall the CUDA Toolkit, run the uninstall script in /usr/local/cuda-10.0/bin
Please see CUDA_Installation_Guide_Linux.pdf in /usr/local/cuda-10.0/doc/pdf for detailed information on setting up CUDA.
***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 384.00 is required for CUDA 10.0 functionality to work.
To install the driver using this installer, run the following command, replacing <CudaInstaller> with the name of this run file:
sudo <CudaInstaller>.run -silent -driver
Logfile is /tmp/cuda_install_16506.log
很快装完,但是没有报error
不要怀疑,就是安装好了
添加CUDA到环境变量
这一步骤的目的我还不够了解,因为网上的教程多手动配置环境变量,本人一开始没有配置环境变量
但在终端中输入
$ env
#翻找返回中,有以下部分
PATH=/home/pyp/anaconda3/bin:/home/pyp/anaconda3/condabin:/home/pyp/bin:/home/pyp/.local/bin:/usr/local/cuda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/pyp/bin
可见PATH其中已经有CUDA路径了,我认为就不必手动配置了
等于是cuDNN和CUDA都配置完成并测试通过,但是复现YOLO v4的时候会报错
ImportError: libcudnn.so.7: cannot open shared object file: No such file or directory
按照该小节添加后就解决了问题,不清楚为什么,所以暂时记录在这里
手动配置流程如下:
首先我们看一下CUDA需要添加的路径是哪一个
$ cd /usr/local
可以看到环境变量下面有两个CUDA,其中不带版本号的是软链接,应该是为了统一不同版本的CUDA路径配置
为了统一,我们使用不带版本号的路径
#编辑环境变量bashrc
$ sudo gedit ~/.bashrc
#在尾部追加以下内容
#added for cuda PATH
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64"
export CUDA_HOME=/usr/local/cuda
#点击保存后退出文件
#source该文件,使修改生效
$ source ~/.bashrc
##需要注意若修改了默认shell,如我修改了zsh,那就将以上步骤中的.bashrc全部替换成.zshrc
测试CUDA是否安装成功
-
测试1:终端命令测试
$ nvcc -V #若有如下图返回则安装成功,注意版本号是否是自己选择的CUDA release #若返回没有nvcc,不要使用apt-get安装nvcc,这样装的基本是不能用的
-
测试2:测试CUDA的Sample
$ cd /usr/local/cuda/samples/1_Utilities/deviceQuery #若没有该路径,考虑之前未创建软链接。则需要在以上路径中的cuda的后面加上release的版本号 $ sudo make #编译,需要sudo $ sudo ./deviceQuery #运行Sample
-
若运行错误,预计会返回
-> unknown error Result = FAIL
则用以下命令重新检查显卡驱动安装
$ nvidia-smi
-
若运行成功,预计会返回
./deviceQuery Starting... CUDA Device Query (Runtime API) version (CUDART static linking) ...... ...... ...... ...... deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 10.2, CUDA Runtime Version = 10.0, NumDevs = 1 Result = PASS (base) ➜ deviceQuery
表示安装成功!
下载安装cuDNN
下载地址:cuDNN Archive
选择之后需要登录填写问卷才能下载
这里有个讨巧的方法跳过该步骤
-
使用另外一台电脑,打开迅雷留驻后台
-
选择需要安装的版本,右键复制链接地址,会自动唤起迅雷下载,大概几百MB左右大小
-
版本选择要对应之前的CUDA和TensorFlow版本,如比如我装的是
cuDNN v7.4.2 (Dec 14, 2018), for CUDA 10.0
-
下载完毕后,可能显示的是
.1
类型文件,手动将其改为.tgz
的压缩包文件类型,然后解压缩即可 -
拷至原电脑安装
安装步骤:
$ tar xvzf cudnn-10.0-linux-x64-v7.4.2.24.tgz
$ sudo cp cuda/include/cudnn.h /usr/local/cuda/include
$ sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
$ sudo chmod a+r /usr/local/cuda/include/cudnn.h
$ sudo chmod a+r /usr/local/cuda/lib64/libcudnn*
测试cuDNN是否安装成功
$ cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
返回如下图则安装成功