瓶頸)
1. AI集群的通信瓶頸為什么GPU之間的PCIe通路反而成了短板1.1 算力翻倍之后互聯(lián)鏈路最先暴露問題上個(gè)月給一家做AI訓(xùn)練平臺(tái)的公司做架構(gòu)評(píng)審對(duì)方拿著一張八卡GPU服務(wù)器的結(jié)構(gòu)圖問我GPU之間能不能全部走PCIe交換不走NVLink這個(gè)問題放在三年前可能沒什么人問但在PCIe 5.0交換芯片逐漸鋪開之后它成了很多做AI集群的人必須面對(duì)的現(xiàn)實(shí)問題。先說結(jié)論P(yáng)CIe交換在AI集群里不是要不要用的問題而是怎么用、用在哪一層的問題。過去大家習(xí)慣把CPU當(dāng)成PCIe拓?fù)涞闹行腉PU、網(wǎng)卡、NVMe硬盤全部直接掛到CPU的PCIe根端口上。CPU的PCIe lane數(shù)量有限主流的服務(wù)器CPU能提供的lane數(shù)大概在64到128條之間。聽起來不少但一個(gè)x16的GPU就要吃掉16條lane一張網(wǎng)卡再吃掉16條兩塊NVMe又占掉8條很快就見底了。更麻煩的是PCIe根端口一旦分配出去拓?fù)渚突竟潭ㄏ胝{(diào)整很費(fèi)勁。AI集群的通信壓力比傳統(tǒng)業(yè)務(wù)大得多。大模型訓(xùn)練要用All-Reduce、All-to-All這類集合通信每個(gè)訓(xùn)練步都要把分布在多張GPU上的梯度數(shù)據(jù)同步一遍。算力越強(qiáng)同步數(shù)據(jù)量越大通信耗時(shí)占比就越明顯。GPU的浮點(diǎn)算力這幾年翻了好幾倍但PCIe互連如果還是老拓?fù)溆?xùn)練效率就會(huì)被“木桶效應(yīng)”拖死。PCIe 5.0把單lane速率提到32GT/sx16鏈路單向能跑到約63GB/s的有效帶寬雙向理論帶寬約126GB/s。這個(gè)數(shù)字相比PCIe 4.0翻了一倍但注意這只是鏈路本身的能力實(shí)際端到端能不能跑滿取決于拓?fù)浣Y(jié)構(gòu)、交換芯片、驅(qū)動(dòng)配置、中斷綁定等一大堆因素。很多團(tuán)隊(duì)只盯著GPU型號(hào)和網(wǎng)絡(luò)方案等到訓(xùn)練任務(wù)一跑發(fā)現(xiàn)卡間通信成了瓶頸才開始排查PCIe鏈路。這個(gè)時(shí)候往往改造成本最高。1.2 PEX89000系列是什么它到底解決了什么問題博通PEX89000系列是面向數(shù)據(jù)中心AI/ML場(chǎng)景的PCIe 5.0交換芯片。它的核心職責(zé)很簡單在PCIe設(shè)備之間做數(shù)據(jù)轉(zhuǎn)發(fā)就像網(wǎng)絡(luò)交換機(jī)在IP網(wǎng)絡(luò)里做的事一樣。設(shè)備A要往設(shè)備B發(fā)數(shù)據(jù)不必再繞道CPU根端口PEX89000直接把兩端口的通路打通實(shí)現(xiàn)P2PPeer-to-PeerDMA傳輸。這個(gè)能力對(duì)GPU互聯(lián)特別重要。GPU訓(xùn)練時(shí)的梯度同步本質(zhì)上是多張GPU之間的數(shù)據(jù)拷貝。如果沒有PCIe交換芯片數(shù)據(jù)要從GPU A拷貝到CPU內(nèi)存再通過CPU發(fā)往GPU B中間多繞了兩次延遲增加CPU也被占用。有了交換芯片GPU A的數(shù)據(jù)能直接通過PCIe交換網(wǎng)絡(luò)抵達(dá)GPU B路徑短、延遲低CPU可以騰出來干別的事。PEX89000系列的另一個(gè)特點(diǎn)是端口配置靈活。它支持把物理lane拆分成x16、x8、x4等不同寬度的端口一顆芯片可以同時(shí)接多張GPU、多塊NVMe、多張網(wǎng)卡把它們組織成一個(gè)統(tǒng)一的高速互連域。這個(gè)“扇形展開”的能力正好補(bǔ)上CPU根端口lane數(shù)量不足、拓?fù)浣┗膯栴}。還有些型號(hào)支持多主機(jī)模式和非透明橋NTB功能。通俗點(diǎn)說多主機(jī)模式允許兩顆CPU共同管理一套PCIe子系統(tǒng)NTB則讓不同主機(jī)之間通過共享內(nèi)存窗口交換數(shù)據(jù)。這兩個(gè)特性疊加意味著PEX89000不僅能做單機(jī)內(nèi)的GPU互聯(lián)還能把多臺(tái)服務(wù)器的PCIe資源池化按需分配給不同計(jì)算節(jié)點(diǎn)。市面上不少高端AI服務(wù)器和存儲(chǔ)池化方案就是拿它當(dāng)核心樞紐。1.3 為什么NVLink代表不了PCIe交換提到GPU互聯(lián)很多人第一反應(yīng)是NVLink、NVSwitch。NVLink確實(shí)是NVIDIA私有協(xié)議里性能很強(qiáng)的方案在單機(jī)八卡場(chǎng)景里GPU到GPU的帶寬能到900GB/s以上遠(yuǎn)超PCIe。但它有個(gè)前提只能用NVIDIA自己的GPU且只在NVIDIA的HGX基板里生效?,F(xiàn)實(shí)是AI集群里不只有NVIDIA卡。AMD的Instinct、Intel的Gaudi、各種國產(chǎn)加速卡都跑在PCIe生態(tài)里。即便是NVIDIA自己的方案GPU之間跑NVLink但GPU到網(wǎng)卡、GPU到NVMe存儲(chǔ)、GPU到CPU的數(shù)據(jù)通路走的依然是PCIe。換句話說PCIe互聯(lián)在AI集群里是一個(gè)繞不開的基礎(chǔ)層NVLink更像是構(gòu)建在它之上的“高速公路”。RoCE、InfiniBand這類網(wǎng)絡(luò)方案能跨節(jié)點(diǎn)傳輸延遲和帶寬也不錯(cuò)但它們屬于“機(jī)間互聯(lián)”解決的是服務(wù)器與服務(wù)器之間的通信。服務(wù)器內(nèi)部——GPU和網(wǎng)卡之間、GPU和存儲(chǔ)之間、多個(gè)加速設(shè)備之間——始終需要PCIe來完成最終的數(shù)據(jù)交付。如果把AI集群看作物流系統(tǒng)InfiniBand是城市之間的高速公路PCIe交換就是城市內(nèi)部的道路網(wǎng)。路網(wǎng)規(guī)劃不好高速公路上跑得再快下了匝道照樣堵死。所以PEX89000的定位不是替代NVLink或InfiniBand而是把機(jī)箱內(nèi)、機(jī)架內(nèi)的基礎(chǔ)互聯(lián)做扎實(shí)讓上層的高速網(wǎng)絡(luò)能夠真正發(fā)揮價(jià)值。把它加進(jìn)AI集群架構(gòu)不是多此一舉而是補(bǔ)上最容易忽略的短板。2. 用PEX89000搭GPU互聯(lián)三種可行的拓?fù)渑c選型邏輯2.1 單機(jī)多卡擴(kuò)展以PCIe交換為中心的重組方案最常見的使用場(chǎng)景是把PEX89000用在單臺(tái)8卡或4卡服務(wù)器里解決CPU根端口不夠用、拓?fù)洳混`活的問題。先看一個(gè)典型對(duì)比。沒有PCIe交換時(shí)8張GPU要直連CPUCPU必須至少有128條PCIe lane可用還得在BIOS里精心分配給網(wǎng)卡和NVMe留出位置。即便勉強(qiáng)夠用所有數(shù)據(jù)都經(jīng)過CPU根端口CPU內(nèi)部的PCIe控制器會(huì)成為瓶頸數(shù)據(jù)延遲偏高。加一顆PEX89000之后拓?fù)淇梢愿某蛇@樣CPU只出兩個(gè)x16上行端口到交換芯片PEX89000下行出8個(gè)x16端口分別接8張GPU剩余端口再接網(wǎng)卡和NVMe。GPU之間要同步數(shù)據(jù)時(shí)數(shù)據(jù)從一張GPU發(fā)出經(jīng)交換芯片直接轉(zhuǎn)發(fā)到另一張GPU完全不經(jīng)過CPU。CPU根端口只承擔(dān)控制平面和少量管理流量壓力驟減。這個(gè)方案的選型要點(diǎn)是上下行帶寬配比。8張GPU同時(shí)對(duì)CPU發(fā)數(shù)據(jù)的話兩顆x16上行總共提供約126GB/s的單向帶寬低于8張GPU的峰值總和。好在實(shí)際訓(xùn)練過程中GPU之間通信占大頭真正需要上行到CPU的流量主要是啟動(dòng)、日志、控制類消息不會(huì)持續(xù)打滿。如果你要做的是數(shù)據(jù)密集型推理或頻繁落盤的訓(xùn)練任務(wù)就得評(píng)估一下上行帶寬是否夠用必要時(shí)用兩顆PEX89000分?jǐn)傁滦性O(shè)備避免單芯片過載。2.2 多主機(jī)共享與NTB跨CPU資源池化的底子多主機(jī)和NTB是PEX89000比普通PCIe交換芯片高一個(gè)段位的能力也是構(gòu)建GPU資源池的關(guān)鍵。多主機(jī)模式簡單理解就是多個(gè)獨(dú)立的主機(jī)CPU根聯(lián)合體共享同一個(gè)PCIe交換域。傳統(tǒng)PCIe拓?fù)涫菃胃囊粋€(gè)主機(jī)管一套設(shè)備多主機(jī)模式下PEX89000通過地址路由把不同主機(jī)的訪問空間隔離開讓兩顆CPU可以各自管理一部分下游端口互不干擾。這個(gè)機(jī)制在高端存儲(chǔ)控制器、雙節(jié)點(diǎn)服務(wù)器里很有價(jià)值。NTB則更進(jìn)一步。非透明橋允許兩個(gè)主機(jī)之間建立一個(gè)共享內(nèi)存窗口主機(jī)A往這個(gè)窗口里寫數(shù)據(jù)主機(jī)B就能直接讀到不需要以太網(wǎng)或InfiniBand介入跳過了協(xié)議棧延遲可以壓到亞微秒級(jí)。在很多分布式訓(xùn)練框架里跨主機(jī)梯度同步用共享內(nèi)存做比走網(wǎng)絡(luò)快得多。不過這里要提醒一句NTB的組網(wǎng)對(duì)軟件棧要求不低。硬件只是把共享窗口搭好能不能高效利用取決于驅(qū)動(dòng)和中間件。廠商一般會(huì)提供對(duì)應(yīng)的SDK和驅(qū)動(dòng)實(shí)際部署時(shí)要把驅(qū)動(dòng)版本、內(nèi)存分配策略、NUMA感知這些細(xì)節(jié)全部對(duì)齊否則共享通道建好了應(yīng)用層不會(huì)用帶寬照樣浪費(fèi)。2.3 機(jī)架級(jí)PCIe Fabric與存儲(chǔ)池化從單機(jī)走向集群當(dāng)AI集群規(guī)模從單機(jī)擴(kuò)展到機(jī)架甚至整個(gè)機(jī)房PEX89000的角色會(huì)從“機(jī)內(nèi)交換”升級(jí)為“機(jī)架級(jí)PCIe Fabric”的節(jié)點(diǎn)。機(jī)架級(jí)PCIe Fabric的核心思路是把GPU、NVMe盤、網(wǎng)卡這些PCIe設(shè)備全部從固定的服務(wù)器里“摘”出來掛到一個(gè)由多顆PEX89000組成的交換網(wǎng)絡(luò)上再按需把它們動(dòng)態(tài)分配給計(jì)算節(jié)點(diǎn)。某臺(tái)訓(xùn)練節(jié)點(diǎn)任務(wù)量大就多分幾張GPU某臺(tái)存儲(chǔ)節(jié)點(diǎn)容量吃緊就調(diào)整NVMe資源分配。硬件利用率能從傳統(tǒng)的“買一臺(tái)服務(wù)器綁死一套資源”模式里解放出來。存儲(chǔ)池化是其中一個(gè)典型應(yīng)用。訓(xùn)練數(shù)據(jù)、模型檢查點(diǎn)、日志文件都放在集中式NVMe存儲(chǔ)池里計(jì)算節(jié)點(diǎn)通過PCIe Fabric直接訪問延遲比經(jīng)過以太網(wǎng)存儲(chǔ)網(wǎng)關(guān)低一個(gè)量級(jí)。實(shí)測(cè)下來小文件隨機(jī)讀場(chǎng)景的延遲改善尤其明顯因?yàn)閿?shù)據(jù)通路短了協(xié)議轉(zhuǎn)換少了。PEX89000在這個(gè)場(chǎng)景里往往是成對(duì)或成組出現(xiàn)的。一顆芯片作為某個(gè)區(qū)域的根交換多顆芯片之間通過高速上行鏈路相連形成一張二級(jí)交換網(wǎng)絡(luò)。拓?fù)鋸?fù)雜之后規(guī)劃變得很重要哪個(gè)區(qū)域跑GPU流量哪個(gè)區(qū)域跑存儲(chǔ)流量要不要隔離故障域都要在初始設(shè)計(jì)階段定清楚。機(jī)架級(jí)Fabray的好處是彈性好代價(jià)是規(guī)劃復(fù)雜度高沒有足夠的軟硬件調(diào)試能力不建議輕易上手。3. 32GT/s不是標(biāo)個(gè)參數(shù)就能跑信號(hào)完整性與板級(jí)設(shè)計(jì)實(shí)操3.1 信號(hào)完整性PCIe 5.0最容易被低估的一關(guān)PCIe 5.0的32GT/s速率聽起來只是比4.0翻了一倍但對(duì)硬件設(shè)計(jì)的影響是跳躍式的。信號(hào)頻率升高后PCB走線、過孔、連接器、甚至PCB板材本身的介質(zhì)損耗都會(huì)對(duì)信號(hào)質(zhì)量產(chǎn)生嚴(yán)重影響。PCIe Gen5對(duì)通道損耗的預(yù)算通常是32dB左右走線越長、損耗越大留給鏈路的余量就越小。到了這個(gè)速率普通的FR4板材和傳統(tǒng)走線工藝基本到了極限。如果你用的還是FR4、走線超過一二十英寸、中間還過了好幾個(gè)過孔眼圖大概率是閉合的鏈路要么訓(xùn)練失敗要么糾錯(cuò)計(jì)數(shù)一路飆升性能遠(yuǎn)低于預(yù)期。實(shí)際做板時(shí)我建議優(yōu)先考慮這些點(diǎn)第一PCB材料盡量用M6級(jí)別以上的低損耗板材雖然成本漲一些但信號(hào)質(zhì)量會(huì)穩(wěn)很多第二高速差分走線要盡量短從交換芯片到連接器再到GPU接口的距離能壓縮就壓縮第三過孔要背鉆減少stub對(duì)信號(hào)的反射第四做阻抗連續(xù)設(shè)計(jì)走線寬度、間距、參考平面要嚴(yán)格按照計(jì)算值來。這些工作量大但省不掉。PCIe 4.0時(shí)代很多團(tuán)隊(duì)靠多打幾塊板子調(diào)試就能硬趟過去到了Gen5幾乎不可能設(shè)計(jì)階段不留足余量后面就只能用retimer硬救。3.2 Retimer和Redriver什么時(shí)候必須加信號(hào)劣化到一定程度光靠布線優(yōu)化已經(jīng)不夠了得靠Retimer或Redriver這類信號(hào)調(diào)理芯片來“重振旗鼓”。這兩者的區(qū)別在于Redriver只是放大信號(hào)補(bǔ)償損耗噪音也一并放大Retimer內(nèi)部有CDR時(shí)鐘數(shù)據(jù)恢復(fù)電路能把信號(hào)的定時(shí)信息重新恢復(fù)效果更好延遲也略高。PEX89000到GPU之間的距離太長或者中間經(jīng)過多個(gè)連接器時(shí)不要猶豫直接上Retimer。PCIe 5.0的信號(hào)完整性余量很小靠Redriver補(bǔ)增益往往治標(biāo)不治本尤其是在鏈路兩端設(shè)備本身信號(hào)質(zhì)量一般的情況下Retimer的穩(wěn)定性優(yōu)勢(shì)非常明顯。選擇Retimer時(shí)還要注意兼容性。博通自己有配套的PCIe Retimer產(chǎn)品和PEX89000的鏈路調(diào)優(yōu)配合得比較順暢。實(shí)際部署中我遇到過國外某品牌的Retimer和交換芯片組合后鏈路訓(xùn)練成功率不穩(wěn)定的情況最后換成配套方案才解決。不是說不可以用第三方而是建議在選型階段就做交叉兼容性測(cè)試別等板子貼完再排查。3.3 一個(gè)具體參考8卡GPU服務(wù)器里怎么掛兩顆PEX89000下面舉一個(gè)當(dāng)前比較常見的部署方式給大家一個(gè)直觀感受。整機(jī)的主板分前后兩個(gè)區(qū)域??拷麮PU的位置放兩顆PEX89000CPU各出兩個(gè)x16上行分別接到這兩顆交換機(jī)。每顆交換機(jī)下行出4個(gè)x16端口接4張GPU剩下幾個(gè)x8或x4端口接NVMe盤和網(wǎng)卡。GPU的供電、散熱、結(jié)構(gòu)固定件單獨(dú)設(shè)計(jì)與交換芯片的散熱通道互不干擾。這個(gè)布局最大的好處是均衡。兩顆交換芯片各管4張GPU上行帶寬各自獨(dú)立不會(huì)出現(xiàn)8張GPU搶同一條上行通道的情況。GPU之間的東西向流量走同一顆交換芯片延遲更低南北向流量比如GPU與存儲(chǔ)盤、GPU與網(wǎng)卡也被拆到兩顆芯片上壓力分散。散熱上需要特別留意。PEX89000的功耗雖然比GPU低得多但在服務(wù)器緊湊空間里不能忽視建議給它配獨(dú)立的散熱片和風(fēng)道。如果機(jī)箱風(fēng)道設(shè)計(jì)不好交換芯片過熱會(huì)觸發(fā)降頻連帶整個(gè)PCIe交換網(wǎng)絡(luò)的延遲性能一起下降。這個(gè)坑不那么顯眼但踩到的人不少。4. 固件、BIOS和Linux讓系統(tǒng)真正認(rèn)識(shí)這顆交換芯片4.1 固件初始化端口拆分與流量類型的配置順序PEX89000不是一個(gè)插上就能用的傻瓜芯片。板上電后它需要從EEPROM讀取配置確定端口怎么拆分、每個(gè)端口的lane數(shù)、是否啟用NTB、是否開啟CXL相關(guān)功能。這個(gè)過程如果配置不對(duì)后面Linux啟動(dòng)時(shí)設(shè)備枚舉都會(huì)出問題。端口拆分的典型場(chǎng)景是一顆48端口規(guī)格的交換芯片按需求拆成3個(gè)x16端口加若干個(gè)x8、x4端口。這個(gè)映射關(guān)系在固件里定義好再通過總線枚舉讓系統(tǒng)認(rèn)到對(duì)應(yīng)的PCIe橋。拆分不對(duì)最常見的后果是某張GPU只被識(shí)別成x8鏈路帶寬折半而你在系統(tǒng)里看lspci還對(duì)不出問題。流量類型TC/VC的配置也容易被忽略。PEX89000支持多個(gè)虛擬通道可以給不同類型的流量分配不同優(yōu)先級(jí)。AI訓(xùn)練場(chǎng)景里GPU P2P通信應(yīng)該走高優(yōu)先級(jí)通道管理流量走低優(yōu)先級(jí)防止突發(fā)的管理操作擠占數(shù)據(jù)帶寬。這些配置在固件階段就要定好操作系統(tǒng)層面很難高效干預(yù)。4.2 Linux枚舉與BAR空間新手最容易翻車的地方系統(tǒng)啟動(dòng)后Linux會(huì)枚舉PCIe總線為每個(gè)設(shè)備分配內(nèi)存地址空間。PCIe交換芯片在這個(gè)環(huán)節(jié)常見的問題是下行設(shè)備太多、橋接層級(jí)太深導(dǎo)致總線號(hào)分配不夠或者BAR基地址寄存器窗口太小設(shè)備資源沖突。我遇到過最典型的卡點(diǎn)是接了多張GPU后某張卡的BAR空間無法分配導(dǎo)致GPU狀態(tài)變成“disabled”。查下來發(fā)現(xiàn)是BIOS給交換芯片root port預(yù)留的bus range太窄設(shè)備一多就不夠用。解決方法是進(jìn)BIOS手動(dòng)增大PCIe bus range或者調(diào)整交換芯片的端口拓?fù)渖疃葴p少bus資源消耗。還有一個(gè)容易被忽視的點(diǎn)PCIe交換機(jī)本身的端口會(huì)占用額外的bus號(hào)。如果一顆PEX89000下掛了很多設(shè)備bus號(hào)分配層級(jí)會(huì)比直連多好幾級(jí)對(duì)BIOS的自動(dòng)分配能力是很大考驗(yàn)。生產(chǎn)環(huán)境里不要完全依賴BIOS自動(dòng)配置手動(dòng)規(guī)劃好bus range和memory窗口更穩(wěn)妥。4.3 錯(cuò)誤處理與熱插拔故障域一定要隔離AI集群里的GPU故障率不低一臺(tái)8卡機(jī)器跑半個(gè)月壞一張卡是很正常的事。PCIe交換芯片在這里面臨的挑戰(zhàn)是當(dāng)一個(gè)下游端口上的設(shè)備出錯(cuò)時(shí)錯(cuò)誤不能擴(kuò)散到整機(jī)否則一張卡壞了整套訓(xùn)練任務(wù)都得停。PEX89000支持標(biāo)準(zhǔn)的PCIe錯(cuò)誤處理機(jī)制包括AER高級(jí)錯(cuò)誤報(bào)告、DPC下游端口包含等。DPC的作用很關(guān)鍵當(dāng)一個(gè)下游端口發(fā)生致命錯(cuò)誤時(shí)它能把該端口隔離起來阻止錯(cuò)誤報(bào)文向其他端口廣播其他設(shè)備不受影響。這樣系統(tǒng)可以嘗試重置出錯(cuò)設(shè)備或者通知管理軟件把該設(shè)備下線實(shí)現(xiàn)一定程度的故障隔離。在實(shí)際部署中建議在BIOS里把這些錯(cuò)誤處理特性全部啟用然后在Linux里配置好對(duì)應(yīng)驅(qū)動(dòng)做一輪故障注入測(cè)試。拔一張卡、模擬鏈路錯(cuò)誤觀察其他設(shè)備是否正常運(yùn)行。很多團(tuán)隊(duì)等到上線后才第一次遇到GPU卡故障然后整機(jī)PCIe總線掛死重啟都困難這種體驗(yàn)確實(shí)很痛。5. 實(shí)測(cè)性能、帶寬分配與調(diào)優(yōu)不是做了拓?fù)渚屯晔?.1 帶寬分配的現(xiàn)實(shí)聚合帶寬不等于有效帶寬PEX89000規(guī)格書上的聚合帶寬很高但“聚合”和“實(shí)測(cè)有效帶寬”是兩回事。PCIe交換芯片在內(nèi)部有仲裁機(jī)制多個(gè)下行端口同時(shí)向同一個(gè)上行端口發(fā)數(shù)據(jù)時(shí)上行端口會(huì)成為瓶頸數(shù)據(jù)得排隊(duì)。這種競爭在實(shí)際訓(xùn)練里一定會(huì)發(fā)生尤其是All-Reduce階段多張GPU要同時(shí)交換數(shù)據(jù)流量模式高度集中。所以做性能評(píng)估時(shí)不要只看單端口跑bandwidth test的峰值要看多端口同時(shí)工作時(shí)的表現(xiàn)。舉個(gè)例子某顆交換芯片單端口跑到x16單向63GB/s但8個(gè)端口同時(shí)向兩個(gè)上行端口灌數(shù)據(jù)時(shí)平均每個(gè)端口可能只能分到十幾GB/s。這是物理限制不是bug。把測(cè)試方案設(shè)計(jì)成貼近真實(shí)負(fù)載比對(duì)著規(guī)格書做期望測(cè)算有意義得多。測(cè)試工具不一定要很復(fù)雜先用常見的P2P帶寬測(cè)試工具看兩兩GPU之間的通信速率再用分布式訓(xùn)練框架的集合通信測(cè)試跑一輪觀察實(shí)際訓(xùn)練吞吐是否達(dá)標(biāo)。5.2 調(diào)優(yōu)方向TLP大小、中斷綁定與NUMA感知硬件拓?fù)浯詈弥筌浖{(diào)優(yōu)能帶來非常可觀的收益我自己的經(jīng)驗(yàn)是至少能拉開30%到50%的性能差距。第一個(gè)值得動(dòng)手的地方是Max Payload SizeMPS和Max Read Request SizeMRRS。這兩個(gè)參數(shù)分別決定了一次TLP包最多能攜帶多少數(shù)據(jù)、一次讀請(qǐng)求最多能讀回多少數(shù)據(jù)。MPS偏小會(huì)讓數(shù)據(jù)被切成太多小包協(xié)議開銷占比升高帶寬上不去MPS偏大會(huì)占用更多緩沖空間不一定兼容所有設(shè)備。建議把鏈路兩端設(shè)備統(tǒng)一調(diào)成256或512字節(jié)然后用實(shí)測(cè)結(jié)果試出最優(yōu)值。第二個(gè)關(guān)鍵是中斷綁定。多GPU訓(xùn)練的卡間通信會(huì)觸發(fā)大量完成中斷MSI/MSI-X如果中斷落在CPU的某個(gè)繁忙核心上會(huì)增加額外延遲。用irqbalance或手動(dòng)設(shè)置親和性把網(wǎng)卡和PCIe交換相關(guān)的中斷綁定到對(duì)應(yīng)NUMA node的空閑核心上訓(xùn)練吞吐會(huì)有直觀改善。第三個(gè)是NUMA感知。兩顆PEX89000分別掛在兩顆CPU下GPU和CPU之間天然有遠(yuǎn)近之分。訓(xùn)練任務(wù)的進(jìn)程、內(nèi)存頁面和GPU設(shè)備如果跨NUMA訪問性能會(huì)打折扣。啟動(dòng)訓(xùn)練框架前仔細(xì)核對(duì)GPU的拓?fù)錃w屬用NUMA綁定參數(shù)把進(jìn)程釘在正確的CPU上內(nèi)存分配策略也設(shè)置成本地優(yōu)先。5.3 觀察指標(biāo)別漏掉Corrected Errors這里分享一個(gè)很多運(yùn)維團(tuán)隊(duì)容易忽略的監(jiān)控項(xiàng)PCIe Corrected Errors。這類錯(cuò)誤不會(huì)導(dǎo)致設(shè)備掉線系統(tǒng)會(huì)自動(dòng)重傳或糾錯(cuò)業(yè)務(wù)看起來一切正常但糾錯(cuò)次數(shù)累積到一定程度說明鏈路余量不足性能已經(jīng)在悄悄下滑。用工具查看PCIe錯(cuò)誤統(tǒng)計(jì)核心關(guān)注AER的Corrected Errors計(jì)數(shù)尤其是可恢復(fù)的接收錯(cuò)誤、不良TLP這類計(jì)數(shù)。如果這些數(shù)字在持續(xù)增長需要立刻檢查鏈路訓(xùn)練狀態(tài)、信號(hào)完整性和連接器接觸情況。等設(shè)備報(bào)Fatal Error再處理往往已經(jīng)晚了。我在實(shí)際項(xiàng)目里經(jīng)??吹紾PU訓(xùn)練速度突然下降排查到最后都是PCIe鏈路誤碼率偏高系統(tǒng)在不斷重傳數(shù)據(jù)訓(xùn)練效率自然掉。所以說PCIe在AI集群里的健康度監(jiān)控應(yīng)該和GPU溫度、網(wǎng)絡(luò)丟包一樣納入日常巡檢范圍。6. 幾顆芯片部署下來我踩過的坑和最后想說的6.1 坑只改硬件不改軟件性能一樣上不去第一次把PEX89000放進(jìn)GPU服務(wù)器時(shí)我以為只要拓?fù)浯顚?duì)了系統(tǒng)就能自動(dòng)發(fā)揮全部性能。結(jié)果訓(xùn)練任務(wù)一跑All-Reduce帶寬低得讓人懷疑人生。查了一輪才發(fā)現(xiàn)驅(qū)動(dòng)里沒有開啟P2P優(yōu)化中斷全部落在CPU核心0上MPS參數(shù)也是默認(rèn)的128字節(jié)各種小包把鏈路協(xié)議開銷拉滿。經(jīng)歷這一次之后我明白PCIe交換芯片帶來的拓?fù)渥兓皇腔A(chǔ)真正把它跑出效果需要硬件和軟件協(xié)同作戰(zhàn)。拿到新硬件先花時(shí)間把所有驅(qū)動(dòng)參數(shù)、BIOS選項(xiàng)、中斷綁定策略全部過一遍用測(cè)試工具量出基線再做針對(duì)性調(diào)優(yōu)。6.2 坑過度依賴自動(dòng)化配置出了問題難定位用PEX89000搭建機(jī)架級(jí)Fabric時(shí)配置復(fù)雜度會(huì)成倍上升很多人喜歡一鍵腳本自動(dòng)化部署。自動(dòng)化本身沒問題但一旦出問題排查鏈路變得特別長。我遇到過一次端口拆分配置被某個(gè)腳本覆蓋導(dǎo)致整機(jī)PCIe枚舉混亂每一張GPU鏈路都只剩x4排查了很久才定位到是配置管理的問題。后來我堅(jiān)持把關(guān)鍵的固件配置版本化每顆交換芯片的配置都記錄在案任何改動(dòng)都留變更記錄。這套笨辦法在排障時(shí)救了我很多次比什么都靈。6.3 最后說幾句PCIe 5.0交換芯片在AI集群里的價(jià)值不只是多接幾張卡那么簡單它改變的是整個(gè)拓?fù)涞撵`活性。算力資源可以解耦、可以池化、可以按需分配這些都是過去單機(jī)直連模式給不了的。如果你正在規(guī)劃AI訓(xùn)練集群我建議不要只盯著GPU型號(hào)和高速網(wǎng)絡(luò)方案把PCIe互聯(lián)層一并納入整體設(shè)計(jì)從拓?fù)湟?guī)劃、信號(hào)完整性設(shè)計(jì)到固件配置、軟件調(diào)優(yōu)都當(dāng)作系統(tǒng)工程來做。底層的路修好了上層再快的車才跑得起來。