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