當(dāng)前,自動駕駛運(yùn)算系統(tǒng)正在進(jìn)入一場算力的競賽中,,特斯拉剛以自研的達(dá)到 72TOPS 算力,、業(yè)內(nèi)最強(qiáng)的 FSD/HW3.0 升級 HW2.5 不久,英偉達(dá)最新推出的芯片系統(tǒng)達(dá)到了 2000TOPS 的驚人算力,。然而,,自動駕駛首要確保的安全性和算力并沒有直接關(guān)系,即便 1000E(T 的百萬倍)OPS 也達(dá)不到 L4 級別,,這只是硬件廠家的數(shù)字游戲而已,,內(nèi)行人從不當(dāng)真。 這些所謂高算力實(shí)際針對乘積累加運(yùn)算的高算力,。乘積累加運(yùn)算(英語:MultiplyAccumulate, MAC),。這種運(yùn)算的操作,是將乘法的乘積結(jié)果和累加器 A 的值相加,,再存入累加器:
若沒有使用 MAC 指令,,上述的程序需要二個(gè)指令,但 MAC 指令可以使用一個(gè)指令完成,。而許多運(yùn)算(例如卷積運(yùn)算,、點(diǎn)積運(yùn)算,、矩陣運(yùn)算、數(shù)字濾波器運(yùn)算,、乃至多項(xiàng)式的求值運(yùn)算,,基本上全部的深度學(xué)習(xí)類型都可以對應(yīng))都可以分解為數(shù)個(gè) MAC 指令,因此可以提高上述運(yùn)算的效率,。 之所以說自動駕駛的安全性和 TOPS 算力并沒有直接關(guān)系基于三點(diǎn),。
一、這些所謂的高算力實(shí)際都只是乘積累加矩陣運(yùn)算算力,,只是對應(yīng)深度學(xué)習(xí)算法的,,只對應(yīng)向量。深度學(xué)習(xí)是一種非確定性算法,,而車輛安全需要確定性算法來保障,。人工智能只是錦上添花,最終還是需要確定性算法把守安全底線,。而確定性算法不靠乘積累加運(yùn)算算力,,它通常是標(biāo)量運(yùn)算,也就是更多依賴 CPU 的運(yùn)算,,那些所謂的高 TOPS 算力毫無意義,。
二、深度學(xué)習(xí)視覺感知中目標(biāo)分類與探測(detection)是一體的,,無法分割,。也就是說,如果無法將目標(biāo)分類(classifer,,也可以通俗地說是識別)就無法探測,。換句話說,如果無法識別目標(biāo)就認(rèn)為目標(biāo)不存在,。車輛會認(rèn)為前方無障礙物,,會不減速直接撞上去。訓(xùn)練數(shù)據(jù)集無法完全覆蓋真實(shí)世界的全部目標(biāo),,能覆蓋 50%都已經(jīng)是很神奇的了,,更何況真實(shí)世界每時(shí)每刻都在產(chǎn)生著新的不規(guī)則目標(biāo)。特斯拉多次事故都是如此,,比如在中國兩次在高速公路上追尾掃地車(第一次致人死亡),,在美國多次追尾消防車。還有無法識別車輛側(cè)面(大部分?jǐn)?shù)據(jù)集都只采集車輛尾部圖像沒有車輛側(cè)面圖像)以及無法識別比較小的目標(biāo),。TOPS 算力高只是縮短能識別目標(biāo)的識別時(shí)間,,如果無法識別,還是毫無價(jià)值,。
三,,高 TOPS 都是運(yùn)算單元(PE)的理論值,,而非整個(gè)硬件系統(tǒng)的真實(shí)值。真實(shí)值更多取決于內(nèi)部的 SRAM,、外部 DRAM,、指令集和模型優(yōu)化程度。最糟糕的情況下,,真實(shí)值是理論值的 1/10 算力甚至更低,。
深度學(xué)習(xí)的不確定性
深度學(xué)習(xí)分為訓(xùn)練和推理兩部分,訓(xùn)練就好比我們在學(xué)校的學(xué)習(xí),,但神經(jīng)網(wǎng)絡(luò)的訓(xùn)練和我們?nèi)祟惤邮芙逃倪^程之間存在相當(dāng)大的不同,。神經(jīng)網(wǎng)絡(luò)對我們?nèi)四X的生物學(xué)——神經(jīng)元之間的所有互連——只有一點(diǎn)點(diǎn)拙劣的模仿。我們的大腦中的神經(jīng)元可以連接到特定物理距離內(nèi)任何其它神經(jīng)元,,而深度學(xué)習(xí)卻不是這樣——它分為很多不同的層(layer),、連接(connection)和數(shù)據(jù)傳播(data propagation)的方向,因?yàn)槎鄬?,又有眾多連接,,所以稱其為神經(jīng)網(wǎng)絡(luò)。
訓(xùn)練神經(jīng)網(wǎng)絡(luò)的時(shí)候,,訓(xùn)練數(shù)據(jù)被輸入到網(wǎng)絡(luò)的第一層,。然后所有的神經(jīng)元,都會根據(jù)任務(wù)執(zhí)行的情況,,根據(jù)其正確或者錯(cuò)誤的程度如何,,分配一個(gè)權(quán)重參數(shù)(權(quán)重值)。在一個(gè)用于圖像識別的網(wǎng)絡(luò)中,,第一層可能是用來尋找圖像的邊。第二層可能是尋找這些邊所構(gòu)成的形狀——矩形或圓形,。第三層可能是尋找特定的特征——比如閃亮的眼睛或按鈕式的鼻子,。每一層都會將圖像傳遞給下一層,直到最后一層,;最后的輸出由該網(wǎng)絡(luò)所產(chǎn)生的所有這些權(quán)重總體決定,。
經(jīng)過初步(是初步,這個(gè)是隱藏的)訓(xùn)練后得到全部權(quán)重模型后,,我們就開始考試它,,比如注入神經(jīng)網(wǎng)絡(luò)幾萬張含有貓的圖片(每張圖片都需要在貓的地方標(biāo)注貓,這個(gè)過程一般是手工標(biāo)注,,也有自動標(biāo)注,,但準(zhǔn)確度肯定不如手工),然后拿一張圖片讓神經(jīng)網(wǎng)絡(luò)識別圖片里的是不是貓,。如果答對了,,這個(gè)正確會反向傳播到該權(quán)重層,,給予獎(jiǎng)勵(lì)就是保留,如果答錯(cuò)了,,這個(gè)錯(cuò)誤會回傳到網(wǎng)絡(luò)各層,,讓網(wǎng)絡(luò)再猜一下,給出一個(gè)不同的論斷這個(gè)錯(cuò)誤會反向地傳播通過該網(wǎng)絡(luò)的層,,該網(wǎng)絡(luò)也必須做出其它猜測,,網(wǎng)絡(luò)并不知道自己錯(cuò)在哪里,也無需知道,。
在每一次嘗試中,,它都必須考慮其它屬性——在我們的例子中是「貓」的屬性——并為每一層所檢查的屬性賦予更高或更低的權(quán)重。然后它再次做出猜測,,一次又一次,,無數(shù)次嘗試……直到其得到正確的權(quán)重配置,從而在幾乎所有的考試中都能得到正確的答案,。 得到正確的權(quán)重配置,,這是一個(gè)巨大的數(shù)據(jù)庫,顯然無法實(shí)際應(yīng)用,,特別是嵌入式應(yīng)用,,于是我們要對其修剪,讓其瘦身,。首先去掉神經(jīng)網(wǎng)絡(luò)中訓(xùn)練之后就不再激活的部件,。這些部分已不再被需要,可以被「修剪」掉,。其次是壓縮,,這和我們常用的圖像和視頻壓縮類似,保留最重要的部分,,如今模擬視頻幾乎不存在,,都是壓縮視頻的天下,但我們并未感覺到壓縮視頻與原始視頻有區(qū)別,。
深度學(xué)習(xí)的關(guān)鍵理論是線性代數(shù)和概率論,,因?yàn)樯疃葘W(xué)習(xí)的根本思想就是把任何事物轉(zhuǎn)化成高維空間的向量,強(qiáng)大無比的神經(jīng)網(wǎng)絡(luò),,說來就是無數(shù)的矩陣運(yùn)算和簡單的非線性變換的結(jié)合,。在 19 世紀(jì)中期,矩陣?yán)碚摼鸵呀?jīng)成熟,。概率論在 18 世紀(jì)中期就有貝葉斯,,在 1900 年俄羅斯的馬爾科夫發(fā)表概率演算,概率論完全成熟。優(yōu)化理論主要來自微積分,,包括拉格朗日乘子法及其延伸的 KKT,,而拉格朗日是 18 世紀(jì)中葉的法國數(shù)學(xué)家。RNN 則和非線性動力學(xué)關(guān)聯(lián)甚密,,其基礎(chǔ)在 20 世紀(jì)初已經(jīng)完備,。至于 GAN 網(wǎng)絡(luò),則離不開 19 世紀(jì)末偉大的奧地利物理學(xué)家波爾茲曼,。強(qiáng)化學(xué)習(xí)的理論基礎(chǔ)是 1906 年俄羅斯數(shù)學(xué)家馬爾科夫發(fā)表的弱大數(shù)定律(weak law of large numbers)和中心極限定理(central limit theorem),,也就是馬爾科夫鏈。
可以說深度學(xué)習(xí)所需要的理論基礎(chǔ)在 100 年前已經(jīng)基本齊全(概率和信息論略微不足,,在 20 世紀(jì) 60 年代補(bǔ)齊),,現(xiàn)在的深度學(xué)習(xí)只是從理論走向?qū)嵱茫@當(dāng)中最關(guān)鍵的推手就是 GPU 的高 TOPS 算力,,是英偉達(dá)的 GPU 造就了深度學(xué)習(xí)時(shí)代的到來,,深度學(xué)習(xí)沒有理論上的突破,只是應(yīng)用上的擴(kuò)展,。經(jīng)過壓縮后,,多個(gè)神經(jīng)網(wǎng)絡(luò)層被合為一個(gè)單一的計(jì)算。最后得到的這個(gè)就是推理 Inference 用模型或者說算法模型,。 實(shí)際深度學(xué)習(xí)就是靠蠻力計(jì)算(當(dāng)然也有 1X1 卷積,、池化等操作降低參數(shù)量和維度)代替了精妙的科學(xué)。深度學(xué)習(xí)沒有數(shù)學(xué)算法那般有智慧,,它知其然,,不知其所以然,它只是概率預(yù)測,,它無法具備確定性,。所以在目前的深度學(xué)習(xí)方法中,參數(shù)的調(diào)節(jié)方法依然是一門“藝術(shù)”,,而非“科學(xué)”,。
深度學(xué)習(xí)方法深刻地轉(zhuǎn)變了人類幾乎所有學(xué)科的研究方法。以前學(xué)者們所采用的觀察現(xiàn)象,,提煉規(guī)律,數(shù)學(xué)建模,,模擬解析,,實(shí)驗(yàn)檢驗(yàn),修正模型的研究套路被徹底顛覆,,被數(shù)據(jù)科學(xué)的方法所取代:收集數(shù)據(jù),,訓(xùn)練網(wǎng)絡(luò),實(shí)驗(yàn)檢驗(yàn),加強(qiáng)訓(xùn)練,。這也使得算力需求越來越高,。機(jī)械定理證明驗(yàn)證了命題的真?zhèn)危菬o法明確地提出新的概念和方法,,實(shí)質(zhì)上背離了數(shù)學(xué)的真正目的,。這是一種“相關(guān)性”而非“因果性”的科學(xué)。歷史上,,人類積累科學(xué)知識,,在初期總是得到“經(jīng)驗(yàn)公式”,但是最終還是尋求更為深刻本質(zhì)的理解,。例如從煉丹術(shù)到化學(xué),、量子力學(xué)的發(fā)展歷程。
深度學(xué)習(xí)的理論基礎(chǔ)已經(jīng)不可能出現(xiàn)大的突破,,因?yàn)槟壳叭祟惖臄?shù)學(xué)特別是非確定性數(shù)學(xué)已經(jīng)走火入魔了,,有一本書叫《數(shù)學(xué):確定性的喪失》說得非常好。 書中的一個(gè)比喻:在萊茵河畔,,一座美麗的城堡(暗指德國哥廷根大學(xué),,曾經(jīng)在 200 年里是全球數(shù)學(xué)研究中心,數(shù)學(xué)的圣地,,非線性動力學(xué)圣地,。希特勒執(zhí)政后全球數(shù)學(xué)圣地轉(zhuǎn)移至美國的普林斯頓大學(xué))已經(jīng)矗立了許多個(gè)世紀(jì)。在城堡的地下室中生活著一群蜘蛛,,突然一陣大風(fēng)吹散了它們辛辛苦苦編織的一張繁復(fù)的蛛網(wǎng),,于是它們慌亂地加以修補(bǔ),因?yàn)樗鼈冋J(rèn)為,,正是蛛網(wǎng)支撐著整個(gè)城堡,。小至四元數(shù)、負(fù)數(shù),、復(fù)數(shù),、矩陣,大至微積分,、非歐幾何,,經(jīng)驗(yàn)算術(shù)及其延展代數(shù)背后隱藏著深深困擾數(shù)學(xué)家的邏輯問題。然而,,數(shù)學(xué)家們是在貢獻(xiàn)概念而不是從現(xiàn)實(shí)世界中抽象出思想,,這些概念卻被證明越來越實(shí)用,數(shù)學(xué)家們變得越來越肆無忌憚,。通過應(yīng)用經(jīng)驗(yàn)來修正理論邏輯,,數(shù)學(xué)逐步失去了其先驗(yàn)性,,變得越來越像哲學(xué)甚至玄學(xué)。
寶馬 L3/L4 智能駕駛軟件架構(gòu)
寶馬 L3/L4 主系統(tǒng)計(jì)算路徑,,F(xiàn)allback 系統(tǒng)監(jiān)督主系統(tǒng),,當(dāng)?shù)弥飨到y(tǒng)計(jì)算的路徑會發(fā)生事故或碰撞時(shí),F(xiàn)allback 系統(tǒng)會切換為主系統(tǒng),,主系統(tǒng)使用人工智能的非確定性算法,,F(xiàn)allback 系統(tǒng)使用經(jīng)典的確定性算法來保證安全。
真假 TOPS
推理領(lǐng)域,,算力理論值取決于運(yùn)算精度,、MAC 的數(shù)量和運(yùn)行頻率。大概可以簡化為這樣子,,INT8 精度下的 MAC 數(shù)量在 FP16 精度下等于減少了一半,。FP32 再減少一半,依次類推,。其計(jì)算相當(dāng)簡單,,假設(shè)有 512 個(gè) MAC 運(yùn)算單元,運(yùn)行頻率為 1GHz,,INT8 的數(shù)據(jù)結(jié)構(gòu)和精度(自動駕駛推理領(lǐng)域常見精度),,算力為 512 x 2 x 1 Gigahertz = 1000 Billion Operations/Second = 1 TOPS(Tera-Operations/second)。如果是 FP16 精度那么就是 0.5TOPS,。例如英偉達(dá)的 Tesla V100 有 640 個(gè) Tensor 核,,每核有 64 個(gè) MAC 運(yùn)算單元,運(yùn)行頻率大約 1.480GHz,,那么 INT8 下算力為 640*64*2*1.480Gigahertz=121TOPS,。但是 Tesla V100 的訓(xùn)練就使用 CUDA 核,有 5120 個(gè) CUDA 核,,雙精度(FP64)下算力是另一種算法了,。
這個(gè)月剛發(fā)布的 A100,有 432 個(gè)三代 Tensor 核,,每個(gè)核包含 512 個(gè) MAC 運(yùn)算單元(等同于 64 個(gè)雙精度 MAC),,運(yùn)行頻率為 1.41Gigahertz,INT8 下算力為 432*512*2*1.41Gigahertz=624TOPS,。特斯拉的 FSD 是 9216 個(gè) MAC 運(yùn)算單元,,運(yùn)行頻率是 2GHz,INT8 算力為 9216*2*2GHz=36.86TOPS,。 真實(shí)值和理論值差異極大,。決定算力真實(shí)值最主要因素是內(nèi)存( SRAM 和 DRAM)帶寬,還有實(shí)際運(yùn)行頻率(即供電電壓或溫度),,還有算法的 batch 尺寸。例如谷歌第一代 TPU,理論值為 90TOPS 算力,,最差真實(shí)值只有 1/9,,也就是 10TOPS 算力,因?yàn)榈谝淮鷥?nèi)存帶寬僅 34GB/s,。而第二代 TPU 下血本使用了 HBM 內(nèi)存,,帶寬提升到 600GB/s(單一芯片,TPU V2 板內(nèi)存總帶寬 2400GB/s),。
最新的英偉達(dá)的 A100 使用 40GB 的 2 代 HBM,,帶寬提升到 1600GB/s,比 V100 提升大約 73%,。特斯拉是 128 bitLPDDR4-4266 ,,那么內(nèi)存的帶寬就是:2133MHz*2DDR*128bit/8/1000=68.256GB/s。比第一代 TPU 略好(這些都是理論上的最大峰值帶寬)其性能最差真實(shí)值估計(jì)是 2/9,。也就是大約 8TOPS,。16GB 版本的 Xavier 內(nèi)存峰值帶寬是 137GB/s。 為什么會這樣,?這就牽涉到 MAC 計(jì)算效率問題,。如果你的算法或者說 CNN 卷積需要的算力是 1TOPS,而運(yùn)算平臺的算力是 4TOPS,,那么利用效率只有 25%,,運(yùn)算單元大部分時(shí)候都在等待數(shù)據(jù)傳送,特別是 batch 尺寸較小時(shí)候,,這時(shí)候存儲帶寬不足會嚴(yán)重限制性能,。
但如果超出平臺的運(yùn)算能力,延遲會大幅度增加,,存儲瓶頸一樣很要命,。效率在 90-95%情況下,存儲瓶頸影響最小,,但這并不意味著不影響了,,影響依然存在。然而平臺不會只運(yùn)算一種算法,,運(yùn)算利用效率很難穩(wěn)定在 90-95%,。這就是為何大部分人工智能算法公司都想定制或自制計(jì)算平臺的主要原因,計(jì)算平臺廠家也需要推出與之配套的算法,,軟硬一體,,實(shí)難分開。
比如業(yè)內(nèi)大名鼎鼎的 ResNet-50,,其需要 MAC 大約為每秒 70 億次運(yùn)算,,英偉達(dá) TeslaT4 運(yùn)行 ResNet-50 每秒可處理 3920 張 224*224 的圖像,,3920 images/second x 7 BillionOperations/image = 27,440 Billion Operations/second = 27.4 TrillionOperations/Second = 27.4 TOPS。
而英偉達(dá) Tesla T4 的理論算力是 130TOPS,。實(shí)際只有 27.4TOPS,。 也有些軟件改善內(nèi)存瓶頸的方法,比如修改指令集,,讓權(quán)重值快速加載,,提高數(shù)據(jù)復(fù)用率,減少頻繁讀取,,例如華為曾經(jīng)用過的寒武紀(jì)的 IP,。但最簡單有效的解決方法還是提高內(nèi)存帶寬。 提高內(nèi)存帶寬有三種方法,,一是縮短運(yùn)算單元與存儲器之間的物理距離,,二是使用高帶寬內(nèi)存即 HBM,三加大內(nèi)存容量,。注意上文所說的內(nèi)存帶寬都是理論上的帶寬,,實(shí)際帶寬跟物理距離關(guān)系極為密切,物理距離遠(yuǎn)會讓內(nèi)存實(shí)際帶寬下降不少,,但具體數(shù)值還未有詳細(xì)資料,。 第一種方法最有效。物理距離最近的自然把存儲器與運(yùn)算單元制作在一個(gè) die 里(一一級緩存和二級緩存),,線寬可能只有 1-2 微米,,但是存儲器所占晶圓面積很大,工藝與運(yùn)算單元也有比較大的差異,,這樣做會大幅度提高成本,,因此大部分廠家的 in-die 內(nèi)存容量都很小。
退一步,,把存儲器與運(yùn)算單元制作在一個(gè) package 里,,目前臺積電的 CoWos 工藝大約可以做到 55 微米( Micro-bump)。這是目前所有主流廠家的選擇,,畢竟計(jì)算是針對數(shù)據(jù)中心的芯片也要優(yōu)先考慮價(jià)格,。最差的就是特斯拉和谷歌第一代 TPU 使用 PCB 板上的內(nèi)存( BGA),這樣線寬大約 1100-1500 微米,??s短距離不僅能提高存儲帶寬,同時(shí)還能降低內(nèi)存功耗,。
HBM 最早由 AMD 和 SK Hynix 提出,,但是三星幾乎壟斷 HBM 市場,目前已經(jīng)發(fā)展到 HBM2 代,,HBM2 可以做到最高 12 顆 TSV 堆疊 3.6TB/s 的帶寬,,傳統(tǒng) DRAM 最頂級的 GDDR6 是 768GB/s,。HBM 的缺點(diǎn)是太貴,針對消費(fèi)類市場的產(chǎn)品沒人敢用,,也缺乏應(yīng)用場景,,只有數(shù)據(jù)中心才用。除此之外還有一個(gè)缺點(diǎn),,用 HBM 就意味著必須用臺積電的 CoWos 工藝,這樣才能盡量縮短與運(yùn)算單元的物理距離,,最大限度發(fā)揮 HBM 的性能,。英特爾的 EMIB 工藝可以抗衡臺積電的 CoWos 工藝,但英特爾不做代工,。因此全球高性能 AI 芯片無一例外都在臺積電生產(chǎn),,市場占有率 100%。
再來說運(yùn)行頻率,。在設(shè)計(jì)集成電路時(shí),,仿真或 EDA 會給出常見的三種狀態(tài)分析。
WCS (Worst Case Slow) : slow process, high temperature, lowestvoltage
TYP (typical) : typical process, nominal temperature, nominalvoltage
BCF (Best Case Fast ) : fast process, lowest temperature, highvoltage
假設(shè)一個(gè) AI 芯片,,運(yùn)行頻率 2GHz,,一般溫度 25°,電壓 0.8V,,算力為 2TOPS,。在 WCS 下,溫度為 125 度,,電壓 0.72V,,此時(shí)頻率會降低到 1GHz,算力就會降為 1TOPS,。
那么每瓦 TOPS 有沒意義呢,?抱歉,也沒多大意義的,。首先是因?yàn)樗懔χ当旧砭陀泻芏喾N可能,,廠家肯定只選數(shù)值最大的那個(gè)給你看。其次這只是運(yùn)算單元芯片本身的功耗與算力比,,沒有考慮 DRAM,。在深度學(xué)習(xí)計(jì)算中,數(shù)據(jù)頻繁存取,,極端情況下,,功耗可能不低于運(yùn)算單元。
結(jié)論
不必糾結(jié)于數(shù)字游戲,,深度學(xué)習(xí)只是錦上添花,,確定性算法把守安全底線才是最重要的,。當(dāng)然業(yè)界風(fēng)氣使然,數(shù)字游戲還會繼續(xù),,還會更加熱鬧,,但業(yè)內(nèi)人士都心知肚明,完全無人駕駛落地還是遙遙無期,。