那麼多年來,Nvida只靠一條產品線——GPU獨步天下,即使近年來的Tegra Jetson (SoC=ARM+GPU)計劃,賣點也依賴於N家長久以來在GPU領域的技術累積。但由於複雜的多執行緒控制,GPU這一架構在低功耗嵌入式應用中缺乏能效上的競爭力(詳見矽說與機器之心合作的腦芯編系列:專題 | 腦芯編: 為什麼 GPU 是 AI 的神外掛?)。而此次推出的開源DLA計劃,徹底推翻GPU架構,重新定義了加速器架構,還能展現NV家優勢麼?
上圖是目前發表的release中DLA的架構,其資料流主要包含卷積、啟用(單資料操作 , Single Data),池化(平面資料操作,Planar Data),歸一化(多維資料操作,Multi-Plane Data)以及Reshape。從架構看,其很好地對接了CNN神經網路的主流框架,並且支援多種精度(整數4/8/16,浮點16/32)的Inference計算。
然而,DLA的可程式設計性相較於GPU卻弱了很多。目前卷積核主要支援Channel數為16,Kernel數為64的矩陣運算。對於無法填滿這個巨無霸矩陣的卷積核,其利用率就會降低很多,比如只有RGB三個Channel的圖形第一層。當總體而言,16x64在目前的影像深度學習中仍然是一個較小的單元,因此其對AlexNet,VGG等主流網路的加速仍然是可觀的。
【矽說點評——深度懷疑,該卷積架構在技術上傳承了採用年初Tesla V100的新一代Cuda 核心中的Tensor Core技術,值得重點觀察!】
相比於架構上的中規中矩,NV家在加速實現上卻對最先進的高效能運算技術好不吝嗇。其中首推就是Winograd的卷積法。Winograd卷積法是對小矩陣的高速實現演算法,是由Nervana(當時可能還沒有被Intel收購呢)發表在2016年CVPR上的新演算法,其靈感來自80年代S. Winograd對於FFT加速的演算法的實現。
(如果您對數學沒有信心,請跳躍至下一個括號)
對於一個4輸入,3係數,2輸出的卷積,採用直接的卷積計算,需要6次乘法才能得到記過。但實際上由於向量化以後的輸入資料的重複性很高,可以用過一組中間向量,僅採用4次乘法即可得到結果,即一維Winograd卷積法。該方法使乘法數量降低了1.5倍。
將一維卷積擴充成兩維,對於一個,4x4輸入,3x3係數,2x2輸出的卷積,採用直接計算,需要36個乘法器,採用Winograd乘法後僅需16個乘法器,但兩者在數學上的計算結果是等價的。由此至少一半的乘法器資源被節省了。
(數學結束了,你只要記住,對於Kenel尺寸較小的2維卷積,Winograd卷積法可以節省一半的乘法器數量與功耗得到相同的結果。)
除了Winograd,DLA還針對全連線網路的稀疏特點採用了壓縮傳輸演算法,當一組資料的60%中為0時,透過壓縮傳輸編碼,將傳輸資料頻寬降低一半。該演算法的程式碼級實現
【矽說點評——這兩種方法都是高效率的硬體加速法,雖然在理論成熟後的RTL並不困難,但是想NV這樣工業級的程式碼水準仍然值得我們學習!】
Nvidia的人工智慧生態以硬體為本,並伴隨著推出高度最佳化的深度學習訓練/推理加速framework(如CuDNN和TensorRT),其願景是未來只要是深度學習相關的應用,就一定會用到由Nvidia出品的硬體或者軟體工具。考慮到人工智慧未來巨大的潛力以及目前Nvidia在人工智慧加速硬體賽道上遙遙領先的地位,Nvidia在這個時間點的選擇並不是繼續消滅打壓其他競爭對手,而是更多考慮如何推動釋放人工智慧的潛力並加速人工智慧應用的普及,這樣Nvidia才能從中獲得更多利潤。DLA之前最著名的開源晶片專案是RISC-V微處理器,而NvidiaDLA的目標,就是讓人工智慧加速器像微處理器一樣普及,在智慧裝置中隨處可見。相信不遠的未來基於RISCV+NVDLA的深度學習SoC就會成為開源硬體的代表作。
那麼,目前人工智慧普及的瓶頸在哪裡呢?在雲端訓練市場,搭配多塊GPU的超級計算機已經能很好地完成訓練任務,而且該市場已經被Nvidia牢牢掌控;但是在終端,硬體仍然是制約人工智慧普及的最大問題。目前基於深度學習的人工智慧計算量很大,傳統的移動SoC無法達到流暢執行深度學習模型所需要的效能,而基於GPU的方案又功耗太大,應用場景受限。在智慧手機、智慧攝像頭、智慧家電、物聯網等等場景,人們早已經構想了無數中人工智慧的應用,然而由於市面上沒有合適的硬體,人工智慧在這些領域的普及,在Nvidia眼中只能說是蹣跚前進,遠遠沒有達到它想要的速度。
於是,Nvidia開源了DLA,目標受眾就是那些為終端應用開發晶片,沒有能力、資源或者決心開發自己的人工智慧加速模組但又不想錯過人工智慧大潮的廠商。為什麼Nvidia自己不做終端晶片而是要開源其DLAIP呢?因為終端晶片是一個長尾市場,應用種類太多,每一種晶片都有其對於效能和功耗不同的設計。Nvidia如果想親自佔領每一個終端晶片市場,就必須增設多條產品線(攝像頭,語音,智慧家電…),每款晶片在擁有深度學習加速的同時還要相容這些晶片的原有功能(你能想象Nvidia去做攝像頭ISP晶片嗎),另外還要面臨這些市場裡的原有晶片公司的競爭,最後的結果就是Nvidia疲於奔命,反而無法集中精力把自己最擅長的深度學習加速做好(之前Nvidia試水手機晶片推出Tegra系列結果鎩羽而歸,內部一定也有反思)。而開源DLA IP與推出晶片不同,針對不同的晶片需求晶片廠商可以在DLA的基礎上進行一定程度的定製和最佳化,從而開發出適合自己晶片的DLA版本並整合進自己的晶片,於是Nvidia只要把自己擅長的深度學習加速架構做好就行,晶片的其他部分由專業的晶片廠商負責,同時Nvidia與這些廠商的關係也由競爭變成了合作。
【矽說點評——既然終端晶片市場太大沒法在近期一口吃下,NV轉而做長期佈局,提供DLA IP幫助大家把人工智慧加速功能整合進不同的晶片裡便成了其主要選項,這樣一方面加速了人工智慧在終端市場的發展,與眾友商一起把蛋糕做大,雖然DLA IP不收費但是終端人工智慧市場起飛後模型的訓練和最佳化還是要用Nvidia的解決方案,最後還是會轉化為Nvidia的利潤;另一方面在終端卡位,避免有其他晶片廠商從終端晶片發力在人工智慧硬體站穩腳跟,進而繼續向上挑戰Nvidia在人工智慧領域的位置。】
那麼,DLA對於目前眾多人工智慧加速晶片初創公司有什麼影響呢?是不是Nvidia出場,這些初創公司的發展空間就被扼殺了呢?
事實並非如此。參考嵌入式處理器/MCU市場。在這個市場,ARM的Cortex-M0可以以近乎免費的價格使用,同時也有RISC-V這樣的開源核新起之秀。然而,在這個領域還是有許多晶片初創公司(如SiFive,Ambiq Micro等等)證明自己的價值。同樣的,在人工智慧晶片領域,初創公司在Nvidia DLA推出之後還是大有可為。
首先,目前大部分深度學習晶片的初創公司還是聚焦專用的領域的,吸取DLA技術對SoC的開發無疑是有利無害的,特別是NV大幅降低了License門檻。高效能的DLA作為SoC的重要組成部分,反而考驗了各類初創公司的積體電路設計能水平。以和DRAM的通訊介面為例,即使在給出綜合約束檔案(SDC)後,對於一般的後端工程師,滿足高速DRAM PHY的設計要求仍然是一個不小的課題,否則就是空有屠龍寶刀卻砍不了蒼蠅的禁地。
在目前給出的兩種系統方案(small/large)距離實用場景還遠遠不夠細緻,特別在工具鏈層面,自有編譯器與未來的DLA編譯器直接如何融會貫通都將成為重要的課題,決定了初創公司的成敗。
其次,DLA架構也有自己的瓶頸,Nvidia為了照顧通用性,其實在很多需要極致效能(超低功耗,超強效能)的場合,使用DLA架構無法滿足需求。所以,完全拋開DLA另闢蹊徑也不失為一條可行的路,例如可擴充套件性極好的眾核CGRA配合分散式儲存用於超高效能運算外加非常好的可配置性,或者使用硬體支援動態網路模型壓縮實現極高能效比等等,都是值得探索的路。
【矽說點評——NVDLA並非是深度學習晶片公司的末日,而更像是一個提供標準的通用參考。基於這一設計初創公司將避免自己重新發明輪子的低附加值重複,轉而發展自己最擅長的部分,實現高附加值創新。因此,Nvidia DLA對於人工智慧晶片初創公司更多的是一個參考,一種激勵,能促使這些公司更多的思考自己的獨特之處在哪裡,而不是把過多的時間放在基礎的輪子設計上。這是一件好事。】