寫在前面html
本文敘述了在Ubuntu16.04 Server下安裝CUDA8.0,cuDNN6.0以及源碼編譯安裝TensorFlow1.4.0(GPU版)的親身經歷,包括遇到的問題及解決辦法,也有一些本身的經驗,但願能對讀者有所幫助。期間參考了許多前人的文章,後文會一一附上連接,在此先行謝過。在下能力有限,經驗不足,請你們多多指教。python
關鍵詞:Ubuntu16.04 Server 深度學習環境搭建 安裝 顯卡驅動 CUDA8.0 cuDNN6.0 Bazel 源碼編譯 TensorFlow1.4.0 GPU版 TensorFlow_gpu1.4.0linux
系統和硬件:git
1.Ubuntu16.04 Server版github
2.GPU:NVIDIA Tesla P40 (一塊)ubuntu
3.CPU:Intel Xeon Processor E5-2620 v4 20M Cache,2.10GHz (兩塊)vim
注:bash
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.本文對其它版本配置的深度學習環境搭建也有必定借鑑意義,許多方法和技巧是通用的。好比:
5.預警:很長很囉嗦(面向小白,保姆級教程)。
正文
這一部分是其餘人作的,在下只是在旁觀摩,因此在這裏只敘述個大概,詳細安裝方法請您自行Google。
下載安裝包,作成啓動U盤,直接插在機箱上經過BIOS安裝(原來機器上裝有SentOS),謝天謝地,期間沒有遇到什麼問題。
顯卡驅動也不是在下親手安裝的,這裏只給出一些通用的方法和技巧,以及一些可能對您有用的連接,但願對您有所幫助,若有錯誤紕漏之處,懇請您不吝賜教。
若是您已知您的顯卡信息,則略過該步驟。
如今設想最壞的狀況,您不知道您的顯卡叫什麼名字,也沒辦法打開機箱來看(好比遠程的),問誰誰也不知道,機器上也沒有舊的顯卡驅動(沒有比這更糟糕的了),那麼,下面的辦法不妨一試:
step1:運行命令
lshw -numeric -C display
結果如圖:
若是您使用的是GeForce系列的顯卡,上面的命令能夠直接輸出顯卡的名稱,但若是您使用的是Tesla系列之類的專業級顯卡,上面的命令並不能直接獲得顯卡名稱(如上圖所示),這時須要接着進行下面的操做。
step2:查詢顯卡名稱
方法一
直接Google關鍵字10DE:1b38或1A03:2000,第一條就是,以下圖。
注:使用必應搜索也能夠,第三條就是。
方法二
訪問網址https://raw.githubusercontent.com/pciutils/pciids/master/pci.ids ,Ctrl+F搜索關鍵字1b38或1a03(不要搜索10de或2000,這兩項匹配的結果太多了),以下圖。
注:這個網頁上幾乎包含了世界上全部顯卡(不光是NVIDIA的)的廠商和名稱信息,很是全。
方法三
訪問網址https://pci-ids.ucw.cz/read/PC/,如圖
對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系列的第一款。更多詳情請見:
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 02:00.0 #使用上述兩個命令後會輸出02:00.0或06:00.0等字樣 lspci -v -s 06:00.0 lspci -vnn | grep VGA -A 12
若是您的機器使用的是Tesla系列之類的專業級顯卡,那麼上述命令並不能顯示出顯卡的名稱,但若是您使用的是GeForce系列的顯卡,則上述命令能夠打印出顯卡名稱。
訪問NVIDIA的官網,填寫顯卡、系統、CUDA版本等信息,即可下載相應驅動。
地址:https://www.nvidia.com/download/index.aspx (English)
https://www.nvidia.com/Download/index.aspx?lang=cn (Chinese)
注:
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
使用該命令即可直接在目標機上在線下載連接指向的文件。
跳轉到上一步下載的.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,但在下沒親自試過)。
參考網址:https://blog.csdn.net/u011668104/article/details/79560381
https://blog.csdn.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便可,以下圖
安裝方法可參考如下連接:
https://www.jianshu.com/p/1baf9848b7d7
https://www.linuxidc.com/Linux/2016-12/138907.htm
https://www.jianshu.com/p/b313625fbe61
其它安裝方法請讀者自行探索,這裏再也不贅述。
至此,顯卡驅動安裝完畢。
在命令行下鍵入
nvidia-smi
回車後見以下輸入,則說明顯卡驅動安裝成功。
注:若是您運行上述命令後獲得報錯
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.csdn.net/u011668104/article/details/79560381 (親測可行),在此對原做者表示由衷的感謝。
step1:訪問網址https://developer.nvidia.com/cuda-downloads? ,按圖示操做。
注:不要在上邊選擇選項,不然下載的將是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
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: 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-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 添加到環境變量中(如上圖黃色框中的最後一句)。
依次執行下列命令
cd /home/xxx/NVIDIA_CUDA-8.0_Samples/1_Utilities/deviceQuery #跳轉到測試樣例1所在的目錄,若是您在安裝過程當中(見上文最後一段)將測試樣例安裝在其它位置,這裏也要作出相應更改 make #編譯 ./deviceQuery #執行
見到相似下面的輸出,代表安裝成功。
至此,CUDA8.0安裝完成。
本小節參考資料:
https://blog.csdn.net/weixin_41151963/article/details/79530722
http://www.javashuo.com/article/p-zokwsszo-gu.html
訪問網址https://developer.nvidia.com/cudnn ,點擊Download cuDNN。
頁面跳轉後登陸或註冊。
登錄後,按圖示操做。
▼
▼
▼
▼
▼
▼
▼
▼
注:在上面倒數第二幅圖綠色字「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
注意到下載獲得的文件有一個奇怪的後綴名(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是爲了編譯TensorFlow作準備。如文章最開始的圖片顯示的那樣,咱們須要安裝Bazel 0.5.4版本。
執行命令
bazel
若顯示bazel: command not found ,則說明目前系統上沒有安裝Bazel,直接轉到步驟II。
如有以下輸出,說明已安裝Bazel0.5.4,直接進入「6、相關準備工做」小節。
如有不一樣於上述兩種狀況的輸出(如顯示安裝的版本是0.17.2,而且有幾個Warning),請按下述方法操做。
執行命令
whereis bazel
您將會看到相似上圖中的輸出,請使用rm -r命令將您看到的全部bazel目錄及其子目錄刪除。而後再執行 bazel 命令,若看到bazel: command not found,說明Bazel已卸載乾淨。
訪問網址https://github.com/bazelbuild/bazel/releases?after=0.7.0 ,Ctrl+F搜索關鍵字"0.5.4-installer-linux-x86_64.sh",如圖,點擊第一個下載
注:
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
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這個配置文件進行和上面相同的操做。
在任意目錄下執行命令
bazel version
如有相似以下的輸出,說明Bazel安裝成功。
至此,Bazel安裝完成。
Ubuntu安裝時自帶gcc,執行以下命令查看此gcc版本
gcc --version
如圖
編譯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.csdn.net/u014696921/article/details/73770887
https://blog.csdn.net/ytusdc/article/details/77980915
儘管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版本的操做(極可能是以前其餘人作了切換版本的工做),這裏只給出一些可能對您有用的連接:
https://blog.csdn.net/CYM_LMY/article/details/78315139 (切換Python默認版本,下同)
https://www.jianshu.com/p/9d3033d1b26f
https://blog.csdn.net/fang_chuan/article/details/60958329
https://blog.csdn.net/White_Idiot/article/details/78240298
https://blog.csdn.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.5 /usr/bin/python
至此,編譯安裝TensorFlow前的準備工做完成。
訪問網址 https://github.com/tensorflow/tensorflow/releases?after=v1.7.0-rc1 ,頁面跳轉後Ctrl+F搜索關鍵字「TensorFlow 1.4.0」,如圖
此時,能夠點擊第二個連接(劃紅線的)下載,也能夠在連接上右擊,在彈出的菜單中選擇「複製連接地址」,在複製獲得的地址前加上「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.若是您在上述網址指向的頁面中沒有找到您想要的版本,請將頁面拉至最底端,點擊Previous或Next按鈕(以下圖)向前/後翻頁,翻頁後在新頁面查找。
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目錄。
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:配置選項
運行配置腳本後,會有一系列問題讓您回答,下面逐條解釋
root@ubuntu-xxx:/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://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#
圖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計算速度,實測代表加上這些參數並不會引發錯誤。更多詳情請參考:
https://blog.csdn.net/xxy0118/article/details/77731641
https://zhuanlan.zhihu.com/p/27286391
2.編譯完成後會生成一個build_pip_package.sh文件,由當前目錄下的符號連接bazel-bin/tensorflow/tools/pip_package/build_pip_package指向,其中bazel-bin也是一個符號連接,如圖
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 #這裏的文件名要和上圖中查到的文件名相同
安裝過程也會持續一段時間,有時看着好像是卡住了,不要擔憂,過一會進度條就會往前走,請您耐心等待。
在任意目錄下依次執行下列命令
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安裝完成。
寫在後面
整個環境搭建過程參考了許多資料,在上文中已一一附上連接,再次對各位前輩表示感謝!在下才疏學淺,能力有限,文中不免有錯誤疏漏之處,懇請您批評指正,您的批評是在下進步的源泉和動力!未盡事宜:2661048959@qq.com。