最近買了新電腦,遇到一些奇怪問題卡了很久,架環境弄了很久就紀錄一下吧。
顯示卡驅動程式
使用以下指令安裝顯示卡驅動程式:
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
sudo apt-get install nvidia-driver-390
這邊是安裝 390 版,要注意跟 CUDA 版本要對齊,詳細版本對應可以看官網。
裝完後重新開機,執行 nvidia-smi
應該就可以看到顯卡使用狀況︰
據說從官網下載驅動程式在 ubuntu 會有問題,我就沒有去測試了。
CUDA 及 cuDNN
接著安裝 CUDA 9.0 (官網連結),這邊還沒有 18.04 可以選,選 17.04。注意 CUDA 跟 cuDNN 的版本號要跟 TensorFlow 對上,細節可以查詢 TensorFlow 官網。其他 CUDA 版本可以在這邊找到。
我 patch 1, patch 2 都有裝,都是用 dpkg 裝的:
sudo dpkg -i cuda-repo-ubuntu1704-9-0-local_9.0.176-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1704-9-0-local-cublas-performance-update_1.0-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1704-9-0-local-cublas-performance-update-2_1.0-1_amd64.deb
sudo apt-key add /var/cuda-repo-9-0-local/7fa2af80.pub
sudo apt-get update
sudo apt-get install cuda-9-0
接著安裝 cuDNN 7.0.5,一樣到官網下載 (連結),選擇 Library for Linux
:
下載完是 tgz 檔 cudnn-9.0-linux-x64-v7.tgz,解壓縮後會有這些檔案:
ls cuda/*
cuda/NVIDIA_SLA_cuDNN_Support.txt
cuda/include:
cudnn.h
cuda/lib64:
libcudnn.so libcudnn.so.7 libcudnn.so.7.0.5 libcudnn_static.a
把 cuda 裡面的資料複製到 /usr/local/cuda-9-0
,cp -P
會在複製的時候保留 symbolic link ,最後讓 libcudnn 可以讓所有人有讀取權限:
sudo cp -P cuda/lib64/libcudnn* /usr/local/cuda-9.0/lib64/
sudo cp cuda/include/cudnn.h /usr/local/cuda-9.0/include/
sudo chmod a+r /usr/local/cuda-9.0/include/cudnn.h /usr/local/cuda/lib64/libcudnn*
libcupti
安裝 libcupti:sudo apt-get install libcupti-dev
把 cuda path 設到環境變數,可以加到 ~/.bashrc 比較方便:
export PATH="/usr/local/cuda-9.0/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda-9.0/lib64:$LD_LIBRARY_PATH"
TensorFlow
最後,pip 安裝 TensorFlow,目前最新是 1.8.0:
pip install tensorflow-gpu
2020 更新:最新 2.x 版本的 TensorFlow 套件不再區分 CPU 與 GPU 版本,直接由以下指令安裝即可:
pip install tensorflow
測試
from tensorflow.python.client import device_lib
device_lib.list_local_devices()
輸出:
執行 device_lib.list_local_devices()
可以看到同時有 CPU 跟 GPU。
參考資料
https://medium.com/@taylordenouden/installing-tensorflow-gpu-on-ubuntu-18-04-89a142325138
https://askubuntu.com/questions/1028830/install-cuda-on-ubuntu-18-04
https://github.com/tensorflow/tensorflow/issues/15817