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