# 架設 Nvidia Driver、CUDA、CuDNN 環境(Ubuntu 16.04) > [name=謝朋諺(Adam Hsieh)] > [time=Thu, Apr 25, 2019 2:25 PM] ###### tags: `Environment` --- ## Reference > [微星GP62安装Win10+Ubuntu双系统](https://blog.csdn.net/HUAJUN998/article/details/74858493) > [微星GS安装Ubuntu系统](https://blog.csdn.net/weixin_41490463/article/details/80987654) > [深度学习配置:Ubuntu 16.04.2 + GTX 1070 +CUDA 8.0 +cuDNN 5.1 + TensorFlow 安装](https://zhuanlan.zhihu.com/p/27168325) > [Ubuntu 16.04 安裝CUDA 10.0 + cuDNN 7.3](https://medium.com/@zihansyu/ubuntu-16-04-%E5%AE%89%E8%A3%9Dcuda-10-0-cudnn-7-3-8254cb642e70) > [Removing nvidia cuda toolkit and installing new one](https://askubuntu.com/questions/530043/removing-nvidia-cuda-toolkit-and-installing-new-one) --- ## Nvidia 顯卡驅動 * 安裝顯卡驅動前可能會卡在啟動介面,因此在開啟前請先按 e 鍵進入設定,在 'splash' 後面添加 'nomodeset'(注意 nomodeset 前要空格) * F10 保存,就能正常進入安裝介面。 * 進入 Ubuntu 系統會發現解析度不對,請先進入 Nvidia 官網下載 ([https://www.geforce.com/drivers](https://www.geforce.com/drivers)) * 以這台筆電 GS63VR 為例,是插 1070 顯卡外加裝 Ubuntu 16.04 64 位元的 OS,因此選擇上是這樣挑選:![](https://i.imgur.com/Smo5Sqm.png) * 盡量不要挑選 BETA 版,我是選擇 418.56 2019-3-20 的版本![](https://i.imgur.com/RY8RmJB.png) * 以下是對顯卡驅動的一系列操作: 1. 修改黑名單屬性,否則不能修改 ```shell= sudo chmod 666 /etc/modprobe.d/blacklist.conf ``` 2. 編輯黑名單 ```shell= sudo vim /etc/modprobe.d/blacklist.conf ``` 3. 在文件末尾添加,禁用系統的顯卡驅動 nouveau ```shell= blacklist vga16fb blacklist nouveau blacklist rivafb blacklist rivatv blacklist nvidiafb ``` 4. 修改回原來的屬性 ```shell= sudo chmod 644 /etc/modprobe.d/blacklist.conf ``` 5. 更新內核 ```shell= sudo update-initramfs -u ``` 6. ==重開電腦== 7. 進入驅動檔案的資料夾,並更改權限 ```shell= sudo chmod +x NVIDIA-Linux-x86_64-375.39.run ``` 8. 開始安裝,請注意後面的選項,這是為了解決默認(無參數)安裝後 ubuntu 會循環登入的問題 ```shell= sudo ./NVIDIA-Linux-x86_64-375.66.run –no-x-check –no-nouveau-check –no-opengl-files ``` 9. 進入驅動安裝畫面後,第一個先按==繼續==,然後會出現...腳本為安裝,問你是否繼續安裝,可能會覆蓋你原本的腳本,然後選擇==不安裝==,安裝程式會繼續進行。 10. 檢查是否安裝成功可以直接打: ```shell= nvidia-smi ``` GPU 訊息若有出現則代表安裝成功。 11. 重新啟動電腦 12. 刪除 'nomodeset'並保存退出 ```shell= sudo vim /etc/default/grub ``` 13. 更新並重開機 ```shell= sudo update-grub reboot ``` --- ## CUDA 安裝 ### 前期準備 ```shell= sudo apt-get update sudo apt-get install libglu1-mesa libxi-dev libxmu-dev -y sudo apt-get --yes install build-essential sudo apt-get install python-pip python-dev -y sudo apt-get install python-numpy python-scipy -y sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libglu1-mesa libglu1-mesa-dev libgl1-mesa-glx ``` ### 開始安裝 :::success :sunglasses: 本系統由於需要較高的 tensorflow 版本(1.5 以上),因此必須裝到 CUDA 9.0 以上,但 1070 裝 CUDA 10.0 又有一些不相容問題,因此本文先以 9.0 當示範(8.0 也有成功)。 ::: * 請至 [CUDA Toolkit](https://developer.nvidia.com/cuda-toolkit-archive) 選擇最符合自己需求的版本,本文是選擇 9.0,下面是其他系統的選項: ![](https://i.imgur.com/ItpX3z6.png) * 添加執行權限: ```shell= sudo chmod +x cuda_9.0.176_384.81_linux.run ``` * 開始安裝: ```shell= ./cuda_9.0.176_384.81_linux.run --driver --silent ./cuda_9.0.176_384.81_linux.run --toolkit --silent ./cuda_9.0.176_384.81_linux.run --samples --silent ``` * 若出現 ==Missing recommended library: libGLU.so==,則執行下面命令: ```shell= sudo apt-get install libglu1-mesa libxi-dev libxmu-dev libglu1-mesa-dev ``` * 安裝 CUDA 之後,還是需要將 CUDA 添加至 ~/.bashrc 當中: ```shell= export PATH=/usr/local/cuda/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH ``` * 然後在激活 ~/.bashrc ```shell= source ~/.bashrc ``` * 檢查是否安裝完成: ```shell= nvcc -V ``` 若出現下面這樣代表安裝成功 ```shell nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2017 NVIDIA Corporation Built on Fri_Sep__1_21:08:03_CDT_2017 Cuda compilation tools, release 9.0, V9.0.176 ``` * 安裝 CUDA 自帶的 Samples ```shell= cd /usr/local/cuda/samples sudo make all ``` 編譯時間比較久,編譯完成後 ```shell= cd ./bin/x86_64/linux/release ./deviceQuery ``` 若出現顯卡訊息,則說明安裝完成了 ``` ./deviceQuery Starting... CUDA Device Query (Runtime API) version (CUDART static linking) Detected 1 CUDA Capable device(s) Device 0: "GeForce GTX 1070 with Max-Q Design" CUDA Driver Version / Runtime Version 9.0 / 9.0 CUDA Capability Major/Minor version number: 6.1 Total amount of global memory: 8114 MBytes (8508145664 bytes) (16) Multiprocessors, (128) CUDA Cores/MP: 2048 CUDA Cores GPU Max Clock rate: 1266 MHz (1.27 GHz) Memory Clock rate: 4004 Mhz Memory Bus Width: 256-bit L2 Cache Size: 2097152 bytes Maximum Texture Dimension Size (x,y,z) 1D=(131072), 2D=(131072, 65536), 3D=(16384, 16384, 16384) Maximum Layered 1D Texture Size, (num) layers 1D=(32768), 2048 layers Maximum Layered 2D Texture Size, (num) layers 2D=(32768, 32768), 2048 layers Total amount of constant memory: 65536 bytes Total amount of shared memory per block: 49152 bytes Total number of registers available per block: 65536 Warp size: 32 Maximum number of threads per multiprocessor: 2048 Maximum number of threads per block: 1024 Max dimension size of a thread block (x,y,z): (1024, 1024, 64) Max dimension size of a grid size (x,y,z): (2147483647, 65535, 65535) Maximum memory pitch: 2147483647 bytes Texture alignment: 512 bytes Concurrent copy and kernel execution: Yes with 2 copy engine(s) Run time limit on kernels: Yes Integrated GPU sharing Host Memory: No Support host page-locked memory mapping: Yes Alignment requirement for Surfaces: Yes Device has ECC support: Disabled Device supports Unified Addressing (UVA): Yes Supports Cooperative Kernel Launch: Yes Supports MultiDevice Co-op Kernel Launch: Yes Device PCI Domain ID / Bus ID / location ID: 0 / 1 / 0 Compute Mode: < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) > deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 9.0, CUDA Runtime Version = 9.0, NumDevs = 1 Result = PASS ``` 若有出現下面錯誤訊息: ``` ./batchCUBLAS: error while loading shared libraries: libcublas.so.9.0: cannot open shared object file: No such file or directory ``` 則要進行軟鏈接(可能不用): ```shell= sudo ln -s /usr/local/cuda-9.0/lib64/libcublas.so.9.0 /usr/lib/libcublas.so.9.0 sudo ln -s /usr/local/cuda-9.0/lib64/libcufft.so.9.0 /usr/lib/libcufft.so.9.0 ``` --- ## 安裝 CuDNN * 請至 [CuDNN Archive](https://developer.nvidia.com/rdp/cudnn-archive) 選擇最適合的版本,記得要符合 CUDA 9.0,本文是選擇 cuDNN v7.5.0 Feb 21, 2019,如下圖: ![](https://i.imgur.com/6Ao2KNH.png) * 下載後解壓縮,然後得到一個 cuda 文件夾,並執行下面指令: ```shell= sudo cp cuda/include/cudnn.h /usr/local/cuda-9.0/include sudo cp cuda/lib64/libcudnn* /usr/local/cuda-9.0/lib64 sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda-9.0/lib64/libcudnn* cd /usr/local/cuda-9.0/lib64 sudo ln -sf libcudnn.so.7.5.0 libcudnn.so.7 sudo ln -sf libcudnn.so.7 libcudnn.so sudo ldconfig ``` * 接下來只要安裝指定的 Tensorflow 測試若有使用到 GPU 即算成功,本次是安裝 tensorflow-gpu 1.9.0。 :::warning :+1: 請記住不同版本的 Tensorflow 支援的 CUDA 版本也不同,tensorflow 1.5.0 以上只支援 CUDA 9.0 以上,tensorflow > 1.13.0 的話就必須裝到 CUDA 10.0。 ::: --- ## 完全刪除 Nvidia CUDA toolkit 為了要保持環境乾淨需要完整刪除 CUDA。 :::warning :fire: 不一定能成功,很看運氣,有些版本的 CUDA 很頑強,重灌還是最乾淨! ::: ### Simple 直接刪除 CUDA 所有在 ```/usr/local/cuda-9.0``` 的檔案 ### Advanced * 只移除 nvidia-cuda-toolkit ```shell= sudo apt-get remove nvidia-cuda-toolkit ``` * 移除 nvidia-cuda-toolkit 和所有的依賴檔案 ```shell= sudo apt-get remove --auto-remove nvidia-cuda-toolkit ``` * 清除 config/data ```shell= sudo apt-get purge nvidia-cuda-toolkit ``` or ```shell= sudo apt-get purge --auto-remove nvidia-cuda-toolkit ``` * 除此之外如果 ```/opt/cuda``` 和 ```~/NVIDIA_GPU_Computing_SDK``` 資料夾若有存在的話也記得刪除 * 記得在```~/.bash_profile``` 檔案中移除 ```export PATH=$PATH:/opt/cuda/bin``` 以及 ```export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/cuda/lib:/opt/cuda/lib64```這兩行。(也有可能在 ```/etc/profile``` 裡面) ### Another Standard Method 這是標準做法,直接從 CUDA 資料夾裡的檔案去移除。由於我的是 9.0 版本,因此會進到 9.0 資料夾去執行移除,只要執行 **uninstall_cuda_9.0.pl** 等待幾分鐘時間就搞定了! ```shell= cd /usr/local/cuda-9.0/bin sudo ./uninstall_cuda_9.0.pl ``` 若是想刪除整個 nvidia ```shell= $ sudo apt-get purge nvidia* 或者 $ sudo apt-get remove --purge nvidia* 還有使用 $ sudo nvidia-uninstall ```