歡迎光臨
我們一直在努力

什麼樣的芯片才能夠真正適應終端智能的需求

2017年,人工智能最火的風口一定是AI芯片。

AI芯片的出現,與深度學習技術的成熟及應用密不可分。 深度學習的過程可以簡化理解為利用大量標註的數據進行訓練,訓練出一個行之有效的模型,再將這一模型運用於新數據的推斷。

這個耳熟能詳的爆款算法是建立在多層大規模神經網絡之上的,後者本質上是包含了矩陣乘積和卷積操作的大運算量函數。 往往需要先定義一個包含回歸問題的方差、分類時的交叉熵的代價函數,再數據分批傳遞進網絡,根據參數求導出代價函數值,從而更新整個網絡模型。 這通常意味著至少幾百萬次的相乘處理,計算量巨大。 通俗來說,包含了數百萬次A*B+C的計算,算力消耗巨大。

為解決這一問題,AI芯片應運而生。 2017年開始,圍繞AI芯片,半導體行業,戰事升級,賽場上新老玩家暗潮湧動,連橫合眾,大有“AI芯片太多,設備都不夠用了”之勢。

時間進入2018年,備受關注的大小公司都將正式推出自研AI芯片。 這些芯片也都被業界寄予厚望,是否能解決或者部分解決終端計算難題? 什麼樣的芯片才能夠真正適應終端智能的需求?

這些都是我們十分好奇且關注的問題。 於是也與一些創業者進行了交流。 本文即是其中的一篇,來自於與探境科技CEO魯勇的訪談。 目前探境科技正研發適用於終端的AI芯片,在創業前魯勇曾在芯片廠商Marvell任高管,從事過存儲芯片的相關工作,而存儲正是計算之外所有芯片另一核心。 基於過往的經歷、經驗與觀察,魯勇認為,做適用於終端的AI芯片,除了要在計算方面提升,存儲優化同樣至關重要。

以下為正文,來自36氪對魯勇的訪談內容,36氪基於訪談內容對其觀點進行了整理。

什麼樣的芯片才能夠真正適應終端智能的需求

AI算法在芯片實現時遇到的核心問題不是計算資源而是存儲問題,強如GPU提供眾多的計算資源,而實際計算能力與計算資源大為降低。

概括來說,存儲問題分為兩個部分,一個是帶寬問題,一個是功耗問題,這兩個問題的解決其實也是耦合在一起的。

具體來說,深度學習算法使用大量存儲資源,即包括靜態模型參數,也包括網絡層之間的動態數據。 對於靜態模型參數權重,動輒幾十兆上百兆樣本數量,無法在片上SRAM保存,因此需要存入外部DRAM。 DRAM與AI計算芯片間帶寬有限,如果芯片上計算資源很大,但受存儲帶寬的瓶頸限制,實際計算力大為下降。

打比方來說,負責存儲的DRAM和與負責計算的芯片就像是位於河兩岸的倉庫,整個運算的過程可以類比從存儲的倉庫搬取數據、搬運過橋,將數據搬入計算的單元進行處理 ,並高速循環往復。 而當前的AI芯片技術重點提升將數據搬入計算單元後的處理速度,但因為搬出數據、過橋的過程基本未發送變化,因此整體的效率提升還相對有限。

與之對應的方法即是克服存儲帶寬的手段:一是減少數據量,降低所需數據帶寬,就是說想辦法只要從倉庫搬出少量數據,就可以達到同樣的效果;二是更科學的調度數據 使用,提升調度的效率。

(1)減少數據容量

如果數據量降低了,這將總體上減少對DRAM的訪問,在DRAM物理帶寬保持不變的前提下,降低了DRAM的依賴性,提高了整體性能,同時減少DRAM訪問也將大幅減少系統功耗 開銷。 因此首先需要解決的問題是減少靜態參數權重的大小。 通常的解決辦法包括參數定點化,將每個32bit浮點數減少為16bit以下的定點數,至少能降低50%甚至75%的存儲容量,也同樣幅度的降低了存儲帶寬的需求。 實踐證明16bit定點化可以採用線性量化的方式,而16bit以下定點化根據模型的不同,有些需要採用非線性量化才可以達到維持模型性能的目的。

目前主要有模型剪枝、設計適於終端設備的簡化網絡兩種實現方式。 模型剪枝作為進一步降低模型容量和存儲帶寬的方式,是基於神經網絡模型存在大量冗餘信息的基礎,而另一種從源頭開始重新設計適於終端設備的簡化網絡的方式也在逐漸興起, 從同樣規模的網絡性能來看,新設計的網絡可能比舊網絡通過剪枝再訓練的方式更為簡單快捷,性能也更好。

(2)更科學的調度數據使用

深度學習的計算大量使用乘累加,即完成AXB+C的工作,這種乘累加單元(MAC)每次運算需要三個輸入,完成一個輸出。 參與運算的數據包括事先準備好的權重參數和網絡層產生的中間數據。 每個乘累加完成後的輸出通常也會作為下一次運算的輸入,因此如何調度這些數據成為關鍵。

功耗角度來說,從DRAM獲取數據所消耗的功耗最大,從SRAM中獲取數據其次,從本地寄存器中獲取數據消耗功耗最低,但從成本角度考慮剛好相反,因此這三個不同層次的 存儲器的使用非常關鍵,我們希望盡可能減少DRAM的訪問,最理想的結果是僅從DRAM中讀取一次事先存好的模型參數,而不依賴DRAM做任何其他工作。

從宏觀上看,整個深度學習運算計算一次,進入MAC的總數據量遠大於靜態數據的容量,因為無論是模型參數還是中間數據都多次被重複使用,因此實際所需的數據帶寬非常大, 並且當所有這些數據都僅通過DRAM被緩存使用時,其功耗開銷也是驚人的,因此充分利用各級緩存的特性非常重要,設計一個合理的數據流,將多次被重複使用的數據放在 離計算資源較近的地方,少量讀取的數據放在DRAM中,將提高計算性能,降低系統功耗。

那麼問題來了,如何才能設計一款真正適用於終端的AI芯片。

簡單的設計一個卷積加速器並不能帶來深度學習計算性能上的提高,合格的計算架構需要結合對存儲問題的分析來設計,不僅要考慮計算架構,也要考慮存儲的數據流控制,因此深度 學習的計算特點並非是一個簡單粗暴的並行計算問題。

首先還是要考慮浮點和定點計算的問題,8 位的整數乘法比IEEE 754標準下16位浮點乘法降低6 倍的能耗,佔用的芯片面積也少6 倍;而整數加法的差異是13 倍的能耗與38倍的面積,因此終端AI芯片採用定點計算將獲得巨大收益。 當定點成為設計目標的時候,要充分考慮軟硬件的結合,不同網絡對定點位數的影響程度是不一樣的,數據量化的具體方式也有差異,有線性量化也有非線性量化的方法,因此針對 應用場景結合軟件協同設計非常有必要。

其次深度學習不是簡單粗暴的並行計算但仍然有明顯的並行計算特徵,因此考慮存儲問題後放入更多的計算資源會大幅提高計算性能。 首先將最多被重複使用的數據放在接近計算資源的地方,這符合較為流行的In Memory Computing(存儲計算一體化)的思想,並且考慮到當前工業水平,這更為實際,而通過重新設計包括 計算單元的存儲單元或採用ReRAM等方式是未來的發展方向。

第三要考慮到深度學習數據的另一重要特性,即數據稀疏化特性,也就是說在參與運算的數據中有大量的零值數據存在,這些零值數據即可以在存儲中被壓縮存放, 降低存儲容量和帶寬需求,也可以在計算中被進一步調度,減少運算壓力,提高運算的有效性能。 這些零值數據不僅存在於模型參數中,也大量存在於神經網絡各層運算的中間數據中,這兩方面都需要進行考慮。 稀疏數據在多核心並行計算中的調度是個複雜的問題,而不同網絡結構也會帶來不同的影響,因此將軟硬件協同設計,動態調度的調度器是非常複雜的設計難點。

最後要考慮針對不同網絡的資源有效利用率問題,由於神經網絡差異化較大,如果希望針對不同網絡都有較高的資源有效利用率,則需要在較細的顆粒度上進行優化,進一步加深 了數據流調度器的複雜度。

未經允許不得轉載:頭條楓林網 » 什麼樣的芯片才能夠真正適應終端智能的需求