在進入大模型時代后,大模型發(fā)展已是人工智能的核心,但訓練大模型實際上是一項比較復雜的工作,因為它需要大量的 GPU 資源和較長的訓練時間。
此外,由于單個 GPU 工作線程的內(nèi)存有限,并且許多大型模型的大小已經(jīng)超出了單個 GPU 的范圍。所以就需要實現(xiàn)跨多個 GPU 的模型訓練,這種訓練方式就涉及到了分布式通信和 NVLink。
當談及分布式通信和 NVLink 時,我們進入了一個引人入勝且不斷演進的技術領域,下面我們將簡單介紹分布式通信的原理和實現(xiàn)高效分布式通信背后的技術 NVLink 的演進。
分布式通信是指將計算機系統(tǒng)中的多個節(jié)點連接起來,使它們能夠相互通信和協(xié)作,以完成共同的任務。而 NVLink 則是一種高速、低延遲的通信技術,通常用于連接 GPU 之間或連接 GPU 與其他設備之間,以實現(xiàn)高性能計算和數(shù)據(jù)傳輸。
分布式并行
當前深度學習進入了大模型時代,即 Foundation Models。大模型,顧名思義主打的就是“大”。主要包括以下幾個方面:
數(shù)據(jù)規(guī)模大,大模型通常采用自監(jiān)督學習方法,減少了數(shù)據(jù)標注,降低訓練研發(fā)成本,而大量的數(shù)據(jù)又可以提高模型的泛化能力和性能。
參數(shù)規(guī)模大,隨著模型參數(shù)規(guī)模的不斷增大,模型可以更好地捕捉數(shù)據(jù)中的復雜關系和模式,有望進 一步突破現(xiàn)有模型結(jié)構(gòu)的精度局限。
算力需求大,大規(guī)模的數(shù)據(jù)和參數(shù),使得模型無法在單機上運行和計算,這一方面要求計算硬件的不斷進步,另一方面也要求 AI 框架具有分布式并行訓練的能力。
所以說,為了解決上述問題我們需要引入分布式并行策略。
數(shù)據(jù)并行
數(shù)據(jù)并行(Data Parallel, DP)是一種常用的深度學習訓練策略,它通過在多個 GPU 上分布數(shù)據(jù)來實現(xiàn)并行處理。在數(shù)據(jù)并行的框架下,每個 GPU(或稱作工作單元)都會存儲模型的完整副本,這樣每個 GPU 都能獨立地對其分配的數(shù)據(jù)子集進行前向和反向傳播計算。
數(shù)據(jù)并行的工作流程:
參數(shù)同步:在開始訓練之前,所有的工作單元同步模型參數(shù),確保每個 GPU 的模型副本是相同的。
分配數(shù)據(jù):訓練數(shù)據(jù)被劃分為多個批次,每個批次進一步被分割成多個子集,每個 GPU 負責處理一個數(shù)據(jù)子集。
獨立計算梯度:每個 GPU 獨立地對其數(shù)據(jù)子集進行前向傳播和反向傳播,計算出相應的梯度。
梯度聚合:計算完成后,所有工作單元的梯度需要被聚合起來。這通常通過網(wǎng)絡通信來實現(xiàn),比如使用 All-Reduce 算法,它允許在不同的 GPU 間高效地計算梯度的平均值。
更新參數(shù):一旦梯度被平均,每個 GPU 使用這個平均梯度來更新其模型副本的參數(shù)。
重復過程:這個過程在每個數(shù)據(jù)批次上重復進行,直到模型在整個數(shù)據(jù)集上訓練完成。
數(shù)據(jù)并行的優(yōu)勢和挑戰(zhàn):
數(shù)據(jù)并行可以允許訓練過程水平擴展到更多的 GPU 上,從而加速訓練。其優(yōu)勢是實現(xiàn)簡單,而且可以靈活的調(diào)整工作單元的數(shù)量來適應可用的硬件資源,當前多種深度學習框架提供了內(nèi)置支持。
不過數(shù)據(jù)并行隨著并行的 GPU 數(shù)量增加,需要存儲更多的參數(shù)副本,這會導致顯著的內(nèi)存開銷。此外,梯度聚合步驟需要在 GPU 之間同步大量數(shù)據(jù),這可能成為系統(tǒng)的瓶頸,特別是當工作單元的數(shù)量增多時。
異步同步方案在數(shù)據(jù)并行中的應用:
為了解決數(shù)據(jù)并行中的通信瓶頸問題,研究者們提出了各種異步同步方案。在這些方案中,每個 GPU 工作線程可以獨立于其他線程處理數(shù)據(jù),無需等待其他工作線程完成其梯度計算和同步。這種方法可以顯著降低因通信導致的停滯時間,從而提高系統(tǒng)的吞吐量。
其實現(xiàn)原理為,在梯度計算階段,每個 GPU 在完成自己的前向和反向傳播后,不等待其他 GPU,立即進行梯度更新。其次,每個 GPU 在需要時讀取最新可用的全局權重,而不必等待所有 GPU 達到同步點。
然而,這種方法也有其缺點。由于不同 GPU 上的模型權重可能不同步,工作線程可能會使用過時的權重進行梯度計算,這可能導致統(tǒng)計效率的降低,即精度上無法嚴格保證。
模型并行
模型并行(Model Parallel, MP)通常是指在多個計算節(jié)點上分布式地訓練一個大型的深度學習模型,其中每個節(jié)點負責模型的一部分。這種方法主要用于解決單個計算節(jié)點無法容納整個模型的情況。模型并行可以進一步細分為幾種策略,包括但不限于流水并行(Pipeline Parallel, PP)和張量并行(Tensor Parallel, TP)。
模型并行是一種解決單個計算節(jié)點無法容納模型所有參數(shù)的方法。不同于數(shù)據(jù)并行,其中每個節(jié)點處理完整模型的不同數(shù)據(jù)子集,模型并行將模型的不同部分分布到多個節(jié)點上,每個節(jié)點只負責模型的一部分參數(shù)。這樣可以有效降低單個節(jié)點的內(nèi)存需求和計算負載。
在模型并行中,深度神經(jīng)網(wǎng)絡的多個層可以被分割并分配給不同的節(jié)點。例如,我們可以將連續(xù)的幾層分為一組,然后將這組層分配給一個節(jié)點。這種分層策略使得每個節(jié)點只處理分配給它的一部分模型參數(shù),減少了內(nèi)存和計算資源的使用。
然而,簡單的模型并行實現(xiàn)可能會導致顯著的等待時間和計算資源的低效利用,因為具有順序依賴的層需要等待前一層的計算完成。
為了減少這種效率損失,流水并行(Pipeline Parallel, PP)被提出。在流水并行中,一個大的數(shù)據(jù)批次被分成多個小的微批次(micro-batches),每個微批次的處理速度應該成比例地更快,并且每個 Worker 一旦可用就開始處理下一個微批次,從而加快流水的執(zhí)行速度。如果有足夠的微批次,則可以充分利用 Worker(GPU 卡),并在步驟開始和結(jié)束時將空閑時間“氣泡”降至最低。
在流水并行中,每個節(jié)點按順序處理不同的模型層,微批次在節(jié)點間流動,就像在流水線上一樣。梯度在所有微批次處理完畢后被平均,然后更新模型參數(shù)。
流水并行性按層“垂直”分割模型。我們還可以“水平”分割層內(nèi)的某些操作,這通常稱為張量并行訓練(Tensor Parallel, TP)來進一步提高效率。
在張量并行中,模型中的大型矩陣乘法操作被分割成更小的部分,這些部分可以在多個計算節(jié)點上并行執(zhí)行。例如,在 Transformer 模型中,矩陣乘法是一個主要的計算瓶頸,通過張量并行,我們可以將權重矩陣分割成更小的塊,每個塊在不同的節(jié)點上并行處理。
在實踐中,模型并行可以包括流水并行和張量并行的組合。一個節(jié)點可以負責模型的一部分(模型并行),同時處理不同的微批次(流水并行),并且在這個節(jié)點內(nèi)部,大型的矩陣運算可以進一步在多個處理器間分割(張量并行)。這樣的組合可以充分利用分布式計算資源,提高大規(guī)模模型訓練的效率。
AI 框架分布式
對于模型訓練來說,不管是哪一種并行策略其本質(zhì)上包括將模型進行“縱向”或“橫向”的切分,然后將單獨切分出來的放在不同的機器上進行計算,來充分的利用計算資源。
在現(xiàn)在的 AI 框架中,通常都是采取的多種策略的混合并行來加速模型訓練的。而要支持這種多種并行策略的訓練模型,就需要涉及不同“切分”的模型部分如何通信。
AI 訓練圖切分
如上圖所示,在 AI 計算框架中,我們需要將原來的一個網(wǎng)絡模型進行切分,將其分布在不同的機器上進行計算,這里通過在模型中插入 Send 和 Recv 節(jié)點來進行通信。
除此以外,在分布式的模型訓練中,由于模型的切分我們也需要將模型參數(shù)放在不同模型部分所在的機器上,在訓練過程中我們會涉及到不同模型節(jié)點參數(shù)的交互和同步,那也需要跨節(jié)點的同步數(shù)據(jù)和參數(shù),這種就是分布式訓練。
以上我們介紹的都是軟件層面的分布式策略和算法,接下來我們來看下通訊的硬件上是如何實現(xiàn)的。
通訊硬件
在 AI 訓練中,分布式通信是至關重要的,特別是在處理大型模型和海量數(shù)據(jù)時。分布式通信涉及不同設備或節(jié)點之間的數(shù)據(jù)傳輸和協(xié)調(diào),以實現(xiàn)并行計算和模型參數(shù)同步,如下圖所示。
GPU 服務結(jié)構(gòu)
在機器內(nèi)通信方面,有幾種常見的硬件:
共享內(nèi)存:多個處理器或線程可以訪問相同的物理內(nèi)存,這樣它們可以通過讀寫內(nèi)存中的數(shù)據(jù)來進行通信。共享內(nèi)存適用于在同一臺機器上進行并行計算的情況。
PCIe(Peripheral Component Interconnect Express):PCIe 總線是連接計算設備的一種標準接口,通常用于連接 GPU、加速器卡或其他外部設備。通過 PCIe 總線,數(shù)據(jù)可以在不同的計算設備之間傳輸,以實現(xiàn)分布式計算。
NVLink:NVLink 是一種由 NVIDIA 開發(fā)的高速互連技術,可實現(xiàn) GPU 之間的直接通信。NVLink 可以提供比 PCIe 更高的帶寬和更低的延遲,適用于要求更高通信性能的任務。
在機器間通信方面,常見的硬件包括:
TCP/IP 網(wǎng)絡:TCP/IP 協(xié)議是互聯(lián)網(wǎng)通信的基礎,它允許不同機器之間通過網(wǎng)絡進行數(shù)據(jù)傳輸。在分布式計算中,可以使用 TCP/IP 網(wǎng)絡進行機器間的通信和數(shù)據(jù)傳輸。
RDMA(Remote Direct Memory Access)網(wǎng)絡:RDMA 是一種高性能網(wǎng)絡通信技術,它允許在不涉及 CPU 的情況下直接從一個內(nèi)存區(qū)域傳輸數(shù)據(jù)到另一個內(nèi)存區(qū)域。RDMA 網(wǎng)絡通常用于構(gòu)建高性能計算集群,提供低延遲和高吞吐量的數(shù)據(jù)傳輸。
在了解在硬件之后,實現(xiàn)通信不可或缺的是提供集合通信功能的庫。其中,最常用的集合通信庫之一是 MPI(Message Passing Interface),在 CPU 上被廣泛應用。而在 NVIDIA GPU 上,最常用的集合通信庫則是 NCCL(NVIDIA Collective Communications Library)。
NVLink&NVSwitch
如上圖所示,通過 NCCL 庫,我們可以利用 NVLink 或 NVSwitch 將不同的 GPU 相互連接起來。NCCL 在算法層面提供了外部 API,通過這些 API,我們可以方便地進行跨多個 GPU 的集合通信操作。NCCL 的 API 覆蓋了常見的集合通信操作,如廣播、歸約、全局歸約、全局同步等,為開發(fā)者提供了豐富而高效的并行計算工具。
集合通信
集合通信(Collective Communications)是一種涉及進程組中所有進程的全局通信操作。它包括一系列基本操作,如發(fā)送(send)、接收(receive)、復制(copy)、組內(nèi)進程柵欄同步(Barrier),以及節(jié)點間進程同步(signal + wait)。這些基本操作經(jīng)過組合可以構(gòu)成一組通信模板,也稱為通信原語。例如,1 對多的廣播(broadcast)、多對 1 的收集(gather)、多對多的收集(all-gather)、1 對多的發(fā)散(scatter)、多對 1 的規(guī)約(reduce)、多對多的規(guī)約(all-reduce)、組合的規(guī)約與發(fā)散(reduce-scatter)、多對多的全互連(all-to-all)等。下面我們簡單介紹幾個。
集合通信
Gather 操作屬于多對 1 的通信原語,具有多個數(shù)據(jù)發(fā)送者,一個數(shù)據(jù)接收者,可以在集群內(nèi)把多個節(jié)點的數(shù)據(jù)收集到一個節(jié)點上,他的反向操作對應 Scatter。
Broadcast 屬于 1 對多的通信原語,一個數(shù)據(jù)發(fā)送者,多個數(shù)據(jù)接收者,可以在集群內(nèi)把一個節(jié)點自身的數(shù)據(jù)廣播到其他節(jié)點上。如上圖所示,當主節(jié)點 0 執(zhí)行 Broadcast 時,數(shù)據(jù)即從主節(jié)點 0 被廣播至其他節(jié)點。
Scatter 是數(shù)據(jù)的 1 對多的分發(fā),它將一張 GPU 卡上的數(shù)據(jù)進行分片再分發(fā)到其他所有的 GPU 卡上。
AllReduce 屬于多對多的通信原語,具有多個數(shù)據(jù)發(fā)送者,多個數(shù)據(jù)接收者,其在集群內(nèi)的所有節(jié)點上都執(zhí)行相同的 Reduce 操作,可以將集群內(nèi)所有節(jié)點的數(shù)據(jù)規(guī)約運算得到的結(jié)果發(fā)送到所有的節(jié)點上。簡單來說,AllReduce 是數(shù)據(jù)的多對多的規(guī)約運算,它將所有的 GPU 卡上的數(shù)據(jù)規(guī)約(比如 SUM 求和)到集群內(nèi)每張 GPU 卡上。
AllGather 屬于多對多的通信原語,具有多個數(shù)據(jù)發(fā)送者,多個數(shù)據(jù)接收者,可以在集群內(nèi)把多個節(jié)點的數(shù)據(jù)收集到一個主節(jié)點上(Gather),再把這個收集到的數(shù)據(jù)分發(fā)到其他節(jié)點上。
AllToAll 操作每一個節(jié)點的數(shù)據(jù)會 Scatter 到集群內(nèi)所有節(jié)點上,同時每一個節(jié)點也會 Gather 集群內(nèi)所有節(jié)點的數(shù)據(jù)。AllToAll 是對 AllGather 的擴展,區(qū)別是 AllGather 操作中,不同節(jié)點向某一節(jié)點收集到的數(shù)據(jù)是相同的,而在 AllToAll 中,不同的節(jié)點向某一節(jié)點收集到的數(shù)據(jù)是不同的。
NVLlink 與 NVSwitch 發(fā)展
NVLink 和 NVSwitch 是英偉達推出的兩項革命性技術,它們正在重新定義 CPU 與 GPU 以及 GPU 與 GPU 之間的協(xié)同工作和高效通信的方式。
NVLink 是一種先進的總線及其通信協(xié)議。NVLink 采用點對點結(jié)構(gòu)、串列傳輸,用于中央處理器(CPU)與圖形處理器(GPU)之間的連接,也可用于多個圖形處理器(GPU)之間的相互連接。
NVSwitch:是一種高速互連技術,同時作為一塊獨立的 NVLink 芯片,其提供了高達 18 路 NVLink 的接口,可以在多個 GPU 之間實現(xiàn)高速數(shù)據(jù)傳輸。
這兩項技術的引入,為 GPU 集群和深度學習系統(tǒng)等應用場景帶來了更高的通信帶寬和更低的延遲,從而提升了系統(tǒng)的整體性能和效率。
NVLink 發(fā)展
NVLink 發(fā)展
如上圖所示,從 Pascal 架構(gòu)到 Hoppe 架構(gòu),NVLink 已經(jīng)經(jīng)過了四代的發(fā)展演進。在 2024 年的 GTC 大會上,NVIDIA 發(fā)布了 Blackwell 架構(gòu),其中 NVLink 再次更新,發(fā)布了第五代 NVLink,其中互聯(lián)帶寬達到了 1800GB/s。
如上圖所示,每一層 NVLink 的更新,其每個 GPU 的互聯(lián)帶寬都是在不斷的提升,其中 NVLink 之間能夠互聯(lián)的 GPU 數(shù),也從第一代的 4 路到第四代的 18 路。最新的 Blackwell 架構(gòu)其最大互聯(lián) GPU 數(shù),并未增加。
NVLink 發(fā)展
從上圖可以看出,在 P100 中每一個 NVLink 只有 40GB/s,而從第二代 V100 到 H100 每一個 NVLink 鏈路都有 50GB/s,通過增加了鏈路的數(shù)量使得整體帶寬增加。
NVSwitch 發(fā)展
NVSwitch 發(fā)展
如上圖所示,NVSwitch 技術從 Volta 架構(gòu)到 Hopper 架構(gòu),經(jīng)歷了三代的演進與發(fā)展。在每一代中,每個 GPU 互聯(lián)的芯片模組數(shù)量保持不變,都為 8 個,這意味著互聯(lián)的基本結(jié)構(gòu)保持了穩(wěn)定性和一致性。隨著 NVLink 架構(gòu)的升級,GPU 到 GPU 之間的帶寬卻實現(xiàn)了顯著的增長,因為 NVSwitch 就是 NVLink 具體承載的芯片模組,從 Volta 架構(gòu)的 300GB/s 增加到了 Hopper 架構(gòu)的 900GB/s。
下面我們來看下 NVLink 與 NVSwitch 在服務器中的關系。
NVSwitch 發(fā)展
如上圖所示,在 P100 中是只有 NVLink 的,GPU 間通過 CubeMesh 進行互聯(lián)。在 P100 中,每一個 GPU 有 4 路進行互聯(lián),每 4 個組成一個 CubeMesh。
而到了 V100 中,每一個 GPU 可以通過 NVSwitch 合另外一個 GPU 進行互聯(lián)。到了 A100 中,NVSwitch 再次升級,節(jié)省了很多的鏈路,每一個 GPU 可以通過 NVSwitch 和任何一個 GPU 進行互聯(lián)。
到了 H100 中,又有了新的技術突破,單機內(nèi)有 8 塊 H100 GPU 卡,任意兩個 H100 卡之間都有 900 GB/s 的雙向互聯(lián)帶寬。值得注意的是,在 DGX H100 系統(tǒng)里,四個 NVSwitch 留出了 72 個 NVLink4 連接,用于通過 NVLink-Network Switch 連接到其他 DGX H100 系統(tǒng),從而方便組成 DGX H100 SuperPod 系統(tǒng)。其中,72 個 NVLink4 連接的總雙向帶寬是~3.6TB/s。
總結(jié)
在大模型時代,人工智能的發(fā)展越來越依賴于強大的計算資源,尤其是 GPU 資源。為了訓練這些龐大的模型,我們需要采用分布式并行策略,將模型訓練任務分散到多個 GPU 或計算節(jié)點上。這不僅涉及到數(shù)據(jù)并行和模型并行等策略,還需要高效的分布式通信技術,如 NVLink 和 NVSwitch,來保證數(shù)據(jù)在不同計算單元間的快速傳輸和同步。
大模型時代的 AI 框架不僅需要支持不同的分布式并行策略,還需要涉及和考慮到分布式通信技術,例如 NVLink 和 NVSwitch 來支持高效的跨節(jié)點通信。
未來隨著模型的規(guī)模將繼續(xù)增長,對計算資源的需求也將不斷上升。我們需要不斷優(yōu)化分布式并行策略,并發(fā)展更高效的分布式通信技術。這不僅僅是軟件上的策略優(yōu)化更新,也涉及到硬件層面的優(yōu)化更新。
NVLink 和 NVSwitch 不斷的更新,進一步提升深度學習模型訓練的速度和效率。通過了解這些通信技術創(chuàng)新和進步,可以幫助我們更好的訓練更大的模型,推動人工智能向更深層次的方向發(fā)展。
-
通信
+關注
關注
18文章
6024瀏覽量
135950 -
gpu
+關注
關注
28文章
4729瀏覽量
128890 -
AI
+關注
關注
87文章
30728瀏覽量
268886
原文標題:淺析GPU分布式通信技術-PCle、NVLink、NVSwitch
文章出處:【微信號:Rocker-IC,微信公眾號:路科驗證】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論