隨著由ChatGPT引發(fā)的人工智能熱潮,GPU成為了AI大模型訓(xùn)練平臺的基石,甚至是決定性的算力底座。為什么GPU能力壓CPU,成為炙手可熱的主角呢?要回答這個問題,首先需要了解當(dāng)前人工智能(AI,Artificial Intelligence)的主要技術(shù)。
? ? 人工智能與深度學(xué)習(xí)
人工智能是一個歷史非常長的學(xué)科。自上世紀(jì)50年代以來,在多個技術(shù)方向上進(jìn)行過探索,也經(jīng)歷過多次的高潮和低谷。想了解更基礎(chǔ)更有趣的人工智能介紹,可以看下面這篇文章:人工智能來了,小心你的飯碗不保。人工智能在早期誕生了一個“不甚成功”的流派,叫做“人工神經(jīng)網(wǎng)絡(luò)”。這個技術(shù)的思路是,人腦的智慧無與倫比,要實(shí)現(xiàn)高級的人工智能,模仿人腦就是不二法門。人腦是由數(shù)以億計的神經(jīng)元組成。這些神經(jīng)元彼此連接,形成了龐大而復(fù)雜的神經(jīng)網(wǎng)絡(luò)。嬰兒的大腦是一張白紙,經(jīng)過后天的學(xué)習(xí)便可實(shí)現(xiàn)高度的智能。
參考人腦神經(jīng)元,人工神經(jīng)元模型就被設(shè)計了出來。
在人工神經(jīng)元里,通過調(diào)整每個輸入的權(quán)重,經(jīng)由神經(jīng)元計算處理之后,便可得出相應(yīng)的輸出。這里面的每個權(quán)重,就被稱作一個參數(shù)。
把這樣的多個神經(jīng)元相互連接形成網(wǎng)絡(luò),就是人工神經(jīng)網(wǎng)絡(luò)了。人工神經(jīng)網(wǎng)絡(luò)一般由輸入層、中間的多個隱藏層以及輸出層組成。
這樣的人工神經(jīng)網(wǎng)絡(luò)就像嬰兒的大腦一樣空空如也,必須給它投喂大量的數(shù)據(jù),讓它充分學(xué)習(xí)才能形成知識,才能用于實(shí)際解決問題。這個過程就叫做“深度學(xué)習(xí)”,屬于“機(jī)器學(xué)習(xí)”的子集。
以常見的“監(jiān)督學(xué)習(xí)”為例,給AI投喂的數(shù)據(jù)必須包含問題和答案。比如說,我們的目標(biāo)是讓AI判斷圖片里面是不是有一只貓,那就需要給AI大量確定有貓的圖片并給出貓的特征,讓它自己從中找規(guī)律。首先AI拿出一張給定的圖片,采用初始權(quán)重得出自己的結(jié)論。然后比較這個結(jié)論和正確答案到底相差了多少,再返回去優(yōu)化參數(shù)權(quán)重,這個過程循環(huán)進(jìn)行,直至AI給出的結(jié)果和正確答案最為接近。
這個學(xué)習(xí)的過程就叫做訓(xùn)練。一般來說,需要給AI大量含有正確答案的數(shù)據(jù),才會得出比較好的訓(xùn)練結(jié)果。一旦我們認(rèn)為訓(xùn)練完成,就拿出試試成色。如果我們給它未知的問題,它也能很好地找出答案,就認(rèn)為訓(xùn)練是成功的,AI的“泛化”效果很好。
如上圖所示,從神經(jīng)網(wǎng)絡(luò)上一層到下一層,參數(shù)權(quán)重的傳遞,本質(zhì)上就是矩陣的乘法和加法。神經(jīng)網(wǎng)絡(luò)參數(shù)的規(guī)模越大,訓(xùn)練時需要的這些矩陣的計算也就越大。
最先進(jìn)的深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)可以有數(shù)百萬到超過數(shù)萬億個參數(shù),它們還需要大量的訓(xùn)練數(shù)據(jù)來實(shí)現(xiàn)高精度,這意味著必須通過正向和反向傳遞運(yùn)行驚人的輸入樣本。由于神經(jīng)網(wǎng)絡(luò)是由大量相同的神經(jīng)元創(chuàng)建的,因此這些計算本質(zhì)上是高度并行的。如此大規(guī)模的計算量,用CPU還是GPU好呢?
CPU,擅長控制的管家
我們先說CPU(Central Processing Unit)。此物可謂電腦的大腦,是當(dāng)仁不讓的核心中的核心。CPU內(nèi)部主要包含運(yùn)算器(也叫邏輯運(yùn)算單元,ALU)和控制器(CU),以及一些寄存器和緩存。
數(shù)據(jù)來了,會先放到存儲器。然后,控制器會從存儲器拿到相應(yīng)數(shù)據(jù),再交給運(yùn)算器進(jìn)行運(yùn)算。運(yùn)算完成后,再把結(jié)果返回到存儲器。在早期,一個CPU只有一套運(yùn)算器、控制器和緩存,同一時間只能處理一個任務(wù)。要處理多個任務(wù),只能按時間排隊輪著來,大家雨露均沾。這樣的CPU就是單核CPU。
后來,人們把多套運(yùn)算器、控制器和緩存集成在同一塊芯片上,就組成了多核CPU。多核CPU擁有真正意義上的并行處理能力。
一般情況下,多核CPU的核心數(shù)量少則2個4個,多則幾十個。在智能手機(jī)剛開始普及的時候,手機(jī)的外觀趨同,其他地方也乏善可陳,廠家就大力渲染CPU的核數(shù),史稱智能手機(jī)的“核戰(zhàn)”。
不過“核戰(zhàn)”也就從雙核燒到4核再到8核,然后大家也就都就偃旗息鼓了。芯片廠家也都是在這個核心數(shù)量上做優(yōu)化。為什么CPU不多集成一些核心呢?這是因?yàn)镃PU是一個通用處理器。它的任務(wù)非常復(fù)雜,既要應(yīng)對不同類型的數(shù)據(jù)計算,還要響應(yīng)人機(jī)交互。復(fù)雜的任務(wù)管理和調(diào)度使得它需要更復(fù)雜的控制器和更大的緩存,進(jìn)行邏輯控制和調(diào)度,保存各種任務(wù)狀態(tài),以降低任務(wù)切換時的時延。
CPU的核心越多,核心之間的互聯(lián)通訊壓力就越來越大,會降低單個核心的性能表現(xiàn)。并且,核心多了還會使功耗增加,如果忙閑不均,整體性能還可能不升反降。
????GPU,并行計算專家
下來再看GPU(Graphics Processing Unit)。GPU叫做圖形處理單元。其設(shè)立的初衷是為了分擔(dān)CPU的壓力,加速三維圖形的渲染,常用于電腦的顯卡。圖像的處理,正是一種針對矩陣的密集并行計算。
GPU一詞從1999年Nvidia推出其GeForce256時開始流行,該產(chǎn)品對每一個像素點(diǎn)同時處理,執(zhí)行圖形轉(zhuǎn)換、照明和三角剪裁等數(shù)學(xué)密集型并行計算,用于圖像渲染。為什么GPU善于承擔(dān)密集的并行計算呢?這是因?yàn)镚PU的在架構(gòu)上和CPU有很大的不同。
CPU的核數(shù)少,單個核心有足夠多的緩存和足夠強(qiáng)的運(yùn)算能力,并輔助有很多加速分支判斷甚至更復(fù)雜的邏輯判斷的硬件,適合處理復(fù)雜的任務(wù)。相比之下GPU就簡單粗暴多了,每個核心的運(yùn)算能力都不強(qiáng),緩存也不大,就靠增加核心數(shù)量來提升整體能力。核心數(shù)量多了,就可以多管齊下,處理大量簡單的并行計算工作。
隨著時間的推移,GPU也變得更加靈活和可編程,它的工作也就不局限于圖像顯示渲染了,還允許其他開發(fā)者用來加速高性能計算、深度學(xué)習(xí)等其他工作負(fù)載。
由于趕上了人工智能這樣并行計算需求暴增的機(jī)遇,GPU一改以前的邊緣角色,直接站到了舞臺中央,可謂炙手可熱。GPU的名字,也變成了GPGPU,即通用GPU。將AI訓(xùn)練這種并行性自然地映射到GPU,與僅使用 CPU 的訓(xùn)練相比,速度明顯提升,并使它們成為訓(xùn)練大型、復(fù)雜的基于神經(jīng)網(wǎng)絡(luò)的系統(tǒng)的首選平臺。推理操作的并行特性也非常適合在 GPU 上執(zhí)行。因此,由GPU作為主力所提供的算力,也被叫做“智算”。