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