cambricon-x是針對稀疏係數的矩陣計算架構。
深鑑科技的韓松等人的研究發現,可以將傳統的深度學習網路模型的許多權重係數去掉,甚至能去掉90%以上,而並不影響模型的計算精度。如下圖所示。
目前的深度學習模型的權重係數太多,造成需要的乘法計算非常多,計算時間長,速度慢。
相信,未來的模型會更加複雜,需要的計算更多,時間更久。
未來把模型進行係數刪減,就成了必然。
但是,刪減了大量權值係數後,模型網路所需要的乘法計算次數明顯變少,但是因為係數的稀疏帶有不可控的隨機性,不同filter的有效權重可能是不同位置的,所以,這就造成了大量權重平行計算時,無法做到同步,導致目前現有的處理器設計都並不能充分利用係數稀疏帶來的加速效果。
cambricon-x就是寒武紀在這個方面的乙個探索。
下圖為cambricon-x的架構。
可以看出,整個架構還是和diannao很像。
當然還是有不同的。
最大的不同是,為了利用到稀疏係數帶來的加速效果,首先就需要將係數為0的權重所對應的輸入資料去掉。這個,由fig4中的buffer controller來實現。
buffer controller的具體結構見fig5,主要由indexing實現資料的篩選。
indexing從輸入神經元資料(input neurons)中挑選出非0權重對應的輸入資料,按順序排列好,然後傳輸給對應的pe。然後,由pe去執行乘法/加法等操作。
pe結構如下圖所示。
可以看到,pe中有個小sb,用於存放有效的權重。
權重的儲存方式是,將單個神經元的所有不為0的權重儲存在一起,如下圖所示。
假設每個位址能儲存4個權重。
在圖7中,假設只有2個神經元:
神經元0,只有0和4,兩個權重引數w00 和 w40,儲存在address0。
神經元1,有5個權重引數w11, w21 , w31, w51, w61, 這樣乙個位址不能完全儲存,於是需要2個位址,儲存在address1和address2.
權重的稀疏性,造成每個神經元計算時,需要讀取權重的次數不相同,比如,神經元0只需要讀一次權重memory,神經元1需要讀2次權重memory,這種不規律,造成難以大量神經元同步計算,無法直接利用脈動陣列的優勢。
既然權重是無規律稀疏的分布。那麼,怎麼將權重與對應的輸入資料匹配起來呢?
cambricon引入了indexing module(im)
cambricon-x的每個pe都配置有乙個單獨的indexing units。
依然採用了輸入資料在不同神經元上覆用的思想。
按照上方圖7的例子,依然是2個神經元,在非稀疏情況下每個神經元計算乙個卷積結果需要八個輸入資料和8個權重(n0, n1,…,n7,共8個),現在是稀疏的,還是一次讀取了8個資料,但是神經元0只需要其中2個資料,神經元1需要其中5個資料。
這就需要一種機制去實現權重與輸入資料的對應關係。
cambricon採用的是用標誌位connections[i]表示是否有對應連線關係,如圖9所示。
直接想到的對映機制是直接對映,每個connections的每個bit對應乙個輸入資料,如圖10所示。
這種方式的優點:簡單直接;缺點:當稀疏性較大時,會有許多connections[i]是無效的0,浪費晶元內的空間資源。
為了降低空間浪費的問題,又引入了step indexing。
顧名思義,只儲存非零的connections[i],並儲存相鄰兩個非零的connections[i]的距離step(中間間隔的無效0的個數),然後通過累加step,就能恢復出原始的稀疏陣列。如圖11所示。(**原圖中有小錯誤,如圖紅色標註所示)
這種方式的優點是:可以節省無效0佔據的空間;缺點是:需要額外的計算器去累加step,並且需要耗費一些時間。
不過,由於目前用到的模型的尺寸都很大,比如yolo_v3中的網路就往往是416x416的,如果能去除90%的冗餘權重,那麼step indexing就能明顯減少無效0佔據的空間。
cambricon-x的設計中,經過綜合考慮,選擇的是step indexing。
到了這裡,cambricon-x的內部結構就很清晰了。
整體來看,結構類似diannao,只有一列(或一行)計算單元,而不是tpu的那種二維的脈動陣列,輸入資料的復用效率就低了不少。
估計cambricon-x,是按照復用輸入資料的思路來控制的。猜測其運算方式是:每次讀取一次卷積需要的輸入資料,然後將資料傳輸給當前的所有pe的im,然後每個im根據step indexing去計算並匹配權重和輸入資料,完成資料的匹配後,統一或者各自自主傳輸給各自的pe(計算單元,內部是乘法器及加法器等),當所有pe計算完成後,將結果寫入nbout(buffer),才能進行下一次的計算.
有個缺點:因為要復用輸入資料,所以是按照輸入資料來控制計算的,就算有pe提前算完,估計也必須等著別的pe計算完成。所以,一次計算的時長,是計算最慢的那個pe決定的,這就表明,cambricon-x的頻率不會非常高。
不過,如果矩陣非常稀疏,那麼cambricon的優勢還是非常明顯的。
而且,隨著之後模型尺寸越來越大,計算量也越來越大,算力非常緊缺,研究稀疏性矩陣的計算,非常有應用前景,特別是嵌入式終端方面,比如手機。
不管怎麼樣,cambricon-x還是乙個很不錯的探索!!
感謝寒武紀!!
AI晶元 寒武紀DaDianNao結構分析
dadiannao 寒武紀的dadiannao的誕生稍晚於diannao,同樣也是在2014年。這裡僅僅指 發表時間 如果把diannao看作是嵌入式終端使用的處理器,那麼dadiannao就是伺服器上用的大規模高效能處理器。dadiannao其實就是採用的diannao的nfu作為核心,然後在一塊...
AI晶元 寒武紀PuDianNao結構分析
pudiannao 之前介紹了寒武紀的diannao和dadiannao,其實內部處理邏輯可以說是一樣的。這種架構,只能適用特定的演算法型別,比如深度學習 cnn,dnn,rnn 等。但是,深度學習只是機器學習中的某一類,整個機器學習,有很多其他種類的演算法,和深度學習的不太一樣,甚至經常用到除法等...
AI晶元 寒武紀ShiDianNao結構分析
shidiannao shidiannao的出現是寒武紀在深度學習處理器上細分領域的更加深入。前面介紹的diannao針對的是大部分的深度學習神經網路演算法,包括cnn和rnn等。目前比較火而且應用面非常廣的領域是計算機視覺,若在這個領域的演算法精度實現巨大突破,那麼,就將開啟廣闊的應用領域,能夠真...