# **Ubuntu 18.04安裝NVIDIA驅動+ CUDA + cuDNN + tensorflow-gpu** ###### tags: `Ununtu` `18.04` `Nvidia` `CUDA` `cuDNN` `Tensorflow` `GPU` 本篇文章我會分為兩個區塊來寫,分別是: 1. 直接用終端機來架設全域環境(NVIDIA驅動、CUDA、cuDNN) 2. 用Anaconda+虛擬環境 因為我本人習慣使用Anaconda裡的IDE: **spyder**, 而如果不使用虛擬環境的話,不同版本的套件都會打架。 剛開始安裝時啥都不懂一直亂裝,浪費了許多時間XD (後記:因為用Anaconda會自動幫我們安裝好CUDA跟cudnn,所以也可以先裝虛擬環境裡的套件,參考完他的版本後再回來裝全域的,感覺也可行。) --- 先簡介一下我的顯卡跟環境: -顯卡 RTX 2070 Super -NVIDIA driver 440.100 -CUDA 10.2 -cuDNN v7.6.5 -GCC 7.5.0 -Anaconda 4.8.3 -tensorflow-gpu 1.14.0 -Keras 2.2.4 -Python (全域是3.7 虛擬3.6) --- 先講一下如何卸載,如果發現環境打架或版本不符: ``` sudo apt-get –purge remove nvidia* sudo apt autoremove ``` 要移除 CUDA Toolkit(3個方法看哪個喜歡): ``` sudo apt-get –purge remove “*cublas*" “*cuda*" sudo apt-get remove — auto-remove nvidia-cuda-toolkit sudo apt-get purge nvidia-cuda-toolkit or sudo apt-get purge — auto-remove nvidia-cuda-toolkit ``` 要移除 NVIDIA Drivers: ``` sudo apt-get –purge remove “*nvidia*" ``` ## 1. 直接用終端機來架設全域環境(NVIDIA驅動、CUDA、cuDNN) ### Step1. 安裝NVIDIA驅動 首先裝一些環境 ``` sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev libfreeimage3 libfreeimage-dev ``` 接著禁用nouveau驅動 ``` sudo gedit /etc/modprobe.d/blacklist.conf ``` 在文本的最底下,加入這兩行 ``` blacklist nouveau options nouveau modeset=0 ``` 接著執行下面這行 ``` sudo update-initramfs -u ``` 重新開機後輸入以下這行,如果螢幕沒有輸出則代表成功 ``` lsmod | grep nouveau ``` (電腦的顯示可能會怪怪的,不用特意更動,之後灌完驅動就會好了) 接著正式進入裝NVIDIA驅動的環節 ``` sudo add-apt-repository ppa:graphics-drivers ``` 對package作更新 ``` sudo apt update ``` 輸入下面這行去選擇自己要裝的驅動版本(通常是選third-party free recommended) ``` ubuntu-drivers devices ``` ![](https://lucaho99.files.wordpress.com/2020/08/screenshot-from-2020-08-20-20-09-12.png) 想安裝第三方推薦就輸入下面這行(如果有特殊版本需求就輸入再更下一行) ``` sudo ubuntu-drivers autoinstall sudo apt install nvidia-driver-440 ``` (以我自己為例就是選440) 安裝好後重新啟動電腦,可輸入以下指令 ``` sudo reboot ``` 再用下面這行指令確定使否安裝成功 ``` nvidia-smi ``` ![](https://lucaho99.files.wordpress.com/2020/08/screenshot-from-2020-08-19-20-46-29.png) ### Step2. 安裝CUDA 根據剛剛輸入nvidia-smi出現的資訊去看對應CUDA的版本..(以我為例就是10.2) 到[CUDA官網](https://developer.nvidia.com/cuda-toolkit-archive)去下載對應版本的包,接著選Linux >>> x86_64 >>> Ubuntu >>> 18.04 >>> runfile(local) 下面會出現安裝指令,如圖。 ![](https://lucaho99.files.wordpress.com/2020/08/screenshot-from-2020-08-20-20-22-10.png?w=1024) 接著一直按Enter到底出現選取的頁面,如果已經安裝好顯卡驅動, 在**CUDA Installer**就不要勾選cuda提供的顯卡驅動程式! ![](https://lucaho99.files.wordpress.com/2020/08/screenshot-from-2020-08-20-20-25-54.png) 別忘記設置環境變量~~~ 請在終端機輸入: ``` sudo gedit /etc/profile ``` 輸入密碼後進去,打開文件最底下,加入以下兩行後按Save(記得密碼一定要是英文輸入法,而且linux terminal密碼是不會顯示的,不要像我耍北七!) ``` export PATH=/usr/local/cuda-10.2/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda10.2/lib64 ``` 接著一樣再終端機輸入 ``` sudo gedit ~/.bashrc ``` 然後一樣再文件最底下加入這三行: ``` export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-10.2/lib64 export PATH=$PATH:/usr/local/cuda-10.2.0/bin export CUDA_HOME=$CUDA_HOME:/usr/local/cuda-10.2 ``` 要記得對應好自己安裝的CUDA版本,不要我打什麼你就跟著哦!再來要讓環境生效! ``` source ~/.bashrc ``` 最後輸入以下指令看看是否成功(下圖為成功的情況) ``` nvcc -V ``` ![](https://lucaho99.files.wordpress.com/2020/08/screenshot-from-2020-08-20-20-41-24.png) ### Step3. 安裝cuDNN 到[cuDNN官網](https://developer.nvidia.com/rdp/cudnn-archive)先下載,記得要先註冊然後填問卷,然後cuDNN是跟著CUDA版本的, 所以要記得找對應的來下載喔!!! 進入到終端機,輸入: ``` cd Downloads ``` 然後對剛剛的檔案去進行解壓縮 ``` tar -zxvf cudnn-10.2-linux-x64-v7.6.5.32.tgz ``` 藉著要把解壓縮出來的文件複製到安裝的CUDA環境中,可輸入以下兩行試試看: ``` sudo cp cuda/include/cudnn.h /usr/local/cuda/inlude sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64 ``` 如果**像我一樣資料夾名字不太對,也可以用手動去移動(詳細方法在下面的P.S)**, 簡單來說就是把Downloads解壓縮出來的cudnn檔案裡面的cudnn.h和libcudnn兩個檔案 要移到usr/local/cuda(我的這個資料夾叫做cuda-10.2,超怪) - 註:然後然後如果找不到usr,可以先進到Home點右鍵選Properties, 進去後就有一個磁盤可以點了,如附圖。 ![](https://lucaho99.files.wordpress.com/2020/08/screenshot-from-2020-08-20-21-06-34.png) 最後要更改權限: ``` sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn* ``` 如果系統提示找不到cudnn.h,可複製cuda/include/cudnn.h到usr/local/cuda/include/ 目錄下! 原則上到這邊是大功告成了… 再來就輸入幾個指令就可以安裝tensorflow-gpu跟keras了(<font color="red">注意tensorflow有分cpu版本跟gpu版本</font>) 首先更新一下pip,打開終端機輸入: ``` pip install –upgrade pip ``` 接著就直接用pip來安裝tensorflow-gpu跟keras,記得這兩個套件的版本是有對應關係的,詳情要麻煩上網查,不過有些網路沒寫到的好像也能相容。指令如下: ``` pip install tensorflow-gpu==1.14.0 pip install keras==2.2.4 ``` 我是以我自己為例,當然==後面的數字(版本)可以自己改。 (P.S)如果要自己手動移動cudnn資料夾的兩個檔案,可能需要先取得"**管理員權限**"! 打開終端機,輸入以下指令: ``` sudo apt install nautilus-admin ``` 接著需要重新啟動Nautilus,輸入以下指令後按Enter: ``` nautilus -q ``` 之後就可以對你想移動的檔案按右鍵,並以管理員的身分移動它了! ## 2. 用Anaconda+虛擬環境 首先到[Anaconda官網](https://www.anaconda.com/products/individual)下載,選64-Bit(x86)那個。 ![](https://lucaho99.files.wordpress.com/2020/08/screenshot-from-2020-08-20-21-23-41.png) 可以看到現今的tensorflow-gpu所支持的python版本,所以要來創建虛擬環境! 打開終端機,輸入以下指令: ``` conda create -n ENV python=3.6 ``` 說明一下 ENV 是這個虛擬環境的名稱,你可以自由更改,但是要記住他的名字,因為你每次要開啟虛擬環境都會要輸入,至於後面python的版本數可依使用需求改變。 之後要啟用剛剛建構出來的虛擬環境: ``` source activate ENV ``` 接著你要安裝你所需要的套件包,以下提供一些指令幫助你安裝: ``` conda update conda 更新你的conda conda list 可以看見你目前有的套件 conda env list 可以看環境 conda install XXX 安裝XXX這個套件(ex: numpy scipy matplotlib) conda uninstall XXX 卸載XXX這個套件 conda remove -n ENV –all 把剛剛建構的虛擬環境整個刪除 ``` 好!所以要來裝一下tensorflow-gpu跟keras,可以先進行搜尋 ``` conda search tensorflow-gpu conda search keras ``` 找到要的版本後就開始安裝吧!如果是用conda安裝的話,它會自動偵測系統環境,幫你裝好cuda toolkit和cudnn,就不用自己手動安裝了! ``` conda install tensorflow (這個是會直接安裝最新的版本的樣子) 所以我還是推薦用pip ``` install可以指定版本,在虛擬環境中可安裝跟全域環境不同版本的! ``` pip install tensorflow-gpu==1.12 pip install keras==2.1.6 ``` 可以確認一下自動安裝的版本: ``` conda list | grep “cudatoolkit" conda list | grep “cudnn" ``` 最後來確認一下有沒有安裝成功,再終端機打上: ``` python3 ``` 進入到python shell後,打以下命令,沒有出現error就是成功了 ```python= import tensorflow as tf hello = tf.constant(‘Hello, Tensorflow!’) sess = tf.Session() print(sess.run(hello)) ``` 可以另外再開一個終端機視窗,輸入nvidia-smi來間看顯存使用情況! ## 結語 安裝這東西真的是頭痛心又累,可是完整的把過程寫出來會得到滿滿的成就感, 如果能幫助到他人又得到反饋,那就更再完美不過了! 可以的話,幫我分享給你需要的朋友吧! 參考網址: [csdn大神](https://blog.csdn.net/sscc_learning/article/details/85334549) [Lin Tzung-ying](https://medium.com/@ljn3333/install-anaconda-tansorflow-gpu-keras-in-ubuntu-18-04-with-cuda9-0-for-nvidia-1080-ti-83bd7bea5798) [林塔恩](https://medium.com/@mikethreeacer/ubuntu-18-04-%E5%AE%89%E8%A3%9D-cuda-cudnn-anaconda-pytorch-1f170b3326a4) [每天都要深度學習](https://blog.csdn.net/Lucifer_zzq/article/details/76675239?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&fbclid=IwAR3BG8TyeQTdFzx2FTb6z1QaorbnkKWtqTFwWtQ9-ZxrmRXz0OSqCqktjjU) [古月居](https://www.guyuehome.com/10177)