GPU 網(wǎng)絡(luò)基礎(chǔ):訓(xùn)練中的通信、橫向擴(kuò)展、縱向擴(kuò)展、網(wǎng)絡(luò)架構(gòu)、交換機(jī)等 原創(chuàng)
大家好,我是玄姐。
我們會(huì)用非常淺顯的方式聊聊 “網(wǎng)絡(luò)” 和 “GPU” 這兩個(gè)話題。它很重要,但聽起來可能又無聊又晦澀。別急,跟著我一起看就好!
1. 為什么要關(guān)注 GPU 網(wǎng)絡(luò)?
訓(xùn)練一個(gè)大語言模型(LLM)需要海量的浮點(diǎn)運(yùn)算(FLOPs):

那訓(xùn)練這些模型要花多久呢?假設(shè)單塊 GPU 的運(yùn)算能力約為 2 拍浮點(diǎn)運(yùn)算 / 秒(2×101?次浮點(diǎn)運(yùn)算 / 秒),一天有 86400 秒,單塊 GPU 一天能完成約 1.7×102?次浮點(diǎn)運(yùn)算。在最理想的情況下,想用單塊 GPU 完成 102?次浮點(diǎn)運(yùn)算的訓(xùn)練任務(wù),大概需要16 年。
16 年啊!誰有這時(shí)間等?
那要怎么把 LLM 的訓(xùn)練時(shí)間縮短到幾個(gè)月甚至幾周?答案是:讓大量 GPU 同時(shí)工作。
但這些 GPU 得 “互相說話”—— 畢竟它們要協(xié)同工作,得分享各自的進(jìn)度和結(jié)果。這種 “互相說話” 靠什么實(shí)現(xiàn)?靠網(wǎng)絡(luò)!

(別想歪了,不是這種 “人脈社交” 的 networking)

(對,是這種 “計(jì)算機(jī)網(wǎng)絡(luò)” 的 networking!??)
其實(shí),把眾多 GPU 連起來是個(gè)挺有意思的問題。比如 xAI(埃隆?馬斯克旗下公司)要協(xié)調(diào) 20 萬塊 GPU 之間的通信,想想就復(fù)雜!你可以聽聽埃隆的這段 4 分鐘視頻,里面就提到了這個(gè)問題 —— 這絕對是個(gè)超有挑戰(zhàn)性的系統(tǒng)工程難題!
2. 網(wǎng)絡(luò)交換機(jī):連接 GPU 的 “中間人”
我們就以 xAI 的 20 萬塊 GPU 集群為例,怎么把它們連起來呢?
理想狀態(tài)下,每塊 GPU 都能以最快速度和其他任何一塊 GPU 通信。那第一個(gè)想法可能是:直接把每塊 GPU 都跟其他 GPU 連起來行不行?
這樣就不用通過交換機(jī)或其他設(shè)備 “中轉(zhuǎn)”,速度肯定特別快!這種連接方式叫 “全互聯(lián)網(wǎng)絡(luò)”(full mesh network)。
但實(shí)際上,全互聯(lián)網(wǎng)絡(luò)在 “大規(guī)模場景” 下根本行不通,原因有很多。比如,要讓 20 萬塊 GPU 兩兩直接相連,每塊 GPU 得有 199999 個(gè)接口,而且總共需要約 200 億根連接線!這顯然不現(xiàn)實(shí),想想都覺得離譜。
那怎么辦?可以引入 “網(wǎng)絡(luò)交換機(jī)”(network switch)。交換機(jī)是一種專用硬件,能高效地在多個(gè)設(shè)備(這里就是 GPU)之間轉(zhuǎn)發(fā)數(shù)據(jù)。現(xiàn)在不用讓 GPU 兩兩直接連了,而是把所有 GPU 都連到交換機(jī)上,由交換機(jī)來管理它們之間的通信。

(交換機(jī)連接這些 GPU 后,任意兩塊 GPU 都能互相通信)
如果用一臺(tái)交換機(jī)連接 20 萬塊 GPU,連接線數(shù)量會(huì)從 200 億根驟減到 20 萬根(每塊 GPU 一根線),確實(shí)簡化了不少。但問題是,這臺(tái)交換機(jī)得有 20 萬個(gè)接口 —— 這同樣不現(xiàn)實(shí)。

(大概就像這臺(tái)交換機(jī),但得比它大 8000 倍??)
顯然,單靠一臺(tái)巨型交換機(jī)解決不了問題,所以我們需要 “分層交換機(jī)”(hierarchical switching)。
3. 葉脊拓?fù)洌悍謱舆B接 GPU
既然不能用一臺(tái)巨型交換機(jī)連接所有 GPU,那我們可以把網(wǎng)絡(luò)分成好幾層交換機(jī),用 “分層” 的方式組織:

(分層結(jié)構(gòu)示意圖)
每一層的交換機(jī)都可以做得小一些,只連接一部分 GPU—— 這樣不管是尺寸還是成本,都更容易控制。有了這個(gè)方案,GPU 不用再帶幾千個(gè)接口,交換機(jī)也不用了。
但凡事都有取舍:如果兩塊 GPU 不在同一個(gè) “分支”(比如連在不同的下層交換機(jī)上),它們通信時(shí)數(shù)據(jù)就得經(jīng)過多層交換機(jī)中轉(zhuǎn),這會(huì)增加 “延遲”(latency)。
舉個(gè)例子:如果兩塊 GPU 沒連在同一臺(tái)交換機(jī)上,它們的通信數(shù)據(jù)得先傳到上層交換機(jī),再從上層交換機(jī)傳到目標(biāo) GPU 所在的下層交換機(jī) —— 多了好幾步 “中轉(zhuǎn)”。

(中轉(zhuǎn)次數(shù)越多,數(shù)據(jù)到達(dá)目的地的時(shí)間就越長)
這種兩層結(jié)構(gòu)通常叫 “葉脊拓?fù)洹保╨eaf-spine topology),也叫 “兩層 Clos 網(wǎng)絡(luò)”(two-tier Clos network)。其中,“葉交換機(jī)”(leaf switches)直接連計(jì)算設(shè)備(也就是 GPU),“脊交換機(jī)”(spine switches)則負(fù)責(zé)連接所有葉交換機(jī):

(葉脊拓?fù)浣Y(jié)構(gòu)示意圖)
4. 橫向擴(kuò)展(Scale Out):增加設(shè)備數(shù)量
怎么實(shí)現(xiàn)幾千塊 GPU 的集群?
“橫向擴(kuò)展”(也叫 “水平擴(kuò)展”)就是通過增加更多 GPU 和交換機(jī)來擴(kuò)大集群規(guī)模。這樣能把訓(xùn)練任務(wù)分?jǐn)偟礁嘤布希s短 LLM 的訓(xùn)練時(shí)間。

(原理很簡單:把現(xiàn)有的網(wǎng)絡(luò)結(jié)構(gòu) “復(fù)制粘貼”,不斷增加節(jié)點(diǎn) —— 這就是橫向擴(kuò)展!)
那這些新增的 GPU 和交換機(jī)怎么互相通信?橫向擴(kuò)展通常用兩種技術(shù):以太網(wǎng)(Ethernet)或無限帶寬(InfiniBand),兩者都能提供 GPU 間通信所需的高速網(wǎng)絡(luò)。
其中,InfiniBand 是英偉達(dá)的專有技術(shù)(通過收購 Mellanox 獲得),過去在大規(guī)模 AI 集群里很常用 —— 因?yàn)楸绕?RoCE(融合以太網(wǎng) RDMA)這類高性能以太網(wǎng),它的延遲更低、帶寬更高。

(你要是覺得這不是以太網(wǎng) cable,那你說對了!來源:1.5 米(5 英尺)英偉達(dá) / 邁絡(luò)思 MCP4Y10-N01A 兼容款 800G OSFP 帶鰭頂無限帶寬 NDR 被動(dòng)直連銅雙軸電纜,適用于 Quantum-2 交換機(jī))
不過現(xiàn)在新建的訓(xùn)練集群,越來越多人傾向用以太網(wǎng)。比如英偉達(dá) CEO 黃仁勛在本周的 GTC 大會(huì)主題演講里提到,埃隆的 xAI 就是用英偉達(dá)的 Spectrum X 以太網(wǎng),搭建了目前最大的訓(xùn)練集群(Colossus)。
5. 縱向擴(kuò)展(Scale Up):提升單節(jié)點(diǎn)能力
橫向擴(kuò)展能解決一段時(shí)間的問題,但 eventually 會(huì)遇到物理和成本的瓶頸:設(shè)備和交換機(jī)越多,中轉(zhuǎn)帶來的延遲就越高,耗電量和成本也會(huì)跟著漲。到了某個(gè)節(jié)點(diǎn),單靠橫向擴(kuò)展就不是最佳方案了。
這時(shí)候就要用到另一種思路:“縱向擴(kuò)展”(也叫 “垂直擴(kuò)展”)。
縱向擴(kuò)展的核心是 “提升單個(gè)節(jié)點(diǎn)的計(jì)算能力”,而不是增加節(jié)點(diǎn)數(shù)量。比如,不讓葉交換機(jī)直接連單塊 GPU,而是讓它連 “服務(wù)器”—— 每臺(tái)服務(wù)器里裝多塊 GPU(比如 8 塊)。這樣一來,需要的交換機(jī)和連接線數(shù)量就會(huì)減少:

(每臺(tái)服務(wù)器節(jié)點(diǎn)包含 8 塊 GPU;一臺(tái)交換機(jī)就能連接更多 GPU)
可以用一個(gè)類比理解:早期網(wǎng)站擴(kuò)容時(shí),快速發(fā)展的公司會(huì)先給單臺(tái)服務(wù)器加更多 CPU 核心和內(nèi)存 —— 這就是縱向擴(kuò)展。等單臺(tái)服務(wù)器不夠用了,再增加更多服務(wù)器,用負(fù)載均衡器分?jǐn)偭髁?—— 這就是橫向擴(kuò)展。
可能有人會(huì)問:縱向擴(kuò)展的 GPU,不還是得通過交換機(jī)連接嗎?那跟橫向擴(kuò)展有啥區(qū)別?
這個(gè)問題問得好!關(guān)鍵在 “節(jié)點(diǎn)內(nèi)通信” 和 “節(jié)點(diǎn)間通信” 的差異。
6. 節(jié)點(diǎn)內(nèi)通信(Intra-node)vs 節(jié)點(diǎn)間通信(Inter-node)
- 同一臺(tái)服務(wù)器內(nèi)部的通信,叫 “節(jié)點(diǎn)內(nèi)通信”(intra-node communication)。

- 不同服務(wù)器上的 GPU 之間的通信,叫 “節(jié)點(diǎn)間通信”(inter-node communication)。

事實(shí)是:同一節(jié)點(diǎn)內(nèi)的相鄰 GPU,通信速度比用 InfiniBand 或以太網(wǎng)進(jìn)行節(jié)點(diǎn)間通信要快得多,帶寬也更高。
為什么?主要原因有兩個(gè):一是 GPU 在物理上離得近,二是用了專門的互聯(lián)技術(shù)。這些技術(shù)會(huì)用直接、短小且經(jīng)過優(yōu)化的 “信號線路”(通常集成在同一塊電路板或同一個(gè)封裝里),既能縮短信號傳輸距離,又能減少延遲。
比如,AMD 的 “Infinity Fabric”(無限結(jié)構(gòu))就是這樣的技術(shù) ——2018 年 IEEE 國際固態(tài)電路會(huì)議(ISSCC)的論文里就展示過它的線路設(shè)計(jì):

(圖中亮色的連接線就是計(jì)算單元之間的金屬線路,相當(dāng)于封裝基板里的 “電線”)
因?yàn)榉?wù)器內(nèi)的 GPU 是直接連接的,所以能避開節(jié)點(diǎn)間通信的很多額外開銷。封裝內(nèi)的線路設(shè)計(jì)讓信號傳輸距離短,能減少 “傳播延遲”,還能降低信號衰減。
而像 InfiniBand、以太網(wǎng)這類外部連接,為了保證長距離傳輸?shù)目煽啃裕枰~外的 “信號完整性組件”(比如中繼器、重定時(shí)器、糾錯(cuò)機(jī)制)—— 這些組件會(huì)增加延遲,還會(huì)消耗更多電力。
我喜歡把節(jié)點(diǎn)內(nèi)通信(比如 NVLink、Infinity Fabric)比作 “德國 Autobahn(高速公路)”:設(shè)計(jì)初衷就是高速無間斷。而節(jié)點(diǎn)間通信就像 “雙向兩車道公路”:速度慢、能容納的 “流量” 少,還可能遇到 “堵車”(比如春耕或秋收時(shí)要給拖拉機(jī)讓行,對應(yīng)網(wǎng)絡(luò)擁堵)。

(小心!前面好像有交警!)
7. 訓(xùn)練中的通信:GPU 如何協(xié)同工作?
要理解 GPU 通信的難點(diǎn),先得回憶一下神經(jīng)網(wǎng)絡(luò)的訓(xùn)練過程。
在每個(gè)訓(xùn)練周期里,網(wǎng)絡(luò)會(huì)先做 “前向傳播”(forward pass):輸入數(shù)據(jù)流過網(wǎng)絡(luò)的每一層,最終生成一個(gè)預(yù)測結(jié)果。然后用 “損失函數(shù)”(loss function)把這個(gè)預(yù)測結(jié)果和正確答案對比,算出預(yù)測的誤差有多大。
而學(xué)習(xí)的核心發(fā)生在 “反向傳播”(backward pass):通過 “反向傳播算法” 計(jì)算出網(wǎng)絡(luò)中每個(gè)權(quán)重對誤差的 “貢獻(xiàn)度”,再用 “梯度下降”(gradient descent)調(diào)整所有權(quán)重 —— 相當(dāng)于擰動(dòng)幾十億個(gè) “旋鈕”,讓誤差逐漸減小。每迭代一次,這些微小的調(diào)整都會(huì)讓神經(jīng)網(wǎng)絡(luò)在新數(shù)據(jù)上的預(yù)測更準(zhǔn)確。

訓(xùn)練時(shí),每塊 GPU 會(huì)根據(jù)前向傳播的誤差,計(jì)算出權(quán)重更新所需的 “梯度”。但因?yàn)槊繅K GPU 處理的是不同的數(shù)據(jù)子集,所以這些梯度只是 “局部梯度”。為了讓所有 GPU 都應(yīng)用相同的權(quán)重更新、保持同步,必須把所有 GPU 的梯度 “匯總平均”。
這個(gè)過程叫 “全歸約通信”(all-reduce communication):GPU 之間交換梯度數(shù)據(jù),算出最終的平均梯度,再用這個(gè)梯度更新各自的本地模型。通過這種方式保證 “全局一致性”,能避免模型 “跑偏”(model drift),讓分布式訓(xùn)練有效進(jìn)行。
這種全歸約通信的延遲,會(huì)直接影響訓(xùn)練效率。
除了全歸約,還有其他 “集合通信操作”(collective operations)。比如英偉達(dá)的 NCCL 軟件庫就支持這些操作:AllReduce(全歸約)、Broadcast(廣播)、Reduce(歸約)、AllGather(全收集)、ReduceScatter(歸約散射)。
所以,訓(xùn)練集群理想的狀態(tài)是:用帶寬最高、延遲最低的通信方式。而且,就像 DeepSeek V3 展示的那樣,也可以用軟件手段讓 “通信” 和 “計(jì)算” 并行進(jìn)行 —— 這樣能減少 GPU 的 “空閑時(shí)間”,降低通信瓶頸的影響。
8. 總結(jié)
以上就是第一部分的全部內(nèi)容了 —— 我說過會(huì)很淺顯吧!
關(guān)于 GPU 網(wǎng)絡(luò),還有很多內(nèi)容可以聊。比如實(shí)際的大型集群不會(huì)用全互聯(lián)結(jié)構(gòu),比我們說的要復(fù)雜得多:

之后我們還會(huì)覆蓋這些話題:推理(inference)時(shí)的通信需求(和訓(xùn)練有啥不一樣)、前端網(wǎng)絡(luò) vs 后端網(wǎng)絡(luò)、光通信等等。
希望通過這篇文章,你再看到相關(guān)的示意圖或文檔時(shí),能多一點(diǎn)底氣。比如看到英偉達(dá) SuperPOD 計(jì)算架構(gòu)圖時(shí),能大概看明白,還能提出問題補(bǔ)充細(xì)節(jié):

從這張圖里,我們能看到脊交換機(jī)和葉交換機(jī)在支持 “橫向擴(kuò)展”,而 B200 服務(wù)器在實(shí)現(xiàn) “縱向擴(kuò)展”。從表格里能算出,每個(gè) “可擴(kuò)展單元”(SU)有 32 個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)有 8 塊 GPU—— 這就是 “橫向擴(kuò)展”(32 個(gè)節(jié)點(diǎn))和 “縱向擴(kuò)展”(每個(gè)節(jié)點(diǎn) 8 塊 GPU)的結(jié)合。不用糾結(jié) “移除一臺(tái) DGX 以適配 UFM 連接” 這種細(xì)節(jié),關(guān)鍵是你現(xiàn)在能看懂這些核心信息了!
好了,這就是我今天想分享的內(nèi)容。
本文轉(zhuǎn)載自??玄姐聊AGI?? 作者:玄姐

















