1. 程式人生 > 其它 >3.訓練模型之在GPU上訓練的環境安裝

3.訓練模型之在GPU上訓練的環境安裝

一般來說我們會在筆記本或者 PC 端編寫模型和訓練程式碼,準備一些資料,配置訓練之後會在筆記本或者 PC 端做一個簡單驗證,如果這些程式碼資料都 OK 的話,然後真正的訓練放在計算力更強的的計算機上面執行,一般來說至少有一塊或者多塊 GPU,有相當好的視訊記憶體和記憶體,接下來實驗一下。

選擇一個支援 TensorFlow GPU 的計算機

當務之急是找到一塊可以用於 TensorFlow 的顯示卡,TensorFlow 只支援在 NVIDIA 的部分高階顯示卡上面進行 GPU 加速, 在 NVIDIA 開發者中心可以找到支援的顯示卡列表,確保顯示卡在這個列表之內。

一般來說有兩個選擇,第一可以自己購買配置一個專門用於機器學習/深度學習的伺服器,這樣初期的投入比較高。第二可以租用雲伺服器,目前各大雲服務商都有專門的 GPU 計算例項,可以按照小時計費,這樣對於學習來說成本還是可以接受的。

其實我的 MacBook Pro 上面有一塊 N 卡,但是從 TensorFlow 1.2 開始,官方已經不再支援 Mac 上的 GPU 計算了。雖然可以通過一些 hack 使 TensorFlow 的 Mac 版本繼續支援 GPU,但是筆記本上的顯示卡計算能力還是比較弱,我也不想訓練到一半把這塊顯示卡燒了,所以我選擇從雲服務商那裡租用一臺 GPU 計算例項。

安裝 CUDA

CUDA 是一種由 NVIDIA 推出的通用平行計算架構,只能應用於 NVIDIA 的系列顯示卡,目前主流的深度學習框架包括 TensorFlow 都是使用 CUDA 來進行 GPU 加速的(可以把 CUDA 當做是一種驅動程式,TensorFlow 通過這個驅動程式來使用顯示卡),所以我們必須先安裝 CUDA。

首先檢查一下顯示卡資訊,確保沒有租錯主機,在終端上執行:lspci | grep -i nvidia

要確保列出的顯示卡在 NVIDIA 支援 CUDA 的顯示卡列表裡面。

在我租用的主機上,顯示如下:

顯示卡沒有問題,接下安裝 CUDA(本課程使用 CUDA 8)。

在 NVIDIA 開發者中心下載相應的 deb 包。

下載完成以後執行:

    sudo dpkg -i cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64.deb
    sudo apt-get update
    sudo apt-get install cuda

如果不出意外,安裝完成之後在終端執行:nvcc --version,則輸出 CUDA 的版本資訊:

安裝 cuDNN

我們還需要安裝一個叫做 cuDNN 的深度卷積神經網路的加速庫。

在 NVIDIA 開發者中心下載安裝包(注意:選擇 cuDNN 6 的版本,這樣才和 CUDA 8 相容。),這需要註冊一個賬號。

下載完成後執行:

    sudo tar -zxf cudnn-8.0-linux-x64-v6.0.tgz 
    cd cuda
    sudo cp lib64/* /usr/local/cuda/lib64/
    sudo cp include/cudnn.h /usr/local/cuda/include/

然後編輯 ~/.bashrc,在最後面加入:

    export CUDA_HOME=/usr/local/cuda
    export PATH=${CUDA_HOME}/bin/:$PATH
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CUDA_HOME/lib64:$CUDA_HOME/extras/CUPTI/lib64

然後source ~/.bashrc,安裝完成。

安裝 TensorFlow GPU 版

為了在 GPU 上進行訓練,還要安裝 TensorFlow 的 GPU 版本(之前在筆記本上面安裝的是 CPU版): sudo pip install tensorflow-gpu==1.3.0

安裝完成以後,執行 Python:

    python
    >>> from tensorflow.python.client import device_lib
    >>> print device_lib.list_local_devices()

如果輸出資訊裡面有 /gpu:0 的資訊,那麼說明整個安裝就成功完成了。

繼續訓練

前面花了一點時間來配置 GPU 的環境,現在是時候繼續我們的訓練了。當然還是需要在這臺機器上面根據上一課時的內容完成 Object Detection API 的安裝和配置;下載 Pre-trained 模型,然後把本地的訓練目錄打包上傳,接著根據具體的路徑修改 pipeline.config 中的相應項;最後執行訓練指令碼,這次的輸出是這樣的:

每一步的時間被縮短到 1 秒左右,那麼執行完 200000 步大概需要 2 天多一點時間,對於實際應用,其實是可以接受的。

我在執行到 20000 多步的時候終止了學習(大概 6 個多小時),然後將訓練目錄複製到了本地:

在 model/train 目錄下就是這 20000 多步的學習輸出,如果在這個目錄上繼續執行訓練指令碼的話,它會從之前的學習進度開始,繼續學習。

一個訓練的流程就跑完了,我們配置好了深度學習的軟硬體環境,下節課我們開始準備資料,訓練自己的模型吧。