AI算力加速之道

語言: CN / TW / HK

1 AI算力發展趨勢

1.1 人工智能理論:深度學習

人工智能發展至今並非一帆風順, 從起步階段到現今的深度學習階段,數據、算法和算力構成了人工智能三大基本要素,共同推動人工智能向更高層次的感知、認知發展。

1.2 第三次人工智能浪潮代表人物

如前所述,當前人工智能繁榮離不開數據、算法和算力的共同發展,在算法層面,深度學習三巨頭Geoffrey Hinton、Yann LeCun和Yoshua Bengio對AI領域的貢獻無人不知、無人不曉,他們圍繞神經網絡重塑了AI;

數據層面,2007年李飛飛創建了世界上最大的圖像識別數據庫ImageNet,使人們認識到了數據對深度學習的重要性,也正是因為通過ImageNet識別大賽,才誕生了AlexNet, VggNet, GoogleNet, ResNet等經典的深度學習算法。

前幾次人工智能繁榮後又陷入低谷,一個核心的原因就是算力難以支撐複雜的算法,而簡單的算法效果又不佳。黃仁勛創辦的NVIDIA公司推出的GPU,很好的緩解了深度學習算法的訓練瓶頸,釋放了人工智能的全新潛力。

1.3 計算力就是生產力

在智慧時代,計算力就是生產力。什麼是生產力,就是人類改造自然的能力,就是創造價值的能力。在這個表中,我們有一個很有趣的發現。

在10年前,全球市值最高的企業大部分是能源公司、金融企業,市值靠前的IT公司僅僅微軟一家,那時候windows如日中天,office獨步天下,屬於個人PC時代。

到了當前,全球最值錢的公司幾乎清一色的信息技術與服務公司,有趣的地方還不在這裏,這前幾名的公司正好也是全球採購服務器最多公司,僅亞馬遜一家,2017年便採購了全球13%的雲服務器。是海量的計算能力在為這些公司創造價值。

對於企業是這樣子,對於國家也是如此。計算力之於智慧時代就像是電力之於電氣時代,都是生產力的重要形式。

那麼,我們便可以通過計算力的情況,來分析一個國家的經濟發展情況,就如同克強指數裏面的電力能夠衡量一個行業的發展情況類似。據統計,國家GDP的數字與服務器的出貨量,GDP與服務器採購額呈現出明顯的正線性相關關係。

美國、中兩國不僅GDP遠遠領先於日本和德國,每萬億GDP的服務器數量也遠遠高於他們,數字經濟的貢獻佔比明顯高於他們。

我們國內各個省得情況,與此完全類似,北、上、廣、浙每萬億GDP的服務器出貨量遠大於其他省區,因此他們新舊動能轉換的就快,發展質量就跑在了前面。所以我們可以説計算力已經成為衡量社會和經濟發展水平的重要指標。

面對指數級增長的計算需求,計算技術、產品與產業也面臨着新的挑戰。具體來説,體現在以下三個方面,一個是多元化的挑戰,也就是計算場景的複雜、計算架構的多元;一個是巨量化的挑戰,也就是由巨量模型、巨量數據、巨量算力及巨量應用引發的對現有計算機體系結構的挑戰;

最後一個則是生態化的挑戰,簡單來説現在的智算處於羣雄並起階段,自成體系、生態離散,同時產業鏈上下游脱節。

第一個挑戰是多元化。

我們講計算最關鍵的任務就是支撐業務,那麼不同的業務類型,勢必要求有不同的計算系統來完成。例如針對傳統的地震波模擬等科學計算,數值精度要求高,需要能到64位;而AI訓練,則可以使用數值範圍大、精度低的16位浮點類型;對於AI推理,由於推理要求速度、耗能少,則可以在更低的數值精度下進行處理,如4位、甚至2位、1位整數類型。

也就是説AI的應用引入了新計算類型,從推理到訓練,跨度更大,同時,數據量也從GB級到TB級、PB級不斷提升,類型從結構化到半結構化、非結構化更加複雜多樣。

不同數值精度的計算類型對於計算芯片指令集、架構的要求是不一樣的,這樣就導致之前我們一直使用的通用CPU芯片已經無法滿足這種多元化計算場景要求了,這也是計算芯片的種類越來越多的很重要的原因。

第二個挑戰是巨量化。巨量化首先表現在模型參數多、訓練數據量大。

以自然語言處理為例,基於自監督學習的預訓練模型興起後,模型精度隨着模型尺寸及訓練數據的增加而顯著提升。

20年GPT-3模型的參數量首次突破千億大關,達到了1750億。按照當前的發展趨勢,23年模型的參數量將突破百萬億,也就是基本達到人腦神經突觸數量,人腦的神經突觸數量約125萬億。

巨量模型需要巨量內存。當前一顆GPU的板載高速內存容量為40GB,對於包含百萬億參數的巨量模型,僅是將這些參數平均分配到每個GPU內存中,就需要1萬塊GPU才能裝得下。

考慮到訓練中需要額外的存儲,實際上至少需要2萬塊GPU才能啟動訓練。現有AI芯片的架構已經不足以支撐巨量模型的參數存儲需求。

同時,巨量模型依賴海量數據的餵養,目前的AI算法本質上還是一種依賴量變的質變,很難從一種質變跳躍到另一種質變,例如最新的巨量模型需要萬億級的詞量數據。海量數據需要海量存儲。在超大規模集羣中同時滿足幾萬塊AI芯片的高性能讀取,對存儲系統是個極大的挑戰。

巨量化的第二個表現是計算力需求指數增長

深度學習自2011年興起至今,對算力的需求始終呈指數增長。每隔3.4個月,算力需求翻一倍。Petaflops*day代表以1P每秒的算力計算一天所用浮點計算量來度量算力。訓練巨量模型需要巨大算力:20年GPT-3的算力達到了3640PD,到23年巨量模型的算力需求將達到百萬PD。

在當今世界最快的超算系統上,完成百萬PD的計算所需時間約為2年。不同領域需要不同類型的巨量模型:GPT-3以處理英文理解任務為主,為了滿足不同語言,不同場景的精度要求,也要訓練不同的巨量模型,這進一步加劇了對算力的需求。

如此龐大的算力需求給計算技術和產品帶來了巨大挑戰。解決這樣的挑戰需要從體系結構、系統軟件等各個領域開展創新。

最後我們來看一下智算面臨的生態化的挑戰,AI的技術鏈條、產業鏈條是脱節的。我想很多人會有這樣的疑問,人工智能那麼好,但是這東西怎麼跟我的業務,跟我的客户應用場景結合起來呢,我想用AI技術做智能化轉型,但是發現我這裏沒人懂算法,懂模型,也缺少好用的AI開發平台。同時,那麼多算法,模型,如何找到不同算法在應用中的最優組合。

懂這些的人,往往都集中在科研機構或者頭部公司。這些地方集中了最優秀的AI人才,但缺少對傳統行業的需求場景、業務規律的深入理解,也拿不到最關鍵的業務數據去對模型進行訓練,導致技術無用武之地。

埃森哲等諮詢機構的調查報吿也表明,70%以上的有技術的研究機構、科技公司缺需求場景、缺領域知識和數據,70%以上的行業用户缺技術人才、缺AI平台和實踐能力。

2 AI加速技術介紹

2.1 AI架構

圖片來源於浪潮

通常用户對接觸到的AI架構相關的信息是申請XX核CPU, XX張CPU卡,XXGB內存等資源,其對應AI架構的計算資源、存儲資源和網絡資源,實際的AI架構包括計算節點、管理節點、存儲節點、計算網絡、管理網絡和客户端等。

如何進行計算資源的規劃呢?秉持的原則是花最低的成本滿足需求,同時考慮到擴展性,比如有兩種以上計算特徵的業務,而且規模都不小,那麼對應的計算節點類型也應有兩種以上;如果極限需求規模遠大於其它需求,那麼可以減少計算節點類型數量,以便將來不斷擴展。

2.2 AI加速技術

AI對計算的需求非常大,如何加速直接關係到生產效率和成本,下面介紹一下當前最新的一些AI加速技術。

2.2.1 計算

(1)異構計算

在GPU用於AI計算前,都是CPU承擔計算任務,但是隨着AI計算需求的急劇增加,CPU的計算效率難以滿足需求,產生了“CPU+GPU”的異構計算架構,如下圖右上角所示。

如下圖右下角所示,GPU的計算效率是CPU的幾倍~幾十倍,為什麼CPU和GPU的計算效率會有這麼大的差異呢?主要是CPU和GPU的架構存在巨大差異,如下圖左下角所示,GPU的計算單元數量遠遠多於CPU的計算單元,所以GPU更適合於大規模並行計算。

而CPU架構中Control和Cache單元面積則比GPU大得多,所以CPU更適用於不能高度並行的複雜計算(比如代碼中的if語句等)。

(2)NVLINK通信

隨着AI計算規模增大,例如大規模AI訓練,需要多卡甚至多個節點同時參與一個任務的計算,其中一個關鍵點就是如何支持節點內GPU間的高速通信,以便他們可以作為一個巨大的加速器相互協作。

雖然PCIe非常標準,但是帶寬非常有限,如下圖左上角所示,PCIe Gen3的理論帶寬是32GB/s,PCIe Gen4的理論帶寬是64GB/s,而實測帶寬大概分別是24GB/s和48GB/s。

在AI訓練中,沒完成一輪計算,都要同步更新一次參數,也就是權係數,模型規模越大,參數規模一般也會更大,這樣GPU之間通信(P2P)能力對計算效率影響就比較大,如下圖右上角所示,同樣是8卡V100, NVLINK2.0架構相比PCIe架構性能提升26%,NVLINK2.0 Next架構(全互聯,任意兩張卡間P2P通信帶寬都是300GB/s)則相比PCIe架構提升67%。

NVLINK是NVIDIA開發的一項高速GPU互聯技術,現在已經發展到第三代(NVLINK3.0),如下圖下半部分,從NVLINK1.0(P100)到NVLINK2.0(V100),再到NVLINK3.0(A100),帶寬從160GB/s到300GB/s,再到600GB/s,NVLINK1.0和2.0的P2P通信不是全互聯,也就是,任意兩張GPU卡之間的通信帶寬實際沒有達到最大帶寬,有的甚至還通過PCIe通信,這樣節點內GPU P2P通信就產生了台階。

而NVLINK3.0則實現了P2P全互聯通信,任意兩張卡之間的通信帶寬是600GB/s,極大的提升了節點內多卡計算效率。

圖片來源於浪潮

(3)Tensor Core

V100的張量核心是可編程的矩陣乘法和累加單元,可以提供多達125 Tensor TFLOPS的訓練和推理應用。V100包含640個Tensor Cores。每個張量核提供一個4x4x4矩陣處理數組,它執行操作D=a*B+C,其中a、B、C和D是4×4矩陣,如下圖上部所示。矩陣乘法輸入A和B是FP16矩陣,而累積矩陣C和D可以是FP16或FP32矩陣。

每個 Tensor 核心每個時鐘週期可執行 64 次浮點混合乘加 (FMA) 運算。從而為訓練和推理應用程序提供高達 125 TFLOPS 的計算性能。這意味着開發人員可以使用混合精度(FP16 計算使用 FP32 累加)執行深度學習訓練,從而實現比上一代產品快 3 倍的性能,並可收斂至網絡預期準確度。

Tensor內核提供的GEMM性能是以前硬件的幾倍,如下圖右下角所示,GP100(Pascal)和GV100(Volta)硬件的比較性能。

圖片來源於NVIDIA

(4)多元算力

隨着AI的發展,產生了各類芯片,比如CPU、GPU、ASIC、FPGA,如下圖上部所示,從通用性和性能兩個維度去分析比較,通用性維度:CPU > GPU > FPGA > ASIC,性能維度則是正好相反。不同的AI任務,對芯片的要求不同,比如訓練任務,需要能支持各類框架、模型、算法庫等,需要很高的通用性,NVIDIA GPU因為其完備的生態,具有很高的通用性,從而佔據主導地位。

而對於推理任務,則僅需支持某一或某幾個框架、模型、算法庫等,因為靠近業務,所以對性能和成本的需求更多,於是ASIC芯片則在部分場景的性價比超過NVIDIA GPU,從下圖下半所示的IDC統計的各類芯片市場銷量可以看出來,在推理市場,NVIDIA GPU雖然仍然佔據主導,但是其它芯片的依然能跟上NVIDIA GPU的步伐,訓練市場,其它芯片依然進展緩慢。

圖片來源於IDC

(5)低精度

如果能將32位的浮點數壓縮到16位,雖然會損失一定的表示精度,但無論在參數的存儲空間上還是在計算量(FPU計算次數)上都會帶來極大的改進。

這就是混合精度訓練的基本原理。權重的主版本是以FP32形式存儲的,在做推理與反向傳播運算時先換成FP16在做計算,在做權重更新時,更新的增量(梯度乘以學習率)也是加到以FP32表示的權重上的,如下圖上部所示。

如下圖所示,在某些場景,低精度不僅帶來性能的提,還可以在推理任務重用來處理更復雜的模型,從而提高推理任務的精度。

圖片來源於知乎https://zhuanlan.zhihu.com/p/370774556

2.2.2 網絡

(1)GDR

GDR(GPU Direct RDMA),就是計算機1的GPU可以直接訪問計算機2的GPU內存,如下圖上半部所以。瞭解GDR概念之前,首先了解DMA和RDMA概念。

DMA(Direct Memory Access)直接內存訪問,是Offload CPU負載的一項重要技術。DMA的引入,使得原來設備內存與系統內存的數據交換必須要CPU參與,變為交給DMA控制來進行數據傳輸,是一種完全由硬件執行I/O交換的工作方式。

RDMA可以簡單理解為利用相關的硬件和網絡技術,服務器1的網卡可以直接讀寫服務器2的內存,最終達到高帶寬、低延遲和低資源利用率的效果。

目前RDMA的實現方式主要分為InfiniBand和Ethernet兩種傳輸網絡。而在以太網上,又可以根據與以太網融合的協議棧的差異分為IWARP和RoCE(包括RoCEv1和RoCEv2)。

所謂GPUDirect RDMA,就是計算機1的GPU可以直接訪問計算機2的GPU內存。而在沒有這項技術之前,GPU需要先將數據從GPU內存搬移到系統內存,然後再利用RDMA傳輸到計算機2,計算機2的GPU還要做一次數據從系統內存到GPU內存的搬移動作。

GPUDirect RDMA技術使得進一步減少了GPU通信的數據複製次數,通信延遲進一步降低。

圖片來源於NVIDIA 

(2)SHARP

SHARP(Scalable Hierarchical Aggregation and Reduction Protocol)是一種集合通信網絡卸載技術。

在AI訓練中,常常有很多集合類通信,這些集合類通信由於涉及全局,常常對應用程序並行效率產生巨大的影響。

針對這種情況,NVIDIA Mellanox從EDR InfiniBand交換機開始引入了SHARP技術,在交換機芯片中集成了計算引擎單元,可以支持16位、32位及64位定點計算或浮點計算,可以支持求和,求最小值,求最大值,求與,求或及異或等計算,可以支持Barrier、Reduce、All-Reduce等操作。

在多交換機組成的機羣環境下,Mellanox定義了一整套的可擴展分層次聚合和歸約協議(SHARP)卸載機制,由聚合管理器(Aggregation Manager)在物理拓撲中構造一個邏輯的SHARP樹,由SHARP樹中的多個交換機並行分佈式處理集合類通信操作。

當主機需要進行全局通信例如allreduce時,所有主機把通信數據提交到各自連接的交換機,第一級交換機收到數據後,會使用內置的引擎對數據進行計算和處理,然後把結果數據提交到SHARP樹的上一級交換機,上一級交換機也使用自己的引擎對從若干個交換機收上來結果數據做聚合處理,並繼續向SHARP樹的上一級遞交。

到達SHARP樹的根交換機後,根交換機做最後計算並把結果回發給所有的主機節點。通過SHARP方式,可以大幅降低集合通信的延遲,減少網絡擁塞,並提升機羣系統的可擴展性(如下圖上半部所示)。

SHARP對於複雜模型,複雜多層網絡效果更加顯著,如下圖下半部所示,隨着集羣規模的增大,開啟SHARP功能後,延遲基本沒變化,相比未啟用SHARP功能,延遲呈線性增長;同樣對於最終的性能提升也是差異比較大。

圖片來源於NVIDIA 

(3)IB(INFINIBAND)

InfiniBand Architecture是為大規模數據中心設計的軟件定義網絡架構,它的設計旨在實現最高效的數據中心互連基礎設施。InfiniBand原生地支持SDN、Overlay和虛擬化等網絡技術,是一種開放標準的高帶寬、低時延、高可靠的網絡互連。相比RoCE網絡,IB有諸多優勢,如下圖上半部分。

當然關於AI訓練網絡是選用IB還是RoCE,在近期的套餐升級方案中爭論的比較激烈,NVIDIA是主推IB的,他們的論據是除了列出各種功能優勢外,還有近兩年互聯網企業,如阿里、百度、京東、騰訊等部署的AI集羣大都採用IB網絡,然而也拿不出非常讓人信服的量化數據,從阿里的維度看,由於有一支專門的RoCE網絡優化團隊,所以獲得了近似IB的性能,同時NVIDIA所列的SHARP等Benchmark性能在實際用户中僅取得3%-5%左右的性能提升(現在估計是在大模型、三層及以上網絡架構效果顯著些)。

總的來説,目前階段的結論是IB是優於RoCE,IB把優化工作做到生態(NCCL/CUDA/…)中,對用户來説,優化工作量非常小,但是對於RoCE,需要有專門的團隊,較深的優化積累,相比較而言,當前選擇IB更適合,當然成本有所提升,但如下圖下半部分,帶來的性能提升量更大。

當然,在雲化的大背景下,除了以太,又多了一套網絡架構,對於整體運維和管理帶來複雜度提升,所以,IB&RoCE之爭不妨可以再深入分析,列舉更多的量化數據,做更多的原理性分析,從而達到對網絡的深度認知。

圖片來源於NVIDIA&Mlperf

(4)多網卡

前面講到NVLINK3.0的通信帶寬為600GB/s,PCIe4.0的實測通信帶寬也達到了48GB/s,而當前的計算網絡通常最大是100Gb/s(12.5GB/s),所以對於需要跨節點多機多卡計算的大模型訓練任務時,節點間參數通信就會遇到瓶頸,這時有必要採用多網卡策略,也就是兩個節點間不再是連接1根網線,而是多根,從下圖可以看出多網卡對於性能的提升量明顯,由於網絡成本佔整個計算系統成本一般為10%左右,所以10%以上的性能提升對於整個計算系統來説,性價比是提升的。

圖片來源於NVIDIA 

2.2.3 存儲

(1)GDS

GDS(GPUDirect Storage),是NVIDIA推出的又一GPUDirect技術,由於GPU計算速度很快,但是隨着數據集和模型規模不斷增加,應用程序載入數據花費的時間越來越長,進而影響了應用程序的性能,而且特別是端到端架構,會因為緩慢的I/O使得運算速度日益提升的GPU無用武之地。

數據從NVMe磁盤傳輸到GPU內存的標準路徑,是使用系統內存中的回彈緩存(Bounce Buffer)也就是額外的數據拷貝。而GPUDirect存儲技術避免使用回彈緩存,以減少額外的數據副本,並使用直接內存存取引擎(Direct Memory Access,DMA)將數據直接放到GPU內存中,為遠端或是本地存儲。

諸如NVMe或NVMe over Fabric,和GPU內存之間,建立一個直接傳輸數據的路徑,而這能有效減輕CPU I/O的瓶頸,提升I/O帶寬和傳輸數據的量。

英偉達發展GPUDirect存儲技術,大幅提升GPU載入大型數據集的速度。英偉達提到,GPUDirect存儲技術的主要功能,就是通過這個新的系統,以直接內存的存取方式,將數據傳輸至GPU內存上。

當然,發展到現在GDR落地場景還不是很多,首先是文件系統需要做適配,只有通過NVIDIA認證了才能支持GDR技術,限制了技術的推廣;其次,GDR主要還是單機內的技術,而且NVME主要是用來承載內存空間不足,統一存儲帶寬又偏低的一箇中間狀態需求,適用的場景較窄,所以業內適配的積極性也不高,但不管怎麼説,GDR也為AI架構又提供了一種加速選擇。

(2)Burst Buffer

Burst Buffer技術能夠利用計算節點本地SSD硬盤,組成臨時高速緩存文件系統。 該功能可以通過更快的checkpoint restart提高應用程序可靠性;加快小塊傳輸和分析的I/O性能;為核心外部應用程序提供快速臨時存儲空間;為需要計算過程中持久快速存儲的大量文件輸入計算任務創建暫存區域。

之前在HPC架構中採用較多,比如世界HPC TOP500榜單排名前10的超算集羣,有多套已採用Burst Buffer技術,在AI架構中,現在也有用户在嘗試採用類似技術,為大規模訓練提供超大高速緩存。

圖片來源於浪潮

2.2.4 並行技術

AI大規模訓練中,非常重要的一項技術就是並行技術。在多個計算設備上部署深度學習模型是訓練大規模複雜模型的一種方式,隨着對訓練速度和訓練頻率的要求越來越高,該方法的重要性不斷增長。

數據並行化(Data parallelism,DP)是應用最為廣泛的並行策略,但當一張GPU的顯存不能放下一個模型時,需要堆模型進行拆分, 將模型分為N個部分,分別加載到不同的N個GPU節點中,模型拆分按照拆分方式不同,又分為張量切片模型並行(層內模型並行)、Pipeline模型並行(層間模型並行)。

如DeepSpeed模型,GPT-3模型等則需要採用多種並行方式組合,才能完整裝下整個模型。

而對於GPT-3模型來説,其對計算和I/O的需求都非常大,需要綜合前面講到的主要的加速技術,比如NVLINK,Tensor Core、IB、多網卡、GDR、並行方式等,才能高效的完成大模型訓練。

圖片來源於浪潮

2.3總結

前面講到了各種AI加速技術,其實彙總起來無外乎都是在朝着兩個方向努力:計算和I/O,採用異構計算是為了提升計算能力,採用NVLINK、IB、GDR、GDS、BurstBuffer、多網卡等都是為了提升IO帶寬和延遲。

因為從GPU 緩存(7TB/s)到顯存(1.6TB/s)、CPU內存(90GB/s)、高速緩存(24GB/s)、NVME硬盤(6GB/s)、分佈式存儲(5GB/s,規模大可到幾十上百GB/s)、 冷存貨(2GB/s),IO帶寬存在台階,所以AI架構IO加速的方向是在逐步彌補台階的差異,當然算法上還需要儘可能的利用架構的特點,最大化的利用最快的IO架構。

圖片來源於NVIDIA

三、GPT-3模型預訓練計算架構分析

下面以GPT-3模型預訓練為例,進行簡單的架構分析。

3.1 GPT-3模型計算特徵分析

在進行AI架構方案設計時,首先要弄清楚GPT-3的計算特徵,也就是什麼樣的計算和I/O滿足GPT-3模型預訓練的極限需求。

一般是通過理論分析和實際測試兩個維度分析,通過分析,可以獲知,GPT-3的I/O需要接近100GB/s,對應的網絡需要4*HDR 200網絡支持,也就是需要4網卡,這次採用的是Infiniband網絡。

圖片來源於浪潮

其次是計算需求,以A100的算力312TFlops來評估:GPT-2的計算需求約為  10 PetaFlop/s-day, 約等於64個A100 GPU訓練1天時間;GPT-3的計算需求約為3640 PetaFlop/s-day, 約等於64個A100 GPU訓練1年時間。下表是近期業內發佈的幾個大模型使用的訓練計算資源情況。

3.2 GPT-3模型預訓練計算架構分析

如前一節分析,AI計算架構的計算部分採用最新的A100 GPU卡,I/O部分採用4*HDR200 IB網絡,GPU之間採用NVLINK實現600GB/s高速互聯。

NVLINK  A100 服務器拓撲 

圖片來源於浪潮

下圖是對應的網絡拓撲:

大模型訓練平台架構(140節點)

圖片來源於NVIDIA

4 結語

AI算力是人工智能三要素的重要組成部分,AI加速技術圍繞計算和I/O正在飛速的發展,不斷提升AI計算任務的計算效率,我們加強對於AI架構的理解。

當然AI加速除了配置相應的硬件架構,還需要平台、框架、算法等相關技術人員一起合作,才能最大化的利用當前最新的AI架構。

作者簡介

Jason OPPO高級AI架構師

畢業於中科院地質與地球物理研究所,曾任職浪潮高級AI架構師,為AI客户提供AI算力架構選型與優化。

推薦閲讀

| 由IDC餘熱回收的創新技術實踐與跨界合作探討

| 深度學習中的分佈式訓練

| 人物訪談|下一代人工智能:邏輯理解?物理理解?

本文版權歸OPPO公司所有,如需轉載請在後台留言聯繫