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