我們儘量不搞大量顯得很牛x的名詞和術語或公式,必要時用一下。(如有謬誤敬請諒解;本文圖片採自網絡)

一,概念

人類的發展從來都是循序漸進的,劃時代的東西出現是比較稀疏的事件,比如說銅器,鐵器,蒸汽,電,互聯網等。阿法狗的事突然激起了萬眾對人工智能的激情,人工智能應該是17、18年的年度詞彙,但人工智能這件事實際上是新瓶裝舊酒。

隨便翻翻看幾件事,計算器,鬧鐘,計算機,機器人,手機等等,凡此種種,這些東西樣樣都符合廣義的人工智能的定義。我們搞技術的有時候也需要搞個新詞來充充門面,來吸引一下關注,或者獲得一些資源,相比來說也還都算剋制的。(行行都有混混,這個不在討論範圍。)

白話人工智能(AI)芯片

我們再進一步看看,如果再特指一下人工智能,代表機器模仿人腦進行信息收集,學習,思考,判斷等等工作,那麼這件事其實也不是新鮮事,也至少有幾十年歷史。再想一步,這些動作之所以能夠做是因為我們有了計算機,以及相應的能模擬人腦的算法。

所謂算法,就是一系列由輸入能得到想要的輸出結果的數學公式(函數),這麼說有些白,但你這麼理解完全沒有問題。而這些基礎的算法,就像我們剛才介紹的,已經存在很久了。我們現在需要做的第一件事,那就是結合應用去優化一下這些基礎公式。順便提一下,不能看見算法兩個字就覺得牛X的不得了,y=x也是一種算法。

而所有包含在人工智能裡的一系列任務中,有兩個大的步驟:一個,‘學習’是其中的重點,意思是根據大量的數據去訓練這些公式,優化這些公式,說的再直白一些就是要通過大量樣本數據確認這些公式的係數,或者根據不同場景改變不同係數,甚至階數,以便算得我們想要的結果。另外一個,就是接下來根據學習的結果,對應用場景的某種輸入進行‘’推斷,從而達到我們需要的某種場景的‘智能化’。參考下圖模型。

白話人工智能(AI)芯片

根據這些算法,以及配上CPU,是不是就可以算人工智能了呢。可以說是的,比如阿法狗(也藉助xPU)。順便提一下,任何這種沒有感情的計算任務,人是不可能贏的了機器的,這是常識,以後不要拿這個打賭。但是,還有一個問題,那就是資源,我們想做一件事情,如果調用大量的CPU,耗費大量的時間和能源,那就不是應用級別的產品。

所以,這就涉及到怎麼把這些學習算法真正的高效的用起來。三種途徑:1.軟件方法,就是類似阿法狗的方法(可軟件的東西比較多,也藉助了xPU);2.可配置的硬件FPGA,就是把算法硬化,隨著算法的升級,重新刷一下硬件;3.硬件加速器,就是把算法做成硬件,改不了了,但是當然了他可以有可配置的係數變量。這幾種方法靈活性遞減,效率遞增

所以,自然的,人工智能芯片的核心就是把一定的算法做成硬件加速器,並且為了合理的劃分加速器單元以及實現加速器的有效使用,投入了很大的精力。

二,幾個關鍵問題

1.首先是算法。先看場景:雖然我們是想構建一個會學習能思考的大腦,但對於不同的應用,我們做一個大而全的東西總是有效率上的問題。這就帶來了一個問題,就是所謂的AI必須結合場景,必須找到自己的賽道。比如圖像識別,語音識別,再比如距離,速度判斷,下圍棋等等應用不一而足,也可以稍誇張點說,我們碰到的所有問題都是數學問題。另外一方面,既然是場景應用,那麼很多即使是顯得比較low的應用,也可以掛個AI的名。

算法的種類很多,分法也很多,如果我們拿神經網絡學習算法說事,就是我們常見的xNN算法。補充一下,我們所有的自然現象都可以用數學公式表達出來,所以我們可以根據我們對人腦的認識(當然現在認識還很簡陋,但也可以湊合用),用一個數學模型表達出來人腦的工作模型,然後通過數據訓練,得到一個相對合理的函數。

白話人工智能(AI)芯片

不同模型參見:

算法是各個AI公司的核心,算法可以複雜或簡單,但完成的效果怎麼樣,這些是考量指標。雖然總體上有參考的東西,一般人也能完成個7/8成的模樣,但最後的20%是考核你是否能達到頂尖水平的部分,畢竟市場上還是頭部企業才能生存啊。

(特別說明:如果搞專業就得去仔細瞭解其中具體的數學意義,物理意義,挺多頭大的公式,當然學會了也可以拿來唬人。)

2.其次就是硬化方法。算法再往下,所有的算法,到機器上,最後的基本單元就是乘和加。怎麼把那麼多的乘和加有機的組合起來,形成有效的算力,起到多快好省的目的,是我們想說的另外一個關鍵點。再具體點,我們常常聽到的GPU、TPU,NPU,BPU,等等xPU,就是基於不同應用(有時是相同應用)搞出來的不同算法,然後根據自己的定位,搞出來的不同硬件。這些硬件往往已經細化到了適應場景的基本的運算單元(已經不是最簡單的乘和加)。

一個算法可以有不同的形式呈現出來,簡單說,可以用不同的語言和相關平臺呈現,比如Fortran,C,Java,Python等等語言,同時,一個算法的數據輸入形式也是不一樣的。所以,相應的這些表達是不能直接用的,需要變成機器識別的東西。所以,無論是用那種硬件xPU,都需要編譯工具把這些代碼編譯到這些可執行的硬件上。打個通常的比喻C編譯到x86類型的CPU上,針對TPU/GPU,也得編譯到適合這樣硬件運行的指令,等等。方法不一樣,但是道理是一樣的。為了效率,必須做這樣的工作。

舉幾個栗子,比如Nvidia以圖像和語音識別為基本場景,採用pascal/volta等演進的硬件架構處理DNN模型,應該說這都還算比較通用的,屬於處理器類的硬件,屬於我們前面說的第一類偏軟的。而Google發佈的TPU是號稱專用的機器學習芯片,這樣的話就屬於我們說的第三類偏硬的。總的說來,都是基於基本硬件單元進行架構,軟和硬是相對的。同樣基於此,也給不同的公司做所謂的差異化提供了空間,也可以有的牛可吹,到底差別多少就要看效果,看人品了。

白話人工智能(AI)芯片

上圖GPU的小綠塊就是基本的計算單元,黃色的是控制邏輯,可以看到可以並行處理很多具體的計算工作。同時,我們觀察到針對不同的算法採用了不同的計算架構,同時還有不同的輸入語言,基於不同的硬件架構,又有不同的編譯軟件,等等。 組合起來就是一個挺多路徑的技術取向。僅作為基本瞭解,下面的圖可以不看。有興趣的可以再看看CUDA,或者TensorFlow等算法實現流程。

另外,像Nvidia、VTA等都將整個流程開源,號稱軟硬件全棧開源。有興趣的可以更多去了解。

白話人工智能(AI)芯片

有一些林林總總的縮寫我們大概的區分一下,有助於您以後理解相關的文章。

算法模型類:DNN/ANN/CNN/SNN

流程類:XLA/LLVM/TVM/NNVM

硬核架構類的:xPU

三,芯片

1.先看看芯片架構。所有基於馮氏GPU架構的SoC芯片長相都差不多,就像人都長得差不多一樣,但人與人之間的差別又是巨大的。下圖中兩種芯片架構的畫法是一樣的,無非或繁或簡,通過架構看芯片性能只能是猶抱琵琶半遮面,真東西在細節。您注意一下我在右邊的總線上掛了一個xPU。

白話人工智能(AI)芯片

上面我們講了AI算法概況,講了怎麼把算法映射到硬件上面,那現在我們講講硬件本身。剛才提到SoC的架構其實差不多,那AI芯片的差別在哪裡?AI芯片也是一個SoC芯片,無非是為了做與算法相關的工作,在SoC芯片中加入了xPU的硬件處理子系統,這個子系統是為了不同的應用設計的,具有不同加速結構的硬核。

下圖中是TPU/GPU子系統的硬件架構圖,而其中的運算部分用紅色框框標出來了,這是不同xPU微結構上的差別。總結的話,算法,編譯,以及下圖的硬件結構是三位一體,互相適應,找到最優解當然最好,但凡事總有tradeoff。比如說,CPU與xPU工作分工的比例,xPU的大小和能力,xPU面向的應用,是不是xNN模型,等等,都可以定義出不同的芯片。算不算AI,算多少,這條從算法到硬件的鏈路上有多少自己的東西,這些由您自己判斷。也許我們可以只判斷是否生意上成功就好,但也需要考慮是否能持續。

白話人工智能(AI)芯片

2.再看看微觀的部分。

我們做芯片總是希望面積越來越小,功耗越來越低,速度越來越快,能力越來越強,多快好省吧。圍繞著這些個目標,我們會有不同策略。

比如小,採用先進工藝,會使芯片面積越來越小,像礦機芯片,本身算法很簡單,為了小就需要不斷的追求新工藝,現在已經到7nm了。

比如快,有人將很多工作用在優化代工廠foundry的標準庫上,達到快和省的目的。再如,有人希望重新採用異步結構的電路設計等等。為了快,從芯片的微架構上進行調整和優化,比如所謂存算一體,減少存儲器的訪問次數和時間,等等。

四,AI場景和物聯網終端芯片

前面我們大致介紹了採用xNN模型的AI芯片的原理和流程。

通常來說,這種芯片是用在中心場景的,需要大的數據運算,完成一個完整的場景。當然除了用在雲上面,手機,車載電腦,或者一些更小的場景等等應該也都屬於這個範疇。從個人看來,對電源沒有特別省電需要的場景下,各種AI芯片可以做的比較複雜一些,處理能力大一些。

此類芯片有很多國際大廠在前面跑,還給你開源,做通用的xPU感覺基本上是非常難以生存的,此類廠家需要結合特定的場景,爭取做到效率高一點點,面積小一點點。

針對於對功耗敏感的場景,尤其是小電池容量的場景,所謂AI只能做到很簡潔,這裡多數算是端的場景。做個簡單的語音識別,指紋識別,這種交互類的,應該也不需要我們前文提到的那麼複雜的流程。當然此類芯片算不算AI,大家自己根據自己的需要進行解說。

在物聯網終端應用場景下面,有很多不同的場景有交互需求,這裡也應當能創造一定的機會。詳細的就不便多說了。

好了,就說到這裡,您是不是和我一樣覺得,這東西並不神祕。不過,任何東西想要搞的漂亮,都有很多艱苦的工作。

相關推薦

推薦中...