2017年,人工智能最火的風口一定是AI芯片。AI芯片的出現(xiàn),與深度學習技術的成熟及應用密不可分。深度學習的過程可以簡化理解為利用大量標注的數(shù)據進行訓練,訓練出一個行之有效的模型,再將這一模型運用于新數(shù)據的推斷。
這個耳熟能詳?shù)谋钏惴ㄊ墙⒃诙鄬哟笠?guī)模神經網絡之上的,后者本質上是包含了矩陣乘積和卷積操作的大運算量函數(shù)。往往需要先定義一個包含回歸問題的方差、分類時的交叉熵的代價函數(shù),再數(shù)據分批傳遞進網絡,根據參數(shù)求導出代價函數(shù)值,從而更新整個網絡模型。這通常意味著至少幾百萬次的相乘處理,計算量巨大。通俗來說,包含了數(shù)百萬次A*B+C的計算,算力消耗巨大。
為解決這一問題,AI芯片應運而生。2017年開始,圍繞AI芯片,半導體行業(yè),戰(zhàn)事升級,賽場上新老玩家暗潮涌動,連橫合眾,大有“AI芯片太多,設備都不夠用了”之勢。
時間進入2018年,備受關注的大小公司都將正式推出自研AI芯片。這些芯片也都被業(yè)界寄予厚望,是否能解決或者部分解決終端計算難題?什么樣的芯片才能夠真正適應終端智能的需求?
這些都是我們十分好奇且關注的問題。于是也與一些創(chuàng)業(yè)者進行了交流。本文即是其中的一篇,來自于與探境科技CEO魯勇的訪談。目前探境科技正研發(fā)適用于終端的AI芯片,在創(chuàng)業(yè)前魯勇曾在芯片廠商Marvell任高管,從事過存儲芯片的相關工作,而存儲正是計算之外所有芯片另一核心?;谶^往的經歷、經驗與觀察,魯勇認為,做適用于終端的AI芯片,除了要在計算方面提升,存儲優(yōu)化同樣至關重要。
一
AI算法在芯片實現(xiàn)時遇到的核心問題不是計算資源而是存儲問題,強如GPU提供眾多的計算資源,而實際計算能力與計算資源大為降低。
概括來說,存儲問題分為兩個部分,一個是帶寬問題,一個是功耗問題,這兩個問題的解決其實也是耦合在一起的。
具體來說,深度學習算法使用大量存儲資源,即包括靜態(tài)模型參數(shù),也包括網絡層之間的動態(tài)數(shù)據。對于靜態(tài)模型參數(shù)權重,動輒幾十兆上百兆樣本數(shù)量,無法在片上SRAM保存,因此需要存入外部DRAM。DRAM與AI計算芯片間帶寬有限,如果芯片上計算資源很大,但受存儲帶寬的瓶頸限制,實際計算力大為下降。
打比方來說,負責存儲的DRAM和與負責計算的芯片就像是位于河兩岸的倉庫,整個運算的過程可以類比從存儲的倉庫搬取數(shù)據、搬運過橋,將數(shù)據搬入計算的單元進行處理,并高速循環(huán)往復。而當前的AI芯片技術重點提升將數(shù)據搬入計算單元后的處理速度,但因為搬出數(shù)據、過橋的過程基本未發(fā)送變化,因此整體的效率提升還相對有限。
與之對應的方法即是克服存儲帶寬的手段:一是減少數(shù)據量,降低所需數(shù)據帶寬,就是說想辦法只要從倉庫搬出少量數(shù)據,就可以達到同樣的效果;二是更科學的調度數(shù)據使用,提升調度的效率。
(1)減少數(shù)據容量
如果數(shù)據量降低了,這將總體上減少對DRAM的訪問,在DRAM物理帶寬保持不變的前提下,降低了DRAM的依賴性,提高了整體性能,同時減少DRAM訪問也將大幅減少系統(tǒng)功耗開銷。因此首先需要解決的問題是減少靜態(tài)參數(shù)權重的大小。通常的解決辦法包括參數(shù)定點化,將每個32bit浮點數(shù)減少為16bit以下的定點數(shù),至少能降低50%甚至75%的存儲容量,也同樣幅度的降低了存儲帶寬的需求。實踐證明16bit定點化可以采用線性量化的方式,而16bit以下定點化根據模型的不同,有些需要采用非線性量化才可以達到維持模型性能的目的。
目前主要有模型剪枝、設計適于終端設備的簡化網絡兩種實現(xiàn)方式。模型剪枝作為進一步降低模型容量和存儲帶寬的方式,是基于神經網絡模型存在大量冗余信息的基礎,而另一種從源頭開始重新設計適于終端設備的簡化網絡的方式也在逐漸興起,從同樣規(guī)模的網絡性能來看,新設計的網絡可能比舊網絡通過剪枝再訓練的方式更為簡單快捷,性能也更好。
(2)更科學的調度數(shù)據使用
深度學習的計算大量使用乘累加,即完成AXB+C的工作,這種乘累加單元(MAC)每次運算需要三個輸入,完成一個輸出。參與運算的數(shù)據包括事先準備好的權重參數(shù)和網絡層產生的中間數(shù)據。每個乘累加完成后的輸出通常也會作為下一次運算的輸入,因此如何調度這些數(shù)據成為關鍵。
功耗角度來說,從DRAM獲取數(shù)據所消耗的功耗最大,從SRAM中獲取數(shù)據其次,從本地寄存器中獲取數(shù)據消耗功耗最低,但從成本角度考慮剛好相反,因此這三個不同層次的存儲器的使用非常關鍵,我們希望盡可能減少DRAM的訪問,最理想的結果是僅從DRAM中讀取一次事先存好的模型參數(shù),而不依賴DRAM做任何其他工作。
從宏觀上看,整個深度學習運算計算一次,進入MAC的總數(shù)據量遠大于靜態(tài)數(shù)據的容量,因為無論是模型參數(shù)還是中間數(shù)據都多次被重復使用,因此實際所需的數(shù)據帶寬非常大,并且當所有這些數(shù)據都僅通過DRAM被緩存使用時,其功耗開銷也是驚人的,因此充分利用各級緩存的特性非常重要,設計一個合理的數(shù)據流,將多次被重復使用的數(shù)據放在離計算資源較近的地方,少量讀取的數(shù)據放在DRAM中,將提高計算性能,降低系統(tǒng)功耗。
二
那么問題來了,如何才能設計一款真正適用于終端的AI芯片。
簡單的設計一個卷積加速器并不能帶來深度學習計算性能上的提高,合格的計算架構需要結合對存儲問題的分析來設計,不僅要考慮計算架構,也要考慮存儲的數(shù)據流控制,因此深度學習的計算特點并非是一個簡單粗暴的并行計算問題。
首先還是要考慮浮點和定點計算的問題,8 位的整數(shù)乘法比IEEE 754標準下16位浮點乘法降低 6 倍的能耗,占用的芯片面積也少 6 倍;而整數(shù)加法的差異是13倍的能耗與38倍的面積,因此終端AI芯片采用定點計算將獲得巨大收益。當定點成為設計目標的時候,要充分考慮軟硬件的結合,不同網絡對定點位數(shù)的影響程度是不一樣的,數(shù)據量化的具體方式也有差異,有線性量化也有非線性量化的方法,因此針對應用場景結合軟件協(xié)同設計非常有必要。
其次深度學習不是簡單粗暴的并行計算但仍然有明顯的并行計算特征,因此考慮存儲問題后放入更多的計算資源會大幅提高計算性能。首先將最多被重復使用的數(shù)據放在接近計算資源的地方,這符合較為流行的In Memory Computing(存儲計算一體化)的思想,并且考慮到當前工業(yè)水平,這更為實際,而通過重新設計包括計算單元的存儲單元或采用ReRAM等方式是未來的 發(fā)展方向。
第三要考慮到深度學習數(shù)據的另一重要特性,即數(shù)據稀疏化特性,也就是說在參與運算的數(shù)據中有大量的零值數(shù)據存在,這些零值數(shù)據即可以在存儲中被壓縮存放,降低存儲容量和帶寬需求,也可以在計算中被進一步調度,減少運算壓力,提高運算的有效性能。這些零值數(shù)據不僅存在于模型參數(shù)中,也大量存在于神經網絡各層運算的中間數(shù)據中,這兩方面都需要進行考慮。稀疏數(shù)據在多核心并行計算中的調度是個復雜的問題,而不同網絡結構也會帶來不同的影響,因此將軟硬件協(xié)同設計,動態(tài)調度的調度器是非常復雜的設計難點。
最后要考慮針對不同網絡的資源有效利用率問題,由于神經網絡差異化較大,如果希望針對不同網絡都有較高的資源有效利用率,則需要在較細的顆粒度上進行優(yōu)化,進一步加深了數(shù)據流調度器的復雜度。