手把手教你從零設(shè)計(jì)一款算力超過 1000Tops 的智能駕駛芯片
智能駕駛已經(jīng)逐漸成為汽車的標(biāo)配。智駕芯片當(dāng)然是智能駕駛的算力基石,而這玩意也常常被車企拿來宣傳。如今,已經(jīng)有車企開始宣傳研發(fā)了 1000Tops 的智駕芯片。智駕芯片就如同汽車的大腦,非常的重要。那么,開發(fā)一款智駕芯片也是非常具有極高的技術(shù)含量的。
本文引用地址:http://www.ljygm.com/article/202503/468849.htm今天,本文手把手教大家從零設(shè)計(jì)一款算力 1000Tops 的智駕芯片。
一、煉氣期(L1)——算力的概念
那我們就先搞清楚這個(gè)智駕芯片算力 1000Tops 意味著什么?熟悉計(jì)算機(jī)的同學(xué)說這還不簡單,
OPS 的意思就是 Operations Per Second。每秒鐘操作多少次。計(jì)算機(jī)每秒鐘算一次為 1ops。
那么 1T ops 需要計(jì)算機(jī)算多少次?
1Tops
=1000Gops
=1000,000Mops
=1000,000,000Kops
=1000,000,000,000ops
計(jì)算完畢,每秒鐘操作 10 的十二次方次,也就是 1Tops。我們假設(shè)有一個(gè)單發(fā)射 1Ghz 的 CPU,如果要達(dá)到 1Tops 的話,基本上需要 1000 個(gè)這樣的 CPU。如果要是達(dá)到 100Tops 的處理性能,則需要 100000 個(gè),也就是 10 萬個(gè)這樣的 CPU 才行。如果是達(dá)到 1000Tops,則需要 1,000,000,也就是 100 萬個(gè) 1Ghz 的處理器。
這意味著什么?
意味著,我們可以買 100 萬個(gè)處理器,將這么多 CPU 堆起來,實(shí)現(xiàn) 1000Tops。這么多處理器,至少需要一個(gè)火車車廂才能裝下。也就是,通過 CPU 堆疊的方式實(shí)現(xiàn) 1000Tops 的算力,至少需要一個(gè)車廂。看來,在普通汽車上,通過堆 CPU 的方式來實(shí)現(xiàn)這么大的算力不太可能。
那么就需要另外想辦法了。
二、筑基期(L2)——矩陣乘法
辦法從哪里開始考慮。我們從最本質(zhì)的地方來考慮?智駕芯片解決什么問題?智駕芯片的本身是運(yùn)行人工智能的算法。人工智能算法最核心的操作就是矩陣乘法。那么矩陣乘法的計(jì)算,就是智駕芯片要解決的核心問題。
我們用一點(diǎn)時(shí)間把矩陣乘法梳理一下。
例如,我們有兩個(gè)原始矩陣。
矩陣 A,m 行,n 列。
矩陣 B,n 行,P 列
然后,我們計(jì)算矩陣 C=A*B;
C 是矩陣 A 和矩陣 B 的乘法結(jié)果:m 行,p 列
也可以寫作:
我們舉一個(gè)例子
兩個(gè) 2X2 的矩陣相乘,可以如下所示。
對(duì)于一個(gè) NN 的矩陣,那么總共需要 N(NN)次乘法和 N(N*(N-1))次加法。
所以,對(duì)于一個(gè) 2*2 的矩陣,里面一共用到了 8 次乘法,4 次加法,才能得到答案。
三、金丹期(L3)——乘累加器
根據(jù)上面的分析,我們可以看到,矩陣相乘,需要的最小的算子單元就是乘法和加法。
所以你可以設(shè)計(jì)一種電路。先做兩個(gè)值的乘法,例如 a11 與 b11。在上面的例子中,就是 1X5=5;然后開始算,a12*b21;在上面的例子中,就是 2X7=14;然后與上一次的乘法結(jié)果(5)加起來。2X7 + 5 = 19
每次都可以把上一次的結(jié)果與當(dāng)次乘法的結(jié)果加起來,這樣就可以實(shí)現(xiàn)矩陣一行與一列的先相乘后求和的過程。
恭喜你,你就得到了一個(gè)乘累加器。每個(gè) MAC 就是一個(gè)乘累加器(Multiply Accumulate)。但是,現(xiàn)在問題又來了。一個(gè)乘累加器,只能計(jì)算一個(gè)點(diǎn)的。如果要并行,一個(gè) NXN 的矩陣,那么就需要 NXN 個(gè)乘累加器。這樣可以并行來計(jì)算。那如果計(jì)算這個(gè) 2X2 的矩陣,我們可以用 2X2,一共 4 個(gè)乘累加單元。這樣可以并行來計(jì)算。
下圖就是這個(gè)乘累加矩陣,一共 4 個(gè),可以同時(shí)進(jìn)行計(jì)算。
通過上圖,眼尖的你,一定發(fā)現(xiàn)了規(guī)律。
矩陣 A 和矩陣 B 相乘。如同矩陣 A 從左往后移動(dòng),先向左移動(dòng) 1,3,再移動(dòng) 2,4而矩陣 B 從上往下移動(dòng),先往下移動(dòng) 5,6,再移動(dòng) 7,8;然后進(jìn)行相乘。那么根據(jù)這個(gè)規(guī)律,就可以采用另一種叫做脈動(dòng)陣列的方式來計(jì)算。這個(gè)脈動(dòng)和某飲品沒有啥關(guān)系。完全體現(xiàn)了數(shù)據(jù)的移動(dòng)規(guī)律,如箭頭方向所示。
第一步,按照規(guī)律,往右移動(dòng)移動(dòng) 1 和以及往下移動(dòng) 5;
第二步,以此類推
第三步,
第四步,
第五步,
這樣我們就得到了最終的矩陣相乘的值。通過累加器的脈動(dòng)陣列,可以減少芯片內(nèi)部的連接,因?yàn)槊總€(gè)累加器的輸入只來自左邊和右邊。這樣就可以放置很多的累加器,累加器比較容易做的很大。
于是,把累加器從 2X2 擴(kuò)展一下,可以做的很大,如下圖所示:
到此,你就設(shè)計(jì)了一個(gè)矩陣乘法處理單元;
上面和左面的緩存中分為存儲(chǔ)了原始的數(shù)據(jù)矩陣 A 和 B。在人工智能算法中,一個(gè)一般代表了權(quán)重矩陣(weight fifo),另一個(gè)代表激活矩陣。這樣你就設(shè)計(jì)了一個(gè)面向人工智能應(yīng)用的處理器(NPU)最核心的單元。矩陣乘法以及存儲(chǔ)矩陣輸入和輸出的緩存。
四、元嬰期(L4)——NPU
那么這個(gè)矩陣的行和列分別設(shè)置為多少合適?由于神經(jīng)網(wǎng)絡(luò)的每一層的計(jì)算都比較多。那么可以把行和列都設(shè)置成 8,16,32,64,96 或者更大。那我們就先把行和列設(shè)置成 96。那我們就得到了一個(gè) 96X96=9216 乘累加單元。為了存儲(chǔ)要計(jì)算的矩陣數(shù)據(jù),給這些數(shù)據(jù)設(shè)計(jì)了一個(gè)緩存(例如 32Mbyte)。對(duì)于矩陣乘法后的數(shù)據(jù),還需要進(jìn)行池化,激活函數(shù),歸一化等操作。在矩陣完成運(yùn)算后。數(shù)據(jù)會(huì)被轉(zhuǎn)移到激活硬件、池化硬件,并最終進(jìn)入寫入緩沖區(qū)以匯總結(jié)果。還要支持多種激活函數(shù),包括修正線性單元(ReLU)、Sigmoid 線性單元(SiLU)和 TanH。于是在矩陣的輸出結(jié)果后面又加上了 SIMD 單元可編程的處理以及池化,deconv 等模塊。
這樣,恭喜你,你現(xiàn)在就設(shè)計(jì)完畢了一個(gè) NPU。
如下圖所示:
設(shè)計(jì)完畢后,馬老板就提出了一個(gè)問題,這個(gè) NPU 的性能是多少?有了前面的基礎(chǔ),這個(gè)問題就簡單了。芯片的核心算力是這個(gè) 96X96 的矩陣計(jì)算單元(黃色部分)得來的。總計(jì) 9,216 個(gè) MAC(乘累加)。
一次乘加算兩次操作。
乘+加,所以是兩次
所以,這個(gè)矩陣每次 hz 就是 18,432 次操作。做成芯片,這個(gè) NPU 運(yùn)行頻率是 2Ghz。
也就是 2GX18432 = 36864Gops=36.864Tops。
是不是很簡單又清楚。
五、大乘期(L5)——智能駕駛芯片
這個(gè)時(shí)候,馬老板突然說了。才 37Tops 性能,這性能也太差了。你剛要解釋一下,功耗,面積,編程友好,利用率這些原因。馬老板才不管那套。性能至少翻倍,不能討價(jià)還價(jià)。于是,你立馬想到了。可以放兩個(gè) NPU,不就可以性能翻倍了嗎?于是,你在一個(gè) SOC 內(nèi)部,放上了兩個(gè) NPU(黃色部分),這樣,這個(gè)芯片的性能一下子就能從 76.86Tops 到 73.72Tops。四舍五入,就是 74Tops
當(dāng)然,除了提供核心算力的 NPU 之外。還有系統(tǒng)控制作用的 CPU,3 個(gè)四核 Cortex-A72 集群,總共 12 個(gè) CPU,運(yùn)行頻率為 2.2GHz;還有圖像處理作用的 GPU,一個(gè) Mali G71 MP12 GPU,運(yùn)行頻率為 1GHz至此,恭喜你,你設(shè)計(jì)了特斯拉的智駕芯片,F(xiàn)SD 芯片。然后,這個(gè)芯片采用了三星的 14nm 工藝,整個(gè)芯片 260 mm2 die size(20 mm x 13 mm die size)這是最后的芯片版圖。
可以看到,整個(gè)提供算力的 NPU,幾乎占了芯片面積的 50%左右。這玩意占面積也占成本。結(jié)果,芯片設(shè)計(jì)出來,馬老板立馬說,74Tops,這個(gè)性能指標(biāo)還是太低。出去不好吹牛。至少要大于 100Tops。有了前面的經(jīng)驗(yàn),聰明的你立馬想到了。直接在板子上放兩顆不就行了。那么最后方案上,我們可以看到。
系統(tǒng)采用了兩顆 FSD 芯片,智駕系統(tǒng)的總的算力,也達(dá)到了 148TOPS。這樣,算力立馬達(dá)到了高階智駕的門檻。即使是這樣,也沒有達(dá)到 1000Tops 的算力。如果要達(dá)到 1000Tops 的算力。根據(jù)上面的計(jì)算,增加算力,可以加多個(gè) NPU,也可以增加乘累加矩陣(MAC array)的面積。更大的矩陣乘法單元帶來了更大的算力。看來,只要是簡單的堆乘累加矩陣就可以了?這個(gè)看起來很簡單。例如,128*128 個(gè) MAC 的 NPU,單個(gè) NPU 如果 2Ghz 處理能力,其算力就能>64Tops。一個(gè)芯片四個(gè) NPU,單芯片就能達(dá)到 256T 處理能力。板載 4 個(gè)芯片就能達(dá)到 1024Tops 的處理能力。
所以,有了前面的基礎(chǔ),看起來不費(fèi)勁。
不要笑,
可能有人問?
算力怎么能這么粗暴的疊加。
要知道,某家車企就是用了四顆智駕芯片(orin-X),宣稱達(dá)到了 1024Tops。
我很懷疑,他們是不是把算力都用上了,是不是扣到兩顆芯片發(fā)現(xiàn)智駕也能工作。
其實(shí),即使大家沒有智駕軟件的基礎(chǔ)。
也能明白:智駕軟件用到的算力不等于實(shí)際硬件提供的能力。通過小學(xué)數(shù)學(xué)也能知道,無限擴(kuò)大這個(gè)乘累加器矩陣,最終的利用率就會(huì)不斷降低。例如,我們算一個(gè) 96X96 的矩陣,而用 128X128 的硬件單元算,或者 256X256 的矩陣單元算。就有一大部分都空閑。這個(gè)就是硬件利用率的問題。
所以,有句老話說的好,算力不是萬能的。但是光有算力也是萬萬不能的。
看的見是智駕芯片的算力,看不見的是智駕芯片上跑的軟件和算法。這些軟件和算法的能力,其實(shí)更是制約各家智駕水平的差異的地方。
所以說:芯片的算力,算法的智力,系統(tǒng)的合力,唯有三者形成合力,才能驅(qū)動(dòng)智能駕駛突破現(xiàn)有邊界。穿梭三界(全地形全天候)亦如履平地,至此方證“無人駕駛”天道。
后記:
本來,除了 FSD 還要寫另外兩款典型的智駕芯片英偉達(dá)的 orin-x 和華為的昇騰 610,但是篇幅太長了,等下次再補(bǔ)上。
END
評(píng)論