功能描述:
聯系:highspeedlogic
QQ :1224848052
微信:HuangL1121
郵箱:1224848052@qq.com
網站:http://www.mat7lab.com/
網站:http://www.hslogic.com/
微信掃一掃:
分享提綱
1 傳統芯片 VS AI芯片;
2 AI芯片的痛點 -- 從零開始的軟件開發工具;
3 應用開發痛點 -- 芯片碎片化;
4.Tengine開放的AIoT軟件開發平臺。
以下為open AI lab的Tengine產品生態總監高錦煒的部分直播分享實錄,【AI投研邦】在不改變原意的基礎上做了整理和精編。完整分享內容請關注【AI投研邦】會員內容。
歡迎大家來雷鋒網參加我的講座,我本次講座主題是AIOT芯片的發展趨勢與應用落地。首先先自我介紹一下的,我叫高錦煒,是open AI lab的Tengine產品生態總監。我之前是嵌入式的AI技術專家,之前曾在arm擔任技術市場經理,負責arm技術的推廣,所以我之前是屬于芯片行業的,所以對AI芯片這一塊了解比較多,然后現在是投身于AI軟件的應用開發與落地,所以也比較懂應用,因此這次給大家分享這個主題。
這次的主題是AIOT芯片和應用落地,不知道大家看到這個標題怎么想的,其實芯片與應用落地這是跨度非常大的兩件事情,因為芯片是處于技術上面產業鏈上非常上游的技術產品,而商業應用落地則是非常下游的偏商業和工程化的一件事。所以其實兩件事情跨度非常大,我盡量深入淺出給大家解釋清楚當前AI芯片以及落地的一個情況。
首先先給大家解釋一下,AIOT這個詞的話今年應該算是非常熱門的一個詞了,他是AI加LOT的這么一個概念,AI是人工智能,LoT是物聯網,那么Ai+LoT的加起來即,萬物互聯同時的每一個物體它又有一定的AI的智慧能力,能夠進行logo的存儲數據,那么當AI和LoT技術結合起來的時候,看到會有一個技術的大爆發。所以首先先來給大家分享一則今天看到很有意思的新聞,就是哥倫比亞大學一個博士后斯蒂芬J cook,他在他發表1篇論文地刊登在了nature的封面上面,論文的內容是說他花了八年時間手繪繪制了一個現成的神經的圖譜。
其實這是非常有益的一件事情。是因為目前人工智能只是神經網絡這么一個科學,其實它最這背后的科學原理,人們并沒有真正地參透,目前人類只是從工程學的角度發現通過仿生學的神經網絡,通過這種方式去編程,能達到非常好的效果,那么就再去使用了,背后的原理其實一直不清楚。那么這次的話線蟲它的一個特殊點在于就是說它的整體的神經結構非常簡單,它就只有一千個細胞,其中大約1/3也就300個是腦細胞,也就是神經元,然后所有的神經元連接只有7000個,那么其實是一個對我們來說已經是一個比較簡單的神經網。
通過神經網絡結構,300個神經元加7000個神經網絡結構,就控制線蟲它的運動飲食,然后屈光閉光,還有升值等等特性,整個生命的體系就這幾百個神經來控制。那么其實如果說我們能夠通過研究現成的神經系統系統,能夠發現整個神經網絡它運行的奧秘的話,對于整個神經網絡科學的發展是非常有意義的。這個論文的鏈接就我在PPT里放出來了,大家可以直接搜一下,感興趣的話可以讀一下英文原文,我覺得還是非常有意義的。
好,我們來看一下今天的正題。首先的話我想給大家這邊先簡單的科普一下,什么是AI計算?因為AI這個詞的話,如果只是通過簡單的媒體上面來看的話,這個詞應該是一個比較高深的。但是因為我今天分享主題是AI芯片的設計與落地,并且這邊的小編要求我說能夠最好講一些比較技術化的落地接地氣的東西,所以我就只能這邊深入淺出的給大家講介紹一下AI計算原理。
接著之前線蟲的例子說它總共有300多個神經元,7000多個神經鏈接,每一個神經元的話,其實就是在看我PPT里面左上角長成這樣的,大家應該高中或初中生我都學過,就是一個神經元它有很多突觸然后突觸可以接受來自其它神經元的一個新興奮,然后當他接觸到興奮然后并且超過一個閾值的時候,它就會把興奮傳遞給下一個神經元,那么這就是整個神經網絡里面的最基本的一個單元神經元。
其實這是很有意思的一件事情,就是說就通過有成千上萬,甚至上億個這種神經元的這么一個連接,能夠就可以讓人類完成非常復雜的,甚至是思考人生哲理這樣的問題。那么這么好用的神經元方式的話,那么我們這一次我們這一波的人工智能的浪潮里面究竟是如何去仿生和實現功能的基本原理的話,大家可以看我的PPT里面左下角這個圖左下角這個圖,這個公式就是可以看到什么?
這個其實就是一個神經元的數學建模。其實我不太想講公式,但是我相信大家理解這個公式還是非常有必要的!這對理解后面的整體的演講都大家可以看,就是說左下角這個圖里面,我們可以想象成a1到ak其實它都是來自其它神經元的這么一個興奮的傳導。然后WE到WK則是對應的是每個神經元它有一個興奮的一個權重值,那么當你興奮傳導的時候乘以權重值,然后把它累加起來,那么就是神經元接受到了總體的興奮,當神經元它接收到所有興奮的超過它本身有個閾值之后,那么它自己就會產生興奮,并且把這個興奮傳遞下去,那么這是可以看到這個函數最右邊的輸出A值,也就是這邊寫的Z然后通過一個Activation function的方式就是激活函數,當超過某個閾值的時候,它就會輸出A的興奮。
這就是通過以數學的方式來模擬神經元那么那種興奮傳導。那么為什么要等這個公式?因為請大家看一下,就是說這邊Z的計算是通過A乘W1,然后再加上A2乘W2,有非常多的有K個成累加,就是乘法的結果,并且把它累加起來算出那個結果。所以就是說一個神經元它就包含了K個乘累加操作。乘累加這個概念大家一定要記住,因為后面的話會多反復多次提到這個概念。
左下角這個方框只是解釋了說一個神經元,我剛才提到是說我們線蟲它有300多個神經元,并且是相互連接的,那么這個連接,就可以看到我PPT右上角那個圖,這個右上角圖的話是可以看到中間每一個小圓圈,無論是藍色、紅色還是綠色,其實就是一個神經元。這個神經元會接受來自于它左邊那一層的各個神經元的刺激,同時它會傳導出興奮下給它右邊的神經元。
可以看到在這張圖里面的話它有一層一層,每一層有多個神經元,然后通過這種方式就可以產生一個神經元的級聯,它層次非常多,我們管它叫深度,那么這就是深度神經網絡的一個基本的數學模型。可以看到就是說一個神經元它又有K個乘累加,那么有這么多神經元它就會有非常多乘累加。所以右上角這張圖就是代表是神經元級別的一個數學建模,在實際應用場景里面,我們并優化找著這樣的模型,簡單的DNN就是深度神經網絡,實際使用的話,我們都會用復雜多的網絡,那么右下角這張圖其實是從非常經典的,就是這一波人工智能興起的開山鼻祖的論文,里面摘出來的它的網絡結構的拓撲圖。大家可以看到就是說這里面首先它分了很多層,總共有八層三個五個卷積層,三個全列間層,然后參與層之間都是神經元的鏈接,然后每一層都有幾百個神經元,那么整個網絡它總共有60兆,也就是60個百萬的參數。
整個進行這么一次前向計算會有720兆的一個復檢操作。720兆附件操作計算完了之后,他可以做什么?它可以識別,對一張圖像進行分類識別,這是不是一個貓,識別這是不是一個蘋果、一輛自行車、一個汽車等等。就是說這其實是做一個分類操作,是神經網絡里面最簡單的一個操作,因為AlexNet網絡有720兆個Flops的操作,這是非常多的一個計算,那么為什么要強調這個概念?就是因為在神經網絡計算中會有那么多乘累加操作,所以傳統的計算機形態已經不適合去做這樣的運算了。為什么不適合這邊再給大家就說就是720兆,那么假設你用一個1G赫茲的,然后一個周期能做四個乘累加運算的這么一個cpu的話,它要總共去運行180毫秒,他才能夠進行一次前向計算,180毫秒的話差不多如果你算下來就只有六幀的一個識別速度,那么在很多應用場景其實是不滿足需求的。
我相信經過這樣介紹的話,大家應該對神經網絡計算有一個感性的認識,就是兩點,首先它是模仿神經元的,其次它有非常多的乘累加運算。所以這邊就拋出一個基本的概念,就是說傳統芯片和AI芯片它是一個完全不同的計算機建模的方式,由于它的完全不同的計算方式,所以他要完全不同的一種軟硬件去支持。怎么說完全不同,我不知道聽眾里面有多少是計算機體系結構背景的,我是學數字電路和邏輯學計算機體系結構,就是學cpu設計出身的,那么我從大學開始學習的與或非門,通過那種邏輯操作去實現復雜邏輯。
那么大家可以看,就是說在我的PPT里面,左半部分的話基于就是一個傳統的芯片,它最基本的一個計算單元就是非門與門或門,然后通過這樣的邏輯單元,我們去拼接出加法器、乘法器、除法器,或者是存儲器,然后再通過加減乘除的邏輯分支跳轉進行程序的運算,然后通過整個程序的控制,也是通過順序循環分支,大家如果學過C語言C++這種最基本的程序設計方法,從整個計算機結構,從馮諾依曼當年提出計算機理論,也就從40多年起前起,就是一直遵循這套理論,通過順序循環分支的方式來增加復雜度完成各種各樣復雜功能。那么采用這種傳統計算機方式,它的優勢在于它計算精度很高,由于它數字電路去實現的,所以它里面0就是0,1就是1,所以它適合邏輯運算和算術運算。神經網絡計算剛才前面給大家介紹過,他是完全另一套不同的計算方式,它的基本運算單元是一個并行的帶權重的非線性激活的神經元,然后它的編程模型也不是像傳統計算機一樣的順序循環分支,而是一個靠計算圖層的拓樸結構設計,以及里面海量的可調的參數,還記不記得前面AlexNet多少層,他有60兆個參數在里面。
靠著海量參數你去調整,來設計各種神經元進行工作。那么整個編程復雜度也是體現在調參上面,其實有一個比較好笑的,就是說現在做算法的人,他們都會自稱自己是練單式或訓模式,就是在不停的調參數,調參數這件事情又是一個比較玄學的,理論基礎不是非常強的,所以有點靠運氣有點像煉丹一樣。然后神經網絡算法的優點是容錯性很好,像某個審計員工作不正常了,但是由于它有一個比較好的變形機制,這樣的話,它即使一其中某個神經元工作不正常,他仍然能夠很好的work,并且比較適合模式識別。
它有一個特點是說,由于其實按照正常情況來說的話,神經網絡應該是一種非常高效計算模式,因為大家可以想象我們人腦其實也就總共加起來,生物學上也才兩瓦的功率,但是可以進行非常計算復雜。但是在芯片上面去做AI計算,完全不是采用生物這套模式,而是采用傳統計算機還是用與或非門邏輯搭出來的乘法器、乘加器,來模擬神經網絡信號傳輸,這導致了需求算力的爆炸,因為一個神經元我們可能就要有N個乘法乘加操作。
因為有這樣的算力爆炸,所以就有了開發專門的AI芯片需求。這邊的話我給大家放三張圖,分別是CPU、 DSP 、GPU,還有現在在神經網絡處理器里面非常常見的陣列。這三種分別代表了現在去做神經網絡計算這么一個實現構架。
首先先回答一個問題,其實現在大家有個共識,就是說傳統cpu是不怎么合適拿來做AI計算的,這是為什么?其實從原理上來說的話,從圖里面就很容易能夠看到。前面我提到就是說神經網絡計算里面就是有大量的乘加操作,乘加操作在cpu里面的話是由算術這單元去進行運算的,在左下角框里面右上角,由綠色部分AIU去進行乘加操作的,那么一般cpu里面乘加的單元數量,像普通ARM cpu,像比如說cos A72,它里面的話,它成交單元一個周期只能做四個乘與加,但是如果說你做整形的話可能會多一些,你有八位整形的話能做八個。
因為CPU它主要目的是做通用控制,所以你看它花很多的硬件邏輯在控制上面,所以就看到芯片面左邊有藍色,這部分有它很大一部分的控制單元在里面。其實就是說在CPU里面由于有它有大量的邏輯在進行做控制運算,而真正做乘加運算的邏輯部分的綠色部分就很少,導致用CPU去做乘加運算效率不高。所以大家都說坐用CPU去做AI計算不合適,其實大量的服務器PC都是在用GPU做AI計算的,那么看就是中間這張圖。、
GPU的設計特點是有大量的小的單元,簡單的ALU就是綠色部分,有大量的小的單元去做計算。但同時它的控制邏輯會非常小,可以看到左側藍色和黃色部分,所以用GPU做AI計算比CPU高很多,不過大家認為GPU算力很高,其實是只有是桌面級的NV的GPU,它的算率會非常高。
它的算率高是因為NV的gpu里面做了通用設計的進行優化,所以它是可以做通用計算的。那么而如果在嵌入式側的arm的gpu里面,由于它在一個在電源非常緊的一個環境里面,因為手機里面用電池的,所以它的主要功能還是做圖形渲染玩游戲用的,里面有大量邏輯是做圖形的,真正可以用作通用計算的部分的單元其實也沒有非常多。
然后同時由于整體的功耗限制,在arm芯片里面的arm的gpu合同,和同一塊芯片里面另一個CPU,它的算力其實是差不多是一個level的,最多高一倍,但還是一個數量級的這么一個概念。那么其實這邊也剛剛就提到說gpu里面的話它其實有兩個功能,一部分功能可以做通計算,一部分是做圖形處理,那么如果我們拿GPU做通用計算的話,圖形處理這部分的邏輯其實就是浪費了,所以gpu的效率其實也不是最高的。
那么其實現在有一些NPU的設計,專門做神經網站去設計的話,它的一個很簡單出發點邏輯,就是把gpu里面與圖形相關的部分去掉,那么通過這種方式直接把一個GPU改造成一個做AI計算的NPU。用GPU去做AI計算,其實仍然效率不是最高的,因為因為gpu是一個大規模可編程的一個通用計算的單元,并沒有針對AI的這種大規模乘加運算再去做進一步優化。
這邊的話就得要提示說,如果針對AI這種計算剛剛提到大規模的乘加運算,其實最后都可以把它轉化為二維矩陣相乘。矩陣相乘的話,計算方式是采用脈動陣列,即dataflow數據流這種方式,通過設計一堆乘加器來進行計算。好處是它把控制邏輯簡化到了最低,充分利用了矩陣相乘的每個去乘加這么一個特性,那么大幅度簡化了他的控制邏輯,這樣可以導致整個乘加器的效率非常高,你可以看到整個芯片里面幾乎全都是乘加器,控制邏輯就很少。
右邊脈動陣列,假設每一個小方框可以理解成一個乘加器,假設是一個100×100的size的話,它就有1萬個乘加器了。我們再回想一下,剛才我們就八個乘加器.八和一萬就是好幾個數量級的差距。剛剛只是從理論上解釋,現在說一下實際產業里面,AI加速器芯片的話,它是采用哪種方案多?最早AI加速器有些是采用專用電路設計的,可以看到最右上角的數據脈動陣列,像谷歌的GPU一代是采用這種構架的。
由于AI產業一直在變化更新中,所以只解決了卷積并不夠。實際應用行業里面往往會有各種各樣的其他算子,其他算子又會不斷有更新出來,最后要求硬件一定是一個可編程的。所以結合了脈動陣列做卷積這種高效和可編程的需求,那么目前基本上所有的AI加速器的設計已經基本上殊途同歸了,采用兩者結合,一塊芯片里面的既有可編程部分,可以是一個前面提到了把GPU把圖形部分裁剪掉來實現,也可以通過是另一種就是通過DSP的方式來實現。
|