Ubuntu18.04安裝Tensorflow-gpu如此多坑,這篇文章將拯救你于水火之中

摘要

Ubuntu18.04安裝Tensorflow-gpu,坑成馬。
不想踩坑?有緣千里來相會,這篇文章將梳理出作者遇到的所有天坑。
對于下列問題,你可以在本文中找到答案

  • 安裝Nvidia驅動時提示顯卡被占用?
  • 安裝Nvidia驅動時提示gcc版本太高?
  • 安裝Nvidia驅動的正確姿勢?
  • 驅動裝炸了,卸載Nvidia驅動的正確姿勢?
  • CUDA安裝與配置的正確姿勢?
  • cnDNN安裝與配置的正確姿勢?

前排提醒!!!

如果Ubuntu提示系統升級,千萬不要點!千萬不要點!千萬不要點!一鍵爆炸了解一下。

正文

組件版本:

Operating System : Unbuntu 18.04 LTS
Nvidia Graphic Card : Nvidia 940MX
Nvidia Driver: NVIDIA-Linux-x86_64-410.78
CUDA :  CUDA 9.0
cuDNN : cuDNN 7.1.4
Tensorflow : 1.5.0 GPU Version

請保證你的系統是純凈的,安裝過后沒有進行過任何多余操作


  1. 禁用預安裝的nouveau驅動

    用下面的指令創建新文件blacklist-nouveau.conf*

     sudo gedit /etc/modprobe.d/blacklist-nouveau.conf
    

    并添加如下內容

     blacklist nouveau
     options nouveau modeset=0
    

    Okay. 關閉文件,執行下列命令,重啟。

     sudo update-initramfs -u
     sudo reboot
    

    重啟完成后,用下面這個命令,檢驗nouveau是否已經被禁用了。

     lspci | grep nouveau
    

    如果被禁用了,那么terminal里不會輸出任何東西。


  1. 安裝 gcc 6

    從CUDA 4.1版本開始,現在支持gcc 4.5。gcc 4.6和4.7不受支持
    從CUDA 5.0版本開始,現在支持gcc 4.6。gcc 4.7不受支持
    從CUDA 6.0版本開始,現在支持gcc 4.7
    從CUDA 7.0版本開始,完全支持gcc 4.8,在Ubuntu 14.04和Fedora 21上支持4.9
    從CUDA 7.5版開始,完全支持gcc 4.8,在Ubuntu 14.04和Fedora 21上支持4.9
    從CUDA 8版本開始,Ubuntu 16.06和Fedora 23完全支持gcc 5.3
    從CUDA 9版本開始,Ubuntu 16.04,Ubuntu 17.04和Fedora 25完全支持gcc 6
    CUDA 9在CUDA中不支持gcc 7

    作者執筆寫這篇文章時,Ubuntu18.04 LTS自帶的gcc版本是7.3.0。CUDA9.0是不支持gcc 7的。因此你需要安裝一個低版本的gcc。在這里我選用gcc 6,下列命令可用于安裝gcc 6。

     sudo apt-get install gcc-6
     sudo apt-get install g++-6
    

    建立 soft link :

     sudo ln -s /usr/bin/gcc-6 /usr/local/bin/gcc
     sudo ln -s /usr/bin/g++-6 /usr/local/bin/g++
    

    此時你應該已經可以在terminal里調用gcc了,用下面的命令進行測試。

      gcc --version
    


  1. 安裝Nvidia驅動

    根據你顯卡的型號,去Nvidia官網下載對應驅動安裝程序的runfile版本。

    Ctrl + Alt + F3,進入文本命令行。登錄,使用下面的兩行指令終止GUI操作。對于Ubuntu18.04來說,第二行應該管用。

     sudo service lightdm stop
     sudo service gdm3 stop
    

    用如下指令運行.run文件

     sudo $DRIVER_DIR/NVIDIA-Linux-x86_64-410.78.run
    

    如果你發現不能運行,在運行之前,嘗試用先用下面的指令

     chmod u+x $DRIVER_DIR/NVIDIA-Linux-x86_64-410.78.run
    

    你可能會發現安裝程序會提示你缺少很多依賴,例如make。按照安裝程序的指示,用apt把該裝的都裝了。等所有依賴都安裝完畢,你應該就可以順利安裝驅動了。期間你可能會遇到各種各樣的提示框,說的還很嚇人。在下也不懂。選YES就是了,反正是純凈系統,大不了重頭再來。

    安裝完成后,用下面的指令測試是否安裝成功。

     nvidia-smi
    


  1. 安裝 CUDA 9.0

    根據你所要使用的Tensorflow版本選擇對應的CUDA的runfile安裝程序下載。

    tensorflow-gpu v1.9.0 | cuda9.0 | cuDNN7.1.4可行 | 備注:7.0.4/ 7.0.5/ 7.1.2不明確
    tensorflow-gpu v1.8.0 | cuda9.0 | cuDNN 不明確 | 備注:7.0.4/ 7.0.5/ 7.1.2/ 7.1.4
    tensorflow-gpu v1.7.0 | cuda9.0 | cuDNN 不明確 | 備注:7.0.4/ 7.0.5/ 7.1.2/ 7.1.4
    tensorflow-gpu v1.6.0 | cuda9.0 | cuDNN 不明確 | 備注:7.0.4/ 7.0.5/ 7.1.2/ 7.1.4
    tensorflow-gpu v1.5.0 | cuda9.0 | cuDNN 不明確 | 備注:7.0.4/ 7.0.5/ 7.1.2/ 7.1.4
    tensorflow-gpu v1.4.0 | cuda8.0 | cuDNN 6.0 | 備注:6.0正常使用, 7.0.5不能用,5.1未知
    tensorflow-gpu v1.3.0 | cuda8.0 | cuDNN 6.0 | 備注:6.0正常使用, 7.0.5不能用,5.1未知
    tensorflow-gpu v1.2.0 | cuda8.0 | cuDNN 5.1 | 備注:5.1正常使用, 6.0/ 7.0.5 未知
    tensorflow-gpu v1.1.0 | cuda8.0 | cuDNN 5.1 | 備注:5.1正常使用, 6.0/ 7.0.5 未知

    Ref: https://blog.csdn.net/lifuxian1994/article/details/81103530

    運行

         sudo $CUDA_DIR/cuda_9.0.176_384.81_linux.run
    

    開頭的協議太長,按空格加速跳過。之后你將進行一系列的選擇,除了問你 “是否要安裝CUDA自帶的Nvidia驅動程序” 選NO之外, 其余全選YES。我們剛剛自己安裝了驅動,不用它的。

    順利安裝完成后,用下列指令將CUDA路徑加入系統變量

     export PATH=$PATH:/usr/local/cuda-9.0/bin
     export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64
    

    上面的指令只能在當前terminal有用。如果想永久設置,打開下面的文件,并把上面兩行放到文件的最后。

     ~/.bashrc
    

    用下面的指令測試CUDA是否安裝成功

     nvcc --version
    

    你應該可以得到nvcc編譯器對應的版本信息


  1. 安裝Tensorflow-gpu

    我們使用pip安裝Tensorflow-gpu。pip 應該沒有隨系統安裝,沒有pip的先用下面的指令安裝pip。

     sudo apt install python-pip
    

    然后執行下面的指令安裝tensorflow-gpu 1.5.0

     pip install tensorflow-gpu==1.5.0
    

    如果你不加 '==1.5.0',將默認安裝最新版本(本人執筆時是1.12.0)
    安裝完成后,用下列指令測試tensorflow是否安裝成功。

    pip list
    

    你應當可以看到tensorflow-gpu 1.5.0在列表之中。但現在距離安裝完成還差一步之遙。

  2. 安裝 cuDNN

    下載cuDNN的Ubuntu版本的Runtime安裝程序(.deb格式文件)。下載完成后,雙擊即可安裝。

    現在,萬事俱備,你可以用下面的python程序測試Tensorflow-gpu版本是否被成功安裝。

    import tensorflow as tf 
    sess = tf.Session() 
    a = tf.constant(1) 
    b = tf.constant(2) 
    print(sess.run(a+b)) 
    

    Expected output

     3
    

    If 3 is printed on your screen, congratulations! You are ready to go.

Follw My Wechat Official Account
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。