

提醒:更新下載,已領請忽略!
更新下載!《伺服器基礎知識全解終極版(第二版)》(含PPT和PDF)近日完成更新,請購買過“伺服器基礎知識全解(終極版)”和“架構師技術全店資料打包彙總(全)(46份)”的讀者,請在微店留言獲免費取更新。
本次主要更新內容:
-
1、CPU更新(Intel/AMD架構演進,國產CPU架構)
-
2、GPU更新(英偉達GPU架構,從Fermi到Hopper,Rubin Ultra)
-
3、記憶體技術、操作系統、儲存技術等更新
-
4、已知問題修正
-
5、更新內容40+頁PPT
快閃記憶體技術、產品和發展趨勢全面解析(第二版)
Infiniband架構和技術實戰(第二版)
(持續更新中…)
本文來自“字節跳動GPU Scale-up互聯技術(附PPT和PDF版本)”,隨著機器學習和人工智慧等領域的持續發展,AI 模型對 GPU 叢集資料處理能力的需求也在不斷提升。AI 應用需要 GPU 叢集處理更大的資料集,訓練更深的神經網路和處理更多的併發任務,同時還要減少任務執行時間以及提高系統整體效率。這需要 GPU 叢集的 Scale-up 網路規模持續增大,擴充套件到機架級甚至多機架級。
01 背景
乙太網技術應用在 GPU 叢集互聯架構具有諸多優勢,例如:行業領先的高速鏈路,大容量交換機,成熟的生態系統等。目前,多個行業組織正在開發用於 AI 叢集的 Scale-up 網路技術,這些技術或是對乙太網進行擴充套件,或是將乙太網部分元件用作構建模組。
字節跳動基於乙太網技術,為 AI 叢集提供了低延遲、高頻寬的下一代 Scale- up 網路方案,滿足了 AI 應用對於 GPU 之間的高速互聯傳輸需求。
02 GPU 架構和互聯方案
2.1 GPU 架構分析
目前主流的 GPU 架構都支援 Load-Store 語義,如下圖所示,GPU 的計算引擎從暫存器中讀寫資料並完成資料的處理, LSU(Load-Store Unit)透過 Load/Store 指令在暫存器和 Device Memory 之間,以及 Device Memory 和外部 Memory 之間完成資料傳輸。

基於上述架構模型的 GPU,計算引擎主要負責資料的處理, LSU 負責資料的傳輸,如下圖所示,兩個模組可以並行工作形成流水線,資料傳輸主要依靠 Load 和 Store 語義完成。

實際的 GPU 架構要比上述的 GPU 架構模型更加複雜,GPGPU(General Purpose GPU)架構通常如下圖所示, Device Memory 包括 L1/L2 Cache 和 Shared Memory ,Shared Memory 和 L1 Cache 位於 Streaming Multiprocessor(SM)內部,不能在 SM 之間進行共享。 L2 Cache 位於 SM 外部,可以被所有 SM 共享。GPU 外部 Memory 為 Global Memory,可以被所有的 SM 訪問,也可以被 CPU 或者其他 GPU 訪問。

在上述 GPU 的架構中,GPU 主要透過 LSU 完成資料的傳輸,如下圖所示。計算引擎透過暫存器進行資料的訪問, IO 時延為 ns 級。 LSU 透過 Load/Store操作實現 Shared Memory 與暫存器之間,以及 Shared Memory 與/L1/L2 Cache 之間的資料傳輸, IO 時延為 10ns 級,IO Size 通常為暫存器級(32/64 bit)。當出現 Cache Miss 時, LSU 需要進行 Global Memory 和 Shared Memory 之間的資料傳輸,IO 時延為 100ns 級, IO Size 為 Cache Line Size(64/128/256 Byte)。

在 AI 應用場景中,計算引擎需要處理大量的資料資訊, LSU 可以實現資料的高效傳輸,但是 LSU 每次傳輸的資料塊比較小,在傳輸大塊資料時,需要 LSU 下發多個 Load/Store 指令來完成資料的搬運。 Load/Store 指令的記憶體地址或 者暫存器地址資訊,需要計算引擎提前生成併發給 LSU, Load/Store 指令的地址資訊處理會消耗計算引擎的算力資源。因此透過 LSU 來完成大塊資料的傳輸,會伴隨計算引擎的部分算力資源的消耗。
為了最佳化 GPU 資料傳輸方案,降低計算引擎用於資料傳輸的算力資源,新型號的 GPU 在片內增加了類似於 DMA 引擎的傳輸模組,如 NVIDIA 從 Hopper 系列的 GPU 開始,在 SM 內增加了 Tensor Memory Accelerator(TMA),專門用於 Global Memory 到 Shared Memory 之間的資料傳輸,如下圖所示。

GPU 在增加了 TMA 模組之後,不再需要計算引擎消耗算力資源來在資料傳輸過程中持續計算 Load/Store 指令的地址資訊,只需要計算引擎將資料傳輸的描述符下發給 TMA 模組,TMA 模組自行計算資料的記憶體地址資訊,獨立完成資料在 Global Memory 和 Shared Memory 之間的傳輸。資料傳輸流程如下圖所示,TMA 透過 DMA Read 和 DMA Write 語義完成 Global Memory 和 Shared Memory 之間的資料傳輸,LSU 透過 Load/Store 語義完成 SharedMemory 到暫存器之間的資料傳輸。

2.2 GPU 互聯方案
AI 叢集的訓練和推理任務,通常需要多個 GPU 協同完成,計算引擎需要處理的資料可能位於多個 GPU 的 Global Memory 中,這時就需要透過 Scale-up 網路和 Scale Out 網路來完成 GPU 之間的資料傳輸。GPU 的互聯架構通常如下圖所示。

Scale-up 網路的特點是頻寬高,時延小,通常基於 Load/Store 語義執行同步操作,業界典型的 Scale-up 協議包括 PCIe, NVLINK, UALINK等。字節跳動也提出了自研的 Scale-up 網路協議 EthLink,支援 Load/Store語義和 RDMA 語義,覆蓋了 Scale-up 網路的所有應用場景。Scale Out 網路 的頻寬相對較低,時延相對較高,通常基於 RDMA 語義執行非同步操作,業界典型的 Scale Out 協議包括 IB、 RoCEv2、 UEC 等。
GPU 透過 Scale-up 網路訪問遠端 GPU Global Memory 的資料流程如下圖所示,透過 LSU 實現遠端 Global Memory 和本地 Shared Memory 之間的數據傳輸,資料傳輸的 IO 時延通常小於 1us, IO Size 通常為 Cache Line Size(64/128/256 Byte),不同 GPU 之間的記憶體可透過 Scale-up 網路保證Cache Coherency。
目前業界主流的 GPU 主要透過 Load/Store 操作在Scale-up 網路實現大塊資料的傳輸,進行資料傳輸時仍然需要消耗算力資源處理記憶體地址資訊。

GPU 透過 Scale Out 網路訪問遠端 GPU 的 Global Memory 的資料流程如下圖所示,透過 RDMA Engine 實現遠端 Global Memory 和本地 Global Memory 之間的資料傳輸,資料傳輸的 IO 時延通常為 10us 級, Max IO Size 為 2GB。GPU 本地 Global Memory 和本地 Shared Memory 之間的資料傳輸,仍然透過 TMA/LSU 進行處理。

03 下一代 Scale-Up 互聯方案
3.1 需求分析
隨著 AI 叢集規模的增大,Scale-up 網路規模也需要隨之增大,Scale-up 網路需要傳輸的資料量也在逐步增大。透過對當前 GPU 架構和互聯方案的分析,可以得到下一代 Scale-up 網路的互聯需求如下:
1) Load/Store 語義傳輸小塊資料的效率高,時延小,特別適合用於傳輸控制資訊和記憶體中位置不連續的資料,以及用於對時延要求較高的 AI 推理場景。為了更好的支援推理應用場景,實現小塊資料和 GPU 記憶體中位置不連續的資料的高效傳輸,Scale-up 網路需要承接 Load/Store 語義。
2) Load/Store 語義在資料傳輸過程中需要計算引擎持續生成 Load/Store 的地址資訊,會消耗計算引擎的算力資源。而 RDMA 語義傳輸大塊資料的效率較高,在資料傳輸過程中幾乎不需要消耗計算引擎的算力。AI 大模型訓練中, 張量並行、專家並行等模型並行的資料流量需要透過 Scale-up 網路進行傳輸,模型並行的資料量非常大,通常在 MB 級~GB 級。而且,AI 大模型訓練通常會透過最佳化演算法實現資料計算和資料傳輸的交疊,降低對資料傳輸時延的要求。透過 RDMA 語義實現大塊資料的傳輸,可以有效節省計算引擎的算力資源。因此,Scale-up 網路需要承接RDMA 語義。 RDMA 語義的缺點也比較明顯,互動操作複雜,傳輸時延大,不適合傳輸小塊資料。
3)Shared Memory 作為 Device Memory,正在發揮越來越重要的作用,Scale-up 網路提供的 RDMA 引擎,既要實現遠端 Global Memory 和本地Global Memory 之間的資料傳輸,也需要實現遠端 Global Memory 和本地 Shared Memory 之間的資料傳輸。
4)Scale-up 網路的 RDMA 語義,不能完全照搬傳統 RDMA 協議,因為傳統RDMA 協議提供的是一套軟硬體互動介面,互動操作複雜而且效率低下(相對於純硬體介面)。Scale-up 網路的 RDMA Engine 是 GPU 內部模組,需要更加簡潔的介面來實現 RDMA Engine 與 GPU 內部其他模組之間的互動操作。
5)隨著 Scale-up 網路範圍的擴大,透過網路硬體實現 Cache Coherency 的 代價越來越大。由於 AI 叢集的通訊存在明顯的週期規律,GPU 之間沒有必要繼續透過網路硬體來保證 Cache Coherency,可以由系統軟體保證 Cache Coherency。
6)Scale-up 網路需要對任意兩個 GPU 之間相同傳輸路徑的語義操作和資料報文進行保序,而不同路徑上的操作可以亂序執行。
7)由於單個協議棧的資料處理頻寬有限,GPU 通常會部署多個 Scale-up協議棧實現超大網路頻寬。在這種多協議棧的網路架構中,需要保證網路負載在多個協議棧之間,以及在同一個協議棧的多個埠之間儘可能均衡。網路負載均衡引入的報文亂序,需要由 Scale-up 網路的上層應用進行亂序處理。
3.2 網路方案
下一代 Scale-up 網路的系統架構如下圖所示,GPU 可以透過 Load/Store 語 義執行同步操作, Load/Store 語義由 LSU 發起,主要用於資料傳輸時延敏感的應用場景。GPU 也可以透過 RDMA 語義執行非同步操作, RDMA 語義由 RDMA Engine 發起,主要用於頻寬大,時延不敏感的應用場景。

Scale-up 網路承接 Load/Store 語義的資料傳輸流程如下圖所示,由於網路硬體不再需要保證 Cache Coherency, L1/L2 Cache 只用於快取資料,並由系統軟體週期性對 Cache 進行 Clear。

Scale-up 網路承接 RDMA 語義的資料傳輸流程如下圖所示, RDMA Engine 根據描述符的指令型別,完成遠端的 Global memory 和本地的 Global Memory 之間,以及遠端的 Global Memory 和本地的 Shared Memory 之間的資料傳輸。

04 EthLink 網路方案
EthLink(Ethernet Link)是字節跳動自研的 Scale-up 網路協議,為 GPU 集 群提供高速網際網路絡通道,同時承載 GPU 發起的 Load/Store 語義和 RDMA語義。如下圖所示, EthLink 網路範圍覆蓋了 GPU 伺服器內部互聯和跨機的GPU 互聯。

Scale-up 最核心的需求是網路頻寬:
PCIe 的優勢是天然支援記憶體語義、低延遲,但它是圍繞 CPU 構建的互聯,迭代緩慢,頻寬落後乙太網 2-3 代。乙太網的摩爾定律一直有效,18個月單晶片頻寬翻倍。乙太網生態成熟開放,大規模部署,低成本。
業界各個標準都選擇了乙太網:
UALink 的最新標準,物理層已經由 PCIe 切換為乙太網。 ETH-X 也是基於乙太網構建。所以 EthLink 基於乙太網構建 Scale-up 互聯,分享乙太網的生態、成本優 勢,同時面向 Scale-up 場景,最佳化標準乙太網來支援 Load/Store 語義、RDMA 語義、低延遲、報文載荷效率提升、鏈路可靠傳輸等。
4.1 EthLink 協議棧
EthLink 協議棧的系統架構如下圖所示,GPU 側的協議棧可以整體分為兩部分,分別是 Scale-Up 語義層和 Scale-up 網路層。 Scale-up 語義層可以進一步分為上層 GPU 操作和 Scale-up 事務層。GPU 操作是由GPU 發起的 Scale-up 網路中的 IO 操作,支援 Load/Store, RDMA 等語義;Scale-up 事務層把 GPU 的操作進一步轉換成 Memory Read, Memory Write 等在該層定義的基礎操作型別(類似 PCIe 的 memory read, memory write 等操作)。
EthLink的上層應用可以根據實際的應用場景靈活的選擇傳輸語義。Scale-up 網路採用 LLR (Link Layer Retry)和 CBFC (Credit-Based Flow Control)實現可靠的無損網路,高效重傳 FEC 無法糾正的錯誤報文。最後, EthLink 優化了鏈路層報文頭,降低報文頭長度,減少傳輸開銷。

4.1.1 GPU 操作
GPU 透過 scale-up 網路能夠發起的操作包括 Load/Store 和 RDMA 等,如下表所示。 Load/Store 操作透過 LSU 發起, RDMA 操作由 SM 發起並 RDMAEngine 執行。

4.1.2 Scale-up 事務層
EthLink 的 Scale-up 事務層定義了 Memory read, Memory write, Atomic 和 Message 語義。Scale-up 事務層接受來自 GPU 的傳輸操作,轉化為memory read 和 memory write 等語義;最終形成對應的網路報文,透過 Scale-up 網路傳輸給遠端的 GPU。Scale-up 事務層支援的語義如下表所示:

4.1.2.1 Load
Load 操作會被轉換為單次的 Memory Read 操作,資料流程如下圖所示,SM 發起 Load 操作,會在EthLink 上生成 Memory Read 報文,實現對遠端 GPU Memory 資料的讀取。

4.1.2.2 Store
Store 操作會被轉換為單次的 Memory Write 操作。資料流程如下圖所示,SM 發起 Store 操作,並在 EthLink 上生成 Memory Write 報文,把資料透過 Memory Write 操作寫入遠端 GPU Memory。

4.1.2.3 RDMA Write
RDMA Write 操作會被轉換為若干個 Memory Write 操作。資料流程如下圖所示,SM 提前在 Memory 準備好 WQE 和 Data,再下發 Doorbell,EthLink 在收到 Doorbell 通知後,執行 WQE,把 Data 透過 Memory Write 操作寫入對端 GPU 的 Memory。

4.1.2.4 RDMA Write with Immediate
RDMA Write With Immediate 操作會被轉換為若干個 Memory Write 操作和 1 個 Write Message 操作。資料流程如下圖所示,SM 提前在 Memory 準備好 WQE 和 Data,再下發 Doorbell, EthLink 在收到 Doorbell 通知後,執行 WQE,把 Data 透過 Memory Write 操作寫入對端 GPU 的 Memory,並透過 Write Message 操作把 Immediate Data 發給對端 GPU 的 SM。

4.1.2.5 RDMA Read
RDMA Read 操作會被轉換為若干個 Memory Read 操作。資料流程如下圖所示,SM 提前在 Memory 準備好 WQE,再下發 Doorbell, EthLink 在收到 Doorbell 通知後,執行 WQE,透過 Memory Read 操作從對端 GPU Memory 中讀回 Data,並寫入請求端 GPU 的 Memory。

4.1.3 Cache Coherency
EthLink Cache Coherency 的方案如下圖所示,具體工作流程如下:
1)當資料從片外 Global Memory Load 到 GPU 內的 Shared Memory 時,仍然快取在 Cache 中,以加速 GPU 下一次對相同 Global Memory 地址的資料訪問。
2)當資料需要從 GPU 內的 Shared Memory Store 到片外的 Global Memory 中,資料不會寫入 Cache,而是直接寫入片外的 Global Memory。
3)系統軟體在必要的時候清除 Cache,以保證 Cache 快取的資料和片外 Global Memory 的資料一致性。

4.2 網路拓撲
EthLink 的網路拓撲如下圖所示,每個 GPU 伺服器部署多個 EthLink 協議棧,每個 EthLink 協議棧可以支援 1~4 個乙太網介面,GPU 伺服器之間透過低時 延乙太網交換機互聯,同一個 Scale-up 網路域最大支援 1024 個 GPU 節點。

4.2.1 埠負載均衡
GPU 伺服器通常會在部署多個 EthLink 協議棧來大幅度提升 GPU 伺服器的 Scale-up 網路頻寬。當兩個 GPU 之間有資料傳輸需求時,如下圖所示,GPU 之間可以透過使用 Multi-Path 來提升實現負載均衡,從而進一步提升網路帶寬的利用率。

EthLink 使用透過 Multi-Path 實現負載均衡後,有可能會引入亂序。由於亂序 涉及到多個協議棧的報文,無法在 EthLink 上實現保序,需要透過 EthLink 的上層應用處理亂序問題。
4.3 網路介面
4.3.1 報文封裝
如上所述, EthLink 的事務層語義可以承載 GPU 的 Load/Store 和/或 RDMA 操作。本小節中為了體現上層 GPU 操作的不同,分別用 EthLink-LS 和 EthLink-RDMA 來體現載荷中的具體內容。EthLink 的報文格式如下圖所示,其中 RH (Reliability Header)用於保證端到端可靠性,是對 LLR 提供的鏈 路層可靠性的增強。

同時,為了解決傳統 IP 報文有效載荷率低的問題, EthLink 也設計了最佳化的報文頭部,即 OEFH (Optimized EthLink Forwarding Header),如下圖所示。OEFH 使用更小的報文 header 來提升報文有效負載率。同時與現有 L2 層 報文頭長度對齊,能夠相容現有的乙太網報文。

OEFH 的格式如下圖所示,包含 source 和 destination GPU ID,交換機根據 GPU ID 來轉發報文。

OEFH 能夠取代標準乙太網和 TCP/IP 協議棧中的 ETH+IP+UDP 報文頭,顯著縮短了報文頭長度,降低了報文開銷。

4.3.2 FEC
Scale-up 網路對延遲敏感,而標準 FEC 引入的延時佔鏈路層延遲的很大比重。因此可以選擇 RS-272 這種更低延遲的 FEC。
4.3.3 鏈路層可靠傳輸
當 Scale-up 從機內短距離點對點互聯拓展到機外,甚至跨機櫃互聯,且經過交換機轉發時,網路的丟包機率顯著升高,而檢測丟包、丟包重傳給協議層帶 來了很多複雜度,同時端到端的重傳又帶來了更多的延遲。所以 EthLink 支援鏈路層的可靠傳輸。丟包主要分 2 個原因,一是鏈路上的丟包,比如 CRC 錯誤,這一類由 LLR 來解決,另一種是交換機內部丟包,由CBFC 來解決。
4.3.3.1 Link Level Retry (LLR)
鏈路的傳送端先快取報文,如果發生報文丟包,則發起重傳,直到對端確認收到該報文。鏈路層的重傳,可以降低 FEC 的要求,使選擇 RS-272 這種低延遲 FEC 成為可能。另外,也降低了鏈路質量的要求,如果存在光互聯,則可以引入 LPO,來降低光互聯上的延遲。
4.3.3.2 Credit Based Flow Control (CBFC)
交換機內部 buffer 的丟包,通常選擇 PFC 機制,也可選擇 CBFC。CBFC 提供 更細粒度的控制,可與 VC 繫結來使用,同時因為基於 Credit,可以精確的知道對端 Buffer 的情況,提供更有效的機制以實現更低的延遲。
4.3.4 Switch Event Notification

Scale-up考慮更低延遲,通常採取單層交換機的方式,如下圖所示。如果發生鏈路斷開,交換機沒有路徑的冗餘,無法直接切換路徑來避免丟包,只能透過GPU 側 multi-path 來切換路徑,而 Source GPU 無法感知跨交換機的遠端鏈路狀態,因此丟包可能會持續發生。所以交換機需要與 GPU 間建立狀態反饋機制,例如在 port down 時需要透過 Switch Event Notification,快速傳送 port event 給 Source GPU,來達到快速切換路徑。
來源:通訊百科
相關閱讀:
-
海思昇騰920晶片解析:達芬奇架構進化與AI算力躍遷 -
昇騰310晶片引數及技術概述 -
InfiniBand,撼動不了乙太網? -
InfiniBand高效能網路設計概述 -
面向E級計算的4款高效能處理器概述 -
基於鯤鵬處理器的高效能計算實踐 -
高效能計算關鍵元件核心知識 -
一文全解高效能製造模擬技術 -
高效能計算:RoCE技術分析及應用 -
高效能計算:談談被忽視的國之重器 -
高效能計算:RoCE v2 vs. InfiniBand網路該怎麼選? -
高效能網路全面向RDMA進軍



免責申明:本號聚焦相關技術分享,內容觀點不代表本號立場,可追溯內容均註明來源,釋出文章若存在版權等問題,請留言聯絡刪除,謝謝。
推薦閱讀
更多架構相關技術知識總結請參考“架構師全店鋪技術資料打包(全)”相關電子書(46本技術資料打包彙總詳情可透過“閱讀原文”獲取)。
溫馨提示:
掃描二維碼關注公眾號,點選閱讀原文連結獲取“架構師技術全店資料打包彙總(全)”電子書資料詳情。

