系統設計的藝術:當HPC與AI應用成為主流,GPU架構該向何處去?
我們多年前就曾經提到,配合充足的數據并使用卷積神經網絡進行AI工作負載訓練正逐漸成為主流,而全球各主要HPC(高性能計算)中心多年來一直把這方面負載交給英偉達的GPU處理。對于模擬和建模等任務,GPU的性能表現可謂相當突出。從本質上講,HPC模擬/建模與AI訓練其實是一種諧波收斂,而GPU作為大規模并行處理器特別擅長執行這類工作。
但自2012年起,AI革命正式爆發,圖像識別軟件第一次將準確度提升至超越人類的水平。所以我們非常好奇,HPC和AI這種在同類GPU上高效處理的共性還能持續多久。于是在2019年夏季,通過對模型的細化迭代,我們嘗試用混合精度數學單元在Linpack基準測試中得出與FP64計算相同的結果。而在英偉達于次年推出“Ampere”GA100 GPU之前,我們再次進行一番HPC與AI的處理性能嘗試。當時英偉達還沒有推出“Ampere”A100 GPU,所以顯卡巨頭尚未正式朝著在混合精度張量核心上訓練AI模型的方向傾斜?,F在的答案當然已經明了,FP64矢量單元上的HPC工作負載需要做點架構調整才能發揮GPU性能,毫無疑問有點“二等公民”的意思了。但在當時,一切還皆有可能。
隨著英偉達在今年早些時候推出“Hopper”GH100 GPU,AI與HPC的代際性能改進幅度出現了更大的差距。不僅如此,在最近的秋季GTC 2022大會上,英偉達公司聯合創始人兼CET黃仁勛表示,AI工作負載自身也出現了分歧,也迫使英偉達開始探索CPU業務——或者更準確地說,應該叫面向GPU的優化擴展內存控制器。
稍后我們會具體討論這個問題。
花開兩朵,各表一枝
讓我們先從最明確的判斷說起。如果英偉達想讓自己的GPU擁有更強的FP64性能,用以支持天氣建模、流體動力學計算、有限元分析、量子色動力學及其他高強度數學模擬等64位浮點HPC應用,那加速器的設計思路應該是這樣的:制造一款不設任何張量核心、也不設FP32 CUDA核心(在CUDA架構中主要作為圖形著色器)的產品。
但這樣的產品恐怕只有幾百家客戶愿意采購,所以單芯片價格可能在數萬甚至數十萬美元,只有這樣才能覆蓋掉設計和制造成本。為了建立起規模更大、而且更具利潤空間的業務,英偉達必須設計出更加通用的架構,其矢量數學運算能力只要比CPU強就夠了。
所以自從英偉達15年前決定認真為HPC應用設計產品開始,他們就一直專注于使用FP32浮點數學運算的HPC場景——包括地震處理、信號處理和基因組學類負載中使用的單精度數據和處理任務,并逐步提升GPU的FP64功能。
2012年7月推出的K10加速器搭載兩個“Kepler”GK104 GPU,與游戲顯卡中使用的GPU完全相同。其中設有1536個FP32 CUDA核心,沒采用任何專用FP64核心。它的FP64支持純由軟件完成,因此無法實現可觀的性能提升:雙GK104 GPU在處理FP32任務時性能為4.58 teraflops,而在處理FP64時為190 gigaflops,比率為24比1。而在2012年底的SC12超級計算大會上發布的K20X則采用GK110 GPU,FP32性能為3.95 teraflops,FP64性能為1.31 teraflops,比率提升至3比1。到這個時候,該產品對HPC應用程序以及在學術/超大規模計算領域訓練AI模型的用戶來說,已經初步具備了可用性。K80 GPU加速卡采用兩個GK110B GPU,這是因為英偉達并沒有為當時最高端的“Maxwell”GPU添加FP64支持,因此GK110 B就成了當時廣受歡迎、最具性價比的選項。K80的FP32性能為8.74 teraflops,FP64性能則為2.91 teraflops,比率仍然保持為3比1。
到“Pascal”GP100 GPU,HPC與AI的差距隨FP16混合精度指標的引入而進一步拉開,不過矢量FP32與矢量FP64的比例進一步轉化為2比1,而且在“Volta”GV100之后的“Ampere”GA100和“Hopper”GH100等更新GPU中得到了保持。在Volta架構中,英偉達首次引入了具有固定矩陣磊小的張量核心(Tensor Core)矩陣數學單元,顯著提升了浮點(及整數)運算能力,并繼續在架構中保留矢量單元。
這些張量核心被用于處理越來越大的矩陣,而具體運算精度卻越來越低,于是這類設備獲得了極為夸張的AI負載吞吐量。這當然離不開機器學習自身的模糊統計性質,同時也跟多數HPC算法要求的高精度數學拉開了巨大差距。下圖所示為AI和HPC性能差距的對數表示,相信大家已經能夠看到二者間的趨勢性差異:
對數形式看著不夠震撼,咱們用實際比例再看一遍:
系統設計的藝術:當HPC與AI應用成為主流,GPU架構該向何處去?
并不是所有HPC應用都能針對張量核心進行調整,也不是一切應用程序都能把數學運算移交給張量核心,所以英偉達的GPU架構中仍然保留著一些矢量單元。另外,很多HPC組織其實拿不出像HPL-AI那樣的迭代求解器。Linpack基準測試中使用的就是HPL-AI求解器,它采用常規HPL Linpack并配合FP16加FP32運算,再輔以一點點FP64運算來收斂至與純FP64蠻力計算相同的答案。這種迭代求解器能夠在橡樹嶺國家實驗室的“Frontier”超級計算機上提供6.2倍的有效加速,并在RIKEN實驗室的“富岳”超級計算機上實現4.5倍的有效加速。如果能有更多HPC應用程序迎來屬于自己的HPL-AI類求解器,那AI跟HPC“分家”的難題也就有解了,相信這一天終會到來。
但與此同時,對于很多工作負載,FP64性能仍然是唯一的決定性因素。而憑借強大AI算力賺得盆滿缽滿的英偉達,短時間內肯定沒太多閑心照顧HPC這塊市場。
花再開兩朵,再各表一枝
可以看到,英偉達的GPU架構主要追求更高的AI性能,同時保持可接受的HPC性能,雙管齊下引導客戶每三年更新一次硬件。從純FP64性能的角度來看,在2012年至2022年這十年間,英偉達GPU的FP64吞吐量增長了22.9倍,從K20X的1.3 teraflops到H100的30 teraflops。如果能配合迭代求解器用上張量核心矩陣單元,那增幅則可達到45.8倍。但如果是只需要低精度大規模并行計算的AI訓練用戶,那從FP32到FP8的性能轉變就夸張了,已經由最早的3.95 teraflops FP32算力提升至FP8稀疏矩陣的4 petaflops,也就是提高了1012.7倍。而如果是在當時的K20X GPU上用FP64編碼的AI算法來比較(當時的主流作法),那這十年間的性能提升只有可憐的2倍。
很明顯,二者的性能差異已經不能用巨大來形容了。黃仁勛自己也提到,目前的AI陣營本身再次一分為二。一類是基于transformer模型支持的巨型基礎模型,也被稱為大語言模型。這類模型的參數數量迅猛增長,對硬件的需求也不斷提升。與之前的神經網絡模型相比,如今的transformer模型完全代表著另一個時代,如下圖所示:
請原諒這張圖有點模糊,但重點在于:對于第一組不包含transformers的AI模型,計算需求在兩年之內增長了8倍;但對于包含transformers的AI模型,其計算需求在兩年內增長了275倍。如果用浮點運算來處理,那系統中得有10萬個GPU才能滿足需求(這還不是太大的問題)。但轉向FP4精度會把計算量翻倍,未來GPU采用1.8納米晶體管時算力又能增加2.5倍左右,所以還是余下了55倍左右的差距。要是能實現FP2運算的話(假設這樣的精度足夠解決問題)倒是可以把計算量減半,但那也至少得使用25萬個GPU。而且,大語言transformer模型往往很難擴展,特別是不具備經濟意義上的可行性。所以這類模型就成了巨頭級企業的專屬,就如同核武器只會被掌握在強國手中一樣。
至于作為“數字經濟引擎”的推薦系統,它需要的不只是成倍增加的計算量,還需要遠超大語言模型、甚至是GPU所能提供內存容量的數據規模。黃仁勛在之前的GTC主題演講中就曾提到:
“與大語言模型相比,各個計算單元在處理推薦系統時面對的數據量要大出一個量級。很明顯,推薦系統不僅要求內存速度更快,而且需要10倍于大語言模型的內存容量。雖然大語言模型隨時間推移而保持著指數增長、對算力的需求一刻不停,但推薦系統也同樣保持著這樣的增長速度,而且不斷吞噬更多內存容量。大語言模型和推薦系統可以說是當下最重要的兩類AI模型,而且有著不同的計算要求。推薦系統可以擴展至數十億用戶與數十億個條目,每篇文章、每段視頻、每個社交帖都有對應的數字表示,被稱為嵌入。每個嵌入表可能包含數十TB的數據,需要由多個GPU協同處理。在處理推薦系統時,既要求網絡中的某些部分實現數據并行處理,又要求網絡中的其他部分實現模型并行處理,這就對計算機中的各個部分提出了更高要求?!?
下圖所示,為推薦系統的基本架構:
為了解決定特殊的內存容量與帶寬問題,英偉達開發出了“Grace”Arm服務器CPU,并將其與Hopper GPU緊密耦合。我們也開玩笑說,如果需要的主內存量十分巨大,那Grace實際上只是Hopper的內存控制器。但從長遠來看,也許把一堆運行有NVLink協議的CXL端口掛入Hooper的下一代GPU就行。
所以英偉達拿出的Grace-Hopper超級芯片,就相當于把一個“兒童”級CPU集群放進了巨大的“成人”級GPU加速集群。這些Arm CPU倒是可以支持傳統的C++和Fortran工作負載,但代價是:混合集群當中CPU部分的性能,只相當于集群中GPU性能的十分之一,而成本卻是常規純CPU集群的3到5倍。
順帶一提,我們對于英偉達所做的任何工程選擇都尊重且理解。Grace是一款出色的CPU,Hopper也是一款出色的GPU,二者相結合肯定會有不錯的效果。但現在的情況是,我們在同一平臺上面對著三種截然不同的工作負載,它們各自把架構拉向不同的方向。高性能計算、大語言模型和推薦系統,這三位老哥各有特點,根本沒法以符合經濟效益的方式同時進行架構優化。
而且很明顯,AI這邊的優勢很大、HPC則逐漸勢微,這種狀況已經持續了近十年。如果HPC想要完成自我改造,那么其代碼就得朝著推薦系統和大語言模型靠攏,而不能繼續堅持在FP64上運行現有C++和Fortran代碼。而且很明顯,跟AI客戶相比,HPC客戶的每一次運算都有溢價。所以除非HPC專家們摸清了迭代求解器的普適性開發方式,能夠以較低的精度對物理世界進行建模,否則這種被動局面將很難得到扭轉。
幾十年來,我們一直覺得大自然本身其實是不符合數學規律的。我們是在被迫用高精度數學來描述大自然的效應,或者說在用并不適合的語言描述客觀現實。當然,大自然也許比我們想象中的更精妙,而迭代求解器反而更接近我們所要建模的現實。如果真是如此,那也許是人類的一種幸運,甚至要比十年前HPC和AI的偶然重合更幸運。
畢竟世上本沒有路,走的人多了,也便成了路。