集體通信是現(xiàn)代分布式人工智能培訓(xùn)工作(如推薦系統(tǒng)和自然語言處理)的一個(gè)關(guān)鍵性能組成部分。
NVIDIA Collective Communication Library ( NCCL )是一個(gè) Magnum IO 庫,可實(shí)現(xiàn) GPU 加速的集體操作:
集合
全部減少
廣播
減少
減少分散
點(diǎn)對點(diǎn)發(fā)送和接收
NCCL 具有拓?fù)湟庾R,經(jīng)過優(yōu)化,可通過 PCIe 、 NVLink 、以太網(wǎng)和 InfiniBand 互連實(shí)現(xiàn)高帶寬和低延遲。 NCCL GCP 插件 和 NCCL AWS 插件 通過自定義網(wǎng)絡(luò)連接,在流行的云環(huán)境中實(shí)現(xiàn)高性能 NCCL 操作。
NCCL 版本一直致力于提高集體溝通績效。這篇文章主要關(guān)注 NCCL 2.12 版本帶來的改進(jìn)。
結(jié)合 NVLink 和網(wǎng)絡(luò)通信
NCCL 2.12 中引入的新功能稱為 PXN ,稱為 PCI × NVLink ,因?yàn)樗?GPU 能夠通過 NVLink 然后通過 PCI 與節(jié)點(diǎn)上的 NIC 通信。這不是使用 QPI 或其他無法提供全部帶寬的 CPU 協(xié)議通過 CPU 。這樣,即使每個(gè) GPU 仍然盡可能多地使用其本地 NIC ,但如果需要,它可以訪問其他 NIC 。
GPU 在中間 GPU 上準(zhǔn)備緩沖區(qū),通過 NVLink 寫入,而不是在其本地內(nèi)存上準(zhǔn)備緩沖區(qū)供本地 NIC 發(fā)送。然后,它通知管理該 NIC 的 CPU 代理數(shù)據(jù)已就緒,而不是通知其自己的 CPU 代理。 GPU- CPU 同步可能會稍微慢一點(diǎn),因?yàn)樗赡鼙仨毚┻^ CPU 插槽,但數(shù)據(jù)本身只使用 NVLink 和 PCI 交換機(jī),以保證最大帶寬。


圖 1 。軌道優(yōu)化拓?fù)?/p>
在圖 1 的拓?fù)渲?,每個(gè) DGX 系統(tǒng)的 NIC-0 連接到同一個(gè)葉交換機(jī)( L0 ), NIC-1 連接到同一個(gè)葉交換機(jī)( L1 ),依此類推。這種設(shè)計(jì)通常被稱為 rail-optimized 。鐵路優(yōu)化網(wǎng)絡(luò)拓?fù)溆兄谧畲笙薅鹊靥岣咚辛髁浚档托阅?,同時(shí)最大限度地減少流量之間的網(wǎng)絡(luò)干擾。它還可以通過輕軌之間的連接來降低網(wǎng)絡(luò)成本。
PXN 利用節(jié)點(diǎn)內(nèi) GPU 之間的 NVIDIA NVSwitch 連接,首先將 GPU 上的數(shù)據(jù)移動到與目的地相同的軌道上,然后在不跨越軌道的情況下將其發(fā)送到目的地。這可以實(shí)現(xiàn)消息聚合和網(wǎng)絡(luò)流量優(yōu)化。


圖 2 。從 DGX-A 中的 GPU0 到 DGX-B 中的 GPU3 的消息路徑示例
在 NCCL 2.12 之前,圖 X 中的消息會穿過網(wǎng)絡(luò)交換機(jī)的三個(gè)躍點(diǎn)( L0 、 S1 和 L3 ),這可能會導(dǎo)致爭用,并被其他流量減慢。在同一對 NIC 之間傳遞的消息被聚合,以最大限度地提高有效消息速率和網(wǎng)絡(luò)帶寬。
消息聚合
使用 PXN ,給定節(jié)點(diǎn)上的所有 GPU 將其數(shù)據(jù)移動到給定目的地的單個(gè) GPU 上。這使得網(wǎng)絡(luò)層能夠通過實(shí)現(xiàn)新的多接收功能來聚合消息。該功能使遠(yuǎn)程 CPU 代理能夠在所有消息準(zhǔn)備就緒后立即將它們作為一個(gè)整體發(fā)送。
例如,如果節(jié)點(diǎn)上的 GPU 正在執(zhí)行 all2all 操作,并且要從遠(yuǎn)程節(jié)點(diǎn)的所有八個(gè) GPU 接收數(shù)據(jù), NCCL 調(diào)用具有八個(gè)緩沖區(qū)和大小的多接收。在發(fā)送方方面,網(wǎng)絡(luò)層可以等待所有八次發(fā)送就緒,然后一次發(fā)送所有八條消息,這會對消息速率產(chǎn)生顯著影響。
消息聚合的另一個(gè)方面是,現(xiàn)在在給定目的地的所有 GPU 節(jié)點(diǎn)之間共享連接。這意味著要建立的連接更少。如果路由算法依賴于有很多不同的連接來獲得良好的熵,這也會影響路由效率。
PXN 提高了所有 2 的性能


圖 3 。所有 2 跨四個(gè)參與流程的所有集體操作
圖 3 顯示了 all2all 需要從每個(gè)進(jìn)程到其他每個(gè)進(jìn)程的通信。換句話說,在 N – GPU 集群中,作為 all2all 操作的一部分交換的消息數(shù)是$ O ( N ^{ 2 })$。
GPU 之間交換的消息是不同的,無法使用 樹/環(huán)等算法(用于 allreduce ) 進(jìn)行優(yōu)化。當(dāng)您在 GPU 的 100 秒內(nèi)運(yùn)行十億個(gè)以上的參數(shù)模型時(shí),消息的數(shù)量可能會觸發(fā)擁塞、創(chuàng)建網(wǎng)絡(luò)熱點(diǎn),并對性能產(chǎn)生不利影響。
如前所述, PXN 將 NVLink 和 PCI 通信結(jié)合起來,以減少通過第二層脊椎交換機(jī)的流量,并優(yōu)化網(wǎng)絡(luò)流量。它還通過將多達(dá)八條消息聚合為一條消息來提高消息速率。這兩項(xiàng)改進(jìn)都顯著提高了所有 2 的性能。
所有 reduce 都基于 1:1 GPU:NIC 拓?fù)?/p>
PXN 解決的另一個(gè)問題是拓?fù)涞那闆r,即每個(gè) NIC 附近都有一個(gè) GPU 。環(huán)形算法要求兩個(gè) GPU 靠近每個(gè) NIC 。數(shù)據(jù)必須從網(wǎng)絡(luò)傳輸?shù)降谝粋€(gè) GPU ,通過 NVLink 繞過所有 GPU ,然后從最后一個(gè) GPU 退出網(wǎng)絡(luò)。第一個(gè)和最后一個(gè) GPU 必須都靠近 NIC 。第一個(gè) GPU 必須能夠有效地從網(wǎng)絡(luò)接收,最后一個(gè) GPU 必須能夠有效地通過網(wǎng)絡(luò)發(fā)送。如果只有一個(gè) GPU 靠近給定的 NIC ,則無法關(guān)閉環(huán),必須通過 CPU 發(fā)送數(shù)據(jù),這可能會嚴(yán)重影響性能。
有了 PXN ,只要最后一個(gè) GPU 可以通過 NVLink 訪問第一個(gè) GPU ,它就可以將數(shù)據(jù)移動到第一個(gè) GPU 。數(shù)據(jù)從那里發(fā)送到 NIC ,將所有傳輸保持在 PCI 交換機(jī)的本地。
這種情況不僅與每個(gè) PCI 交換機(jī)具有一個(gè) GPU 和一個(gè) NIC 的 PCI 拓?fù)溆嘘P(guān),而且當(dāng) NCCL 通信器僅包含 GPU 的子集時(shí),也可能發(fā)生在其他拓?fù)渖???紤]具有 nVLink 超立方體網(wǎng)格的 8x GPU 互連的節(jié)點(diǎn)。


圖 4 。 NVIDIA DGX-1 系統(tǒng)中的網(wǎng)絡(luò)拓?fù)?/p>
圖 5 顯示了當(dāng)通信器包括系統(tǒng)中的所有 8x GPU 時(shí),利用拓?fù)渲锌捎玫母邘?NVLink 連接可以形成的環(huán)。這是可能的,因?yàn)?GPU0 和 GPU1 共享對同一本地 NIC 的訪問。


圖 5 。 NCCL 使用的環(huán)形路徑示例
通訊器只能包含 GPU 的一個(gè)子集。例如,它可以只包含 GPU 0 、 2 、 4 和 6 。在這種情況下,如果不穿過軌道,就不可能創(chuàng)建環(huán):從 GPU 0 進(jìn)入節(jié)點(diǎn)的環(huán)必須從 GPU 2 、 4 或 6 退出,這些環(huán)不能直接訪問 GPU 0 ( NIC 0 和 1 )的本地 NIC 。
另一方面, PXN 允許形成環(huán),因?yàn)?GPU 2 可以在通過 NIC 0 / 1 之前將數(shù)據(jù)移回 GPU 0 。
這種情況在模型并行性中很常見,具體取決于模型的拆分方式。例如,如果一個(gè)模型在 GPU 0-3 之間拆分,則另一個(gè)模型在 GPU 4-7 上運(yùn)行。這意味著 GPU 0 和 4 負(fù)責(zé)模型的同一部分,并且在所有節(jié)點(diǎn)上創(chuàng)建了一個(gè) NCCL 通信器,其中包含所有 GPU 0 和 4 ,以執(zhí)行相應(yīng)層的所有 reduce 操作。沒有 PXN ,這些通訊器無法有效地執(zhí)行所有 reduce 操作。
到目前為止,實(shí)現(xiàn)高效模型并行的唯一方法是在 GPU 0 , 2 , 4 , 6 和 1 , 3 , 5 , 7 上拆分模型,這樣 NCCL 子通信程序?qū)?GPU [0 , 1]、[2 , 3]、[4 , 5]和[6 , 7],而不是[0 , 4]、[1 , 5]、[2 , 6]和[3 , 7]。新的 PXN 特性為您提供了更大的靈活性,并簡化了模型并行性的使用。


圖 6 。 NCCL 2.12 PXN 性能改進(jìn)
圖 6 對比了在使用和不使用 PXN 的情況下完成所有集合操作的時(shí)間。此外, PXN 為所有 reduce 操作提供了更靈活的 GPU 選擇。
總結(jié)
NCCL 2.12 版本顯著提高了所有 2 所有通信集體性能。 Download 最新的 NCCL 版本,并親身體驗(yàn)改進(jìn)后的性能。
關(guān)于作者
Karthik Mandakolathur 是 NVIDIA Magnum IO 的產(chǎn)品經(jīng)理,專注于加速分布式 AI 、數(shù)據(jù)分析和 HPC 應(yīng)用。憑借 20 多年的行業(yè)經(jīng)驗(yàn), Karthik 曾在 Broadcom 和 Cisco 擔(dān)任高級工程和產(chǎn)品職務(wù)。他在沃頓商學(xué)院獲得工商管理碩士學(xué)位,在斯坦福大學(xué)獲得工商管理碩士學(xué)位,在印度理工學(xué)院獲得工商管理學(xué)士學(xué)位。他在高性能交換架構(gòu)領(lǐng)域擁有多項(xiàng)美國專利。
Sylvain Jeaugey 是 NVIDIA 的高級軟件工程師,自 2015 年創(chuàng)建 NCCL 庫以來一直在開發(fā)該庫。他在大規(guī)模分布式計(jì)算方面有 15 年的經(jīng)驗(yàn)。他一直致力于各種 MPI 實(shí)現(xiàn),開發(fā)和集成高速網(wǎng)絡(luò)技術(shù),并設(shè)計(jì)大型網(wǎng)絡(luò)結(jié)構(gòu)。
審核編輯:郭婷
-
gpu
+關(guān)注
關(guān)注
28文章
5213瀏覽量
135615 -
人工智能
+關(guān)注
關(guān)注
1819文章
50138瀏覽量
265790
發(fā)布評論請先 登錄
中興通訊將攜全棧AI創(chuàng)新成果亮相MWC 2026
IoT智能模塊高速緩存核心IS61WV204816ALL-12B
全碳化硅 (All-SiC) 有源中點(diǎn)鉗位 (ANPC) 拓?fù)浣鉀Q方案研究報(bào)告
RDMA設(shè)計(jì)29:RoCE v2 發(fā)送及接收模塊設(shè)計(jì)2
10 INCH-D-PRIME-MV Amphenol All Sensors 板機(jī)接口壓力傳感器 AXCXL 10 DN P
SeaVerse發(fā)布全球首個(gè)AI Native平臺,“All in AI Native”引領(lǐng)AI創(chuàng)作前瞻革命
100 PSI-D-PRIME-MV-A6AAQ 板機(jī)接口壓力傳感器 Amphenol All Sensors
探索PROFET? +2 12V客戶評估套件:硬件設(shè)計(jì)與軟件應(yīng)用全解析
探索All Sensors EK - 02評估套件:簡化傳感器設(shè)計(jì)與測試流程
Amphenol All Sensors BFTM系列基礎(chǔ)壓力傳感器:高精度與緊湊設(shè)計(jì)的完美結(jié)合
天合光能智慧光儲解決方案亮相2025澳洲All Energy展會
studio編譯過程中報(bào)錯(cuò):syntax error: unexpected如何解決?
元能芯:用All-in-One芯片革新電機(jī)芯片市場
使用NCCL 2.12將所有all2all性能翻倍
評論