目前,全局性的端到端自動駕駛都是基于大語言模型LLM或多模態(tài)大模型的。
這是站在巨人肩上,這種全局性的端到端自動駕駛可以減少95%以上的自動駕駛開發(fā)人員,研發(fā)成本大幅降低。不過這種設計,對運算芯片的存儲帶寬要求很高,而算力完全可以忽略不計。
本文主要根據(jù)https://www.baseten.co/blog/llm-transformer-inference-guide和https://arxiv.org/pdf/2404.14294之A Survey on Efficient Inference for Large Language Models撰寫,大模型或者說LLM的推理延遲95%以上取決于存儲帶寬,算力大小基本可以忽略不計。
當前的主流 LLM 基本都是 Decoder Only 的 Transformer 模型,其推理過程可分為兩個階段:
與傳統(tǒng)的CNN 模型推理不同,大語言模型的推理通常會分成 prefill 和 decoding 兩個階段。每一個請求發(fā)起后產生的推理過程都會先經歷一個 Prefill 過程,prefill 過程會計算用戶所有的輸入,并生成對應的KV 緩存,再經歷若干個 decoding 過程,每一個 decoding 過程,服務器都會生成一個字符,并將其放入到 KV 緩存當中,之后依次迭代。由于 decoding 過程是逐個字符生成的,每一段答案的生成都需要很長時間,會生成很多字符,所以 decoding 階段的數(shù)量非常多,占到整個推理過程的 90% 以上。在 Prefill 過程中,雖計算量很大,因為要一次性完成用戶輸入的所有詞的計算,但它只是一次性的過程,所以在整個推理中只占不到 10% 的時間。
Prefill階段還包括把用戶的輸入進行向量化即tokenize,Decoding 階段不需要 tokenize。每一次做 decoding 都會直接從計算開始,整個decoding 過程會占掉 80% 的時間,而后面的 sampling,也就是采樣生成詞的過程,也要占掉 10% 的時間。但它會有一個 detokenize 的時間,detokenize 是指生成了一個詞之后,這個生成的詞是個向量,需要把它解碼回文本,這一操作大概會占掉 5% 的時間,最后將這個生成的詞返回給用戶。
首Token階段,延遲取決于算力大小,后續(xù)decoding階段,延遲取決于存儲帶寬。并發(fā)量或批處理batch size也很重要,簡單地說,batch size越高,計算單元的利用效率就越高,因為它是可以并行的,但中間產生的KV 緩存會很高,batch size高到一定階段,KV緩存會超過總內存,以至于無法計算,徹底死機。自動駕駛系統(tǒng)的給定時間段內只會有一個任務請求,大致可看成batch size是1,而ChatGPT這樣可能會同時接到多個任務需求。自動駕駛系統(tǒng)就無需考慮KV緩存溢出。Batch size太低,意味著計算單元的利用率就很低。
我們來計算自動駕駛系統(tǒng)端到端推理所需要的時間,總推理時間是首個token產生的時間加每秒token與token的乘積。Total generation time = prefill time + number of tokens * time/token。
先來計算prefill time,Prefill time = number of tokens * ( number of parameters / accelerator compute bandwidth),這里的加速器計算帶寬就是算力。
Token數(shù)是多少呢?token,它在NLP自然語言處理中指最小的詞,在圖像領域,指patch,即最小的圖像“塊”。tokenization指將輸入的語言或圖像切割為token的過程,這個自然是像素越小越好,很簡單的道理,一句話分詞分的越細,這句話的語義也就更準確,一句話分的越粗,語義偏差就可能越大。假設我們使用谷歌的ViT-E模型,輸入800萬像素的視頻,采用16*16的patch,那么token數(shù)大約是4.08萬個,如果是200萬像素,那么token差不多是1萬個,采用INT8精度,假設大模型的參數(shù)量是70億,芯片算力是77TOPS,那么prefill時間是10000*70億/77TOPS=886毫秒。
每token所費時間=total number of bytes moved (the model weights) / accelerator memory bandwidth,采用INT8精度,假設大模型的參數(shù)量是70億,芯片存儲帶寬是68GB/s,可以計算7GB/68=10毫秒,那么總時間為886+10000*10=100886毫秒,即100.9秒鐘,首個token所須要的時間不到1%,可以忽略,99%的延遲都由存儲帶寬決定。同時這個延遲太高了,高速自動駕駛須要的幀率是25Hz-30Hz,也就是說一次推理所消耗的時間不能超過40毫秒,顯然,直接用transformer做自動駕駛完全不可能。需要指出谷歌的這個ViT模型本身的參數(shù)量是很小的,基礎模型只有8600萬參數(shù),我們只是用ViT模型將視頻tokenization,ViT的二代將16*16擴張為32*32,token數(shù)量會減少到原來的1/4,即使如此也無法用于自動駕駛當中。
常見芯片存儲帶寬統(tǒng)計
直接在自動駕駛領域內用大模型是不可能的,解決辦法有兩個,一個是減少token輸入數(shù)量,另一個是降低大模型的參數(shù)量。
實際上,目前所有量產車型的圖像特征提取都還是10年前就在使用的CNN,即使再多優(yōu)化,直接用transformer處理視頻都完全不可能,而CNN是典型的非端到端。
骨干網(wǎng)還是基于CNN的RegNET,國內大多用ResNet50,這是2015年由大神何凱明提出的,至今仍長盛不衰。
至于降低模型參數(shù)是不大可能的,眾所周知,大模型之所以性能好就是因為參數(shù)足夠多,目前無論哪個領域,模型的參數(shù)量都在飛速增長。
自動駕駛領域很長一段時間內都還是BEV+OCC的天下,實際就算是BEV+OCC時代,存儲帶寬的重要性也不亞于算力。很簡單,數(shù)據(jù)訓練量越大,最后得出的模型參數(shù)量自然就越高,算法的不斷迭代就是模型參數(shù)的不斷增長,模型參數(shù)越大,存儲帶寬所造成的延遲就越明顯,而端到端大模型時代則是完全可以忽略算力因素。
免責說明:本文觀點和數(shù)據(jù)僅供參考,和實際情況可能存在偏差。本文不構成投資建議,文中所有觀點、數(shù)據(jù)僅代表筆者立場,不具有任何指導、投資和決策意見。