顯示卡需求
本章節使用 Nvidia-GeForce GTX 1060 06G-Gamming 顯示卡,剛好符合 Tensorflow-GPU 的需求。
環境安裝需求
在 Ubuntu 16.04 環境下跑起 Tensorflow-GPU 條件及順序如下:
- Nvidia 顯示卡驅動
- CUDA
- cuDNN
- libcupti-dev
- Anaconda
- pip upgrade and install only tensorflow-gpu
顯示卡驅動
顯示卡驅動十分麻煩,需要到 System / Software & Updates 的 Additional Drives 下載預設的 Nvidia 顯卡驅動,然後按照環境順序安裝,假設最後還是無法跑起 Tensorflow-GPU ,有可能需要更換 Nvidia 的驅動版本。
本章節測試使用正常的 Nvidia 驅動程式版本 (384.111 - nvidia-384)為圖:
安裝請自行搜尋 Nvidia 官方的 Ubuntu 驅動。
CUDA 安裝
本章節使用的版本為官方建議的版本:
- CUDA 8.0
- cuDNN v6.0 For CUDA 8.0
請至 Nvidia-CUDA 網站下載: https://developer.nvidia.com/cuda-downloads ,找到 Additional Resource 下方有一個 Legacy Release 下載先前的版本,因為直接安裝最新版的 CUDA (如 9.1) ,可能會導致 Tensorflow-GPU 不支持而安裝失敗。
依照官方網站建議之版本,下載 CUDA Toolkit 8.0 GA2 這個下載,並且按照指示完成安裝。
下載並且安裝後,需要把 CUDA 路徑加入到系統全域變數內:
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}} export CUDA_HOME=/usr/local/cuda-8.0 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64/
以上參數,是把 cuda-8.0 的目錄位置,加入到 PATH 中,假設往後更新 Nvidia-CUDA 版本,也請必須更改以上變數的 cuda 版本目錄。
參數需要每次打開 Terminal 都要自動有這些路徑,所以可以考慮把指令寫在 ~/.bashrc 檔案中,就可以使用。
另外,第二行的 LD_LIBRARY 可以手動設定,假設 Tensorflow 的 LD_LIBRARY 路徑導致 Tensorflow 出錯,可以考慮改換以下參數,寫在 ~/.bashrc 中:"
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64:/usr/lib/nvidia-384
注意後面的 nvidia-384 這個名稱,請記得改換成系統目前安裝的 nvidia 驅動版本,並在目錄找尋看看是否有 nvidia-384 這個驅動程式目錄。
cuDNN 安裝
cuDNN 的系統全域變數已經在上一小節完成,由於 cuDNN 的驅動檔案會直接移動到 CUDA 的目錄裡面,所以 Tensorflow-GPU 會依照 CUDA 版本路徑去查找。
請至 cuDNN 的網站下載,並且下載時需要註冊帳號並同意,才可以看到 cuDNN 各版本的下載列表: https://developer.nvidia.com/cudnn 。
本文章使用的 CUDA 版本是 8.0 ,以及官方提到建議的 cuDNN 版本為 6.0 ,因此對應列表上的文字,下載 cuDNN 6.0 For CUDA 8.0:
cuDNN 請下載 cuDNN v6.0 Library for Linux 這個 tar.gz 壓縮檔,如圖示:
並且解壓縮後,使用以下指令分別把檔案加入 CUDA 目錄中:
sudo cp -P cuda/include/cudnn.h /usr/local/cuda/include sudo cp -P cuda/lib64/libcudnn* /usr/local/cuda/lib64 sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*
若在跑起 Tensorflow-GPU 時出現以下錯誤,有關鍵字 libcudnn.so.6: connot open shared object file...etc ,其 libcudnn.so.6 的 6 指的就是你目前使用的 Tensorflow 是抓取 cuDNN 6.0 版,所以你可能是:
- cuDNN 下載錯版本,不是第 6 版,在 /usr/local/cuda/lib64 可以看看有沒有這個檔案
- 你的 cuDNN 可能安裝錯位置,沒有安裝在 /usr/local/cuda/lib64 裡面
- 你沒有設定好 CUDA 路徑,用 export 查看。
錯誤情況如圖:
本章節使用的 Tensorflow-GPU 運算環境是使用 Anaconda 2 的虛擬環境 (版本應該不限),安裝後,每次要做運算時才開啟虛擬環境,給 Anaconda 2 的環境跑 Tensorflow-GPU。
系統需安裝 libcupti-dev:
接著,到 Anaconda 網站下載並安裝 Anaconda 到 Ubuntu 16.04 系統環境上: https://www.anaconda.com/download/#linux
接著,測試 Terminal 是輸入 conda 指令是否存在,如果不存在,請手動加入路徑,參考官方文件,至輸入 conda 指令存在為止。
請注意, anaconda 的路徑建議加入至 ~/.bashrc 檔案中,以便每次打開 Terminal 都可以自動加入路徑。
完成後,就使用 anaconda 的指令建立一個虛擬環境目錄:
輸入後,可以看到 Terminal 路徑前面有一個括號,裡面是命名的 [name],就代表已啟動,當要結束環境時,輸入以下指令就可以離開:安裝虛擬環境
本章節使用的 Tensorflow-GPU 運算環境是使用 Anaconda 2 的虛擬環境 (版本應該不限),安裝後,每次要做運算時才開啟虛擬環境,給 Anaconda 2 的環境跑 Tensorflow-GPU。
系統需安裝 libcupti-dev:
sudo apt-get install libcupti-dev
接著,到 Anaconda 網站下載並安裝 Anaconda 到 Ubuntu 16.04 系統環境上: https://www.anaconda.com/download/#linux
接著,測試 Terminal 是輸入 conda 指令是否存在,如果不存在,請手動加入路徑,參考官方文件,至輸入 conda 指令存在為止。
請注意, anaconda 的路徑建議加入至 ~/.bashrc 檔案中,以便每次打開 Terminal 都可以自動加入路徑。
完成後,就使用 anaconda 的指令建立一個虛擬環境目錄:
conda create -n [name] python=2.7 # or python=3.3, etc.[name] 可以自己取一個名字,然後後面則是 conda 要建立的 python 版本,範例如下:
conda create -n tensorflow python=2.7然後,就可以用以下指令開啟這個虛擬環境:
source activate [name]本文這裡的 name 取的是 tensorflow ,所以指令範例如下:
source activate tensorflow
source deactivate
conda 環境啟動後,就可以安裝 tensorflow-gpu 環境,透過 pip 來進行安裝,指令為:
pip install --ignore-installed --upgrade tensorflow-gpu除了 pip 以外,可以再用 pip3 來安裝不同 python 版本的 tensorflow-gpu:
pip3 install --ignore-installed --upgrade tensorflow-gpu接著,就可以透過 python 交互式命令,試試看:
import tensorflow as tf
如果這個指令沒問題,再測試 Tensorflow-GPU 是否有偵測到電腦的顯示卡:
from tensorflow.python.client import device_lib
device_lib.list_local_devices()
或
tf.test.gpu_device_name()
新版的 Tensorflow 在載入時好像都沒有再提示 GPU 顯示卡載入情形,所以可能需要手動測試。
Reference:
https://stackoverflow.com/questions/41402409/tensorflow-doesnt-seem-to-see-my-gpu
https://stackoverflow.com/questions/42326748/tensorflow-on-gpu-no-known-devices-despite-cudas-devicequery-returning-a-pas
https://www.tensorflow.org/tutorials/using_gpu
https://stackoverflow.com/questions/38559755/how-to-get-current-available-gpus-in-tensorflow
http://www.jarvus.dragonbeef.net/note/noteMLsetup.php
https://stackoverflow.com/questions/41991101/importerror-libcudnn-when-running-a-tensorflow-program
https://www.tensorflow.org/install/install_linux
沒有留言:
張貼留言