車(chē)載大模型的定義尚無(wú),傳統(tǒng)大模型即LLM的參數(shù)一般在70億至2000億之間,而早期的CNN模型參數(shù)通常不到1000萬(wàn),CNN模型目前大多做骨干網(wǎng)使用,參數(shù)飛速增加。特斯拉使用META的RegNet,參數(shù)為8400萬(wàn),消耗運(yùn)算資源很少,得分82.9也算不低;小米UniOcc使用META的ConvNeXt-B,參數(shù)8900萬(wàn),消耗運(yùn)算資源最少,得分83.8;華為RadOcc使用微軟的Swin-B,參數(shù)8800萬(wàn)。相對(duì)于早期的CNN模型,這些都可以叫大模型,但要與真正意義上的ChatGPT之類(lèi)的LLM大模型比,這些是小模型都稱(chēng)不上,只能叫微模型。
不過(guò),端到端的出現(xiàn)改變了這一現(xiàn)狀,端到端實(shí)際上是內(nèi)嵌了一個(gè)小型LLM,隨著喂養(yǎng)數(shù)據(jù)的增加,這個(gè)大模型的參數(shù)會(huì)越來(lái)越大,最初階段的模型大小大概是100億參數(shù),不斷迭代,最終會(huì)達(dá)到1000億以上。非安全類(lèi)的大模型應(yīng)用基本不用考慮計(jì)算問(wèn)題,所以只要是個(gè)手機(jī)都敢說(shuō)能跑數(shù)百億的大模型,實(shí)際很多算力不如手機(jī)的電腦也能跑,因?yàn)檠舆t多幾秒幾十秒也沒(méi)有問(wèn)題,但自動(dòng)駕駛必須將延遲降低到幾十毫秒內(nèi)。但你要以為這對(duì)算力要求更高了,那就大錯(cuò)特錯(cuò)了,存儲(chǔ)帶寬遠(yuǎn)比算力重要千倍。
當(dāng)前的主流 LLM 基本都是Decoder Only的Transformer模型,其推理過(guò)程可分為兩個(gè)階段:
Prefill:根據(jù)輸入Tokens(Recite, the, first, law, of, robotics) 生成第一個(gè)輸出 Token(A),通過(guò)一次Forward就可以完成,在Forward中,輸入Tokens間可以并行執(zhí)行(類(lèi)似 Bert這些Encoder模型),因此執(zhí)行效率很高。
Decoding:從生成第一個(gè)Token(A)之后開(kāi)始,采用自回歸方式一次生成一個(gè)Token,直到生成一個(gè)特殊的Stop Token(或者滿(mǎn)足用戶(hù)的某個(gè)條件,比如超過(guò)特定長(zhǎng)度)才會(huì)結(jié)束,假設(shè)輸出總共有N個(gè)Token,則Decoding階段需要執(zhí)行N-1次Forward,這N-1次Forward 只能串行執(zhí)行,效率很低。另外,在生成過(guò)程中,需要關(guān)注的Token越來(lái)越多(每個(gè)Token 的生成都需要Attention之前的Token),計(jì)算量也會(huì)適當(dāng)增大。
LLM推理計(jì)算過(guò)程時(shí)間分布
在車(chē)載自動(dòng)駕駛應(yīng)用場(chǎng)合,序列長(zhǎng)度基本可等同于攝像頭的像素?cái)?shù)量和激光雷達(dá)的點(diǎn)云密度。
在 LLM 推理中最關(guān)鍵的就是上圖中的Multi-Head Attention(MHA),其主要的計(jì)算集中在左圖中灰色的 Linear(矩陣乘)和Scaled Dot-Product Attention中的MatMul 矩陣乘法。
圖中的Mask是一個(gè)下三角矩陣,也是因?yàn)檫@個(gè)下三角矩陣實(shí)現(xiàn)了LLM Decoder的主要特性,每個(gè)Token都只能看到當(dāng)前位置及之前的Token。其中的QKV可以理解為一個(gè)相關(guān)性矩陣,4個(gè)Token對(duì)應(yīng)4 個(gè)Step,其中:
-
- Step 2依賴(lài)Step 1的結(jié)果,相關(guān)性矩陣的第1行不用重復(fù)計(jì)算。Step 3依賴(lài)Step 1和Step 2的結(jié)果,相關(guān)性矩陣的第1行和第2行不用重復(fù)計(jì)算。
Step 4依賴(lài)Step 1、Step 2和Step 3的結(jié)果,相關(guān)性矩陣的第1行、第2行和第3行不用重復(fù)計(jì)算。
在Decoding階段Token是逐個(gè)生成的,上述的計(jì)算過(guò)程中每次都會(huì)依賴(lài)之前的結(jié)果,換句話(huà)說(shuō)這是串行計(jì)算,而非GPU擅長(zhǎng)的并行計(jì)算,GPU大部分時(shí)候都在等待數(shù)據(jù)搬運(yùn)。加速的辦法是計(jì)算當(dāng)前Token時(shí)直接從KV Cache中讀取而不是重新計(jì)算,對(duì)于通用LLM,應(yīng)用場(chǎng)景是要考慮多個(gè)并發(fā)客戶(hù)使用,即Batch Size遠(yuǎn)大于1,KV Cache的緩存量會(huì)隨著B(niǎo)atch Size暴增,但在車(chē)?yán)镉脩?hù)只有一個(gè),就是自動(dòng)駕駛端到端大模型,即Batch Size為1。
因?yàn)镈ecoding階段Token逐個(gè)處理,使用KV Cache之后,上面介紹的Multi-Head Attention 里的矩陣乘矩陣操作全部降級(jí)為矩陣乘向量即GEMV。此外,Transformer模型中的另一個(gè)關(guān)鍵組件FFN 中主要也包含兩個(gè)矩陣乘法操作,但 Token之間不會(huì)交叉融合,也就是任何一個(gè)Token都可以獨(dú)立計(jì)算,因此在Decoding階段不用Cache之前的結(jié)果,但同樣會(huì)出現(xiàn)矩陣乘矩陣操作降級(jí)為矩陣乘向量。Prefill階段則是GEMM,矩陣與矩陣的乘法。
矩陣乘向量操作是明顯的訪(fǎng)存bound,而以上操作是LLM推理中最主要的部分,這也就導(dǎo)致LLM推理是訪(fǎng)存bound類(lèi)型。
三星對(duì)GPT大模型workload分析
上圖是三星對(duì)GPT大模型workload分析。在運(yùn)算操作數(shù)量上,GEMV所占的比例高達(dá)86.53%;在大模型運(yùn)算延遲分析上,82.27%的延遲都來(lái)自GEMV,GEMM所占只有2.12%,非線(xiàn)性運(yùn)算也就是神經(jīng)元激活部分占的比例也遠(yuǎn)高于GEMM。
三星對(duì)GPU利用率的分析
上圖是三星對(duì)GPU利用率的分析,可以看出在GEMV算子時(shí),GPU的利用率很低,一般不超過(guò)20%,換句話(huà)說(shuō)80%的時(shí)間GPU都是在等待存儲(chǔ)數(shù)據(jù)的搬運(yùn)。還有如矩陣反轉(zhuǎn),嚴(yán)格地說(shuō)沒(méi)有任何運(yùn)算,只是存儲(chǔ)行列對(duì)調(diào),完全是存儲(chǔ)器和CPU在忙活。解決辦法很簡(jiǎn)單且只有一個(gè),就是用HBM高寬帶內(nèi)存。
與傳統(tǒng)LLM最大不同就是車(chē)載的Batch Size是1,導(dǎo)致GPU運(yùn)算效率暴跌,傳統(tǒng)LLM的Batch Size通常遠(yuǎn)大于1,這讓GPU效率增加。
圖上不難看出,Batch Size越大,推理速度反而越快,但KV Cache容量會(huì)暴增;車(chē)載的Batch Size是1,推理速度反而很慢,好處是根本不用考慮KV Cache的容量。
最終我們可以得出結(jié)論,存儲(chǔ)帶寬決定了推理計(jì)算速度的上限。假設(shè)一個(gè)大模型參數(shù)為70億,按照車(chē)載的INT8精度,它所占的存儲(chǔ)是7GB,如果是英偉達(dá)的RTX4090,它的顯存帶寬是1008GB/s,也就是每7毫秒生成一個(gè)token,這個(gè)就是RTX4090的理論速度上限。特斯拉第一代FSD芯片的存儲(chǔ)帶寬是63.5GB/s,即每110毫秒生成一個(gè)token,幀率不到10Hz,自動(dòng)駕駛領(lǐng)域一般圖像幀率是30Hz;英偉達(dá)的Orin存儲(chǔ)帶寬是204.5GB/s,即每34毫秒生成一個(gè)token,勉強(qiáng)可以達(dá)到30Hz,注意這只是計(jì)算的數(shù)據(jù)搬運(yùn)所需要的時(shí)間,數(shù)據(jù)計(jì)算的時(shí)間都完全忽略了,實(shí)際速度要遠(yuǎn)低于這個(gè)數(shù)據(jù)。并且一個(gè)token也不夠用,至少需要兩個(gè)token,端到端的最終輸出結(jié)果用語(yǔ)言描述就是一段軌跡,比如直行,直行需要有個(gè)限制條件,至少有個(gè)速度的限制條件,多的可能需要5個(gè)以上token,簡(jiǎn)單計(jì)算即可得出存儲(chǔ)帶寬需要1TB/s以上。
實(shí)際情況遠(yuǎn)比這個(gè)復(fù)雜的多。車(chē)載領(lǐng)域不是傳統(tǒng)LLM使用CPU和GPU分離形式,車(chē)載領(lǐng)域的計(jì)算SoC都是將CPU和AI運(yùn)算部分合二為一,AI運(yùn)算部分通常是GPU或加速器是和CPU共享內(nèi)存的。而在非車(chē)載領(lǐng)域,GPU或AI運(yùn)算部分有獨(dú)立的存儲(chǔ),即顯存。車(chē)載領(lǐng)域共享內(nèi)存一般是LPDDR,它主要是為CPU設(shè)計(jì)的,注重速度即頻率而非帶寬。不像顯存,一般是GDDR或HBM,注重帶寬,不看重頻率高低。上述所有理論都是基于顯存的,在車(chē)載領(lǐng)域共享LPDDR,其性能遠(yuǎn)遠(yuǎn)低于單獨(dú)配置的顯存,無(wú)論是速度還是容量,共享存儲(chǔ)都必須遠(yuǎn)比單獨(dú)的顯存要高才能做到大模型推理計(jì)算。
理想用英偉達(dá)Orin做了測(cè)試,純端到端模式延遲高達(dá)1.5秒。
所以車(chē)載領(lǐng)域存儲(chǔ)比算力重要很多,最好的解決辦法是HBM,但太貴了,32GB HBM2最低成本也得2000美元,汽車(chē)領(lǐng)域?qū)r(jià)格還是比較敏感的,退而求其次,就是GDDR了。GDDR6的成本遠(yuǎn)低于HBM,32GB GDDR6大概只要180美元或更低。
幾代GDDR的性能對(duì)比
整理:佐思汽研
基本上GDDR6的理論上限就是672GB/s,特斯拉第二代FSD芯片就支持第一代GDDR6,HW4.0上的GDDR6容量為32GB,型號(hào)為MT61M512M32KPA-14,頻率1750MHz(LPDDR5最低也是3200MHz之上),是第一代GDDR6,速度較低。即使用了GDDR6,要流暢運(yùn)行百億級(jí)別的大模型,還是無(wú)法實(shí)現(xiàn),不過(guò)已經(jīng)是目前最好的了。
GDDR7正式標(biāo)準(zhǔn)在2024年3月公布,不過(guò)三星在2023年7月就發(fā)布了全球首款GDDR7,目前SK Hynix和美光也都有GDRR7產(chǎn)品推出。有些人會(huì)說(shuō),換上GDDR7顯存不就行了,當(dāng)然沒(méi)那么容易,GDDR需要特殊的物理層和控制器,芯片必須內(nèi)置GDDR的物理層和控制器才能用上GDDR,Rambus和新思科技都有相關(guān)IP出售。
在芯片領(lǐng)域,GDDR7增加的成本和LPDDR5X一樣的。
特斯拉的HW4.0過(guò)了一年半毫無(wú)動(dòng)作,筆者認(rèn)為特斯拉的第二代FSD芯片顯然是落伍了,特斯拉也不打算大規(guī)模用了,特斯拉的第三代FSD芯片應(yīng)該正在開(kāi)發(fā)中,可能2025年底就完成開(kāi)發(fā),至少支持GDDR6X。
大模型時(shí)代,Attention Is All You Need,同樣大模型時(shí)代 Memory Is All You Need。
免責(zé)說(shuō)明:本文觀點(diǎn)和數(shù)據(jù)僅供參考,和實(shí)際情況可能存在偏差。本文不構(gòu)成投資建議,文中所有觀點(diǎn)、數(shù)據(jù)僅代表筆者立場(chǎng),不具有任何指導(dǎo)、投資和決策意見(jiàn)。