看華為卷積運(yùn)算芯片如何提高AI資源利用率?
目前,深度神經(jīng)網(wǎng)絡(luò)技術(shù)已經(jīng)成為人工智能領(lǐng)域的代表性算法,基于深度神經(jīng)網(wǎng)絡(luò)技術(shù)的字符識別、圖像分類或語音識別等關(guān)鍵技術(shù),已經(jīng)廣泛應(yīng)用于搜索引擎和智能手機(jī)等產(chǎn)品中。
其中,當(dāng)前最為有效且應(yīng)用最為廣泛的神經(jīng)網(wǎng)絡(luò)算法是卷積神經(jīng)網(wǎng)絡(luò)算法,簡稱“卷積運(yùn)算”。在現(xiàn)有技術(shù)中,CNN算法的核心計(jì)算單元是乘加運(yùn)算,乘法累加器陣列常用于矩陣乘法運(yùn)算,而卷積運(yùn)算可以轉(zhuǎn)換為矩陣乘法運(yùn)算。
因此業(yè)界廣泛采用MAC(乘累加器)陣列為計(jì)算核心的專用加速硬件,例如:現(xiàn)場可編程門陣列(FPGA)、專用集成電路(ASIC)等,以加速卷積運(yùn)算的運(yùn)算速度。
但是目前卷積計(jì)算也存在著一些問題,一方面,當(dāng)MAC陣列中存在多個卷積窗口同時進(jìn)行卷積運(yùn)算時,這些卷積窗口分布在MAC陣列中的不同位置,使得MAC陣列的利用率非常低。另一方面,存在大量重復(fù)數(shù)據(jù)被從RAM輸入到MAC陣列,這樣會增加RAM的訪問次數(shù)。
為了解決這樣的問題,華為發(fā)明了將CPU、RAM和卷積運(yùn)算芯片集成在同一數(shù)據(jù)總線上的AI芯片,2016年12月29日,華為發(fā)明了一項(xiàng)名為“卷積運(yùn)算芯片和通信設(shè)備”的發(fā)明專利(申請?zhí)枺?01611243272.X),申請人為華為機(jī)器有限公司。
根據(jù)該專利目前公開的資料,讓我們一起來看看華為的這項(xiàng)新架構(gòu)AI芯片吧。
如上圖,為該專利中發(fā)明的硬件設(shè)備的示意性框架圖,硬件架構(gòu)中包括中央處理器100、雙倍速率同步動態(tài)隨機(jī)存儲器(DDR SDRAM)200以及卷積運(yùn)算芯片300。CPU用來控制卷積運(yùn)算芯片啟動卷積運(yùn)算,DDR SDRAM用于向卷積運(yùn)算芯片的數(shù)據(jù)緩存模塊輸入多個卷積數(shù)據(jù)和多個卷積參數(shù),然后卷積運(yùn)算芯片根據(jù)這些數(shù)據(jù)來完成卷積運(yùn)算。
當(dāng)?shù)玫竭\(yùn)算結(jié)果后,就會將運(yùn)算結(jié)果寫回到DDR SDRAM事先設(shè)定好的內(nèi)存地址中,并同時通知CPU完成運(yùn)算,以從內(nèi)存地址中提取結(jié)果數(shù)據(jù)。
如上圖,為上面框架中的卷積運(yùn)算芯片的結(jié)構(gòu)示意圖,這種卷積運(yùn)算芯片包括數(shù)據(jù)緩存模塊310、M*N乘法累加器陣列320、輸出控制模塊330和陣列控制模塊340。
數(shù)據(jù)緩存模塊用于向乘法累加器中的第一乘法累加窗口傳輸用于卷積運(yùn)算的多個卷積數(shù)據(jù)和卷積參數(shù),卷積參數(shù)由數(shù)據(jù)緩存模塊根據(jù)第一卷積參數(shù)矩陣確定,而該控制器也是通過在運(yùn)算器內(nèi)集成這樣的數(shù)據(jù)緩存器,從而減少了RAM的訪問次數(shù),進(jìn)而減少了RAM的訪問壓力。
其中M*N乘法累加器是該運(yùn)算芯片的核心運(yùn)算部件,而這種M*N的結(jié)構(gòu)設(shè)計(jì)方式也是為了進(jìn)行卷積運(yùn)算而特意設(shè)計(jì)的,其具體結(jié)構(gòu)如下圖所示。
可以看到,這種乘法累加器包括M*N個處理單元,并且每兩行的處理單元之間還存在斜向的數(shù)據(jù)傳輸通道,這相比于傳統(tǒng)的矩陣式數(shù)據(jù)傳輸通道,具有更加靈活的數(shù)據(jù)傳輸方式,可以更好的適用于AI芯片進(jìn)行多種類型的運(yùn)算。
第一乘法累加窗口可以將數(shù)據(jù)進(jìn)行乘法運(yùn)算,并接著進(jìn)行加法運(yùn)算以獲得卷積結(jié)果,最后由輸出控制模塊輸出卷積神經(jīng)網(wǎng)絡(luò)的運(yùn)算結(jié)果,進(jìn)而完成AI芯片中的任務(wù)。
在該專利中,為了盡可能地提高M(jìn)AC陣列的利用率以及卷積運(yùn)算效率,陣列控制模塊會根據(jù)第一卷積參數(shù)矩陣的行數(shù)和第一卷積數(shù)據(jù)陣列的行數(shù)來確定第一乘法累加窗口的列數(shù)。
華為發(fā)明的卷積運(yùn)算芯片,這種卷積運(yùn)算芯片能夠在提高陣列資源利用率的同時降低RAM訪問次數(shù),進(jìn)而減小RAM的訪問壓力。例如華為發(fā)明的昇騰AI芯片也正是基于這樣的技術(shù)之上,才能實(shí)現(xiàn)極高的算力,不管多么復(fù)雜的模型都可以輕松訓(xùn)練,且實(shí)現(xiàn)極低的功耗。