1. 程式人生 > >轉 :ubuntu16.04+Tensorflow—GPU1.4.1+CUDA8.0+CUDNNv6.0 親測有用

轉 :ubuntu16.04+Tensorflow—GPU1.4.1+CUDA8.0+CUDNNv6.0 親測有用

之前按照這篇部落格的內容配置過深度學習的環境,好久沒用忘了,趁現在想起來趕快碼起來,下次就不用找了,再次感謝博主的分享!

牢騷

上來必須牢騷一下這幾天的裝機感受,準確的說是5天!就為這麼點破玩意。
  • 1

首先是準備Ubuntu16.04 ,一開始以為win10家和ubuntu家是吵架了,Ubuntu裝完開機引導各種失敗各種看貼,最終總結出2點經驗:

  1. 主機板Boot Mode 必須改成uefi模式;
  2. 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。

  1. sudo apt-get install gcc-4.8
  2. 檢視預設的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

總結

剛翻過了幾座山 又越過了幾條河 崎嶇坎坷怎麼它就這麼多

用了將近五天時間終於從一個又一個坑裡爬了出來,誰知道八年抗戰才剛剛開始。 以上均為拋磚引玉,希望能給還在痛苦掙扎的朋友一些借鑑,同時也歡迎各位大神前來拍磚,在交流中不斷進步!

史料參考: