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