1. 安裝配置GPU環境
1.1. 安裝GPU版TF
在之前我們已經安裝了CPU版的TensorFlow,為了使用GPU來加速計算,我們必須安裝GPU版的TensorFlow。這裡我們可以直接使用pip命令來安裝:
apip install tensorflow-gpu==2.0.0-alpha0
安裝完成後我們後我們可以查看一下當前可用的GPU:
from tensorflow.python.client import device_lib
def get_available_gpus():
local_device_protos = device_lib.list_local_devices()
return [x.name for x in local_device_protos if x.device_type == 'GPU']
print(get_available_gpus())
由於本人機器上有兩塊GPU,所以輸出兩塊GPU的編號:「[『/device:GPU:0』, 『/device:GPU:1』]」。
1.2. 安裝顯卡驅動
根據你的顯卡型號到官網(https://www.nvidia.cn/Download/index.aspx?lang=cn)下載對應的驅動。我的伺服器上有兩塊Tesla P100的顯卡,如圖所示選擇對應的驅動程序。這裡一定要注意選擇正確的版本,要和你的顯卡版本、作業系統版本以及想要安裝的CUDA版本一一對應。
NVIDA驅動下載列表
點擊搜索,然後點擊下載即可。
NVIDA驅動下載提示
安裝完成之後可以使用「nvidia-smi」命令查看顯卡。
顯卡信息
1.3. 安裝CUDA
在安裝CUDA之前,我們一定要先搞清楚TensorFlow各個版本與CUDA版本的對應關係。在TensorFlow官網有相似的說明(https://tensorflow.google.cn/install/source),其中Linux系統環境下TensorFlow GPU版本與CUDA版本的對應關係如圖所示。
TensorFlow與CUDA的版本對應關係
TensorFlow2.0 GPU版依賴的NVIDA軟體包
TensorFlow-GPU的2.0.0-alpha版對應的NVIDA驅動版本、CUDA版本、cuDNN的版本號。
1.3.1 下載CUDA
首先我們到NVIDIA官網(https://developer.nvidia.com/cuda-toolkit)下載CUDA。
選擇對應的CUDA版本
選擇對應系統環境的CUDA版本,點擊下載。
1.3.2 安裝CUDA
CUDA下載頁面有安裝指引,如圖所示。
CUDA的安裝步驟
第一步:執行安裝命令
sudo dpkg -i cuda-repo-ubuntu1604-10-0-local-10.0.130-410.48_1.0-1_amd64.deb
第二步:添加kay
sudo apt-key add /var/cuda-repo-10-0-local-10.0.130-410.48/7fa2af80.pubupdate
第三步:依次執行
sudo apt-get update
sudo apt-get install cuda-10.0
注意不要使用「sudo apt-get install cuda」,這樣默認安裝的是最新版,所以一定要指定版本。
安裝完成後,在「/usr/local」目錄下會生成「cuda」和「cuda-10.0」兩個文件夾,如圖所示,我們可以使用命令「cat /usr/local/cuda/version.txt」查看CUDA版本。
第四步:設置環境變量
打開「~/.bashrc」文件,在文件的最後最後添加如下內容:
export PATH=/usr/local/cuda-10.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
在終端執行命令「source ~/.bashrc」讓環境變量生效。
第五步:驗證安裝是否成功
- 進入目錄「/usr/local/cuda-10.0/samples/1_Utilities/deviceQuery」中打開終端;
- 終端下執行編譯命令:sudo make
- 然後執行命令:./deviceQuery,可以看到兩塊GPU的信息
如圖所示,檢測到兩塊顯卡,圖中是其中一塊顯卡的信息。到這裡CUDA已經安裝完成了。
顯卡的信息
1.4. 安裝cuDNN
1.4.1 下載
(https://developer.nvidia.com/rdp/cudnn-download)
這裡一定要下載與CUDA10.0對應的版本。下載CNDNN需要登錄NVIDIA帳號,沒有的話,可以按照提示創建一個帳號。
cuDNN與CUDA的版本對應關係
選擇好cuDNN版本後,點擊下載「cuDNN Library for Linux」,如圖所示。
cuDNN下載列表
1.4.2 安裝
第一步:解壓文件
tar zxvf cudnn-10.0-linux-x64-v7.5.0.56.tgz
第二步:拷貝文件,並修改文件權限
sudo cp cuda/include/cudnn.h /usr/local/cuda/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*
到這裡TensorFlow2.0的GPU版就安裝配置完成了。
2. 使用TensorFlow-GPU
如果我們的機器上安裝配置好了GPU版的TensorFlow,那麼運行的時候TensorFlow會自行去選擇可用的GPU。我們也可以通過「os.environ["CUDA_VISIBLE_DEVICES"]」來選擇我們要使用的GPU:
import tensorflow as tf
import os
# 選擇編號為0的GPU
os.environ["CUDA_VISIBLE_DEVICES"] = "0"
# 創建模型
model = tf.keras.Sequential()
model.add(layers.Dense(16, activation='relu', input_shape=(10,)))
model.add(layers.Dense(1, activation='sigmoid'))
# 設置目標函數和學習率
optimizer = tf.keras.optimizers.SGD(0.2)
# 編譯模型
model.compile(loss='binary_crossentropy', optimizer=optimizer)
# 輸出模型概況
model.summary()
我們選擇了編號為「0」的這個GPU,執行完上面的這段代碼後我們使用命令「nvidia-smi」來查看一下GPU的占用情況,如圖所示,編號為「0」的GPU正在被占用。我們可以將代碼中的「0」改為「1」來使用另一個GPU。
查看GPU占用情況
如果我們希望使用多塊GPU,例如同時使用「0」、「1」兩塊GPU,可以設置「os.environ["CUDA_VISIBLE_DEVICES"] = "0,1"」,除此之外我們還可以使用TensorFlow為「tf.keras」提供的分布式訓練策略「tf.distribute.MirroredStrategy」來實現單機環境下的多GPU訓練:
import tensorflow as tf
from tensorflow.keras import layers
strategy = tf.distribute.MirroredStrategy()
# 優化器以及模型的構建和編譯必須嵌套在「scope()」中
with strategy.scope():
model = tf.keras.Sequential()
model.add(layers.Dense(16, activation='relu', input_shape=(10,)))
model.add(layers.Dense(1, activation='sigmoid'))
optimizer = tf.keras.optimizers.SGD(0.2)
model.compile(loss='binary_crossentropy', optimizer=optimizer)
model.summary()