轉 :ubuntu16.04+Tensorflow—GPU1.4.1+CUDA8.0+CUDNNv6.0 親測有用
之前按照這篇部落格的內容配置過深度學習的環境,好久沒用忘了,趁現在想起來趕快碼起來,下次就不用找了,再次感謝博主的分享!
牢騷
上來必須牢騷一下這幾天的裝機感受,準確的說是5天!就為這麼點破玩意。
- 1
首先是準備Ubuntu16.04 ,一開始以為win10家和ubuntu家是吵架了,Ubuntu裝完開機引導各種失敗各種看貼,最終總結出2點經驗:
- 主機板Boot Mode 必須改成uefi模式;
- Ubuntu的“安裝啟動引導器的裝置”必須選擇/boot所在分割槽;
花了兩天解決了Ubuntu系統的種種問題後,完美。直奔主題開始準備安裝Tensorflow,不對準確的說是Tensorflow-gpu,畢竟我的1080已經飢渴難耐了,區區一個cpu版怎麼能滿足我向朋友們扯犢子的深度需要呢。
下面是所需的軟體清單:
- Python2.7
- 顯示卡驅動
- CUDA 8.0 (請不要處女座,非得要求最新版本,不要問我是怎麼死的)
- cuDNN v6.0 (同樣,請不要作死,非得要最新版本)
- tensorflow-gpu1.4.1
- pycharm
準備工作
一開始使用的是系統預設的源,50M的寬頻供養一個tensorflow時居然只有20來k,雖說男人不能太快,但是過於持久實在扛不住,果斷換源。 - 更新Ubuntu16.04源,用的是中科大的源:
cd /etc/apt/
sudo nano sources.list
- 1
- 2
把下面的這些源新增到source.list檔案頭部: deb http://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse 最後更新源和更新已安裝的包: sudo apt-get update sudo apt-get upgrade
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
- 1
- 2
既然都源換了,那就順帶把需要的幾個庫也裝好吧,早買晚買,早晚要買,一步到位。
sudo apt-get install python-pip
sudo apt-get install python-numpy swig python-dev python-wheel
- 1
- 2
準備完畢,一鍵起飛。
1.顯示卡驅動安裝
開啟terminal輸入以下指令:
sudo apt-get update
- 1
然後在系統設定->軟體更新->附加驅動->選擇nvidia最新驅動->應用更改
安裝結束後,執行nvidia-smi,如果出現下圖,恭喜,顯示卡驅動大功告成,接下來小步快走直奔小康。
2.安裝CUDA
本著新得就是好得的原則,我上來就從官網上選了CUDA9.0,然和事實卻不是這樣的.
tensorflow官方版本目前不支援CUDA9, 但CUDA8是妥投沒問題的。不信請看大神如何優雅刨坑。
下載完畢,進入檔案的儲存路徑,執行如下程式碼:
sudo sh cuda_8.0.61_375.26_linux.run
- 1
開始安裝,首先是一份長達兩公里的協議,一直按回車到底以後,輸入accept。其他的操作如下所示
Do you accept the previously read EULA?
accept/decline/quit: accept
Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 367.48?
(y)es/(n)o/(q)uit: n
Install the CUDA 8.0 Toolkit?
(y)es/(n)o/(q)uit: y
Enter Toolkit Location
[ default is /usr/local/cuda-8.0 ]:
Do you want to install a symbolic link at /usr/local/cuda?
(y)es/(n)o/(q)uit: y
Install the CUDA 8.0 Samples?
(y)es/(n)o/(q)uit: y
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
除了詢問是否安裝顯示卡驅動選 n ,其他地方均為y。CUDA自帶的顯示卡驅動就像一個小三,只能偷摸玩玩,正式場合還得原配出馬才行。
Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 367.48?
(y)es/(n)o/(q)uit: n
- 1
- 2
緊接著,配置環境變數: 方法多樣,我選擇了修改~/.bashrc。勇敢地開啟它,在尾部加上這麼兩句話,然後請默默離開。
export PATH=/usr/local/cuda-8.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64:$LD_LIBRARY_PATH
- 1
- 2
出門在外莫忘生計,不對是儲存後請執行:
source ~/.bashrc
- 1
安裝結束。我想男人的好,只有在他身邊的那個女人才知道。是應該編譯一個sample, 試試不就知道姿勢對不對了。
編譯之前還有一件事必須處理了,ubuntu的gcc編譯器是5.4.0,然而cuda8.0不支援5.3以上的編譯器,因此需要降級,把編譯器版本降到5.4以下,這裡我選的是gcc 4.8。
- sudo apt-get install gcc-4.8
- 檢視預設的gcc版本 ,指令如下:
gcc --version
- 1
不出意外的話會返回ubuntu16.04自帶的5.4.0這個版本號,現在使用gcc命令編譯時還是會用新版本。
- 1
3. 接著設定預設gcc版本,程式碼如下:
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8
100
- 1
- 2
4.再看一眼gcc的預設版本,你好我也好,應該是4.8了。
接著編譯cuda自帶的Sample,指令如下:
cd /usr/local/cuda/samples/1_Utilities/deviceQuery
sudo make
./deviceQuery
- 1
- 2
- 3
結果應該是這樣的:
此情此景不經想讓人吟詩一首:啊!~~~
3.安裝cuDNN
libcudnn.so.6:cannot open sharedobjectfile: No such file or directory
- 1
根據錯誤程式碼,應該是找不到libcudnn.so.6。到指定資料夾下發現只有7.0和8.0的版本,沒有6.0,查詢原因是因為當前已經是1.4版本,而tensorflow-gpu1.4已經開始去找cudnn6了。 所以千萬不要被這花花世界迷惑了,成功的標配—-v6.0 for CUDA8.0。
載下來以後,發現是一個tgz的壓縮包,使用tar進行解壓:
tar -xvf cudnn-8.0-linux-x64-v6.0.tgz
- 1
解壓後再把相應的檔案拷貝到對應的CUDA目錄下即可
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*
- 1
- 2
- 3
- 4
是啊,cuDNN的安裝就是這兩步,要是愛情也這麼簡單就好了。
4.安裝Tensorflow1.4.1
在安裝Tensorflow之前,按照Tensorflow官方安裝文件的說明,需要先安裝一個libcupti-dev庫:
sudo apt-get install libcupti-dev
- 1
- 2
- 3
千呼萬喚始出來,安裝tensorflow:
pip install tensorflow-gpu
- 1
接下來就是默默得等待了,換源之後果然快的驚人,充電兩小時,開心五分鐘。 安裝完畢,進入python:
>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print(sess.run(hello))
- 1
- 2
- 3
- 4
事情到這裡應該就算結束了, 但是我們怎麼能滿足於在控制檯裡靜靜的裝逼呢。
安裝pycharm
從官網下載pycharm,地址如下:
http://www.jetbrains.com/pycharm/download/#section=linux
- 1
下載完成後,解壓,然後進入pycharm的bin目錄,開啟控制檯執行 sh ./pychram.sh,跟著提示來安裝。大功告成!
開啟軟體後,先配置python直譯器,我用的是2.7,選跟控制檯的python的同一路徑:
萬事俱備,準備起飛。 隨便敲了幾行程式碼進去,結果怎麼跟想象的不一樣呢,十分尷尬! 報錯為:
ImportError:libcublas.so.8.0:cannot open shared object file:No such file or dircetory
- 1
進過兩天的冥想,終於知道的了問題所在,還是環境變數設定的問題, 於是依照另一位大神的指導重新配置了cuda的環境變數:
- 更改~/.bashrc
export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
- 1
- 2
- 設定環境變數和動態連結庫,在命令列輸入: sudo gedit /etc/profile 在開啟的檔案末尾加入:
export PATH = /usr/local/cuda/bin:$PATH
- 1
- 建立連結檔案,在命令列輸入: sudo gedit /etc/ld.so.conf.d/cuda.conf 在開啟的檔案中新增如下語句:
/usr/local/cuda/lib64
- 1
- 最後使連結立即生效:
sudo ldconfig
- 1
總結
剛翻過了幾座山 又越過了幾條河 崎嶇坎坷怎麼它就這麼多
用了將近五天時間終於從一個又一個坑裡爬了出來,誰知道八年抗戰才剛剛開始。 以上均為拋磚引玉,希望能給還在痛苦掙扎的朋友一些借鑑,同時也歡迎各位大神前來拍磚,在交流中不斷進步!
史料參考: