互聯(lián)網(wǎng)智算架構(gòu)詳解
在互聯(lián)網(wǎng)行業(yè),人工智能涉及方方面面:圖像識別、語言處理、自動駕駛、智能推薦…承載AI集群的基礎(chǔ)設(shè)施我們稱之為“智算中心”,本文將為大家介紹互聯(lián)網(wǎng)智算架構(gòu)的一些知識。
大模型
機(jī)器學(xué)習(xí)(ML)是人工智能中很重要一部分,而深度學(xué)習(xí)(DL)則是機(jī)器學(xué)習(xí)中很重要的組成。但是在2020年以后,越來越多的業(yè)務(wù)開始應(yīng)用Foundation Models,也被稱為“大模型”。
下圖是ML/DL的處理流程示例:
對比ML,DL將諸多算法統(tǒng)一成神經(jīng)網(wǎng)絡(luò)算法,包括CNN(卷積神經(jīng)網(wǎng)絡(luò))、RNN(循環(huán)神經(jīng)網(wǎng)絡(luò))以及GNN(圖形神經(jīng)網(wǎng)絡(luò))等,不同的神經(jīng)網(wǎng)絡(luò)模型在不同的訓(xùn)練場景能帶來不一樣的效果。
DL的另外一個升級點就在于數(shù)據(jù)預(yù)處理階段:業(yè)務(wù)產(chǎn)生的帶標(biāo)簽的數(shù)據(jù)是極其缺乏的,更多的數(shù)據(jù)是來自互聯(lián)網(wǎng)上的無標(biāo)簽數(shù)據(jù),此時需要一個模型進(jìn)行數(shù)據(jù)的預(yù)處理或者無標(biāo)簽訓(xùn)練,我們熟知的BERT、GPT-3、MT-NLG…就是這種預(yù)訓(xùn)練模型。
大模型往往以模型參數(shù)多、神經(jīng)元數(shù)量多、神經(jīng)網(wǎng)絡(luò)層數(shù)多而著名,在這些因素的加持下,“大規(guī)模數(shù)據(jù)+大模型”的模式越來越多得被應(yīng)用到諸多互聯(lián)網(wǎng)公司的智算架構(gòu)中。
分布式部署
“大模型”究竟有多大?我們通過一個例子來感受一下:
OpenAI發(fā)布的GPT-3,一經(jīng)面世震驚AI界,它包含1750億個參數(shù),這讓神經(jīng)網(wǎng)絡(luò)之父Geoffrey Hinton不禁感嘆“鑒于 GPT-3 在未來的驚人前景,可以得出結(jié)論,生命、宇宙和萬物的答案,就只是 4.398 萬億個參數(shù)而已”。然而完整訓(xùn)練一次GPT-3所耗費(fèi)的算力也是驚人的,按照NVIDIA的數(shù)據(jù):訓(xùn)練一次大型GPT-3,使用2萬顆A100需要消耗5天時間,使用2萬顆H100也需要消耗19個小時,整體消耗算力可達(dá)10EFlops-Days!這顯然不是一顆GPU或者一臺GPU節(jié)點所能承載的,因此分布式成為AI集群的主流部署模式。
梯度下降是AI訓(xùn)練中進(jìn)行參數(shù)迭代的最常用手段,正常來講我們會把所有資料集N計算一次算出一個Loss,但是這樣的做法耗時耗力且結(jié)果一般。因此實際訓(xùn)練中,我們會把N劃分成若干的子集,我們稱之為Batch。通過一次Batch運(yùn)算計算出一個Loss,根據(jù)這個Loss完成一次參數(shù)迭代,然后進(jìn)行下一個Batch運(yùn)算,依次進(jìn)行…直到所有Batch運(yùn)算完成。這樣所有的Batch都過完一次,我們稱之為1 epoch。整個過程如下圖所示:
以上是模型訓(xùn)練的一個邏輯思路,然而實際的集群中需要充分利用好GPU資源,以高效率、高利用率以及高準(zhǔn)確率的準(zhǔn)則完成AI訓(xùn)練。
那么真實的AI分布式集群是怎樣的呢,請看下圖:
這里邊涉及三個概念:模型并行、數(shù)據(jù)并行以及流水并行。根據(jù)算法的大小,可以選擇性地采用其中一種或兩種并行方式,但是“大模型”訓(xùn)練往往都會應(yīng)用到三種并行方式。我們會將這個AI集群劃分為若干Stage,每個Stage對應(yīng)一個邏輯上的Batch,每個Stage由若干臺GPU節(jié)點組成。
數(shù)據(jù)并行:相同的模型分布在同一個Stage的不同GPU節(jié)點上,在不同的節(jié)點上使用不同的數(shù)據(jù)進(jìn)行訓(xùn)練。模型并行:在某GPU節(jié)點將模型切分到不同的GPU卡上,減少單卡參數(shù)量。流水并行:基于模型并行,一個batch結(jié)束前開始下一個batch,以充分利用計算資源,減少時間空隙。
數(shù)據(jù)通信
在一個GPU節(jié)點內(nèi)部,不同GPU卡上的張量切片需要匯總,這部分?jǐn)?shù)據(jù)通信依靠Nvlink進(jìn)行;在一個Stage集群中,不同GPU節(jié)點之間的模型參數(shù)需要同步,這部分?jǐn)?shù)據(jù)通信需要依靠外部網(wǎng)絡(luò);不同Stage之間需要進(jìn)行Forward pass和Backward pass的梯度傳遞,也需要依靠外部網(wǎng)絡(luò)。接下來我們依次介紹一下不同階段的數(shù)據(jù)通信情況。
1.GPU節(jié)點內(nèi)部通信
GPU節(jié)點內(nèi)部的通信分為兩種情況,一種是GPU卡之間的通信,這部分?jǐn)?shù)據(jù)通信當(dāng)前主要是通過NVlink實現(xiàn)。
上圖展示的是HGX A100 8-GPU 的GPU Baseboard,8塊A100 GPU通過NVlink實現(xiàn)高速互通。
GPU節(jié)點內(nèi)部通信另外一種情況是GPU與CPU、內(nèi)存、硬盤、網(wǎng)卡之間的通信,此時就需要對整個GPU節(jié)點架構(gòu)進(jìn)行多方維度的考慮和設(shè)計。我們以H3C R5500 G5為例進(jìn)行介紹:
H3C UniServer R5500 G5是H3C推出的基于HGX A100 8-GPU模塊完全自主研發(fā)的6U、2路GPU服務(wù)器,該服務(wù)器適用于虛擬化、高性能計算(HPC)、內(nèi)存計算、數(shù)據(jù)庫、深度學(xué)習(xí)和超大規(guī)格并行訓(xùn)練等計算密集型場景,具有計算性能高、功耗低、擴(kuò)展性強(qiáng)和可靠性高等特點,易于管理和部署,可滿足高性能超大規(guī)模并行訓(xùn)練應(yīng)用。
我們一起看一下該GPU服務(wù)器的拓?fù)湓O(shè)計:
服務(wù)器節(jié)點中內(nèi)嵌多組PCIe Switch,可以實現(xiàn)GPU卡與其他組件的高速互聯(lián):與Slot 11-18的網(wǎng)卡互聯(lián)、與NVMe Slot的硬盤的高速互聯(lián),GPU卡能夠快速訪問到放置在NVMe硬盤中的Batch信息。如此一套架構(gòu)設(shè)計,實現(xiàn)了GPU節(jié)點內(nèi)各組件的高速互聯(lián),也正因如此,該產(chǎn)品在互聯(lián)網(wǎng)主流AI場景中的算力表現(xiàn)極為優(yōu)秀:
新華三可以為互聯(lián)網(wǎng)公司提供多樣化、定制化的AI解決方案:
2.GPU節(jié)點外部通信
上邊我們談到的AI分布式部署集群里,數(shù)據(jù)并行以及流水并行都需要不同GPU節(jié)點之間數(shù)據(jù)的高速互訪。數(shù)據(jù)并行主要解決的是梯度匯總的問題,流水并行則解決的是梯度傳播的問題。
梯度匯總比較好理解,在Stage內(nèi)部是采用不同的數(shù)據(jù)對同一個模型分段進(jìn)行訓(xùn)練,訓(xùn)練完成后該Stage輸出的是所有GPU節(jié)點匯總的參數(shù)信息。
說到梯度傳播,就必須要說一下模型訓(xùn)練中常用的反向傳播:
如圖所示,在模型訓(xùn)練中我們會首先定義Loss函數(shù),θ則是所有參數(shù)的合集,因此模型的訓(xùn)練就相當(dāng)于我們找到一個θ集,可以讓Loss函數(shù)值最小。我們將模型切分若干個C,因此找到所有C的最小值求和便是L的最小值。求最小值的過程也可以看成微分計算的過程:以θ中的w參數(shù)為例,?C/?w便是微分計算,我們將?C/?w拆分成?z/?w*?z/?w,此時?z/?w就是一個正向梯度的過程,而?z/?w則是一個反向梯度的過程。之所以這樣做,是因為正常計算流程需要把多層神經(jīng)網(wǎng)絡(luò)計算完成后才能進(jìn)行一次正向求導(dǎo),這樣會極大降低效率,而反向梯度的應(yīng)用,會使得我們求解Loss函數(shù)變得更為高效。
以上就是反向梯度的一個簡介,我們可以看到,整個過程中同層神經(jīng)網(wǎng)絡(luò)或者不同層神經(jīng)網(wǎng)絡(luò)之間一直都在進(jìn)行數(shù)據(jù)傳輸或者參數(shù)傳輸,這些數(shù)據(jù)通信大部分都是跨計算節(jié)點進(jìn)行的。因此,為了保障模型訓(xùn)練效率,需要給AI集群構(gòu)建一個低延時的高性能網(wǎng)絡(luò)。在以太網(wǎng)領(lǐng)域,這個高性能網(wǎng)絡(luò)就是RoCE網(wǎng)絡(luò),由于篇幅原因,就不在這展開RoCE的介紹了。
結(jié)合在網(wǎng)絡(luò)領(lǐng)域的探索,我們設(shè)計了一套智算中心無損網(wǎng)絡(luò)整體拓?fù)洌?
該架構(gòu)整體可分為以下幾個區(qū)域:智算資源池、分布式存儲資源池、通用計算資源池、數(shù)據(jù)傳輸網(wǎng)以及運(yùn)維管理中心。其中智算資源池又分為參數(shù)交換&梯度傳播網(wǎng)、樣本接入網(wǎng),這兩部分都需要使能RoCE,打造低延時無丟包高性能網(wǎng)絡(luò),從而保障AI集群的高效率。
在互聯(lián)網(wǎng)行業(yè)中,大規(guī)模、高吞吐是主流,因此在智算資源池的網(wǎng)絡(luò)設(shè)計中,互聯(lián)網(wǎng)有其獨到的設(shè)計:
整體組網(wǎng)分為Spine/Leaf/TOR三層:在100G Pod中,Spine采用S9825-64D設(shè)備,TOR采用S9820-8C/S9820-8M/S9855-48CD8D設(shè)備,Leaf采用S9825-64D/S9820-8C/S9820-8M設(shè)備;在200G Pod中,Spine和Leaf采用S9825-64D設(shè)備,TOR采用S9820-8C/S9820-8M/S9855-24B8D設(shè)備,S9820款型采用400G一分二的形式。
與此同時,部署一個RoCE網(wǎng)絡(luò)也絕非易事,需要結(jié)合不同的業(yè)務(wù)流特征靈活調(diào)整Buffer水線,否則難以達(dá)到最佳效果,為此H3C推出了SeerFabric智能無損解決方案,除了解決基本的RoCE自動化、RoCE可視、RoCE分析以及RoCE調(diào)優(yōu)問題,還提供AI ECN智能調(diào)優(yōu)模塊:
通過SeerFabric可以降低部署RoCE網(wǎng)絡(luò)的門檻,提高部署效率,配合H3C豐富多樣的400G/200G/100G網(wǎng)絡(luò)產(chǎn)品,可以最大的釋放網(wǎng)絡(luò)的潛力,提高AI集群的運(yùn)行效率。
AI框架
前邊我們聊完了整個AI集群的大致架構(gòu),然而要知道,充分調(diào)動如此龐大規(guī)模的AI集群絕非易事。整個系統(tǒng)的高效運(yùn)行如果都需要我們自己去考慮,這會占用開發(fā)人員太多精力,如同云計算時代出現(xiàn)OpenStack、容器時代出現(xiàn)kubernetes一樣,AI時代也擁有它專屬的操作系統(tǒng):AI框架。
AI框架是 AI算法模型設(shè)計、訓(xùn)練和驗證的一套標(biāo)準(zhǔn)接口、特性庫和工具包,集成了算法的封裝、數(shù)據(jù)的調(diào)用以及計算資源的使用,同時面向開發(fā)者提供了開發(fā)界面和高效的執(zhí)行平臺,是現(xiàn)階段AI算法開發(fā)的必備工具。信通院給出了一個標(biāo)準(zhǔn)的AI框架應(yīng)該具備的能力:
業(yè)內(nèi)比較知名的AI框架有TensorFlow和PyTorch,產(chǎn)業(yè)界傾向于TensorFlow,學(xué)術(shù)界則傾向于PyTorch。這兩個框架并非完美的,業(yè)界為了補(bǔ)充某些領(lǐng)域的缺陷還在不斷推出各種各樣的AI框架,我們期待最終能夠有這樣一個AI框架可以一統(tǒng)江湖,可以將各種能力場景都集合在內(nèi)。這部分的知識大家感興趣也可以自己去探索,能夠更容易讓我們理解AI的運(yùn)行過程。
展望
人工智能發(fā)展至今,雖然在算法、算力、數(shù)據(jù)這三大馬車方面的發(fā)展趨勢猛進(jìn),然而AI真正要賦能產(chǎn)業(yè)、賦能社會還有許多路要走。比如在工程層面:需要考慮各企業(yè)框架的適用性、需要考慮全生命周期的維護(hù)、需要考慮AI的自動化運(yùn)維。再比如在安全層面:需要考慮AI領(lǐng)域的可信計算、需要考慮安全與性能的平衡…
H3C愿意成為各位AI路上緊密的合作伙伴,同大家一起完善AI產(chǎn)業(yè)!