AI晶元 寒武紀ShiDianNao結構分析

2021-08-27 18:34:22 字數 3153 閱讀 1279

shidiannao

shidiannao的出現是寒武紀在深度學習處理器上細分領域的更加深入。

前面介紹的diannao針對的是大部分的深度學習神經網路演算法,包括cnn和rnn等。

目前比較火而且應用面非常廣的領域是計算機視覺,若在這個領域的演算法精度實現巨大突破,那麼,就將開啟廣闊的應用領域,能夠真正明顯地改變世界。比如自動駕駛/安防等等,利潤豐厚的領域。

影象識別,這類演算法主要採用cnn結構。

於是乎,開發專門針對cnn的asic就變得可行且有商業價值。

寒武紀為何在已經有了diannao的基礎上,還要設計shidiannao?

先來分析下,目前diannao存在的缺陷。

眾所周知,深度學習類的演算法都是計算密集型和儲存密集型。

這就造成了不低的功耗。

當這類晶元應用到終端嵌入式裝置上有許多限制,比如智慧型手機,對晶元功耗有著嚴苛的要求。

因為diannao中的資料會儲存在dram中,而dram的讀寫會消耗非常大的功耗。

如果能夠避免用dram儲存資料,那麼就能很大程度上降低功耗。

是的,就是基於這個想法,shidiannao誕生了。

shidiannao的想法就是,在實際應用時,將用於影象識別的人工智慧處理器在物理位置上比較靠近影象**(cmos/ccd感測器),這樣就避免了影象資料需要dram的儲存。

另外,對於cnn演算法,其中常用的一類cnn是共享權值的,這樣權值的數量就不大,可以完整存放在片上sram中,從而使得權值也能避免儲存在dram中。

這樣處理後,整個系統就不需要dram做儲存,從而大幅降低功耗。

上圖將acc(人工智慧處理器)放置在離感測器很近的位置,直接從感測器獲取影象資料,避免了dram的使用。

shidiannao架構

shidiannao的架構如下圖所示。

整個架構與diannao一脈相承。三個buffer分別儲存權值/輸入資料/輸出資料。

核心邏輯是右邊的nfu,也就是pe陣列。pe(processing elements),是最小的處理單元。

nfu的內部結構如下圖所示。

從上圖可以看出,權重是同時廣播到所有的pe,輸出也是同時傳遞到output,而輸入資料則配合每個pe內部的兩個fifo,有不同的輸入規律,有時一次給所有pe提供輸入,有時又只給一列提供輸入其餘列靠相鄰右邊的fifo提供,有時又給一列提供輸入其餘列靠相鄰下方的pe的fifo提供。

單個pe結構如下圖所示。

shidiannao與tpu1對比

與tpu的脈動矩陣相對比,發現二者都共用了權重和輸入資料。但是細細分析,還是覺得tpu的脈動矩陣更加優秀高效。

比如,二者都共用了權值,shidiannao是統一獲取權值,然後同一週期廣播到所有pe。受限於訊號在導線中傳遞速度,訊號完整性以及時序同步的問題,shidiannao的pe陣列無法做到比較大的規模,且規模越大,需要的傳輸佈線長度約長,傳輸時間越久,因此頻率也無法做到很高。而且,每個pe都是單獨出結果,也就是說,在pe陣列**的pe也要直接給輸出傳遞資料,這就意味著需要不菲的佈線資源。所以,shidiannao的缺點還是比較明顯的。

再比如,二者都共用了輸入資料。shidiannao是在pe內部有兩個fifo來儲存多個輸入資料。而且因為輸入資料共享的方式有幾種不同的情況,所以就造成了為了共享資料,不同時刻,資料的傳遞方向是不同的,比如,可能是按列,從右往左傳遞,也可能是按行,從下往上傳遞。而反觀谷歌的tpu,採用了脈動陣列,於是,輸入資料只需要從陣列的左側進入,然後所有輸入資料都從左往右依次傳遞,傳遞方式非常簡單,也不需要在pe中內建fifo。

幾種不同的輸入資料傳遞方式,見下圖所示。

另外,脈動陣列只有最下面一行的pe會輸出計算結果,只有最左邊的一列會接受輸入資料,整體來說,所需要的佈線資源就少很多。另外,因為pe所需的輸入資料/權重相關資訊/中間計算結果,都來自鄰近的pe,不需要很長的走線,且能夠輕易做到相鄰pe的距離相同,那麼相鄰pe之間的訊號傳遞時間就完全一致,可以保持整個脈動陣列工作在非常高的頻率。

總體來看,個人認為還是谷歌tpu的脈動陣列更加高效。

計算卷積

下面看看shidiannao是怎麼計算的。

以卷積為例。

figure13(a)顯示了乙個2x2的pe陣列。所以可以同時計算4個輸出。所需輸入資料如圖右側的4個不同顏色方框所示。中間則表示了從cycle0開始,每個cycle,給每個pe的輸入資料。可以看出,其中有部分資料可以反覆利用。於是,這就給增加fifo來實現資料復用提供了可能。

figure13(b)則配合圖(a),給出了每個cycle,每個pe中的fifo應該如何儲存輸入資料,以及輸出資料復用。

這種方式有個缺點,一般而言,影象資料儲存在ram中,都是按照一張圖的資料集中儲存在一起,那麼,取同一張影象上的某些畫素點作為輸入資料時,每個週期的畫素位址並未對齊,無法在乙個週期中獲取該週期需要的所有有效資料,難以滿足pe陣列的需求,會降低計算速度。

狀態機

整個shidiannao的執行,會因為演算法中的不同計算而有不同的控制方式,這就需要用到狀態機,如下圖所示。

引入狀態機控制shidiannao工作,就可以採用指令集的方式,描述需要的操作,然後由狀態機執行。

這一點,比較贊。

猜測寒武紀的一系列晶元應該都採用了這樣的狀態機進行控制。

AI晶元 寒武紀DaDianNao結構分析

dadiannao 寒武紀的dadiannao的誕生稍晚於diannao,同樣也是在2014年。這裡僅僅指 發表時間 如果把diannao看作是嵌入式終端使用的處理器,那麼dadiannao就是伺服器上用的大規模高效能處理器。dadiannao其實就是採用的diannao的nfu作為核心,然後在一塊...

AI晶元 寒武紀PuDianNao結構分析

pudiannao 之前介紹了寒武紀的diannao和dadiannao,其實內部處理邏輯可以說是一樣的。這種架構,只能適用特定的演算法型別,比如深度學習 cnn,dnn,rnn 等。但是,深度學習只是機器學習中的某一類,整個機器學習,有很多其他種類的演算法,和深度學習的不太一樣,甚至經常用到除法等...

AI晶元 寒武紀Cambricon X結構分析

cambricon x是針對稀疏係數的矩陣計算架構。深鑑科技的韓松等人的研究發現,可以將傳統的深度學習網路模型的許多權重係數去掉,甚至能去掉90 以上,而並不影響模型的計算精度。如下圖所示。目前的深度學習模型的權重係數太多,造成需要的乘法計算非常多,計算時間長,速度慢。相信,未來的模型會更加複雜,需...