人工智慧發展至今並非一帆風順, 從起步階段到現今的深度學習階段,資料、演算法和算力構成了人工智慧三大基本要素,共同推動人工智慧向更高層次的感知、認知發展。
如前所述,當前人工智慧繁榮離不開資料、演算法和算力的共同發展,在演算法層面,深度學習三巨頭Geoffrey Hinton、Yann LeCun和Yoshua Bengio對AI領域的貢獻無人不知、無人不曉,他們圍繞神經網路重塑了AI;
資料層面,2007年李飛飛建立了世界上最大的影象識別資料庫ImageNet,使人們認識到了資料對深度學習的重要性,也正是因為通過ImageNet識別大賽,才誕生了AlexNet, VggNet, GoogleNet, ResNet等經典的深度學習演算法。
前幾次人工智慧繁榮後又陷入低谷,一個核心的原因就是算力難以支撐複雜的演算法,而簡單的演算法效果又不佳。黃仁勳創辦的NVIDIA公司推出的GPU,很好的緩解了深度學習演算法的訓練瓶頸,釋放了人工智慧的全新潛力。
在智慧時代,計算力就是生產力。什麼是生產力,就是人類改造自然的能力,就是創造價值的能力。在這個表中,我們有一個很有趣的發現。
在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平臺和實踐能力。
通常使用者對接觸到的AI架構相關的資訊是申請XX核CPU, XX張CPU卡,XXGB記憶體等資源,其對應AI架構的計算資源、儲存資源和網路資源,實際的AI架構包括計算節點、管理節點、儲存節點、計算網路、管理網路和客戶端等。
如何進行計算資源的規劃呢?秉持的原則是花最低的成本滿足需求,同時考慮到擴充套件性,比如有兩種以上計算特徵的業務,而且規模都不小,那麼對應的計算節點型別也應有兩種以上;如果極限需求規模遠大於其它需求,那麼可以減少計算節點型別數量,以便將來不斷擴充套件。
AI對計算的需求非常大,如何加速直接關係到生產效率和成本,下面介紹一下當前最新的一些AI加速技術。
在GPU用於AI計算前,都是CPU承擔計算任務,但是隨著AI計算需求的急劇增加,CPU的計算效率難以滿足需求,產生了“CPU+GPU”的異構計算架構,如下圖右上角所示。
如下圖右下角所示,GPU的計算效率是CPU的幾倍~幾十倍,為什麼CPU和GPU的計算效率會有這麼大的差異呢?主要是CPU和GPU的架構存在巨大差異,如下圖左下角所示,GPU的計算單元數量遠遠多於CPU的計算單元,所以GPU更適合於大規模平行計算。
而CPU架構中Control和Cache單元面積則比GPU大得多,所以CPU更適用於不能高度並行的複雜計算(比如程式碼中的if語句等)。
隨著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,極大的提升了節點內多卡計算效率。
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)硬體的比較效能。
隨著AI的發展,產生了各類晶片,比如CPU、GPU、ASIC、FPGA,如下圖上部所示,從通用性和效能兩個維度去分析比較,通用性維度:CPU > GPU > FPGA > ASIC,效能維度則是正好相反。不同的AI任務,對晶片的要求不同,比如訓練任務,需要能支援各類框架、模型、演算法庫等,需要很高的通用性,NVIDIA GPU因為其完備的生態,具有很高的通用性,從而佔據主導地位。
而對於推理任務,則僅需支援某一或某幾個框架、模型、演算法庫等,因為靠近業務,所以對效能和成本的需求更多,於是ASIC晶片則在部分場景的價效比超過NVIDIA GPU,從下圖下半所示的IDC統計的各類晶片市場銷量可以看出來,在推理市場,NVIDIA GPU雖然仍然佔據主導,但是其它晶片的依然能跟上NVIDIA GPU的步伐,訓練市場,其它晶片依然進展緩慢。
如果能將32位的浮點數壓縮到16位,雖然會損失一定的表示精度,但無論在引數的儲存空間上還是在計算量(FPU計算次數)上都會帶來極大的改進。
這就是混合精度訓練的基本原理。權重的主版本是以FP32形式儲存的,在做推理與反向傳播運算時先換成FP16在做計算,在做權重更新時,更新的增量(梯度乘以學習率)也是加到以FP32表示的權重上的,如下圖上部所示。
如下圖所示,在某些場景,低精度不僅帶來效能的提,還可以在推理任務重用來處理更復雜的模型,從而提高推理任務的精度。
圖片來源於知乎http://zhuanlan.zhihu.com/p/370774556
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通訊的資料複製次數,通訊延遲進一步降低。
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功能,延遲呈線性增長;同樣對於最終的效能提升也是差異比較大。
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之爭不妨可以再深入分析,列舉更多的量化資料,做更多的原理性分析,從而達到對網路的深度認知。
前面講到NVLINK3.0的通訊頻寬為600GB/s,PCIe4.0的實測通訊頻寬也達到了48GB/s,而當前的計算網路通常最大是100Gb/s(12.5GB/s),所以對於需要跨節點多機多卡計算的大模型訓練任務時,節點間引數通訊就會遇到瓶頸,這時有必要採用多網絡卡策略,也就是兩個節點間不再是連線1根網線,而是多根,從下圖可以看出多網絡卡對於效能的提升量明顯,由於網路成本佔整個計算系統成本一般為10%左右,所以10%以上的效能提升對於整個計算系統來說,價效比是提升的。
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架構又提供了一種加速選擇。
Burst Buffer技術能夠利用計算節點本地SSD硬碟,組成臨時快取記憶體檔案系統。
該功能可以通過更快的checkpoint restart提高應用程式可靠性;加快小塊傳輸和分析的I/O效能;為核心外部應用程式提供快速臨時儲存空間;為需要計算過程中持久快速儲存的大量檔案輸入計算任務建立暫存區域。
之前在HPC架構中採用較多,比如世界HPC TOP500榜單排名前10的超算叢集,有多套已採用Burst Buffer技術,在AI架構中,現在也有使用者在嘗試採用類似技術,為大規模訓練提供超大快取記憶體。
AI大規模訓練中,非常重要的一項技術就是並行技術。在多個計算裝置上部署深度學習模型是訓練大規模複雜模型的一種方式,隨著對訓練速度和訓練頻率的要求越來越高,該方法的重要性不斷增長。
資料並行化(Data parallelism,DP)是應用最為廣泛的並行策略,但當一張GPU的視訊記憶體不能放下一個模型時,需要堆模型進行拆分, 將模型分為N個部分,分別載入到不同的N個GPU節點中,模型拆分按照拆分方式不同,又分為張量切片模型並行(層內模型並行)、Pipeline模型並行(層間模型並行)。
如DeepSpeed模型,GPT-3模型等則需要採用多種並行方式組合,才能完整裝下整個模型。
而對於GPT-3模型來說,其對計算和I/O的需求都非常大,需要綜合前面講到的主要的加速技術,比如NVLINK,Tensor Core、IB、多網絡卡、GDR、並行方式等,才能高效的完成大模型訓練。
前面講到了各種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架構。
下面以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年時間。下表是近期業內釋出的幾個大模型使用的訓練計算資源情況。
如前一節分析,AI計算架構的計算部分採用最新的A100 GPU卡,I/O部分採用4*HDR200 IB網路,GPU之間採用NVLINK實現600GB/s高速互聯。
AI算力是人工智慧三要素的重要組成部分,AI加速技術圍繞計算和I/O正在飛速的發展,不斷提升AI計算任務的計算效率,我們加強對於AI架構的理解。
當然AI加速除了配置相應的硬體架構,還需要平臺、框架、演算法等相關技術人員一起合作,才能最大化的利用當前最新的AI架構。
Jason OPPO高階AI架構師
畢業於中科院地質與地球物理研究所,曾任職浪潮高階AI架構師,為AI客戶提供AI算力架構選型與優化。
本文版權歸OPPO公司所有,如需轉載請在後臺留言聯絡
本文分享自微信公眾號 - OPPO數智技術(OPPO_tech)。
如有侵權,請聯絡 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。