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

CUDA Release下载地址

对版本号足够了解的也可以直接到docker仓库下载

N家显卡驱动和CUDA开发套件

注意,下载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. 测试1:终端命令测试

    $ nvcc -V
    #若有如下图返回则安装成功,注意版本号是否是自己选择的CUDA release
    #若返回没有nvcc,不要使用apt-get安装nvcc,这样装的基本是不能用的
    
  2. 测试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

返回如下图则安装成功

posted @ 2020-06-18 09:47  Tzbubble  阅读(558)  评论(0编辑  收藏  举报