1. 程式人生 > >保姆級教程——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以及原始碼編譯安裝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   (兩塊)

軟體版本配置:

注:

2.在下實際安裝時使用的GCC版本為4.9而非4.8,但也沒受到任何不良影響。

3.Ubuntu16.04 Server和顯示卡驅動安裝是由他人完成的,從CUDA8.0的安裝開始,都是由在下親手完成,所以本文重點敘述CUDA等深度學習相關軟體庫的安裝。

4.本文對其它版本配置的深度學習環境搭建也有一定借鑑意義,許多方法和技巧是通用的。比如:

5.預警:很長很囉嗦(面向小白,保姆級教程)。

目錄:

       II. 安裝

       II. 安裝

       IV. 測試

        II. 編譯

        IV. 測試

正文

一、安裝Ubuntu16.04 Server版

這一部分是其他人做的,在下只是在旁觀摩,所以在這裡只敘述個大概,詳細安裝方法請您自行Google。

下載安裝包,做成啟動U盤,直接插在機箱上通過BIOS安裝(原來機器上裝有SentOS),謝天謝地,期間沒有遇到什麼問題。

二、安裝顯示卡驅動

顯示卡驅動也不是在下親手安裝的,這裡只給出一些通用的方法和技巧,以及一些可能對您有用的連結,希望對您有所幫助,如有錯誤紕漏之處,懇請您不吝賜教。

I. 檢視顯示卡名稱

如果您已知您的顯示卡資訊,則略過該步驟。

現在設想最壞的情況,您不知道您的顯示卡叫什麼名字,也沒辦法開啟機箱來看(比如遠端的),問誰誰也不知道,機器上也沒有舊的顯示卡驅動(沒有比這更糟糕的了),那麼,下面的辦法不妨一試:

step1:執行命令

lshw -numeric -C display

結果如圖:

如果您使用的是GeForce系列的顯示卡,上面的命令可以直接輸出顯示卡的名稱,但如果您使用的是Tesla系列之類的專業級顯示卡,上面的命令並不能直接得到顯示卡名稱(如上圖所示),這時需要接著進行下面的操作。

step2:查詢顯示卡名稱

方法一

直接Google關鍵字10DE:1b38或1A03:2000,第一條就是,如下圖。

注:使用必應搜尋也可以,第三條就是。

方法二

                     

注:這個網頁上幾乎包含了世界上所有顯示卡(不光是NVIDIA的)的廠商和名稱資訊,非常全。

方法三

對10de:1b38而言,我們先找10de,10de以1開頭,所以點選上圖中的1(用紅框圈起來的那個)。

頁面跳轉後Ctrl+F查詢關鍵字10de,如圖

點選10de,頁面跳轉後Ctrl+F查詢關鍵字1b38,如圖

注:

1.ASPEED Graphics Family(上文中1a03:2000對應的顯示卡名稱)是ASPEED公司(信驊科技,臺灣,全球第一大伺服器管理晶片供應商)生產的一系列BMC(Baseboard Management Controller ,基板管理控制器)晶片的總稱,一般兼做伺服器的集顯,提供最基礎的顯示功能。1a03:2000表示AST2000,是ASPEED Graphics Family系列的第一款。更多詳情請見:

2.網路上的許多教程可能會給出下面一些命令

lspci | grep -i vga
lspci |grep -i nvidia
lspci -v -s 02:00.0     #使用上述兩個命令後會輸出02:00.0或06:00.0等字樣
lspci -v -s 06:00.0
lspci -vnn | grep VGA -A 12 

如果您的機器使用的是Tesla系列之類的專業級顯示卡,那麼上述命令並不能顯示出顯示卡的名稱,但如果您使用的是GeForce系列的顯示卡,則上述命令可以打印出顯示卡名稱。

II. 下載對應驅動

訪問NVIDIA的官網,填寫顯示卡、系統、CUDA版本等資訊,便可下載相應驅動。

      

注:

1.如果您的網路使用ivp6協議,那麼在實際操作中可能會出現上面第一幅圖中所示的下拉列表框點選不動的情況,此時您可能需要使用採用ipv4協議的網路來訪問上面的下載地址。

2.如果您是遠端訪問,在自己機器上下載好安裝檔案後還需要使用Xftp等工具將安裝檔案傳輸到目標機上,既麻煩又費時,下面介紹一種使用命令列在目標機上直接下載的方法(前提是目標機可以自由訪問網路)。

step1:在上圖的綠色按鈕(即“AGREE & DOWNLOAD”按鈕)上右鍵,在彈出的選單中選擇“複製連結地址”,如圖

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-384.66_1.0-1_amd64.deb   #這裡需要更換為您自己下載的.deb檔案的檔名
sudo apt-get update
sudo apt-get cuda-drivers
sudo reboot now   #安裝後重啟

在安裝過程中可能需要您手動回答yes或no(輸入y或n),請您根據自己的情況決定(印象中全部選y,但在下沒親自試過)。

參考網址:

注:

1.第二個連結中提供了一個自動獲取.deb檔案並安裝的指令碼(如您要使用,請記著更改第一行命令中的地址以對應您所需的驅動版本,地址獲取方法見上面注2),其中的引數 --allow-unauthenticated 表示允許使用未通過驗證的安裝包,--assume-yes 表示對安裝過程中的所有詢問都回答yes。

2.除上述方法外,安裝驅動的方法還有.run檔案、PPA源、apt-get等。有些文章提到用.deb檔案安裝會失敗,此時可以考慮使用.run檔案安裝,要下載.run檔案,只要將上面第一幅圖中的Operating System選項選為Linux 64-bit即可,如下圖

安裝方法可參考以下連結:

其它安裝方法請讀者自行探索,這裡不再贅述。

至此,顯示卡驅動安裝完畢。

三、安裝CUDA8.0

I. 下載.run檔案

注:不要在上邊選擇選項,否則下載的將是10.0版本而非8.0版本。如下圖

step2:頁面跳轉後選擇自己需要的版本。

step3:頁面跳轉後再選擇Operating System,Architecture,Distribution,Version,Installer Type等各項指標,其中Installer Type選擇runfile(local)選項,選好後點擊Download,如圖。

注:右擊上圖所示的綠色下載按鈕,在彈出的選單中點選“複製連結地址”,在複製得到的地址前加上“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.0.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: yPlease 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-8.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"

如圖

儲存並退出檔案,執行命令

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-8.0_Samples/1_Utilities/deviceQuery   #跳轉到測試樣例1所在的目錄,如果您在安裝過程中(見上文最後一段)將測試樣例安裝在其它位置,這裡也要做出相應更改
make   #編譯
./deviceQuery   #執行

見到類似下面的輸出,表明安裝成功。

至此,CUDA8.0安裝完成。

本小節參考資料:

四、安裝cuDNN6.0

I. 下載安裝檔案

頁面跳轉後登入或註冊。

登陸後,按圖示操作。

                                                                                                                          ▼

                                                                                                                          ▼

                                                                                                                           ▼

                                                                                                                           ▼

                                                                                                                           ▼

                                                                                                                           ▼

                                                                                                                           ▼

                                                                                                                           ▼

                                                                 

注:在上面倒數第二幅圖綠色字“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.0.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*

附:解壓後的檔案列表

至此,cuDNN6.0安裝完成。

五、安裝Bazel

安裝Bazel是為了編譯TensorFlow做準備。如文章最開始的圖片顯示的那樣,我們需要安裝Bazel 0.5.4版本。

I. 檢視/解除安裝已有版本

執行命令

bazel

若顯示bazel: command not found ,則說明目前系統上沒有安裝Bazel,直接轉到步驟II

若有如下輸出,說明已安裝Bazel0.5.4,直接進入“六、相關準備工作”小節。

若有不同於上述兩種情況的輸出(如顯示安裝的版本是0.17.2,並且有幾個Warning),請按下述方法操作。

執行命令

whereis bazel

您將會看到類似上圖中的輸出,請使用rm -r命令將您看到的所有bazel目錄及其子目錄刪除。然後再執行 bazel 命令,若看到bazel: command not found,說明Bazel已解除安裝乾淨。

II. 下載安裝包

注:

1.如果您在上述網址指向的網頁中沒有找到您想要的版本,請將頁面拉至最底端,點選Previous或Next按鈕(如下圖)向前/後翻頁,從0.17.2版本到0.1.0版本都能找到。

                        

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.4-installer-linux-x86_64.sh   #增加執行許可權
sudo ./bazel-0.5.4-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

如圖

儲存並退出檔案,執行命令

source ~/.bashrc   #使配置檔案立即生效

注:如果您想要使Bazel對所有使用者都可用,請對/etc/profile這個配置檔案進行和上面相同的操作。

IV. 測試

在任意目錄下執行命令

bazel version

若有類似如下的輸出,說明Bazel安裝成功。

至此,Bazel安裝完成。

六、相關準備工作

I. gcc降級

Ubuntu安裝時自帶gcc,執行如下命令檢視此gcc版本

gcc --version

如圖 

編譯TensorFlow1.4.0需要gcc 4.x版本(如本文最開始的圖片顯示的那樣,根據TensorFlow官網,需要4.8版本,但在下實測4.9版本也可以),如果您的系統的gcc版本是5.x或更高,需要降級到4.x版本(其實就是安裝低版本的gcc並設定預設版本的過程)。由於在下沒有實際做這一步工作,故不敢妄言,這裡給出一些可能對您有用的連結:

II. 切換預設Python版本

儘管TensorFlow官網表示TensorFlow1.4.0同時相容python2和python3,但也有人表示,如果系統的預設python版本是python2,在編譯TensorFlow時會出錯(究竟會不會出錯,在下並沒有實踐)。

使用如下命令查詢python預設版本

python --version

如圖

如果您的系統的預設Python版本是2.7,您可以在編譯TensorFlow前將預設版本切換到3.3~3.6(見軟體版本配置),或者等到發現使用Python2.7編譯TensorFlow出錯時再切換。由於在下的系統的預設Python版本是Python3.5,所以並沒有執行切換預設Python版本的操作(很可能是之前其他人做了切換版本的工作),這裡只給出一些可能對您有用的連結:

注:如果您是手動編譯安裝Python3(參考上面倒數第一個連結),在make前一定在安裝包解壓目錄下使用如下命令將Python安裝在/usr目錄下(目的是為後邊編譯安裝TensorFlow提供方便)

./configure --prefix=/usr

安裝後,使用如下命令更新軟連線

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

至此,編譯安裝TensorFlow前的準備工作完成。

七、編譯安裝TensorFlow

I. 下載原始碼

此時,可以點選第二個連結(劃紅線的)下載,也可以在連結上右擊,在彈出的選單中選擇“複製連結地址”,在複製得到的地址前加上“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 v1.4.0.tar.gz

注:

1.如果您在上述網址指向的頁面中沒有找到您想要的版本,請將頁面拉至最底端,點選PreviousNext按鈕(如下圖)向前/後翻頁,翻頁後在新頁面查詢。

                                                                             

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.7
sudo apt-get install python3-numpy python3-dev python3-pip python3-wheel      #for Python3.x

step2:其它準備

在原始碼所在目錄下執行下列命令

cd tensorflow           #如果您是用git clone方法下載的原始碼,使用該命令
#或
cd tensorflow-1.4.0     #如果您是用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:配置選項

執行配置指令碼後,會有一系列問題讓您回答,下面逐條解釋

[email protected]:/usr/local/tensorflow# ./configure
You have bazel 0.5.4 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.5/dist-packages
  /usr/lib/python3/dist-packages
Please input the desired Python library path to use.  Default is [/usr/local/lib/python3.5/dist-packages]   #上面兩個目錄都是Python庫的位置,分別包含不同的庫,在下選的是第一個,理由參考該網頁David Hollander的回答(即第五個回答)
/usr/local/lib/python3.5/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://
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 gccll命令查詢您的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
[email protected]:/usr/local/tensorflow# 

                      

                                                                                  圖7-3-1                                                                                                                                                                                              圖7-3-2

step4:正式編譯

在和上一步相同的目錄下執行命令

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

然後就進入漫長的編譯過程,大概耗時15~30分鐘,編譯過程會佔用大量的RAM,所以在編譯時儘量不要執行其它程式。同時,編譯過程中會輸出大量語句,也會有許多Warning,但不要管,只有編譯不停止,就沒有問題。

注:

1.上述編譯命令比官網給的命令多出了許多引數,因為有資料顯示使用這些選項編譯安裝的TensorFlow在執行TensorFlow程式時會加快CPU計算速度,實測表明加上這些引數並不會引起錯誤。更多詳情請參考:

2.編譯完成後會生成一個build_pip_package.sh檔案,由當前目錄下的符號連結bazel-bin/tensorflow/tools/pip_package/build_pip_package指向,其中bazel-bin也是一個符號連結,如圖

 

III. 安裝

step1:構建安裝包

在和上一步相同的目錄下執行命令

bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg   #使用上一步生成的指令碼構建安裝檔案

該命令的執行不會花很多時間,該命令執行後會在/tmp/tensorflow_pkg目錄下生成一個.whl檔案,請使用  ls /tmp/tensorflow_pkg  命令檢視檔案的名稱,如下圖

step2:正式安裝

在和上一步相同的目錄下執行命令

sudo pip install /tmp/tensorflow_pkg/tensorflow-1.4.0-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安裝成功。

 

至此,TensorFlow安裝完成。

寫在後面

整個環境搭建過程參考了許多資料,在上文中已一一附上鍊接,再次對各位前輩表示感謝!在下才疏學淺,能力有限,文中難免有錯誤疏漏之處,懇請您批評指正,您的批評是在下進步的源泉和動力!未盡事宜:[email protected]

回到目錄