Skip to main content
  • Place orders quickly and easily
  • View orders and track your shipping status
  • Enjoy members-only rewards and discounts
  • Create and access a list of your products
  • Manage your Dell EMC sites, products, and product-level contacts using Company Administration.

在搭載 Nvidia V100 GPU 的 Dell C4140 上訓練 CheXNet 的最佳化技巧

Summary: 在 Dell EMC C4140 伺服器中使用 Nvidia V100 SXM2 GPU,實現最大效能分散水平式擴充訓練的最佳實務。

This article may have been automatically translated. If you have any feedback regarding its quality, please let us know using the form at the bottom of this page.

Article Content


Symptoms

文章作者:Rakshith Vasudev 和 John Lockman - HPC AI Innovation Lab,2019年 10 月

Cause

  -

Resolution

所述,CheXNet 是利用 DenseNet 的人工智慧放射師助理模型,可從提供的胸部 X 光影像中識別多達 14 種病理特性。我們探索了多種方法,以水平式擴充訓練可執行等同或優於原始 ChexNet-121 的模型,其中 ResNet-50 證明了強大的擴充能力和更高的訓練準確度 (陽性 AUROC)。作者在 CPU 系統上示範了擴充能力,但我們也對透過並行 GPU 加速訓練程式十分有興趣。在本文中,我們將說明在 Dell EMC C4140 伺服器中使用 Nvidia V100 SXM2 GPU,實現最大效能分散水平式擴充訓練的最佳實務。Dell EMC PowerEdge C4140 具備採用 SXM2 組態的四個 NVIDIA V100 GPU,可提供優異的密度和效能


 

硬體組態: 軟體組態:
  • 4 個 PowerEdge C4140
  • 4 個 Nvidia V100 32GB SXM2
  • 2 個 20 核心 Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz
  • 384 GB RAM,DDR4 2666MHz
  • 1 個 Mellanox EDR HCA
  • Lustre 檔案系統
  • 深度學習架構:tensorflow-gpu
  • 架構版本:1.12.0
  • Horovod 版本:0.16.4
  • MPI 版本:4.0.0,支援 cuda 和 ucx
  • CUDA 版本:10.1.105
  • CUDNN 版本:7.6.0
  • NCCL 版本:2.4.7
  • Python 版本:3.6.8
  • 作業系統和版本:RHEL 7.4


 


對於從加速器獲得最大效能來說,資料管道至關重要:



 

什麼是 tf 資料,為何您應該盡力運用它?

 

隨著新的運算裝置 (如 GPU 和 TPU) 能以越來越快的速度訓練神經網路,CPU 的處理能力很容易成為瓶頸。tf.data API 可為使用者提供建置模塊,設計能有效運用 CPU 的輸入管道,最佳化 ETL 程序的每個步驟。

 

若要執行訓練步驟,您必須先擷取並轉換訓練資料,然後再傳送至在加速器上執行的模型。然而,在原生的不同步實作中,當 CPU 在準備資料時,加速器只能閒置等待。反之,當加速器在訓練模型時,CPU 便會進入閒置。因此,訓練步驟時間是 CPU 預先處理時間和加速器訓練時間的總和

 

管道可重疊訓練步驟中的預先處理和模型運行。加速器執行訓練步驟 N 時,CPU 會準備步驟 N+1 的資料。如此可將擷取和轉換資料所需的訓練步驟時間縮至最短 (相較於加總)。

 

在沒有使用管道的情況下,CPU 和 GPU/TPU 會有很長的閒置時間:

SLN318898_en_US__1Sequantial execution
圖 1:逐次執行會經常使 GPU 處於閒置狀態

 

使用管道時,閒置時間會大幅減少:

SLN318898_en_US__2Pipelining overlaps
圖 2:管道重疊 CPU 和 GPU 的使用率,將 GPU 使用率最大化

 

tf.data API 透過 tf.data.Dataset.prefetch 轉換,提供一個軟體管道機制,可用於分離資料的耗用時間與產生時間。具體而言,這樣的轉換會使用背景執行緒和內部緩衝區,在要求之前預先擷取輸入資料集的元素。

 

在此取得更多資訊:https://www.tensorflow.org/guide/performance/datasets

 

當使用者遵循由 tensorflow 提供的準則操作時,可能會取得與此類似的資料管道 (舊方法):
https://github.com/dellemc-hpc-ai/code-examples/blob/master/cheXNet-snippets/old_approach.py

 

在此方法 (也稱為舊方法) 中,tf 資料管道會執行下列操作 (假設胸部 x 光資料集為 TFRecords 順序):

 

  1. 取得絕對檔案名稱清單。
  2. 使用 TFRecordDataset() 從檔案名稱清單建立資料集
  3. 建立新的資料集,透過預先處理載入和格式化影像。
  4. 分裂資料集。
  5. 在訓練時切換資料集。
  6. 重複資料集。
  7. 大量執行資料集。
  8. 預先擷取資料集的 batch_size。


 

不過,這不是效能最高的程式碼。這會導致停滯和頻繁出現 0% gpu 使用率。基本上,這無法有效地運用加速器。

為了正確設定 tf 資料管道,我們特別遵循 tensorflow 官方模型針對 ResNet 的專用方法。  舊方法與新方法之間的差異,在於資料管道在傳送至模型之前的設定方式。

 

新方法的外觀與此類似:
https://github.com/dellemc-hpc-ai/code-examples/blob/master/cheXNet-snippets/new_approach.py

 

TensorFlow 官方模型方法也稱為新方法,如下所示:

 

  1. 取得絕對檔案名稱清單。
  2. 使用 from_tensor_slices() 從檔案名稱清單建立資料集
  3. 分裂作業會提前完成。
  4. 資料集會在訓練期間切換。
  5. 然後資料集會進行平行交錯,也就是交錯和處理多個檔案 (由 cycle_length 定義),轉換這些檔案以建立 TFRecord 資料集。
  6. 隨即會預先擷取資料集。buffer_size 定義會預先擷取多少記錄,這通常是工作的最小 batch_size。
  7. 資料集會再次切換。切換的詳細資料由 buffer_size 控制。
  8. 接著會重複資料集。  它會重複資料集,直到 num_epochs 進行訓練。
  9. 資料集會根據同時分析 tf 記錄檔案的 map_and_batch(),進而預先處理影像並將其批次處理。
  10. 預先處理的影像將準備就緒為資料集,且可供再次預先擷取。


 

以下使用 TF 官方模型,比較新舊方法的效能。

SLN318898_en_US__3image(12053)
圖 3:採用新方法,可預期獲得更近線性擴充的效能。

 

正如所見,出現了大規模的效能差異,而舊方法完全沒有擴充成效。GPU 的使用率經常很低,或完全沒有使用,導致效能低落。在單一 GPU 上提高運算效率,在通訊處理良好的狀況下,便可讓多個節點上的多個 GPU 運算更有效率。
以快速的通訊速度,讓 CPU 平行執行預先處理、在記憶體中預先擷取處理資料,並透過 GPU 處理繁重的矩陣乘法作業,這也是讓此新方法在擴充多個節點時更具吸引力的另一個層面。


 


為了達到最佳效能所需要考慮的其他技術:



 

擁有正確的環境非常重要:

 

執行工作的環境和工作一樣重要,擁有正確的程式庫/模組非常重要,因為這會影響訓練的效能。此外,使用與最新 CUDA 相關的程式庫亦可協助提升效能。

如果您沒有可正常運作的環境設定,請按照此教學進行安裝。



 

使用正確的 MPI 繫結參數:

 

MPI 是一種通訊程式庫,可協助分派工作。探索到不同的繫結和對應參數選項,且 C4140 的最佳參數則是由插槽對應。建議設定如下:
mpirun --map-by socket -np x python pyfile.py --pyoptions



 

確保每個 GPU 上僅執行一個程序:

 

如果單一 gpu 上運作超過一個程序,那麼它們很可能彼此爭搶 GPU 資源、佔用 GPU 記憶體,導致效能無法處理每個批次的影像,使 GPU 效能受到影響。已探索到 Tensorflow 1.13.1,但當時似乎有錯誤。它會在每個 GPU 啟動一個以上的程序。


 

摘要:

  • 正確設定資料管道是提升效能的關鍵。
  • 設定正確的環境對提升效能來說十分實用。
  • 使用正確的 MPI 繫結參數有助於提升效能。
  • 在未充分運用 GPU 時分析並修正瓶頸。


 


Article Properties


Affected Product

High Performance Computing Solution Resources, Poweredge C4140

Last Published Date

17 Sep 2021

Version

5

Article Type

Solution