1. 程式人生 > >用多張GPU 顯示卡 加速TensorFlow Object Detection API 模型訓練的過程

用多張GPU 顯示卡 加速TensorFlow Object Detection API 模型訓練的過程

本篇記錄如何使用多張GPU 顯示卡,加速TensorFlow Object Detection API 模型訓練的過程。

雖然TensorFlow Object Detection API 已經有支援多張GPU 卡平行計算的功能,但是缺乏說明檔案,所以我自己也不是非常確定該怎麼用,以下只是我目前嘗試出來的方式,僅供參考。


這裡我們接續之前的TensorFlow Object Detection API自行訓練模型教學,將Oxford-IIIT Pet Dataset的範例改成多GPU的版本。

 

使用多GPU卡時,會把每個batch的資料分散至每張GPU卡,也就是可以讓batch size變大,所以在train_config

batch_size要自己修改一下,要讓資料可以平均分散至每張GPU卡,最簡單的修改方式就是看自己有多少張GPU卡,就乘以多少。

在預設的設定值中,batch_size的值是1,現在我打算用3張GPU卡,所以就改成3


  
  1. train_config: {
  2. batch_size: 3
  3. optimizer {
  4. # [略]
  5. }
  6. # [略]
  7. }

由於batch size變大了,收斂的速度應該也會變快,所以optimizer內的引數應該也是要改的,不過要怎麼改就要看實際情況而定,這個部分就自己看著辦。

改好設定檔之後,接著就可以使用多張GPU 卡平行運算,使用的指令幾乎沒有變,只是加上兩個引數:

  • --num_clones:指定GPU 卡的數量。
  • --ps_tasks:指定引數伺服器的數量。

另外再以CUDA_VISIBLE_DEVICES指定要使用哪幾張GPU卡,完整的指令搞如下:


  
  1. #設定檔路徑
  2. PIPELINE_CONFIG = " object_detection/data/faster_rcnn_resnet101_pets.config "
  3. #訓練結果放置路徑
  4. MY_MODEL_DIR = " my_model "
  5. #使用前三張GPU卡進行訓練
  6. CUDA_VISIBLE_DEVICES = 0 , 1 , 2 python object_detection/train.py \
  7. --logtostderr \
  8. --pipeline_config_path= ${ PIPELINE_CONFIG } \
  9. --train_dir= ${ MY_MODEL_DIR } /train \
  10. --num_clones =3 --ps_tasks=1
  11. #使用第四張GPU卡進行驗證
  12. CUDA_VISIBLE_DEVICES = 3 python object_detection/ eval .py \
  13. --logtostderr \
  14. --pipeline_config_path= ${ PIPELINE_CONFIG } \
  15. --checkpoint_dir= ${ MY_MODEL_DIR } /train \
  16. --eval_dir= ${ MY_MODEL_DIR } / eval

指令執行之後,我們可以使用nvidia-smi來檢視每一張GPU卡的使用情況,看看是不是真的有同時用到三張GPU卡訓練:

nvidia-smi
  
<span style="color:#111111">Tue Dec 26 15:35:34 2017       
+------------------------------------------------- ----------------------------+
| NVIDIA-SMI 384.81 Driver Version: 384.81 |
|-------------------------------+----------------- -----+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+================= =====+======================|
| 0 TITAN Xp Off | 00000000:02:00.0 Off | N/A |
| 44% 72C P2 186W / 250W | 11763MiB / 12189MiB | 84% Default |
+-------------------------------+----------------- -----+----------------------+
| 1 TITAN Xp Off | 00000000:03:00.0 Off | N/A |
| 47% 76C P2 124W / 250W | 11763MiB / 12189MiB | 76% Default |
+-------------------------------+----------------- -----+----------------------+
| 2 TITAN Xp Off | 00000000:83:00.0 Off | N/A |
| 42% 70C P2 131W / 250W | 11763MiB / 12189MiB | 72% Default |
+-------------------------------+----------------- -----+----------------------+
| 3 TITAN Xp Off | 00000000:84:00.0 Off | N/A |
| 23% 41C P2 72W / 250W | 11761MiB / 12189MiB | 51% Default |
+-------------------------------+----------------- -----+----------------------+
                                                                               
+------------------------------------------------- ----------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|================================================= ============================|
| 0 22192 C python 11751MiB |
| 1 22192 C python 11751MiB |
| 2 22192 C python 11751MiB |
| 3 29266 C python 11751MiB |
+------------------------------------------------- ----------------------------+</span>

在訓練的過程中,如果仔細觀察每步的計算速度,應該會發現使用一張GPU 卡的速度會跟使用多張GPU 卡差不多。這是單張GPU 卡的速度:

單張GPU 卡計算速度

這是同時使用三張GPU 卡的計算速度:

三張GPU 卡計算速度

速度會差不多是正常的(理論上多張GPU 卡運算的速度會變慢一點點),因為兩邊的batch size 不同,若每步的計算時間差不多,就表示實際的計算速度有增加。

 

原文:https://blog.gtwang.org/programming/tensorflow-object-detection-api-multiple-gpu-parallel-training/

 

本篇記錄如何使用多張GPU 顯示卡,加速TensorFlow Object Detection API 模型訓練的過程。