熊先奎/XIONG Xiankui, 袁進(jìn)輝/YUAN Jinhui, 宋慶春/SONG Qingchun
(1. 中興通訊股份有限公司,中國(guó) 深圳 518057;2. 北京一流科技有限公司,中國(guó) 北京 100083;3. 國(guó)際高性能計(jì)算和人工智能咨詢委員會(huì),美國(guó) 森尼韋爾 94085)
(1. ZTE Corporation, Shenzhen 518057, China;2. Beijing Oneflow Technology Co., Ltd., Beijing 100083, China;3. HPC-AI Advisory Council, Sunnyvale 94085, USA)
2012年,AlexNet深度神經(jīng)網(wǎng)絡(luò)獲得ImageNet圖像識(shí)別測(cè)試的歷史性突破。隨后,基于深度學(xué)習(xí)的人工智能(AI)研究和應(yīng)用再度爆發(fā)[1-2]。深度學(xué)習(xí)使用多層卷積或循環(huán)神經(jīng)網(wǎng)絡(luò)和反向傳播算法,通過(guò)標(biāo)簽數(shù)據(jù)集訓(xùn)練特定模型,在推理階段提供語(yǔ)音識(shí)別、圖像識(shí)別等AI應(yīng)用。算法、數(shù)據(jù)集、算力是本輪AI成功騰飛的3個(gè)要素,三者缺一不可。其中,以圖形處理單元(GPU)多指令多數(shù)據(jù)流(MIMD)計(jì)算架構(gòu)提供的高性能算力訓(xùn)練平臺(tái)成為深度學(xué)習(xí)實(shí)現(xiàn)工程化的基礎(chǔ)。
在機(jī)器學(xué)習(xí)領(lǐng)域[3],隱含狄利克雷分布(LDA)主題模型對(duì)文本表征降維后,生成聚類統(tǒng)計(jì)模型,以支持互聯(lián)網(wǎng)實(shí)現(xiàn)文本分類、頭條推薦等。由大規(guī)模邏輯回歸(LR)生成的預(yù)測(cè)模型所支撐的金融違約分析應(yīng)用等機(jī)器學(xué)習(xí)方法,也同樣需要大規(guī)模算力部署。
大規(guī)模機(jī)器學(xué)習(xí)本質(zhì)上是一種特殊的高性能計(jì)算(HPC),因此,要實(shí)現(xiàn)計(jì)算的分布式和并發(fā)性,除算力本身外,還離不開(kāi)計(jì)算范式的定制化設(shè)計(jì)和計(jì)算通信的網(wǎng)絡(luò)優(yōu)化。
最新深度學(xué)習(xí)模型的訓(xùn)練需要消耗更多的算力。鑒于深度學(xué)習(xí)模型計(jì)算主要是稠密型計(jì)算,業(yè)界廣泛采用GPU等協(xié)處理器進(jìn)行并行加速,但單個(gè)協(xié)處理器的算力仍無(wú)法滿足日益增長(zhǎng)的算力需求。通過(guò)高速互聯(lián)技術(shù)把更多協(xié)處理器連接起來(lái),能夠協(xié)同輸出大規(guī)模算力,可實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)數(shù)十至上百吉比特的傳輸帶寬,例如節(jié)點(diǎn)內(nèi)可以使用外設(shè)部件互連標(biāo)準(zhǔn)(PCIe)或NvLink等技術(shù)。當(dāng)單個(gè)節(jié)點(diǎn)仍無(wú)法滿足需求時(shí),可通過(guò)高速網(wǎng)絡(luò)實(shí)現(xiàn)多節(jié)點(diǎn)分布式計(jì)算。此時(shí),由于傳輸帶寬過(guò)低,普通以太網(wǎng)絡(luò)(千兆網(wǎng)或萬(wàn)兆網(wǎng))會(huì)出現(xiàn)多節(jié)點(diǎn)擴(kuò)展效率極低、計(jì)算資源嚴(yán)重浪費(fèi)的現(xiàn)象。因此,在分布式深度學(xué)習(xí)訓(xùn)練場(chǎng)景中,基于遠(yuǎn)程直接內(nèi)存訪問(wèn)(RDMA)的網(wǎng)絡(luò)通信成為最佳選擇。
分布式深度學(xué)習(xí)訓(xùn)練任務(wù)必須使用RDMA技術(shù),這是因?yàn)椋海?)深度學(xué)習(xí)訓(xùn)練任務(wù)普遍使用隨機(jī)梯度下降算法。每處理一小片數(shù)據(jù)就需要更新模型參數(shù),計(jì)算粒度很細(xì),對(duì)網(wǎng)絡(luò)傳輸?shù)难舆t容忍度非常低。(2)深度學(xué)習(xí)普遍使用的GPU加速卡,吞吐率非常高。如果數(shù)據(jù)搬運(yùn)速度跟不上計(jì)算速度,就容易造成計(jì)算資源浪費(fèi)。(3)在深度學(xué)習(xí)訓(xùn)練中,系統(tǒng)調(diào)度、數(shù)據(jù)加載和預(yù)處理均需要使用CPU資源,而基于傳統(tǒng)以太網(wǎng)的網(wǎng)絡(luò)傳輸也需要消耗很多CPU計(jì)算資源,這會(huì)影響整個(gè)系統(tǒng)的效率。RDMA的內(nèi)核旁路技術(shù)可降低CPU利用率,提高整個(gè)系統(tǒng)的效率。
因此,分布式AI訓(xùn)練平臺(tái)需要特殊的硬件設(shè)計(jì)、低延遲的通信網(wǎng)絡(luò)、抽象化的通信原語(yǔ)庫(kù)和定制化的計(jì)算范式。其中,低延遲的通信網(wǎng)絡(luò)和通信原語(yǔ)庫(kù)是本文關(guān)注的重點(diǎn)。
RDMA技術(shù)是由無(wú)限帶寬貿(mào)易協(xié)會(huì)(IBTA)定義的面向高性能、大規(guī)模、軟件定義及易管理等的先進(jìn)網(wǎng)絡(luò)通信技術(shù)[4],最初被用于InfiniBand網(wǎng)絡(luò),后來(lái)被廣泛應(yīng)用在以太網(wǎng)中?;谌诤弦蕴W(wǎng)的RDMA(RoCE)更是被全球各大數(shù)據(jù)中心用戶廣泛地部署。RDMA已成為目前提升網(wǎng)絡(luò)應(yīng)用性能的關(guān)鍵技術(shù)之一。
RDMA技術(shù)提供了一個(gè)可以將RDMA硬件對(duì)外進(jìn)行高效通信的抽象層(verbs)。用戶可以利用各種方式來(lái)調(diào)用verbs,以實(shí)現(xiàn)對(duì)于RDMA硬件的調(diào)用[5]。一般而言,雖然直接調(diào)用verbs可以獲得最佳性能,但是仍然需要對(duì)應(yīng)用的通信接口進(jìn)行修改。當(dāng)然,也可以直接使用現(xiàn)有的通信中間件來(lái)調(diào)用RDMA,而無(wú)須對(duì)應(yīng)用做任何修改,如信息傳遞接口(MPI)[6]、英偉達(dá)多GPU通信庫(kù)(NCCL)[7]、Internet小型計(jì)算機(jī)系統(tǒng)接口(iSCSI)、基于Fabric的非易失性存儲(chǔ)(NVMeoF)、Lustre等。 這是因?yàn)檫@些中間件已經(jīng)將RDMA通信庫(kù)包含在自己的通信庫(kù)里,對(duì)應(yīng)用而言是完全透明的。
在通信過(guò)程中,RDMA可以繞開(kāi)操作系統(tǒng),直接實(shí)現(xiàn)不同機(jī)器內(nèi)存之間的數(shù)據(jù)傳遞。如圖1所示,與傳輸控制協(xié)議(TCP)相比,RDMA不需要從內(nèi)存到操作系統(tǒng)、再到網(wǎng)卡硬件的層層拷貝,也不需要等待CPU中斷來(lái)層層拷貝數(shù)據(jù)。這既降低了CPU在通信上的利用率,又減少了對(duì)CPU中斷的消耗。將CPU或者GPU的計(jì)算資源完全供給應(yīng)用有助于應(yīng)用性能的提升。此外,隨著網(wǎng)絡(luò)速度的提升,傳統(tǒng)的TCP通信對(duì)CPU在通信上消耗的資源也越來(lái)越多,這導(dǎo)致應(yīng)用得不到足夠的CPU資源來(lái)運(yùn)行。當(dāng)數(shù)據(jù)中心規(guī)模達(dá)到一定程度時(shí),可能會(huì)出現(xiàn)性能下降的現(xiàn)象,這也是為什么大規(guī)模數(shù)據(jù)中心都最先關(guān)注RDMA的原因之一。
在通信中,RDMA是如何做到不消耗CPU呢?在網(wǎng)絡(luò)傳輸層,IBTA規(guī)范首先做了嚴(yán)格的定義,即將傳輸層的各種操作都直接定義到了硬件實(shí)現(xiàn)上,例如將應(yīng)用的message在發(fā)送端傳輸時(shí)的分割打包操作。由于應(yīng)用的信息往往都很大(最大達(dá)到2 GB),網(wǎng)絡(luò)無(wú)法將一個(gè)這么大的信息直接傳出去,需要將它分割成多個(gè)小于網(wǎng)絡(luò)最大傳輸單元(MTU)的數(shù)據(jù)包,然后給每個(gè)數(shù)據(jù)包做Checksum和加header等。所有這些操作原來(lái)都是CPU在做,現(xiàn)在RDMA網(wǎng)卡可以直接將它們卸載過(guò)來(lái),無(wú)須再依賴于CPU。同樣地,在接收端也可以將一系列反向操作以卸載到網(wǎng)卡的硬件上來(lái)。此外,IBTA還根據(jù)網(wǎng)絡(luò)面向數(shù)據(jù)或是面向連接等特性定義了不同的數(shù)據(jù)傳輸方式,如可靠連接(RC)、不可靠連接(UC)和不可靠數(shù)據(jù)報(bào)(UD)等。利用各種數(shù)據(jù)傳輸方式的特點(diǎn),應(yīng)用之間可以使用不同的RDMA通信方式,如rdma_send、rdma_write、rdma_read、rdma_atomic等,如圖2所示。
rdma_send是一種雙邊操作,需要在發(fā)送端和接收端都執(zhí)行后處理請(qǐng)求操作。當(dāng)數(shù)據(jù)到達(dá)接收端時(shí),需要向遠(yuǎn)端服務(wù)器查詢數(shù)據(jù)的終點(diǎn),這時(shí)可以使用RC、UC和UD來(lái)進(jìn)行數(shù)據(jù)傳輸。
rdma_write、rdma_read和 rdma_atomic都是單邊操作。使用rdma_write時(shí),遠(yuǎn)端CPU在數(shù)據(jù)寫(xiě)入的過(guò)程中不參與任何操作,可以使用RC或UC來(lái)傳輸;使用rdma_read時(shí),在從遠(yuǎn)端存儲(chǔ)中讀取數(shù)據(jù)的過(guò)程中不需要通知遠(yuǎn)端CPU,可以使用RC來(lái)傳輸;rdma_atomic是rdma_read和rdma_write的組合操作,應(yīng)用可以首先從遠(yuǎn)端服務(wù)器中讀取數(shù)據(jù)、改寫(xiě)數(shù)據(jù),然后再寫(xiě)回遠(yuǎn)端內(nèi)存,中間不需要和遠(yuǎn)端CPU有任何溝通,可以使用RC來(lái)傳輸。
▲圖1 RDMA和TCP的比較
通過(guò)在傳輸層的卸載,RDMA實(shí)現(xiàn)了應(yīng)用之間的高效通信,但這同時(shí)給RDMA網(wǎng)絡(luò)的端到端連接帶來(lái)了挑戰(zhàn):如何能保障在數(shù)據(jù)傳輸?shù)倪^(guò)程中不會(huì)因網(wǎng)絡(luò)問(wèn)題而導(dǎo)致數(shù)據(jù)的丟失。為了應(yīng)對(duì)這一挑戰(zhàn),在InfiniBand網(wǎng)絡(luò)中,采用了基于credit的鏈路層流控機(jī)制。高性能的動(dòng)態(tài)路由和擁塞控制機(jī)制有效地控制了網(wǎng)絡(luò)中的丟包問(wèn)題。在以太網(wǎng)上,顯示擁塞通知(ECN)+擁塞通知包(CNP)和基于優(yōu)先級(jí)的流量控制(PFC)等機(jī)制被用于減少網(wǎng)絡(luò)中的丟包,但如何將以太網(wǎng)的流控做到像InfiniBand網(wǎng)絡(luò)那樣高效和可靠,還需要很長(zhǎng)的路要走。
目前,基于以太網(wǎng)的RDMA主要標(biāo)準(zhǔn)為RoCE,包括RoCE V1和RoCE V2兩個(gè)版本。其中,RoCE V1主要是面向同一個(gè)以太網(wǎng)子網(wǎng)內(nèi)的RDMA通信,使用較少,只在早些時(shí)候的計(jì)算和存儲(chǔ)應(yīng)用中使用過(guò);RoCE V2實(shí)現(xiàn)了RDMA協(xié)議在以太網(wǎng)上的跨子網(wǎng)通信,可以進(jìn)行大規(guī)模部署和遠(yuǎn)距離傳輸。目前主流的RoCE應(yīng)用都是基于RoCE V2的,并且都是先將InfiniBand的完整數(shù)據(jù)包作為RoCE的Payload,然后再通過(guò)用戶數(shù)據(jù)報(bào)協(xié)議(UDP)header和傳統(tǒng)的以太網(wǎng)header對(duì)接,實(shí)現(xiàn)RDMA包在傳統(tǒng)以太網(wǎng)絡(luò)上的傳輸。
圖3給出了RoCE的數(shù)據(jù)格式。RoCE作為一種高效的以太網(wǎng)通信方式,可以應(yīng)用在不同場(chǎng)景:(1)在無(wú)損(Lossless)以太網(wǎng)絡(luò)中,需要使能ECN、PFC和端到端服務(wù)質(zhì)量(QoS),需要的配置雖然相對(duì)復(fù)雜,但是有助于提升網(wǎng)絡(luò)性能。(2)在有損(Lossy)以太網(wǎng)絡(luò)中,不使能PFC,可選使能ECN,配置簡(jiǎn)單,但需要更先進(jìn)的數(shù)據(jù)完整性控制機(jī)制[8-9]。
▲圖2 RDMA傳輸方式舉例
▲圖3 基于融合以太網(wǎng)的遠(yuǎn)程直接內(nèi)存訪問(wèn)數(shù)據(jù)格式
RDMA和RoCE技術(shù)已經(jīng)被廣泛地應(yīng)用于HPC、存儲(chǔ)、深度學(xué)習(xí)、機(jī)器學(xué)習(xí)、數(shù)據(jù)庫(kù)、大數(shù)據(jù)等應(yīng)用場(chǎng)合中。與此同時(shí),RDMA技術(shù)也為未來(lái)技術(shù)的發(fā)展帶來(lái)更加廣闊的研究空間,成為現(xiàn)代以數(shù)據(jù)為中心的系統(tǒng)架構(gòu)的核心。
如圖4所示,分布式AI訓(xùn)練服務(wù)器采用定制化硬件設(shè)計(jì)。其中每個(gè)服務(wù)器節(jié)點(diǎn)由2個(gè)XEON CPU與8塊GPU模塊提供主要算力。該系統(tǒng)被分割成兩個(gè)通信域:節(jié)點(diǎn)內(nèi)部通信和分布式節(jié)點(diǎn)間通信:
(1)節(jié)點(diǎn)內(nèi)部通信。GPU間采用NVlink構(gòu)成超立方體拓?fù)溥B接,可通過(guò)GPU Direct共享內(nèi)存技術(shù)和NCCL通信原語(yǔ),支持模型數(shù)據(jù)和暫存數(shù)據(jù)在HBM內(nèi)存中進(jìn)行低延遲交換和傳遞。GPU和CPU間、GPU和網(wǎng)卡(NIC)間可以通過(guò)PCIe 對(duì)等網(wǎng)絡(luò)(P2P)通信支持?jǐn)?shù)據(jù)的直接內(nèi)存訪問(wèn)(DMA)搬移和共享。
(2)節(jié)點(diǎn)間通信。AI訓(xùn)練平臺(tái)由大量的GPU服務(wù)器節(jié)點(diǎn)組成的分布式系統(tǒng)構(gòu)成。分布式節(jié)點(diǎn)間通過(guò)RDMA低延遲Fabric網(wǎng)絡(luò)連接。分布式系統(tǒng)通信方式可以是MPI、NCCL或者遠(yuǎn)程過(guò)程調(diào)用(RPC)通信,但一般采用效率更高的基于RDMA原生Verbs的通信原語(yǔ)庫(kù)。
分布式AI計(jì)算范式從計(jì)算類型上大致可分為兩種類型:模型并行和數(shù)據(jù)并行。
(1)模型并行。當(dāng)模型比較大時(shí),GPU自帶的HBM高帶寬內(nèi)存難以全部容納放入,這時(shí)可以把模型數(shù)據(jù)按神經(jīng)網(wǎng)絡(luò)層次或者參數(shù)分區(qū)進(jìn)行拆分,并分布到不同的GPU上進(jìn)行獨(dú)立計(jì)算,然后再統(tǒng)一匯聚進(jìn)行迭代。
(2)數(shù)據(jù)并行。不同GPU分配同樣的模型參數(shù),并將待訓(xùn)練的迭代數(shù)據(jù)分批次加載到不同GPU進(jìn)行訓(xùn)練。不同批次數(shù)據(jù)訓(xùn)練結(jié)果以某種規(guī)則合并迭代后完成訓(xùn)練。
模型并行需要拆分模型參數(shù),因此,GPU間存在著較強(qiáng)的計(jì)算圖依賴性,往往難以彈性伸縮;而數(shù)據(jù)并行則要好得多,更適合大規(guī)模的分布式AI訓(xùn)練。
在實(shí)際應(yīng)用時(shí),往往采用數(shù)據(jù)并行+模型并行的混合模式。大型模型參數(shù)可以先按照模型并行拆分形成獨(dú)立計(jì)算簇,再通過(guò)數(shù)據(jù)并行模型對(duì)計(jì)算簇進(jìn)行并行化擴(kuò)展。
在并行化方面,分布式AI平臺(tái)也存在兩種主流類型:參數(shù)服務(wù)器(PS)模型和環(huán)形拓?fù)淠P汀?/p>
如圖5所示,PS模型是當(dāng)前重要的分布式AI訓(xùn)練平臺(tái)計(jì)算范式。本質(zhì)上,PS是一種類似于Hadoop分布式文件系統(tǒng)的半集中計(jì)算架構(gòu),采用了類似Map-Reduce的計(jì)算范式。其中,PS服務(wù)器和控制器起到中央調(diào)度器的作用,各個(gè)GPU節(jié)點(diǎn)充當(dāng)任務(wù)對(duì)象并負(fù)責(zé)計(jì)算各自的梯度更新。PS服務(wù)器負(fù)載Broadcast模型參數(shù)給所有任務(wù)對(duì)象,并負(fù)責(zé)在PS服務(wù)器上匯聚所有梯度更新,以完成一個(gè)批次數(shù)據(jù)的迭代。顯而易見(jiàn),PS服務(wù)器是整個(gè)系統(tǒng)的瓶頸點(diǎn),并且高度依賴通信網(wǎng)絡(luò)的低延遲和高帶寬。
如圖6所示,環(huán)形分布式計(jì)算范式具有GPU節(jié)點(diǎn)邏輯成環(huán)的特點(diǎn),沒(méi)有PS計(jì)算范式的聚合服務(wù)器半集中點(diǎn)。每個(gè)GPU 任務(wù)對(duì)象接收上個(gè)節(jié)點(diǎn)批次計(jì)算產(chǎn)生的梯度數(shù)據(jù)更新,并計(jì)算本節(jié)點(diǎn)的梯度再傳遞給下一個(gè)任務(wù)對(duì)象節(jié)點(diǎn)。從調(diào)度上看,環(huán)形計(jì)算充分利用了深度學(xué)習(xí)訓(xùn)練過(guò)程反向傳播(BP)鏈?zhǔn)角髮?dǎo)從后向前過(guò)程的特點(diǎn):后級(jí)網(wǎng)絡(luò)層先計(jì)算,逐步推到前級(jí)網(wǎng)絡(luò)層。因此,梯度計(jì)算和梯度傳遞交替進(jìn)行,這充分利用了通信帶寬和計(jì)算流水性。環(huán)形計(jì)算范式一般使用 Reduce-Scatter和 All-Gather MPI通信過(guò)程。
在分布式并行計(jì)算范式中,還同時(shí)存在著同步通信和異步通信的差異。傳統(tǒng)分布式系統(tǒng),例如大數(shù)據(jù)排序(Sorting操作),大多采用塊同步并行模型(BSP)同步通信,即在一次迭代中設(shè)置Barrier以等待系統(tǒng)最慢的節(jié)點(diǎn)完成此次計(jì)算。然而在神經(jīng)網(wǎng)絡(luò)和機(jī)器學(xué)習(xí)中,模型參數(shù)的更新具有一定魯棒性,因此,可以接受延遲同步并行計(jì)算模型(SSP)異步方式更新模型數(shù)據(jù)。在SSP模式下,允許計(jì)算快的節(jié)點(diǎn)領(lǐng)先最慢的節(jié)點(diǎn)若干個(gè)迭代步長(zhǎng),而不是僅僅等待慢節(jié)點(diǎn)追趕進(jìn)度。
▲圖4 GPU服務(wù)器節(jié)點(diǎn)通信框圖
▲圖5 參數(shù)服務(wù)器計(jì)算范式
▲圖6 環(huán)形分布式計(jì)算范式
如前文所述,RDMA是建立在旁路內(nèi)核、通過(guò)硬件維護(hù)內(nèi)存區(qū)和隊(duì)列管理獲取低延遲的低延遲Fabric技術(shù),因此,RDMA會(huì)不可避免地存在以下問(wèn)題:
(1)硬件低級(jí)別的通信原語(yǔ)過(guò)于抽象,導(dǎo)致現(xiàn)代數(shù)據(jù)中心應(yīng)用軟件難以適配。一方面,低級(jí)別的通信庫(kù)和協(xié)議棧使得應(yīng)用軟件需要關(guān)注硬件級(jí)別的buffer管理問(wèn)題,因此,一般都需要在原生RDMA驅(qū)動(dòng)和庫(kù)上進(jìn)行一層封裝抽象,這導(dǎo)致RDMA性能不能充分發(fā)揮;另一方面,在現(xiàn)代數(shù)據(jù)中心云基礎(chǔ)設(shè)施里,網(wǎng)絡(luò)普遍通過(guò)軟件定義網(wǎng)絡(luò)(SDN)Overlay網(wǎng)絡(luò)和vSwitch框架實(shí)現(xiàn)虛擬化隔離和租戶安全,而原生RDMA技術(shù)在穿越隧道和分段網(wǎng)絡(luò)時(shí),難以維持緩沖和隊(duì)列管理。因此,業(yè)內(nèi)多妥協(xié)采用裸金屬物理服務(wù)器和原生網(wǎng)絡(luò)部署以換取原生RDMA性能。
(2)目前,RDMA技術(shù)緩沖資源管理是在網(wǎng)卡專用集成電路(ASIC)芯片內(nèi)實(shí)現(xiàn)的,用戶態(tài)應(yīng)用旁路內(nèi)核直接操作網(wǎng)卡硬件。從商業(yè)角度看,CPU和NIC芯片分離、互相解耦有利于建立生態(tài)系統(tǒng),然而,無(wú)論是在資源保護(hù)和硬件性能可擴(kuò)展性上,還是在應(yīng)用間共享資源(零拷貝技術(shù)、fd.IO包向量處理技術(shù))等方面,ASIC化的網(wǎng)卡都欠缺靈活性。
(3)基于以太網(wǎng)的RDMA技術(shù)有RoCE和iWarp,其中比較流行的是RoCE(V2版本)。如前文所述,在有損或無(wú)損以太網(wǎng)環(huán)境下,由于以太網(wǎng)Best-effort問(wèn)題和組網(wǎng)部署特點(diǎn),RoCE網(wǎng)絡(luò)存在著規(guī)模擴(kuò)展性問(wèn)題[10]。采用PFC流控技術(shù)顯得過(guò)于“粗暴”,并且在In-Cast和擁塞環(huán)境下,節(jié)點(diǎn)數(shù)目很難擴(kuò)展到實(shí)用級(jí)別規(guī)模。采用數(shù)據(jù)中心量化擁塞通知(DCQCN)和TIMELY(Delay)等技術(shù)方案仍不能解決參數(shù)收斂慢、全系統(tǒng)調(diào)優(yōu)困難等規(guī)模擴(kuò)展性問(wèn)題。關(guān)于這一點(diǎn),阿里巴巴高精度擁塞控制(HPCC)算法已給出詳細(xì)論述[11],此處不再贅述。
現(xiàn)有深度學(xué)習(xí)框架極少直接基于RDMA技術(shù)開(kāi)發(fā)網(wǎng)絡(luò)通信庫(kù),通常都是通過(guò)Nvidia NCCL來(lái)間接使用RDMA, 例 如 TensorFlow、PyTorch、PaddlePaddle、MxNet等主流深度學(xué)習(xí)框架。這可能導(dǎo)致兩個(gè)潛在的問(wèn)題:一方面,非Nvidia通用圖形處理器(GPGPU)的加速器廠商如果想要實(shí)現(xiàn)分布式深度學(xué)習(xí)訓(xùn)練功能,就必須自己開(kāi)發(fā)類似于Nvidia NCCL的通信庫(kù)來(lái)使用RDMA;另一方面,深度學(xué)習(xí)框架與底層通信庫(kù)相隔離,無(wú)法進(jìn)行一體優(yōu)化[12-13]。
對(duì)于基于RDMA技術(shù)實(shí)現(xiàn)底層網(wǎng)絡(luò)通信,最主要的挑戰(zhàn)是內(nèi)存管理。RDMA傳輸需要使用注冊(cè)內(nèi)存(鎖頁(yè)內(nèi)存),如果每一次網(wǎng)絡(luò)傳輸都根據(jù)傳輸量的實(shí)際需求當(dāng)場(chǎng)申請(qǐng)并注冊(cè),則會(huì)導(dǎo)致開(kāi)銷顯著,還會(huì)增加網(wǎng)絡(luò)傳輸?shù)难舆t。如果提前申請(qǐng)并注冊(cè)好內(nèi)存塊,則可能因無(wú)法準(zhǔn)確預(yù)知程序運(yùn)行時(shí)每次的實(shí)際傳輸需求而過(guò)多申請(qǐng)內(nèi)存,這會(huì)造成內(nèi)存資源的浪費(fèi)。
針對(duì)這一問(wèn)題,一般有如下幾個(gè)解決方法:(1)提前申請(qǐng)并注冊(cè)大塊內(nèi)存,在實(shí)際傳輸時(shí)使用內(nèi)存池技術(shù),并從已注冊(cè)好的大塊內(nèi)存上分配需要的內(nèi)存;(2)提前申請(qǐng)并注冊(cè)一些固定大小的內(nèi)存塊,每次在進(jìn)行數(shù)據(jù)傳輸時(shí),首先把需要傳輸?shù)臄?shù)據(jù)拷貝到這些已注冊(cè)內(nèi)存塊上,然后再通過(guò)RDMA進(jìn)行傳輸;(3)對(duì)于靜態(tài)結(jié)構(gòu)的神經(jīng)網(wǎng)絡(luò),每一次迭代網(wǎng)絡(luò)傳輸量是固定不變且可提前預(yù)知的,在系統(tǒng)運(yùn)行前申請(qǐng)并注冊(cè)內(nèi)存,然后重復(fù)使用這些注冊(cè)內(nèi)存塊。
OneFlow軟件是目前唯一一個(gè)內(nèi)部原生集成RDMA網(wǎng)絡(luò)傳輸功能的深度學(xué)習(xí)框架。用戶既可通過(guò)Nvidia NCCL使用RDMA傳輸,也可直接使用OneFlow基于RDMA自研網(wǎng)絡(luò)通信庫(kù)去實(shí)現(xiàn)分布式訓(xùn)練。針對(duì)動(dòng)態(tài)形狀和靜態(tài)形狀的網(wǎng)絡(luò)傳輸,可分別使用上文描述的第2、3種技術(shù)解決方案。動(dòng)態(tài)形狀的網(wǎng)絡(luò)傳輸須引入一次額外的拷貝,而靜態(tài)形狀的網(wǎng)絡(luò)傳輸則實(shí)現(xiàn)了真正的零拷貝,達(dá)到了同時(shí)兼顧內(nèi)存利用率和運(yùn)行效率需求的目的。
OneFlow軟件還充分發(fā)揮了RDMA的優(yōu)點(diǎn),采用Actor軟件機(jī)制實(shí)現(xiàn)了一個(gè)簡(jiǎn)潔的去中心化調(diào)度系統(tǒng)框架。該軟件先在編譯階段生成靜態(tài)計(jì)算圖,然后生成包含Actor實(shí)例的分布式環(huán)境描述信息的計(jì)劃。分布式系統(tǒng)最終根據(jù)計(jì)劃生成Actor實(shí)例運(yùn)行態(tài)(各Actor間的生產(chǎn)、消費(fèi)數(shù)據(jù)會(huì)被存儲(chǔ)在Register中),通過(guò)RDMA低延遲網(wǎng)絡(luò)消息傳遞協(xié)作來(lái)完成計(jì)算流水。
中興通訊在智能網(wǎng)卡領(lǐng)域有較強(qiáng)的技術(shù)積累,相關(guān)技術(shù)已被廣泛使用在5G用戶面功能(UPF)下沉實(shí)現(xiàn)的低延遲2B業(yè)務(wù)、5G核心網(wǎng)L3虛擬專用網(wǎng)絡(luò)(VPN)IPsec加解密連接、數(shù)據(jù)中心輸入輸出(IO)虛擬化等各種產(chǎn)品應(yīng)用和方案中。
智能網(wǎng)卡實(shí)現(xiàn)低延遲Fabric的優(yōu)勢(shì)包括:(1)比商用網(wǎng)卡更為強(qiáng)大的性能和資源保證,如更大的最長(zhǎng)前綴匹配(LPM)精確匹配查找表和更快的三態(tài)內(nèi)容尋址存儲(chǔ)器(TCAM)模糊匹配資源;(2)高度靈活性和可編程性,即根據(jù)應(yīng)用需要調(diào)整數(shù)據(jù)流和資源抽象化;(3)軟硬協(xié)同一體化設(shè)計(jì),如可與分布式AI框架協(xié)同優(yōu)化甚至定制;(4)模塊化,即利用已有模塊實(shí)現(xiàn)快速的系統(tǒng)集成;(5)基于現(xiàn)場(chǎng)可編程門陣列(FPGA)實(shí)現(xiàn)智能網(wǎng)卡,以便于未來(lái)實(shí)現(xiàn)批量芯片化。
基于智能網(wǎng)卡技術(shù),中興通訊做了一些低延遲Fabric框架上的技術(shù)探索,以嘗試解決前文所述相關(guān)問(wèn)題。首先,將RDMA網(wǎng)卡設(shè)備原型下沉進(jìn)入FPGA,并基于VirtIO前后端技術(shù)實(shí)現(xiàn)了IO虛擬化。將VirtIO后端和vSwitch、Vxlan隧道端點(diǎn)(VTEP)卸載至FPGA中,以適配數(shù)據(jù)中心虛擬化網(wǎng)絡(luò)支持問(wèn)題。其次,基于TCP減負(fù)引擎(ToE),將TCP狀態(tài)機(jī)下沉進(jìn)入FPGA,以支持低延遲用戶態(tài)TCP協(xié)議棧(基于FStack原型)。此外,通過(guò)通信原語(yǔ)庫(kù)封裝抽象和智能網(wǎng)卡硬件先入先出(FIFO)橋接技術(shù),對(duì)底層RDMA通信原語(yǔ)進(jìn)行虛擬Socket封裝,可對(duì)應(yīng)用實(shí)現(xiàn)近似伯克利套接字(BSD Socket)的封裝調(diào)用。
針對(duì)低延遲Fabric框架技術(shù),中興通訊下一步的研究方向包括:
(1)基于P4框架實(shí)現(xiàn)網(wǎng)卡擁塞控制相關(guān)算法,通過(guò)增加帶內(nèi)網(wǎng)絡(luò)遙測(cè)(INT)的遙測(cè)能力來(lái)減少對(duì)往返時(shí)延(RTT)和確認(rèn)字符(ACK)丟失的依賴,并嘗試通過(guò)控制面獲取網(wǎng)絡(luò)轉(zhuǎn)發(fā)設(shè)備的Buffer水線信息,以獲得更精確的調(diào)度能力;
(2)除已支持對(duì)通信原語(yǔ)庫(kù)中的廣播機(jī)制進(jìn)行硬件加速外,后續(xù)將在通信原語(yǔ)庫(kù)抽象化封裝中增加實(shí)現(xiàn)應(yīng)用層感知接口,支持可配置選項(xiàng)(如帶寬、時(shí)延、突發(fā)、抖動(dòng)、擁塞優(yōu)先級(jí)等參數(shù))提供給網(wǎng)卡設(shè)備層以配合控制算法實(shí)現(xiàn)網(wǎng)絡(luò)規(guī)模擴(kuò)展;
(3)針對(duì)有損環(huán)境和偶發(fā)In-Cast丟包環(huán)境,通過(guò)采用類似低密度奇偶校驗(yàn)碼(LDPC)、前向糾錯(cuò)碼(FEC)等交叉交織冗余編碼算法,減少和平滑重傳所導(dǎo)致的網(wǎng)絡(luò)延遲問(wèn)題;
(4)針對(duì)邊緣計(jì)算區(qū)塊鏈、聯(lián)邦學(xué)習(xí)等廣域分布式AI應(yīng)用,對(duì)同態(tài)加密等強(qiáng)計(jì)算需求進(jìn)行加速。
由于受限于智能網(wǎng)卡FPGA資源,低延時(shí)Fabric技術(shù)的相關(guān)探索仍停留在原型階段,離商用化還有不小的距離。謹(jǐn)以此文拋磚引玉,共同探索低延遲Fabric技術(shù)的落地。