保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

时间:2024-04-21 10:34:58

写在前面

本文叙述了在Ubuntu16.04 Server下安装CUDA8.0,cuDNN6.0以及源码编译安装TensorFlow1.4.0(GPU版)的亲身经历,包括遇到的问题及解决办法,也有一些自己的经验,希望能对读者有所帮助。期间参考了许多前人的文章,后文会一一附上链接,在此先行谢过。在下能力有限,经验不足,请大家多多指教。

关键词:Ubuntu16.04 Server   深度学习环境搭建   安装   显卡驱动   CUDA8.0   cuDNN6.0   Bazel   源码编译   TensorFlow1.4.0   GPU版   TensorFlow_gpu1.4.0

系统和硬件:

1.Ubuntu16.04 Server版

2.GPU:NVIDIA Tesla P40 (一块)

3.CPU:Intel Xeon Processor E5-2620 v4   20M Cache,2.10GHz   (两块)

软件版本配置:

保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

注:

1.以上配置信息来自https://www.tensorflow.org/install/install_sources#ConfigureInstallation ,这也是来自官网的TensorFlow安装教程,也是在下实际安装TensorFlow的过程中的主要参考资料。

2.在下实际安装时使用的GCC版本为4.9而非4.8,但也没受到任何不良影响。

3.Ubuntu16.04 Server和显卡驱动安装是由他人完成的,从CUDA8.0的安装开始,都是由在下亲手完成,所以本文重点叙述CUDA等深度学习相关软件库的安装。

4.本文对其它版本配置的深度学习环境搭建也有一定借鉴意义,许多方法和技巧是通用的。比如:

查询显卡名称

获取下载链接并使用wget命令下载文件

5.预警:很长很啰嗦(面向小白,保姆级教程)。

目录:

一、安装Ubuntu16.04 Server版

二、安装显卡驱动

I. 查看显卡名称

II. 下载对应驱动

III. 安装驱动

IV.测试

三、安装CUDA8.0

I. 下载.run文件

II. 安装

III. 测试

四、安装cuDNN6.0

I. 下载安装文件

II. 安装

五、安装Bazel

I. 查看/卸已有版本

II. 下载安装包

III. 安装

IV. 测试

六、相关准备工作

I. gcc降级

II. 切换默认Python版本

七、编译安装TensorFlow

I. 下载源码

II. 编译

III. 安装

IV. 测试

正文

一、安装Ubuntu16.04 Server版

这一部分是其他人做的,在下只是在旁观摩,所以在这里只叙述个大概,详细安装方法请您自行Google。

下载安装包,做成启动U盘,直接插在机箱上通过BIOS安装(原来机器上装有SentOS),谢天谢地,期间没有遇到什么问题。

二、安装显卡驱动

显卡驱动也不是在下亲手安装的,这里只给出一些通用的方法和技巧,以及一些可能对您有用的链接,希望对您有所帮助,如有错误纰漏之处,恳请您不吝赐教。

I. 查看显卡名称

如果您已知您的显卡信息,则略过该步骤。

现在设想最坏的情况,您不知道您的显卡叫什么名字,也没办法打开机箱来看(比如远程的),问谁谁也不知道,机器上也没有旧的显卡驱动(没有比这更糟糕的了),那么,下面的办法不妨一试:

step1:运行命令

lshw -numeric -C display

结果如图:

保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

如果您使用的是GeForce系列的显卡,上面的命令可以直接输出显卡的名称,但如果您使用的是Tesla系列之类的专业级显卡,上面的命令并不能直接得到显卡名称(如上图所示),这时需要接着进行下面的操作。

step2:查询显卡名称

方法一

直接Google关键字10DE:1b38或1A03:2000,第一条就是,如下图。

保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

注:使用必应搜索也可以,第三条就是。

方法二

访问网址https://raw.githubusercontent.com/pciutils/pciids/master/pci.ids ,Ctrl+F搜索关键字1b38或1a03(不要搜索10de或2000,这两项匹配的结果太多了),如下图。

保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)        保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

注:这个网页上几乎包含了世界上所有显卡(不光是NVIDIA的)的厂商和名称信息,非常全。

方法三

访问网址https://pci-ids.ucw.cz/read/PC/,如图

保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

对10de:1b38而言,我们先找10de,10de以1开头,所以点击上图中的1(用红框圈起来的那个)。

页面跳转后Ctrl+F查找关键字10de,如图

保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

点击10de,页面跳转后Ctrl+F查找关键字1b38,如图

保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

注:

1.ASPEED Graphics Family(上文中1a03:2000对应的显卡名称)是ASPEED公司(信骅科技,*,全球第一大服务器管理芯片供应商)生产的一系列BMC(Baseboard Management Controller ,基板管理控制器)芯片的总称,一般兼做服务器的集显,提供最基础的显示功能。1a03:2000表示AST2000,是ASPEED Graphics Family系列的第一款。更多详情请见:

https://pci-ids.ucw.cz/read/PC/1a03/2000

https://zhidao.baidu.com/question/504159607.html

https://zhidao.baidu.com/question/436858677675772444.html

2.网络上的许多教程可能会给出下面一些命令

lspci | grep -i vga
lspci |grep -i nvidia
lspci -v -s :00.0 #使用上述两个命令后会输出02:.0或06:.0等字样
lspci -v -s :00.0
lspci -vnn | grep VGA -A

如果您的机器使用的是Tesla系列之类的专业级显卡,那么上述命令并不能显示出显卡的名称,但如果您使用的是GeForce系列的显卡,则上述命令可以打印出显卡名称。

II. 下载对应驱动

访问NVIDIA的官网,填写显卡、系统、CUDA版本等信息,便可下载相应驱动。

地址:https://www.nvidia.com/download/index.aspx (English)

https://www.nvidia.com/Download/index.aspx?lang=cn  (Chinese)

保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)   保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)   保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

注:

1.如果您的网络使用ivp6协议,那么在实际操作中可能会出现上面第一幅图中所示的下拉列表框点击不动的情况,此时您可能需要使用采用ipv4协议的网络来访问上面的下载地址。

2.如果您是远程访问,在自己机器上下载好安装文件后还需要使用Xftp等工具将安装文件传输到目标机上,既麻烦又费时,下面介绍一种使用命令行在目标机上直接下载的方法(前提是目标机可以*访问网络)。

step1:在上图的绿色按钮(即“AGREE & DOWNLOAD”按钮)上右键,在弹出的菜单中选择“复制链接地址”,如图

保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

step2:在复制得到的地址前加上“wget”构成如下命令

wget  http://us.download.nvidia.com/tesla/384.66/nvidia-diag-driver-local-repo-ubuntu1604-384.66_1.0-1_amd64.deb

使用该命令便可直接在目标机上在线下载链接指向的文件。

III. 安装驱动

跳转到上一步下载的.deb文件所在的目录,依次执行下列命令

sudo dpkg -i nvidia-diag-driver-local-repo-ubuntu1604-.66_1.-1_amd64.deb   #这里需要更换为您自己下载的.deb文件的文件名
sudo apt-get update
sudo apt-get cuda-drivers
sudo reboot now #安装后重启

在安装过程中可能需要您手动回答yes或no(输入y或n),请您根据自己的情况决定(印象中全部选y,但在下没亲自试过)。

参考网址:https://blog.****.net/u011668104/article/details/79560381

https://blog.****.net/u011889952/article/details/77746668

https://gist.github.com/jcjohnson/4976067b503d8d1ebafb5eb6f38f9aae

注:

1.第二个链接中提供了一个自动获取.deb文件并安装的脚本(如您要使用,请记着更改第一行命令中的地址以对应您所需的驱动版本,地址获取方法见上面注2),其中的参数 --allow-unauthenticated 表示允许使用未通过验证的安装包,--assume-yes 表示对安装过程中的所有询问都回答yes。

2.除上述方法外,安装驱动的方法还有.run文件、PPA源、apt-get等。有些文章提到用.deb文件安装会失败,此时可以考虑使用.run文件安装,要下载.run文件,只要将上面第一幅图中的Operating System选项选为Linux 64-bit即可,如下图

保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

安装方法可参考以下链接:

https://www.jianshu.com/p/1baf9848b7d7

https://www.linuxidc.com/Linux/2016-12/138907.htm

https://www.jianshu.com/p/b313625fbe61

其它安装方法请读者自行探索,这里不再赘述。

至此,显卡驱动安装完毕。

IV.测试

在命令行下键入

nvidia-smi

回车后见如下输入,则说明显卡驱动安装成功。

保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

注:如果您运行上述命令后得到报错

NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.

请参考https://blog.****.net/u011668104/article/details/79560381(亲测可行),在此对原作者表示由衷的感谢。

三、安装CUDA8.0

I. 下载.run文件

step1:访问网址https://developer.nvidia.com/cuda-downloads? ,按图示操作。

保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

注:不要在上边选择选项,否则下载的将是10.0版本而非8.0版本。如下图

保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

step2:页面跳转后选择自己需要的版本。

保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

step3:页面跳转后再选择Operating System,Architecture,Distribution,Version,Installer Type等各项指标,其中Installer Type选择runfile(local)选项,选好后点击Download,如图。

保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

注:右击上图所示的绿色下载按钮,在弹出的菜单中点击“复制链接地址”,在复制得到的地址前加上“wget”构成一条命令(如下),使用该命令可直接在目标机上在线下载。详见第二节注2

wget https://developer.nvidia.com/compute/cuda/8.0/Prod2/local_installers/cuda_8.0.61_375.26_linux-run

II. 安装

step1:在目标机上跳转到.run文件所在目录,执行命令

sudo sh cuda_8..61_375.26_linux.run   #注意这里要使用您下载的.run文件的文件名

接下来的安装过程中会问您一系列问题,愚以为最佳回答如下:

Do you accept the previously read EULA?
  accept/decline/quit: accept

Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 375.26?
  (y)es/(n)o/(q)uit: n   #这里必须选n,不然会重新安装显卡驱动,这会覆盖掉原来的驱动

Install the CUDA 8.0 Toolkit?
(y)es/(n)o/(q)uit: y #选y Enter Toolkit Location
[ default is /usr/local/cuda-8.0 ]: #强烈建议您直接回车,即接受默认配置,将CUDA安装在/usr/local/cuda-8.0目录下,这将会为后面TensorFlow的安装提供方便 /usr/local/cuda-8.0 is not writable.
Do you wish to run the installation with 'sudo'?
(y)es/(n)o: y Please enter your password:
Do you want to install a symbolic link at /usr/local/cuda?
(y)es/(n)o/(q)uit: y #强烈建议选y,即建立一个符号链接/usr/local/cuda指向/usr/local/cuda-8.0,这将会为后面TensorFlow的安装提供方便,也会为后续使用提供方便
Install the CUDA 8.0 Samples? (y)es/(n)o/(q)uit: y Enter CUDA Samples Location 
[ default is /home/xxx ]: #这是问CUDA的测试用例安装在哪里,您可以选择默认,也可以按自己意愿键入其它目录

如果顺利安装的话,接下来还会有一大推输出,简单摘取如下

Installing the CUDA Toolkit in /usr/local/cuda-8.0 ...
Installing the CUDA Samples in /home/xxx ...
Copying samples to /home/xxx/NVIDIA_CUDA-.0_Samples now...
Finished copying samples. ===========
= Summary =
=========== Driver: Not Selected
Toolkit: Installed in /usr/local/cuda-8.0
Samples: Installed in /home/jlu Please make sure that #这个提示很重要,接下来必须照做
- PATH includes /usr/local/cuda-8.0/bin
- LD_LIBRARY_PATH includes /usr/local/cuda-8.0/lib64, or, add /usr/local/cuda-8.0/lib64 to /etc/ld.so.conf and run ldconfig as root

step2:更改系统配置文件

执行命令

cd ~      #进入当前用户的主目录
vim ~/.bashrc #打开该用户的配置文件.bashrc

在打开的文件末尾添加如下指令

export CUDA_HOME=/usr/local/cuda-8.0
export PATH="$PATH:/usr/local/cuda-8.0/bin"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda-8.0/lib64:/usr/local/cuda-8.0/extras/CUPTI/lib64"

如图

保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

保存并退出文件,执行命令

source ~/.bashrc    #使配置文件立即生效  

注:

1.如果您想要使CUDA和后面的cuDNN对所有用户都可用,请对/etc/profile这个配置文件进行和上面相同的操作。

2.CUPTI(CUDA Profiling Tools Interface)是一个针对CUDA应用程序的性能分析和跟踪工具,要安装TensorFlow,就必须将其地址 /usr/local/cuda-8.0/extras/CUPTI/lib64 添加到环境变量中(如上图黄色框中的最后一句)。

III. 测试

依次执行下列命令

cd /home/xxx/NVIDIA_CUDA-.0_Samples/1_Utilities/deviceQuery   #跳转到测试样例1所在的目录,如果您在安装过程中(见上文最后一段)将测试样例安装在其它位置,这里也要做出相应更改
make #编译
./deviceQuery #执行

见到类似下面的输出,表明安装成功。

保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

至此,CUDA8.0安装完成。

本小节参考资料:

https://blog.****.net/weixin_41151963/article/details/79530722

https://www.cnblogs.com/chay/p/8038251.html

四、安装cuDNN6.0

I. 下载安装文件

访问网址https://developer.nvidia.com/cudnn ,点击Download cuDNN。

保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

页面跳转后登录或注册。

保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

登陆后,按图示操作。

保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

注:在上面倒数第二幅图绿色字“cuDNN v6.0 Library for Linux”上右击,在弹出的菜单中选择“复制链接地址”,在复制得到的地址前加上“wget”构成一条命令(如下),使用该命令可直接在目标机上在线下载安装包,详见第二节注2

wget https://developer.nvidia.com/compute/machine-learning/cudnn/secure/v6/prod/8.0_20170307/cudnn-8.0-linux-x64-v6.0-tgz

II. 安装

注意到下载得到的文件有一个奇怪的后缀名(solitairetheme8,纸牌主题8,该文件在Windows下的图标就是纸牌),所以首先要将文件重命名为.tgz文件。

在.solitairetheme文件所在目录下依次执行下列命令

cp cudnn-8.0-linux-x64-v6..solitairetheme8   cudnn.tgz   #将文件重命名为cudnn.tgz
tar -zxvf cudnn.tgz #解压
sudo cp cuda/include/cudnn.h /usr/local/cuda/include/ #解压后会在当前目录下得到cuda/include目录,里面只有cudnn.h这一个文件,将其拷贝到CUDA安装目录下的include目录中,
#如前所述,/usr/local/cuda是指向/usr/local/cuda-8.0(即CUDA安装目录)的符号链接
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/   #解压后会在当前目录下得到cuda/include目录,里面有几个以libcudnn开头的文件,将这些文件全部拷贝到CUDA安装目录下的lib64目录下
sudo chmod a+r /usr/local/cuda/include/cudnn.h #使所有用户都具有read权限,这是以防万一,实际上在下发现解压后的文件本身就对所有用户具有read权限
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*

附:解压后的文件列表

保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

至此,cuDNN6.0安装完成。

五、安装Bazel

安装Bazel是为了编译TensorFlow做准备。如文章最开始的图片显示的那样,我们需要安装Bazel 0.5.4版本。

I. 查看/卸载已有版本

执行命令

bazel

若显示bazel: command not found ,则说明目前系统上没有安装Bazel,直接转到步骤II

若有如下输出,说明已安装Bazel0.5.4,直接进入“六、相关准备工作”小节。

保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

若有不同于上述两种情况的输出(如显示安装的版本是0.17.2,并且有几个Warning),请按下述方法操作。

执行命令

whereis bazel

保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

您将会看到类似上图中的输出,请使用rm -r命令将您看到的所有bazel目录及其子目录删除。然后再执行 bazel 命令,若看到bazel: command not found,说明Bazel已卸载干净。

II. 下载安装包

访问网址https://github.com/bazelbuild/bazel/releases?after=0.7.0 ,Ctrl+F搜索关键字"0.5.4-installer-linux-x86_64.sh",如图,点击第一个下载

保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

注:

1.如果您在上述网址指向的网页中没有找到您想要的版本,请将页面拉至最底端,点击Previous或Next按钮(如下图)向前/后翻页,从0.17.2版本到0.1.0版本都能找到。

保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

2.在上面倒数第二幅图的下载链接(即蓝色字bazel-0.5.4-installer-linux-x86_64.sh)上右键,在弹出的菜单中选择“复制链接地址”,在复制得到的地址前加上“wget”构成一条命令(如下),使用该命令可直接在目标机上在线下载安装包,详见第二节注2

wget https://github.com/bazelbuild/bazel/releases/download/0.5.4/bazel-0.5.4-installer-linux-x86_64.sh

III. 安装

step1:在bazel-0.5.4-installer-linux-x86_64.sh所在目录下依次执行如下命令

sudo apt-get install pkg-config zip g++ zlib1g-dev unzip python   #安装依赖
chmod +x bazel-0.5.-installer-linux-x86_64.sh #增加执行权限
sudo ./bazel-0.5.-installer-linux-x86_64.sh --user #安装 #The --user flag installs Bazel to the $HOME/bin(当前用户主目录/bin) directory on your system and sets the .bazelrc path to $HOME/.bazelrc.

step2:执行命令

vim ~/.bashrc   #打开当前用户的配置文件

在打开的文件末尾添加

export PATH="$PATH:$HOME/bin"
source /root/.bazel/bin/bazel-complete.bash

如图

保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

保存并退出文件,执行命令

source ~/.bashrc   #使配置文件立即生效

注:如果您想要使Bazel对所有用户都可用,请对/etc/profile这个配置文件进行和上面相同的操作。

IV. 测试

在任意目录下执行命令

bazel version

若有类似如下的输出,说明Bazel安装成功。

保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

至此,Bazel安装完成。

六、相关准备工作

I. gcc降级

Ubuntu安装时自带gcc,执行如下命令查看此gcc版本

gcc --version

如图

保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

编译TensorFlow1.4.0需要gcc 4.x版本(如本文最开始的图片显示的那样,根据TensorFlow官网,需要4.8版本,但在下实测4.9版本也可以),如果您的系统的gcc版本是5.x或更高,需要降级到4.x版本(其实就是安装低版本的gcc并设置默认版本的过程)。由于在下没有实际做这一步工作,故不敢妄言,这里给出一些可能对您有用的链接:

https://www.itread01.com/articles/1498658233.html (推荐)

https://www.jianshu.com/p/f82a185f27d1

https://www.cnblogs.com/in4ight/p/6626708.html

https://blog.****.net/u014696921/article/details/73770887

https://blog.****.net/ytusdc/article/details/77980915

II. 切换默认Python版本

尽管TensorFlow官网表示TensorFlow1.4.0同时兼容python2和python3,但也有人表示,如果系统的默认python版本是python2,在编译TensorFlow时会出错(究竟会不会出错,在下并没有实践)。

使用如下命令查询python默认版本

python --version

如图

保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

如果您的系统的默认Python版本是2.7,您可以在编译TensorFlow前将默认版本切换到3.3~3.6(见软件版本配置),或者等到发现使用Python2.7编译TensorFlow出错时再切换。由于在下的系统的默认Python版本是Python3.5,所以并没有执行切换默认Python版本的操作(很可能是之前其他人做了切换版本的工作),这里只给出一些可能对您有用的链接:

https://blog.****.net/CYM_LMY/article/details/78315139   (切换Python默认版本,下同)

https://www.jianshu.com/p/9d3033d1b26f

https://blog.****.net/fang_chuan/article/details/60958329

https://blog.****.net/White_Idiot/article/details/78240298

https://blog.****.net/u010426270/article/details/51059260   (在线安装Python3.5并设置为默认)

https://www.python.org/downloads/source/   (Python各版本安装包下载地址)

http://blog.51cto.com/4330156/1828604   (编译安装Python)

注:如果您是手动编译安装Python3(参考上面倒数第一个链接),在make前一定在安装包解压目录下使用如下命令将Python安装在/usr目录下(目的是为后边编译安装TensorFlow提供方便)

./configure --prefix=/usr

安装后,使用如下命令更新软连接

rm /user/bin/python
ln -s /usr/bin/python3. /usr/bin/python

至此,编译安装TensorFlow前的准备工作完成。

七、编译安装TensorFlow

I. 下载源码

访问网址 https://github.com/tensorflow/tensorflow/releases?after=v1.7.0-rc1 ,页面跳转后Ctrl+F搜索关键字“TensorFlow 1.4.0”,如图

保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

此时,可以点击第二个链接(划红线的)下载,也可以在链接上右击,在弹出的菜单中选择“复制链接地址”,在复制得到的地址前加上“wget”构成一条命令(如下),使用该命令可以直接在目标机上在线下载(参考第二节注2)。

wget https://github.com/tensorflow/tensorflow/archive/v1.4.0.tar.gz

下载后,将得到一个名为v1.4.0.tar.gz的压缩文件,使用如下命令解压,解压后,将在解压目录下得到tensorflow-1.4.0目录。

tar -zxvf v.4.0.tar.gz

注:

1.如果您在上述网址指向的页面中没有找到您想要的版本,请将页面拉至最底端,点击Previous或Next按钮(如下图)向前/后翻页,翻页后在新页面查找。

保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

2.TensorFlow官网教程(https://www.tensorflow.org/install/install_sources#ConfigureInstallation)以及其它许多教程都使用git clone命令下载TensorFlow源码,这自然是可行的,但缺点是下载速度比wget方法至少慢一倍,所以这里不推荐。本人亲测,使用上述wget方法下载,解压后得到的源码和官网教程上使用git clone方法下载得到的源码完全一致。

3.如果您使用wget方法下载源码,解压后将得到tensorflow-1.4.0目录;如果使用git clone方法下载源码,将直接得到tensorflow目录。

II. 编译

step1:安装TensorFlow Python依赖项

根据您的Python版本执行下列命令之一

sudo apt-get install python-numpy python-dev python-pip python-wheel      #for Python2.
sudo apt-get install python3-numpy python3-dev python3-pip python3-wheel #for Python3.x

step2:其它准备

在源码所在目录下执行下列命令

cd tensorflow           #如果您是用git clone方法下载的源码,使用该命令
#或
cd tensorflow-1.4. #如果您是用wget方法下载,解压得到的源码,使用该命令

sudo apt-get install librdmacm-dev #可选,在下实践发现,不加该命令,在编译源码时会报错,所以这里事先安装librdmacm-dev安装包(简言之,librdmacm是一个通信接口,负责连接的建立和撤销)
bazel shutdown #如果之前运行bazel而未关闭,在运行配置文件时会有警告“WARNING: Running Bazel server needs to be killed, because the startup options are different.”
./configure #运行配置脚本

step3:配置选项

运行配置脚本后,会有一系列问题让您回答,下面逐条解释

root@ubuntu-xxx:/usr/local/tensorflow# ./configure
You have bazel 0.5. installed.
Please specify the location of python. [Default is /usr/bin/python]: #如果您是按照上面第六节II进行操作的话,/usr/bin/python是一个指向系统默认版本的Python的软连接(见图3-7-1),所以这里直接回车;
#如果您的情况例外,请使用whereis python和ll命令查看python的安装位置(见图3-7-1) Found possible Python library paths:
/usr/local/lib/python3./dist-packages
/usr/lib/python3/dist-packages
Please input the desired Python library path to use. Default is [/usr/local/lib/python3./dist-packages] #上面两个目录都是Python库的位置,分别包含不同的库,在下选的是第一个,理由参考该网页上David Hollander的回答(即第五个回答)
/usr/local/lib/python3./dist-packages
Do you wish to build TensorFlow with jemalloc as malloc support? [Y/n]: Y #jemalloc是个内存分配管理器,在下并不了解,见官网教程上选了Y,也就选了Y
jemalloc as malloc support will be enabled for TensorFlow. Do you wish to build TensorFlow with Google Cloud Platform support? [Y/n]: Y #在下选Y只是为了测试选Y后影不影响后边的编译(实测选Y可以正常编译),如果您不需要该功能,建议选N
Google Cloud Platform support will be enabled for TensorFlow. Do you wish to build TensorFlow with Hadoop File System support? [Y/n]: Y #同上
Hadoop File System support will be enabled for TensorFlow. Do you wish to build TensorFlow with Amazon S3 File System support? [Y/n]: Y #同上
Amazon S3 File System support will be enabled for TensorFlow. Do you wish to build TensorFlow with XLA JIT support? [y/N]: Y #同上
XLA JIT support will be enabled for TensorFlow. Do you wish to build TensorFlow with GDR support? [y/N]: Y #同上
GDR support will be enabled for TensorFlow. Do you wish to build TensorFlow with VERBS support? [y/N]: Y #同上
VERBS support will be enabled for TensorFlow. Do you wish to build TensorFlow with OpenCL support? [y/N]: N #这个必须选N,否则会出错
No OpenCL support will be enabled for TensorFlow. Do you wish to build TensorFlow with CUDA support? [y/N]: y #这个必须选y
CUDA support will be enabled for TensorFlow. Please specify the CUDA SDK version you want to use, e.g. 7.0. [Leave empty to default to CUDA 8.0]: #如果您的CUDA版本是8.0,请直接回车,否则请输入您的CUDA版本 Please specify the location where CUDA 8.0 toolkit is installed. Refer to README.md for more details. [Default is /usr/local/cuda]: #如果您是按本教程安装的CUDA,/usr/local/cuda是指向CUDA安装目录的软连接(见CUDA安装部分),所以这里直接回车 Please specify the cuDNN version you want to use. [Leave empty to default to cuDNN 6.0]: #如果您的cuDNN版本是6.0,请直接回车,否则请输入您的cuDNN版本 Please specify the location where cuDNN 6 library is installed. Refer to README.md for more details. [Default is /usr/local/cuda]: #如果您是按本教程安装的CUDA和cuDNN,请直接回车 Please specify a list of comma-separated Cuda compute capabilities you want to build with.
You can find the compute capability of your device at: https://developer.nvidia.com/cuda-gpus.
Please note that each additional compute capability significantly increases your build time and binary size. [Default is: 6.1] #这个一定要去上一行网址指向的网页去查您自己的GPU卡的计算能力,然后输入正确的数
#在下之所以直接回车,是因为在下的GPU卡的计算能力恰好是6.1 Do you want to use clang as CUDA compiler? [y/N]: N #这个必须选N,否则会出错
nvcc will be used as CUDA compiler. Please specify which gcc should be used by nvcc as the host compiler. [Default is /usr/bin/gcc]: #正常情况下,/usr/bin/gcc是一个指向gcc编译器的符号链接(见下图7-3-2),所以直接回车
#如果您的情况例外,请使用whereis gcc和ll命令查找您的gcc编译器的位置(见下图7-3-2) Do you wish to build TensorFlow with MPI support? [y/N]: N #这个必须选N,否则会出错
No MPI support will be enabled for TensorFlow. Please specify optimization flags to use during compilation when bazel option "--config=opt" is specified [Default is -march=native]: #根据官网教程,直接回车 Add "--config=mkl" to your bazel command to build with MKL support.
Please note that MKL on MacOS or windows is still not supported.
If you would like to use a local MKL instead of downloading, please set the environment variable "TF_MKL_ROOT" every time before build.
Configuration finished
root@ubuntu-xxx:/usr/local/tensorflow#

保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)                     保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

图7-3-1                                                                                                                                                                                              图7-3-2

step4:正式编译

在和上一步相同的目录下执行命令

bazel build --config=opt --config=cuda --copt=-mavx --copt=-msse4. --copt=-msse4. --copt=-msse3 --copt=-mavx2 --copt=-mfma //tensorflow/tools/pip_package:build_pip_package

然后就进入漫长的编译过程,大概耗时15~30分钟,编译过程会占用大量的RAM,所以在编译时尽量不要运行其它程序。同时,编译过程中会输出大量语句,也会有许多Warning,但不要管,只有编译不停止,就没有问题。

注:

1.上述编译命令比官网给的命令多出了许多参数,因为有资料显示使用这些选项编译安装的TensorFlow在运行TensorFlow程序时会加快CPU计算速度,实测表明加上这些参数并不会引起错误。更多详情请参考:

https://blog.xuite.net/abliou/linux/486757306-%E4%BD%BF%E7%94%A8tensorflow%E7%9A%84sse3+sse4.1+sse4.2%E6%8C%87%E4%BB%A4%E9%9B%86

https://blog.****.net/xxy0118/article/details/77731641

https://zhuanlan.zhihu.com/p/27286391

https://pastebin.com/aQrxT4qZ

2.编译完成后会生成一个build_pip_package.sh文件,由当前目录下的符号链接bazel-bin/tensorflow/tools/pip_package/build_pip_package指向,其中bazel-bin也是一个符号链接,如图

保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

III. 安装

step1:构建安装包

在和上一步相同的目录下执行命令

bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg   #使用上一步生成的脚本构建安装文件

该命令的执行不会花很多时间,该命令执行后会在/tmp/tensorflow_pkg目录下生成一个.whl文件,请使用  ls /tmp/tensorflow_pkg  命令查看文件的名称,如下图

保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

step2:正式安装

在和上一步相同的目录下执行命令

sudo pip install /tmp/tensorflow_pkg/tensorflow-1.4.-cp35-cp35m-linux_x86_64.whl   #这里的文件名要和上图中查到的文件名相同

安装过程也会持续一段时间,有时看着好像是卡住了,不要担心,过一会进度条就会往前走,请您耐心等待。

IV. 测试

在任意目录下依次执行下列命令

python
#这里会输出python的版本信息,见下图
>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
#这里会输出GPU的相关信息,表明TensorFlow是在GPU上运行的,见下图
>>> sess.run(hello)
b'Hello, TensorFlow!'
>>> a = tf.constant(10)
>>> b = tf.constant(22)
>>> sess.run(a+b)
32
>>>

若有类似下图的输出,表明TensorFlow安装成功。

保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

至此,TensorFlow安装完成。

写在后面

整个环境搭建过程参考了许多资料,在上文中已一一附上链接,再次对各位前辈表示感谢!在下才疏学浅,能力有限,文中难免有错误疏漏之处,恳请您批评指正,您的批评是在下进步的源泉和动力!未尽事宜:2661048959@qq.com。

回到目录