一文上手最新Tensorflow2.0系列|使用GPU加速

2019-08-21   人工智慧遇見磐創

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」讓環境變量生效。

第五步:驗證安裝是否成功

  1. 進入目錄「/usr/local/cuda-10.0/samples/1_Utilities/deviceQuery」中打開終端;
  2. 終端下執行編譯命令:sudo make
  3. 然後執行命令:./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()