Ubuntu16.04編譯安裝tensorflow,2018最新血淚踩坑之后的全面總結!絕對成功!【轉】


本文轉載自:https://blog.csdn.net/pzh11001/article/details/79683133

大家好,我是 (深度學習硬件DIY總群)(719577294)群主:
    這篇短文介紹一下怎么從源代碼編譯安裝tensorflow-GPU版本.
這個編譯安裝教程是我本人自己的一個安裝總結,首先說明一下我自己在自己電腦上已經成功編譯安裝了.我的電腦配置如下:
CPU:AMD4核未知型號
內存:12G DDR2
硬盤:兩個機械硬盤,一個500G,  另一個150G
顯卡:GTX750TI 2G
系統:WIN7-64位+UBUNTU16.04 LTS-64位雙系統.其中WIN7安裝在500G硬盤上,UBUNTU安裝在150G硬盤上


這次的安裝是在UBUNTU系統上進行的,WIN下的我還沒試過.


我這個系統的配置可以說是很爛的.沒錢嘛.大家原諒一下.
現在網上很多博客都有介紹如何編譯安裝tensorflow的教程,我最開始也是按照網上的教程開始安裝,但是這個過程中踩了很多坑.   我相信現在真正通過看一篇網上的博客就自己安裝成功的人應該是不多的.  所以我特別將我的安裝經驗分享如下.給有需要的人一個參考.寫得不好或者不對的地方 還請大家諒解.


開始:
首先說明一下,我的很多東西都是用的PIP安裝的,沒有用任何conda或者虛擬環境一類的東西!


1.要安裝tensorflow-GPU版本首先需要確定你的電腦是不是有一個合適的GPU顯卡.我的GTX750TI是支持的.  這個如果你不知道,就自己百度一下.  我這里只說一點:必須是NVIDIA的顯卡,必須是GTX 6系(含)  以上的顯卡. 其他的什么tesla,quradro等等系列我沒用過不清楚.    確定了上面這些后還要在NVIDIA的顯卡Computer Capability列表里面看看自己的顯卡的計算力(Computer Capability)是不是大於等於3.0    因為這個tensorflow據說不支持3.0能力以下的顯卡,實際上能不能安裝我沒試過.   我的GTX750TI的計算力是5.0 滿足要求.這個計算力大小好像跟顯卡實際性能沒什么關系,有些非常NB的顯卡計算力還沒我的GTX750TI高!  我也不知道這個是什么原理,反正按照我說的這個來 就不會有錯了.


2.UBUNTU16.04 LTS 64位版本自帶Python2.7, 如果想安裝Python3.5版本的tensorflow就需要先安裝Python3.5
在終端依次輸入命令:
sudo apt-get install python3.5-dev
sudo apt-get install python3.5
再安裝pip3
sudo apt-get install python3-pip
更新pip3的版本
sudo pip3 install --upgrade pip
(注意:我這里沒有安裝Python2.7的pip,而是直接安裝了Python3.5的pip3。因為我要編譯Python3.5支持的tensorflow。如果你要編譯Python2.7版本的tensorflow,請安裝pip)




3安裝CUDA和cuDNN
首先要安裝你的NVIDIA顯卡的驅動程序。網上有很多安裝方法,什么切換到命令行模式啊,什么卸載原來的驅動啊等等。其實他們那個說的太麻煩了,如果你要安照他們的教程來安裝,我基本可以保證你會把好不容易裝上的UBUNTU系統整奔潰。真實的安裝過程非常簡單。
只需要在UBUNTU16.04系統桌面上點擊左邊功能條上的‘系統設置’圖標,然后在出現的對話框中點擊下面一行中的‘軟件和更新’圖標,然后點擊‘附加驅動’選項卡,稍微等待一下就會出現可以選用安裝的顯卡驅動程序了,選擇最新的驅動nvidia-384。最后點擊‘應用更改’按鈕,等一下就搞定了。  然后重啟電腦OK。   有些不同的顯卡可能出現的驅動程序選項和我的有所不同,但是不管你什么顯卡,在選擇驅動程序的時候一定要選擇nvidia-XXX,后面三個數字大於360以上的,最好是380級別的。不然后面安裝不上CUDA。


搞定上面的一步之后(記得重啟電腦!),接下來安裝CUDA和cuDNN的依賴軟件
在命令行輸入命令:
sudo apt-get install libcupti-dev
然后下載CUDA8.0和cuDNN6.0   
這個兩個東西在NVIDIA的官方網站上面有,百度一下也有很多博客也提供下載。具體怎么下載我就不再這里詳細說了,畢竟就是下載兩個軟件包而已。但是這個CUDA和cuDNN有很多的版本,很多人搞不清楚應該下載那個版本。  這里我下載的是CUDA8.0和cuDNN6.0    網上其他博客教程里面有安裝cuda7.5  8.0  9.0  cuDNN4.0  5.1  6.0 9.0的什么等等等等。  我先說明一下這兩個東西的版本問題,一定要選好對應的版本,不然很容易安裝失敗,到時候把系統搞亂了都不知道怎么卸載!。   我經過無數次踩坑,發現目前就CUDA8.0和cuDNN6.0這一對組合最靠譜。
如果有人不知道在哪里下載或者下載速度太慢的,我的群文件里有這兩個東西,可以去下載。
下載完了之后,把這兩貨放到一個文件夾下面,然后再終端里面CD到這個文件夾下。執行命令:
sudo sh cuda_8.0.61_375.26_linux.run   (我下載的CUDA是這個版本號)
輸入上面命令點擊回車以后,會出現一些選項,問你回答YES或是NO。第一個問題就是問你要不要安裝NVIDIA驅動,這個選項一定要選NO! 否則后果自負!。  后面的問題可以全部yes或者默認回車。   安裝完成之后再終端上會有一段英文提示說CUDA沒有完全安裝,這個主要是我們沒選第一個yes,不用理它!


整完上面的步驟以后,在終端里輸入命令:
sudo gedit /etc/profile
打開profile文件,在這個文件的末尾新開始一行添加兩行如下文字:
export PATH=/usr/local/cuda-8.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64$LD_LIBRARY_PATH
一定注意大小寫和空格,寫完第一行回車,再寫第二行。然后保存退出。
然后重啟電腦,在終端輸入命令:
sudo reboot
重啟完后CUDA就算安裝完成了,然后就可以開始安裝cuDNN了。 進入到下載的cuDNN的文件夾,解壓縮cudnn-8.0-linux-x64-v6.0.tgz文件,然后再終端里cd到解壓后的文件夾里面的include文件夾中,執行命令:
sudo cp cudnn.h /usr/local/cuda/include/
然后cd到lib64文件夾中,執行命令:
sudo cp lib* /usr/local/cuda/lib64/


好了,以上的所有步驟就把神秘的CUDA和cuDNN都安裝好了。很簡單吧,很多人說安裝各種出錯什么的 其實主要問題就是沒有選對這兩個東西的對應版本,版本很重要!




4,安裝Bazel
上面的3步就把最基本的條件准備好了。但是我們要從源代碼自己編譯安裝tensorflow-gpu版本的話,以上的所有步驟還遠遠不夠!。  首先,我們要編譯tensorflow的源代碼就必須要有一個編譯器。 Tensorflow的源代碼是谷歌公司寫的,谷歌公司編譯這個東西用的編譯器不是ubuntu系統自帶的GCC編譯器,而是一個叫bazel的編譯軟件,這個編譯器是谷歌自己開發的,編譯器本身的源代碼也是開源的。 
接下來我們就要開始安裝這個編譯器。網上的很多博客教程寫到這一步的時候都是講的源碼編譯安裝bazel編譯器,也就是說叫你先下載bazel編譯器的源代碼,然后再編譯這個源代碼,然后生成安裝包再安裝這個編譯器!  要編譯安裝這個東西需要安裝非常多的第三方依賴包,然后就是各種編譯不成功的報錯,報錯,再報錯!  所以既然我們的目的是編譯安裝tensorflow,那么我們沒有必要再花太多的精力去搞這個編譯器了,直接用編譯好的安裝包一鍵安裝就OK了。  絕對成功!(如果你非要自己編譯這貨,那我也沒辦法,人生就是要折騰嘛)
但是要成功安裝這個編譯器還是需要先安裝一些依賴包的:
在終端輸入命令:
sudo apt-get install openjdk-8-jdk
然后下載最新的已經編譯好的bazel安裝包。這個東西的下載有點慢,我在我的群文件里面上傳了這個安裝包,大家可以去里面下載。


下載完成以后,進入到bazel安裝包所在目錄,執行命令:
sudo dpkg -i bazel_0.11.1_amd64.deb   (安裝這個bazel包)


5編譯tensorflow
以上就把bazel這個工具安裝好了。現在開始編譯tensorflow,要編譯tensorflow就必須先下載tensorflow的源代碼。網上的很多博客里面說源代碼不要去tensorflow官方的github上直接下載,而一定要在終端里面輸入git clone--recurse-subodules 這個命令來下載,理由是github上直接下載的源代碼不全,很多依賴包沒有會編譯出錯。等等雲雲! 
  
這里我要鄭重的告訴大家一個可怕的事實:用git clone--recurse-subodules命令下載的源代碼編譯才會出錯,而去tensorflow官方github上直接下載的zip壓縮包的源代碼,編譯反而不會出錯!   這個是經過我無數次的實驗,無數次的血淚證明,而且github上直接下載還可以選不同的tf版本!  用git clone--recurse-subodules命令下載的源代碼在編譯的時候各種莫名的錯誤,我當時還傻傻的去查這些錯誤怎么解決,因為我看到網上不止一個博客強調了這個問題,說是必須用git clone--recurse-subodules命令下載,所以我就信以為真一直沒有去試試github上直接下載zip包,苦苦掙扎於解決錯誤的血海之中!      后來實在沒辦法了,我就直接下了個zip包,解壓,編譯,OK了 !_!。頓時有一萬只CN馬跑過,欲哭無淚。
我不知道那些博客上為什么要那樣寫,可能當時是那樣的情況,反正現在這個時候就必須下載ZIP包的源代碼。


好了不廢話了,繼續:
(tensorlfow1.4 和1.5 的源代碼zip包我的群文件里面已經上傳了,可以去下載)
下載了tensorflow1.5的zip源碼包以后解壓縮,得到一個文件夾,cd進入這個文件夾中,執行命令:
./configure
之后第一個問題是要你輸入Python的路徑,由於電腦上有兩個版本的Python,一個2.7還有一個3.5,因為我要編譯Python3.5的tensorflow,所以我在這個問題后面輸入/usr/bin/python3.5  (如果要編譯2.7版本的就輸入/usr/bin/python)


回車以后會有第二個問題,是要你輸入Python模塊的路徑。這里我使用Python3.5 所以我輸入/usr/local/lib/python3.5/dist-packages


回車以后出現第三個問題,是要你輸入CUDA SDK和cuDNN的版本,對於CUDA我輸入8.0  回車以后要輸入cuDNN版本,我輸入6.0.21


然后繼續回車,每一次回車都是一個問題選項,輸入yes或者no。 這里我給大家一個選擇辦法:除了問你是否支持CUDA 或者 CUDNN帶這些字眼的選項選yes以外,其他選項都選no。  還要注意其中有一個選項是要你輸入你的顯卡的Computer Capability數值,這個一定要輸入正確,我的是5.0   如果你的顯卡跟我的不同一定先查清楚這個數值,在這里正確輸入!


這里面的配置會有很多選項,都是英文的,但是比較簡單可以看懂。看不懂就百度翻譯一下, 我建議一定要一條一條的看,一條一條的自己回答。 總共有十幾條,我上面說的那些就是需要特別注意的選項。 千萬不要一路猛按回車直接完事,那樣的話編譯會出很多莫名的錯!


最后一個問題回答完了以后就准備開始編譯了,在終端里輸入以下命令:
bazel build -c opt --config=cuda //tensorflow/tools/pip_package:build_pip_package
回車之后就開始編譯了,這個過程有點長,跟你的CPU性能有關。我的破CPU就編譯了1個半小時。


如果你嚴格按照我上面說的全部步驟來操作的話,到這里應該編譯完成不會有任何報錯。如果還是報錯,請檢查你的操作步驟是否正確! 實在想不通的就留言!


編譯完成以后就要將編譯結果生成一個可以安裝的whl安裝包,在終端輸入以下命令:
bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg


然后再根目錄的tmp目錄下面的tensorflow_pkg文件夾下就會有一個tensorflow1.5-gpu.XXXX.X.X.whl字樣的安裝文件。這個就是我們編譯好的tensorflow安裝包了。名字中間的數字跟你的電腦名字,Python版本等有關系,每個人的都不同。 請將這個編譯好的安裝包 拷貝到一個你自己的工作文件夾下面保存,因為這個tmp文件夾里面的東西都是臨時的,電腦重啟就沒了。所以這里最好復制出來重新保存一個副本。


最后進入到保存編譯好的tensorflow1.5-gpuXXXXX.whl安裝包的文件夾中,執行以下命令在你的電腦上安裝這個你自己編譯好的tensorflow-gpu版本!
pip3 install tensorflow1.5-gpuXXXXXX.whl  (具體名字有所不同,根據實際名字寫)


恭喜!大功告成!  我可以負責任的告訴你,你現在完成了很多人都沒有搞定的事情! 


后記:
這篇短文是總結了網上多個博客的內容取長補短匯總而成(對各位前輩的經驗表示感謝),也是自己的親自試驗結果。親測有效!。  這個編譯辦法不僅可以編譯GPU版本的tensorflow,也可以編譯指令集優化的CPU版的tensorflow,定制你個人的優化版tensorflow! 差別就是在編譯命令時輸入不同的選項參數bazel build -c opt --config=cuda //tensorflow/tools/pip_package:build_pip_package
這個bazel編譯器有很多選項可以用,具體要加那些編譯選項才能編譯支持SSE2 ,SSE4.2,AVX等優化指令的tensorflow呢?這個百度一搜一大堆我就不啰嗦了。 還有要編譯CPU版就不要在./configure時選擇CUDA支持就好了。 


完了! 歡迎留言討論,我的QQ群:719577294   里面有本文提到所有需要下載的安裝包。大家可以前往隨時下載。 
由於深度學習對硬件性能要求高設備價格高昂,很多愛好者只能“望AI心嘆”,只能紙上談兵,無法實際演練。因此本群主要討論深度學習硬件設備優化方案和軟件環境安裝等問題。致力於 做出一個讓人人都能用的起的貧民化的深度學習系統 方案。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM