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