跳到主要內容區塊

計資中心電子報C&INC E-paper

技術論壇

深度學習與多GPU硬體加速之NVLink
  • 卷期:v0067
  • 出版日期:2023-12-20

作者:周秉誼 / Tomofun資深技術經理


當OpenAI的ChatGPT模型問世,將自然語言處理推向一個全新的世代,深度學習也進入各大科技巨頭間大型語言模型的戰國時代,然而想要訓練大型語言模型,硬體加速是不可少的,因此也開啟了高效能計算資源的軍備競賽。在各種硬體加速之中,最廣泛被使用在深度學習的硬體,就是NVIDIA的GPU。本文將介紹為什麼要用多個GPU進行模型訓練,及在多個NVIDIA GPU之間提高資料傳輸效率的NVLink匯流排。

 

前言

當OpenAI的ChatGPT模型問世,將自然語言處理(Nature Language Processing)推向一個全新的世代,深度學習也進入各大科技巨頭間大型語言模型(LLM, Large Language Model)的戰國時代,然而想要訓練大型語言模型,硬體加速是不可少的,因此也開啟了高效能計算(HPC, High Performance Computing)資源的軍備競賽。在各種硬體加速之中,最廣泛被使用在深度學習的硬體,就是NVIDIA的GPU。本文將介紹為什麼要用多個GPU進行模型訓練,及在多個NVIDIA GPU之間提高資料傳輸效率的NVLink匯流排。

 

訓練大型語言模型的挑戰

大型語言模型是當代深度學習領域的最前緣,其中的各種應用潛力,讓許多科技公司、研究機構趨之若鶩,然而大型語言模型也帶來許多計算上的新挑戰。首先,大型語言模型動輒數十億、甚至上千億的參數(parameter)數量,使模型的訓練需要大量的計算資源,如果不使用大規模的GPU進行硬體加速,很難在有限時間中完成,就算利用GPU進行硬體加速,也可能要數天或數個星期的計算。另外,龐大的參數量也代表大量的記憶體空間需求,使得模型無法放入單一GPU的記憶體空間,而需要將記憶體需求分散到多個GPU之中。

以Meta公司發表的大型語言模型LLaMA模型為例,LLaMA模型有多個不同大小的版本,包括7B、13B、33B、及65B。最小的7B版本有七十億個浮點數(floating point)參數,如果不進行特殊處理,光模型本身就需要超過28GB的GPU記憶體空間才能存放,更不用說進行模型訓練時,需要記錄每一階層的結果和來計算梯度更新各個參數,而同一batch中可能會多達數十筆訓練資料同時進行計算,因此模型訓練時的記憶體使用量往往是模型本身的數倍以上。然而最頂級的消費級GPU,如GeForce RTX 4090,最高的記憶體空間也只有24GB,最頂級的高效能計算級GPU,如Tesla H100,也只有80GB。因此使用多個GPU協同進行訓練和計算是不可避免的。當多個GPU協同計算時,GPU之間的資料交換就是最大的瓶頸點。

 

NVLink

NVLink是NVIDIA開發、用於高速資料傳輸的匯流排,和一般PCIe(PCI Express)匯流排不同的是,每一個GPU可以同時使用多個點對點連線(Point to point connection)來和不同的GPU進行資料交換,因此當單一系統中有數個GPU時,也不需要透過系統的主記憶體和中央處理器,提供各個GPU兩兩間獨立的資料傳輸效能,大幅提升大型語言模型訓練的效率。

和PCIe相比,最新的PCIe 6.0 16x的資料傳輸速率(Throughput)也只有121GB/s,GeForce RTX 4090使用的PCIe 4.0 16x的資料傳輸速率則只有31.5GB/s。而GeForce RTX 3090使用NVLink 3.0的資料傳輸速率就高達112.5GB/s,A100使用NVLink 3.0的資料傳輸速率更高達600GB/s。

nvidia-smi指令的nvlink功能可以呈現NVLink相關資訊,搭配-s參數可以呈現目前NVLink的狀態,搭配-c參數可以呈現NVLink的功能。想了解兩兩GPU之間的資料傳輸模式,可以使用nvidia-smi指令的topo功能搭配-m參數,將會呈現兩兩GPU直接傳輸的情況,其中NV開頭就代表GPU之間是使用NVLink,PIX代表GPU間透過單一個PCIe橋接(PCIe bridge),而NODE則不止PCIe橋接還得透過不同NUMA(Non-uniform memory access)節點,以資料交換的效率來說,NV是最好的,而NODE是最差的。想要測試系統中兩兩GPU之間實際資料傳輸速率可以使用NVIDIA提供的CUDA Samples中的p2pBandwidthLatencyTest工具,在測試結果中可以看到使用NVLink點對點連線時,在資料傳輸頻寬(Bandwidth)和延遲(Latency)性能上都有顯著提升,在雙向(Bidirectional)傳輸時也可以得到雙倍的頻寬,如果沒有使用NVLink點對點連線在雙向傳輸時也只有單向(Unidirectional)傳輸的頻寬。

 

$ nvidia-smi nvlink -s -i 0

GPU 0: Tesla V100-SXM2-16GB (UUID: GPU-9210bb18-58c1-452b-9d39-5c7fdc6d8cb3)

         Link 0: 25.781 GB/s

         Link 1: 25.781 GB/s

         Link 2: 25.781 GB/s

         Link 3: 25.781 GB/s

         Link 4: 25.781 GB/s

         Link 5: 25.781 GB/s

 
 
圖1. 使用nvidia-smi的nvlink功能查看NVLink狀態

 

$ nvidia-smi nvlink -c -i 0

GPU 0: Tesla V100-SXM2-16GB (UUID: GPU-9210bb18-58c1-452b-9d39-5c7fdc6d8cb3)

         Link 0, P2P is supported: true

         Link 0, Access to system memory supported: true

         Link 0, P2P atomics supported: true

         Link 0, System memory atomics supported: true

         Link 0, SLI is supported: false

         Link 0, Link is supported: false

         Link 1, P2P is supported: true

         Link 1, Access to system memory supported: true

         Link 1, P2P atomics supported: true

         Link 1, System memory atomics supported: true

         Link 1, SLI is supported: false

         Link 1, Link is supported: false

         Link 2, P2P is supported: true

         Link 2, Access to system memory supported: true

         Link 2, P2P atomics supported: true

         Link 2, System memory atomics supported: true

         Link 2, SLI is supported: false

         Link 2, Link is supported: false

 

圖2. 使用nvidia-smi的nvlink功能查看NVLink功能

 

$ nvidia-smi topo -m

     GPU0  GPU1  GPU2  GPU3  NIC0  NIC1  CPU Affinity NUMA Affinity

GPU0   X    NV2   NV2   NV2   NODE  NODE  0,2,4,6,8,10    0

GPU1  NV2    X    NV2   NV2   NODE  NODE  0,2,4,6,8,10    0

GPU2  NV2   NV2    X    NV2   NODE  NODE  0,2,4,6,8,10    0

GPU3  NV2   NV2   NV2    X    NODE  NODE  0,2,4,6,8,10    0

NIC0  NODE  NODE  NODE  NODE   X    PIX             

NIC1  NODE  NODE  NODE  NODE  PIX    X

 

圖3. 使用nvidia-smi的topo功能查看兩兩GPU連接介面

 

Unidirectional P2P=Disabled Bandwidth Matrix (GB/s)

   D\D     0      1      2      3 

     0 779.69  10.08  10.10  10.05 

     1  10.12 781.25  10.10  10.09 

     2  10.13  10.15 780.86  10.09 

     3  10.14  10.14  10.15 780.08 

Unidirectional P2P=Enabled Bandwidth (P2P Writes) Matrix (GB/s)

   D\D     0      1      2      3 

     0 741.22  48.48  48.48  48.49 

     1  48.48 779.30  48.48  48.48 

     2  48.47  48.48 779.69  48.48 

     3  48.48  48.48  48.48 779.30 

Bidirectional P2P=Disabled Bandwidth Matrix (GB/s)

   D\D     0      1      2      3 

     0 746.36  10.47  10.57  10.45 

     1  10.46 780.08  10.51  10.51 

     2  10.49  10.46 780.66  10.47 

     3  10.49  10.57  10.45 780.86 

Bidirectional P2P=Enabled Bandwidth Matrix (GB/s)

   D\D     0      1      2      3 

     0 773.90  96.91  96.91  96.90 

     1  96.85 778.53  96.91  96.90 

     2  96.91  96.91 779.89  96.91 

     3  96.90  96.91  96.91 780.08 

P2P=Disabled Latency Matrix (us)

   GPU     0      1      2      3 

     0   1.72  47.57  16.50  16.49 

     1  16.50   1.60  16.50  16.46 

     2  16.46  16.46   1.59  16.47 

     3  16.46  16.45  16.45   1.69 

 

   CPU     0      1      2      3 

     0   2.86   9.10   9.05   9.03 

     1   9.07   2.69   8.95   8.92 

     2   8.90   9.01   2.68   8.93 

     3   9.09   8.93   8.87   2.64 

P2P=Enabled Latency (P2P Writes) Matrix (us)

   GPU     0      1      2      3 

     0   1.81   1.88   1.87   1.89 

     1   1.89   1.79   1.90   1.89 

     2   1.89   1.90   1.71   1.90 

     3   1.89   1.90   1.88   1.82 

 

   CPU     0      1      2      3 

     0   2.76   2.34   2.33   2.38 

     1   2.56   2.76   2.31   2.42 

     2   2.35   2.33   2.76   2.30 

     3   2.39   2.44   2.37   2.84

 

圖4. 使用p2pBandwidthLatencyTest測試GPU間頻寬

 

結語

深度學習已進入大型語言模型的戰國時代,為了有效訓練大型語言模型,也開啟了高效能計算資源的軍備競賽。想要更有效的利用NVIDIA GPU進行硬體加速,NVLink的高速資料傳輸也是不可或缺的重要功能,雖然NVLink和PCIe的資料傳輸速率在帳面數字上只有數倍的差異,但在長達數天甚至數個星期的大型語言模型訓練工作中,會產生非常巨大的效能差別。在掌握NVLink的特性後,才能有效利用GPU能力,縮短訓練周期,加速大型語言模型的開發。