Centos環境下使用tensorflow2.0分佈式訓練

Centos環境下使用tensorflow2.0分佈式訓練

單機多卡訓練

由於一臺服務器上配置多個顯卡,而在運行tensorflow代碼時默認調用第一張顯卡,使得其餘顯卡處於空閒狀態,無法充分利用顯卡造成速度過慢,內存過小等問題。
在tensorflow2.0中tf.distribute.MirroredStrategy可支持多個 GPU 在同一臺主機上訓練,使用這種策略時,我們只需實例化一個 MirroredStrategy 策略:

batch_size_per_replica = 16
strategy = tf.distribute.MirroredStrategy()
print('Number of devices: %d' % strategy.num_replicas_in_sync)  # 輸出設備數量
batch_size = batch_size_per_replica * strategy.num_replicas_in_sync

雖然機器依然具有 2 塊顯卡,但程序不使用分佈式的設置,直接進行訓練,Batch Size 設置爲 32。使用單機四卡時,測試總 Batch Size 爲 32(分發到單臺機器的 Batch Size 爲 16)和總 Batch Size 爲 64(分發到單臺機器的 Batch Size 爲 32)兩種情況。
MirroredStrategy 過程簡介

  • 訓練開始前,該策略在所有 N 個計算設備上均各複製一份完整的模型;
    每次訓練傳入一個批次的數據時,將數據分成 N 份,分別傳入 N 個計算設備(即數據並行);
  • N 個計算設備使用本地變量(鏡像變量)分別計算自己所獲得的部分數據的梯度;
  • 使用分佈式計算的 All-reduce 操作,在計算設備間高效交換梯度數據並進行求和,使得最終每個設備都有了所有設備的梯度之和;
  • 使用梯度求和的結果更新本地變量(鏡像變量);
  • 當所有設備均更新本地變量後,進行下一輪訓練(即該並行策略是同步的)。
  • 默認情況下,TensorFlow 中的 MirroredStrategy 策略使用 NVIDIA NCCL 進行 All-reduce 操作。
    總的來說:數據並行,模型並行
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章