涂曉軍 孫 權(quán),2 蔡立志
1(中國銀聯(lián)股份有限公司 上海 201201)
2(復(fù)旦大學(xué) 上海 200433)
3(上海計算機軟件技術(shù)開發(fā)中心上海市計算機軟件評測重點實驗室 上海 201112)
RDMA即遠程DMA,是最早脫胎于InfiniBand網(wǎng)絡(luò)[1-3]的技術(shù),主要應(yīng)用于高性能科學(xué)計算中。隨著云計算的興起,RDMA技術(shù)也逐漸被應(yīng)用到云數(shù)據(jù)中心具有高性能要求的場景中。
當(dāng)前RDMA的使用案例主要集中于互聯(lián)網(wǎng)企業(yè),尤其是高性能計算領(lǐng)域,相應(yīng)的標(biāo)準組織也在積極推動,同時也出現(xiàn)了提供RDMA專用技術(shù)服務(wù)的公司。
國際上,微軟是在數(shù)據(jù)中心大規(guī)模部署RDMA的第一家超大規(guī)模公司[4]。FaceBook主導(dǎo)的OCP(Open Computing Project)對于推動網(wǎng)絡(luò)的開放解耦與RDMA的應(yīng)用也做了許多的工作。
國內(nèi)來看,從2016年開始,阿里巴巴就投入專項研究,以改造RDMA,提高傳輸性能,從網(wǎng)卡底層開始設(shè)計滿足大規(guī)模應(yīng)用的網(wǎng)絡(luò),基于RDMA網(wǎng)絡(luò)技術(shù)的云存儲和電商數(shù)據(jù)庫服務(wù)器可以從容地應(yīng)對峰值流量考驗[5]。百度在2014年前后開始引入RDMA網(wǎng)絡(luò),先后部署了lnfinband集群和RoCEv1集群。2015年,百度分別在SZWG機房和YQ01機房大規(guī)模部署了RoCEv2集群,分別承載了深度學(xué)習(xí)、語音識別和自然語言處理等相關(guān)的機器學(xué)習(xí)任務(wù)。目前RDMA集群總體規(guī)模為600臺左右,這是國內(nèi)比較大的一個RoCEv2網(wǎng)絡(luò)。京東人工智能研發(fā)團隊在分布式的模型訓(xùn)練場景中,也使用了RDMA技術(shù),針對模型文件的高性能傳輸,滿足了分布式訓(xùn)練的需求。
RDMA對于端到端的網(wǎng)絡(luò)傳輸做了多重的優(yōu)化,其定位是高性能的網(wǎng)絡(luò)技術(shù),所帶來的效果主要體現(xiàn)在如下幾個方面:
(1) 減輕CPU負荷:通過主機側(cè)內(nèi)核旁路零拷貝以及網(wǎng)絡(luò)對于傳輸控制協(xié)議的卸載,可以極大地解放主機的CPU,從側(cè)面提升計算效率。
(2) 擁塞快速處理:除了端側(cè)外,網(wǎng)絡(luò)側(cè)也直接參與擁塞處理,可以第一時間檢測到報文的擁塞堆積,并且及時有效地進行反饋,避免報文大規(guī)模的重傳。
(3) 低延時:低延時是RDMA最顯著的特征,主機側(cè)的精簡處理以及網(wǎng)絡(luò)側(cè)的擁塞及時反饋,可以有效確保時延的可預(yù)期性,提升通信的效率。
RDMA在網(wǎng)絡(luò)技術(shù)中主要解決的是擁塞控制的問題,在主機側(cè)采用了內(nèi)核旁路與網(wǎng)卡卸載等方法降低網(wǎng)絡(luò)通信的開銷。以下是其適用的數(shù)據(jù)中心場景:
(1) 高性能MPI計算。并行編程結(jié)構(gòu)MPI計算是最早使用RDMA的應(yīng)用場景,通常應(yīng)用在大型科研機構(gòu)的超算中心。其程序通常使用MPI框架進行開發(fā),MPI的底層調(diào)用RDMA的API進行網(wǎng)絡(luò)通信。MPI計算通常在天文氣象、流體力學(xué)等科學(xué)計算領(lǐng)域有大量的使用,但在企業(yè)級市場中普及度不高。
(2) 大數(shù)據(jù)/AI類的應(yīng)用。大數(shù)據(jù)/AI類的應(yīng)用通常涉及到海量數(shù)據(jù)的搬運與交互,兼具計算密集、網(wǎng)絡(luò)密集與I/O密集的特征,因此非常適合通過RDMA技術(shù)進行集群優(yōu)化。大數(shù)據(jù)/AI領(lǐng)域常見的項目,例如Hadoop、Spark[6]、TensorFlow[7]、Pythorch等都已經(jīng)加入了對于RDMA通信接口的支持。
(3) 分布式存儲/數(shù)據(jù)庫。分布式存儲或者分布式數(shù)據(jù)庫也是高吞吐數(shù)據(jù)密集型的應(yīng)用。隨著SSD以及NVMe技術(shù)的引入,I/O的速度也大幅增長。Samba文件共享系統(tǒng)、Ceph分布式存儲等都加入了對于RDMA通信接口的支持。在分布式數(shù)據(jù)庫領(lǐng)域,有些數(shù)據(jù)庫采用了計算存儲分離的設(shè)計,在存儲部分也會用RDMA進行加速,例如阿里巴巴的PolarDB。內(nèi)存數(shù)據(jù)庫方面,也有相應(yīng)的采用RDMA進行網(wǎng)絡(luò)設(shè)計的研究,甚至是對Redis的RDMA化改造。
在網(wǎng)絡(luò)架構(gòu)上,SDN通常能夠?qū)崿F(xiàn)更靈活的選路控制,而RDMA主要處理網(wǎng)絡(luò)的擁塞流控,兩者此前一般都獨立存在。RDMA把端到端的網(wǎng)絡(luò)通信做到了極致,如果能結(jié)合上整體的網(wǎng)絡(luò)視圖,兩者就能夠?qū)崿F(xiàn)更好的網(wǎng)絡(luò)優(yōu)化,如圖1所示。
圖1 SDN與RDMA的聯(lián)合優(yōu)化
在圖1的Leaf-Spine的網(wǎng)絡(luò)通信場景中,當(dāng)一個Spine的出端口出現(xiàn)擁塞時有兩種解決方法:一種是通過擁塞控制降低Leaf服務(wù)的發(fā)送速率;另一種是通過SDN控制器流量調(diào)度,將部分的Leaf流量切換到另一個空閑的Spine中,實現(xiàn)整個網(wǎng)絡(luò)的吞吐最優(yōu)。
如果以更高的視野來看,除了網(wǎng)絡(luò)側(cè)的高性能網(wǎng)絡(luò)優(yōu)化外,在應(yīng)用方面也需要從源頭對集群應(yīng)用的通信結(jié)構(gòu)進行優(yōu)化。
例如在當(dāng)前的分布式學(xué)習(xí)計算中,比較常用的是如圖2所示的PS-Worker式的匯總型通信[8]。這種通信結(jié)構(gòu)會出現(xiàn)多對一的網(wǎng)絡(luò)流,對PS節(jié)點將會造成一定的壓力,即使網(wǎng)絡(luò)層面能夠很好地處理擁塞,但整體的吞吐量仍然會有所限制。另外一種是Horovod的分布式訓(xùn)練,將通信結(jié)構(gòu)更改為環(huán)狀的通信,以避免出現(xiàn)多對一的網(wǎng)絡(luò)流,造成單一節(jié)點擁塞瓶頸的出現(xiàn),但會出現(xiàn)單點失效或者跳數(shù)增多與時延加長的性能損失。分布式的AllReduce的方式則是結(jié)合了匯總型與環(huán)狀處理兩者各自的優(yōu)勢,對模型進行了綜合的優(yōu)化[9],如圖3所示。
圖2 分布式AI任務(wù)的通信結(jié)構(gòu)
圖3 集中與環(huán)狀通信結(jié)構(gòu)的融合
為了更好地將RDMA網(wǎng)絡(luò)技術(shù)應(yīng)用于金融人工智能的場景,本文設(shè)計并構(gòu)建了基于GPU虛擬化與RDMA加速的云原生大算力網(wǎng)絡(luò)集群。該系統(tǒng)的底層基于異構(gòu)的GPU芯片進行算力加速,以及RDMA高性能網(wǎng)絡(luò)進行數(shù)據(jù)端到端的低延時高吞吐傳輸。虛擬化層對GPU以及RDMA網(wǎng)卡的資源進行池化與虛擬化。平臺層采用Kubernetes容器云平臺,提供輕量級彈性的資源編排,為租戶動態(tài)分配所需的GPU算力以及RDMA網(wǎng)絡(luò)資源??蚣軐蛹沙S玫娜斯ぶ悄芸蚣芘c分布式的模型通信,為上層應(yīng)用提供高效的建模支撐。整個平臺結(jié)合了輕量級云原生平臺、GPU算力虛擬化、高性能RDMA網(wǎng)絡(luò),實現(xiàn)了一個面向多租戶超高性能的大數(shù)據(jù)算力集群,如圖4所示。
圖4 基于GPU與RDMA的大算力集群
RDMA對網(wǎng)絡(luò)的流量與擁塞控制主要采用PFC以及ECN兩種機制。
PFC主要是流量控制,當(dāng)交換機的入口隊列出現(xiàn)擁塞時,它會向上游的端口發(fā)送PFC幀,以短暫地阻塞上游端口的發(fā)送;ECN則是擁塞控制,在交換機的出口端打上標(biāo)記,這樣當(dāng)接收端收到帶ECN標(biāo)記的報文時,就可以向源節(jié)點反向發(fā)送控制報文,以調(diào)整源端的發(fā)送速率。相關(guān)的關(guān)鍵參數(shù)為:
1) PFC的觸發(fā)閾值以及收到PFC幀后端口暫停的時間間隔。
2) ECN的觸發(fā)與恢復(fù)門限值,標(biāo)記概率。
3) 此外為了保證非RDMA流量的吞吐,也需要對交換芯片的緩存分配設(shè)置合適的比例。
上述參數(shù)的設(shè)置,將會對整個網(wǎng)絡(luò)產(chǎn)生的影響。通常門限值設(shè)置低,時延低,吞吐低;門限設(shè)置高,時延高,吞吐高。
對于這些參數(shù)的設(shè)置,通常需要一些經(jīng)驗式的參數(shù)調(diào)優(yōu),比如Mellanox的推薦設(shè)置便是一些靜態(tài)的參數(shù),而華為則采用了一種叫作AIECN或者動態(tài)ECN的方式,動態(tài)地根據(jù)當(dāng)前的流量狀況,對這些參數(shù)進行調(diào)優(yōu)。
RDMA的目標(biāo)是實現(xiàn)高性能的網(wǎng)絡(luò)傳輸,其中需要避免因為網(wǎng)絡(luò)丟包而引起的大規(guī)模重傳,重傳會導(dǎo)致很嚴重的性能損耗與開銷。因此為了配合RDMA,通常在網(wǎng)絡(luò)側(cè)需要做到無損不丟包。在RoCE具體的實現(xiàn)中,主要是利用了PFC的流量控制機制和ECN的擁塞控制機制。
但實現(xiàn)網(wǎng)絡(luò)的無損與網(wǎng)絡(luò)的高吞吐存在一定的矛盾,尤其是PFC的機制,一旦出現(xiàn)擁塞,它會短暫地阻塞端口的傳輸,并且在稍微大一些的網(wǎng)絡(luò)中還會出現(xiàn)PFC的頭端死鎖,大大降低網(wǎng)絡(luò)的吞吐。
在允許少量的丟包的實際網(wǎng)絡(luò)中,則可以發(fā)揮網(wǎng)絡(luò)的高吞吐能力。另一方面,在重傳的機制上以及擁測控制的機制上的改進,能夠盡量減少丟包,并且當(dāng)丟包出現(xiàn)的時候,也能夠以很小的代價對網(wǎng)絡(luò)進行恢復(fù)。
即使在無損網(wǎng)絡(luò)的實現(xiàn)中,通常也是盡量減少PFC的出現(xiàn),以防止其對網(wǎng)絡(luò)的吞吐造成阻塞,這對于PFC與ECN的參數(shù)設(shè)置就提出了很高的要求。更多的是希望當(dāng)網(wǎng)絡(luò)出現(xiàn)擁塞時,ECN的機制首先發(fā)揮作用,而PFC只是作為緊急情況下的一個補充手段。
RDMA的網(wǎng)絡(luò)技術(shù)具有超低延時、高吞吐的特性。但RDMA在支持大規(guī)??蓴U展網(wǎng)絡(luò)上存在一些瓶頸。其最主要的原因是RDMA將所有的傳輸層邏輯都卸載到硬件網(wǎng)卡上進行維護,從而大大降低主機CPU的處理負擔(dān),并降低了時延。但是硬件RDMA有連接數(shù)量的限制,通常在千量級,這對整個RDMA網(wǎng)絡(luò)的可擴展規(guī)模有較大的影響,很難與大型數(shù)據(jù)中心上萬量級的服務(wù)器規(guī)模相匹配。這也是為何當(dāng)前最大規(guī)模的RDMA集群也只能在1 000臺物理服務(wù)器左右,通常適用于機器學(xué)習(xí)訓(xùn)練以及分布式存儲等專用集群。與之相對應(yīng),TCP的傳輸狀態(tài)通常都是靠CPU和內(nèi)存進行維系的,因此只要內(nèi)存足夠大,其連接數(shù)可以擴展到百萬級別,非常適合大規(guī)模云數(shù)據(jù)中心場景。
RDMA對于網(wǎng)絡(luò)側(cè)的主要要求便是流量與擁塞的控制。從控制論的角度而言,無非就是一個負反饋的控制系統(tǒng)。而在具體實現(xiàn)中,主要涉及到三點:(1) 如何有效地檢測到擁塞。擁塞的檢測通常發(fā)生在交換機芯片的緩存管理中,交換芯片一般都能夠有效通過當(dāng)前隊列中的報文數(shù)量來判斷是否有擁塞發(fā)生。(2) 如何將擁塞信息有效地傳播到上下游的鏈路上。一種方法是發(fā)送標(biāo)準的PFC以及ECN的幀。另外像阿里的HPCC還采用了當(dāng)前比較流行的INT技術(shù)來對當(dāng)前的擁塞狀態(tài)進行記錄與傳輸,除了簡單的標(biāo)記擁塞事件外,INT所攜帶的信息還可以包括擁塞的比例以及來回RTT的測量等,以便于上下游節(jié)點做更好的決策。(3) 各端點收到擁塞信息后如何進行調(diào)整,并且能最好地做到全局最優(yōu)。根據(jù)所測量到的擁塞信息,能夠及時有效地調(diào)整源端的發(fā)送速率,最理想的情況是調(diào)整到全局最優(yōu)的速率,既不造成丟包,也不浪費帶寬,另外還要能夠保證流量的公平性,尤其是在多對一的網(wǎng)絡(luò)場景中。
本文采用了業(yè)界常用的benchmark模型AlexNet和VGG16作為測試用例,在基于GPU與RDMA的大算力集群平臺之上,結(jié)合兩種主流的分布式參數(shù)聚合策略PS-worker及Ring Allreduce,對傳統(tǒng)的TCP以及RDMA通信模式下的模型訓(xùn)練進行了相關(guān)性能測試。按照測試組合,分別構(gòu)建8個鏡像,根據(jù)不同的測試場景,利用構(gòu)建好的8個鏡像發(fā)起多次訓(xùn)練任務(wù),訓(xùn)練過程中查看集群pod的創(chuàng)建情況以及GPU的利用率。參與測試的深度學(xué)習(xí)模型和參數(shù)聚合方法組合如表1所示。
表1 不同的AI模型與參數(shù)聚合方法組合
圖5為不同網(wǎng)絡(luò)模式下的機器學(xué)習(xí)訓(xùn)練速度的對比。對于RDMA,本文主要對比g與d兩組實驗結(jié)果(g代表普通的grpc,d代表gdr,即GPU Direct RDMA,它在GPU與RDMA層面做了聯(lián)合的優(yōu)化,數(shù)據(jù)從一個GPU的顯存直接RDMA到另一個節(jié)點的GPU顯存上)。對于AlexNet模型,1acd與1apd的處理幀速均比1acg和1apg提升了2倍以上;對于Vgg模型,GDR的加速也有一定的提升效果,2vcd比2vcg提升了2倍以上,2vpd比2vpg提升了0.3~0.4倍。
圖5 TCP與RDMA通信模式下的性能對比
RDMA將端到端的網(wǎng)絡(luò)通信做到了極致,目標(biāo)上是為了實現(xiàn)快速的遠程數(shù)據(jù)傳輸,技術(shù)上是多重優(yōu)化的結(jié)合體(涉及到主機側(cè)的內(nèi)核旁路、傳輸層網(wǎng)卡卸載、網(wǎng)絡(luò)側(cè)的擁塞流控),達到的效果是低時延、高吞吐、低CPU損耗。同時,當(dāng)前RDMA的實現(xiàn)也存在組網(wǎng)規(guī)模受限、配置與改造難度大等局限性。
隨著數(shù)據(jù)中心數(shù)據(jù)量的巨量增長與算力密集度的提升,RDMA流量在數(shù)據(jù)中心中的比重將逐步上升。它的出現(xiàn)具有重大意義,也對高性能的計算集群的演進具有一定的啟發(fā)性。它是大數(shù)據(jù)與智能計算大規(guī)模普及的必然結(jié)果,也將成為數(shù)據(jù)智能時代的網(wǎng)絡(luò)利器。RDMA技術(shù)實現(xiàn)方面,技術(shù)復(fù)雜度與配置便捷性仍有可改進的空間。