現在說AI是未來人類技術進步的一大方向,相信大家都不會反對。說到AI和晶片技術的關係,我覺得主要體現在兩個方面:第一,AI的發展要求晶片技術不斷進步;第二,AI可以幫助晶片技術向前發展。
AI將成為晶片技術的主要驅動力
人工智慧,特別是深度學習,這幾年爆發性的發展,很大程度上得益於晶片技術多年的積累。如果不是晶片技術已經發展到了一定的高度,能夠給大規模的機器學習提供足夠的處理能力,我們肯定看不到戰勝人類頂尖棋手的AlphaGo。可以說,過去十幾年驅動晶片技術發展的主要是通訊,多媒體和智慧手機這些應用。不誇張的說,是蘋果在趕著晶片產業往前跑。而隨著這些應用增長放緩,相信未來趕著我們向前跑的主要會是各種AI的需求。當然,即使沒有AI,晶片技術也會發展。這裡我想和大家分享幾個例子,個人感覺AI的驅動效應在這些技術上會有更明顯的體現。
異構計算(Heterogeneous Computing)
按照Wikipedia的定義“Heterogeneous computing refers to systems that use more than one kind of processor or cores. These systems gain performance or energy efficiency not just by adding the same type of processors, but by adding dissimilar coprocessors, usually incorporating specialized processing capabilities to handle particular tasks”。首先,異構計算中使用多種型別的處理器是為了能夠更好的提升整個並行處理系統的效率。比如下圖就是高通的Snapdragon 820晶片的框圖,可以看出它包括了各種型別的處理器和硬體加速器。這還沒包括軟體棧的複雜度。
同時,異構計算又面臨更多的挑戰“The presence of multiple processing elements raises all of the issues involved with homogeneous parallel processing systems, while the level of heterogeneity in the system can introduce non-uniformity in system development, programming practices, and overall system capability.” 簡單來說也就是不一致性帶來諸多問題。對於異構計算,Nvidia和AMD最早提出了一些標準的方法,主要面向在CPU+GPU的系統,比如CUDA和OpenCL。
目前來看,神經網路的Training使用CPU+GPU的硬體平臺比較理想。而對於這類系統,Nvidia的CUDA已經做的很不錯了。但對於一個Inference硬體平臺來說,異構計算要複雜的多,除了CPU,GPU,系統裡很可能還會有DSP,ASP,硬體加速器和FPGA這些硬體模組,以及相應的韌體和軟體。在這種環境下,如何有效的發揮各類硬體的效率,提供統一易用的程式設計模型和軟體介面,就是個很大的問題。之前的很多嘗試,比如OpenCL,HSA(Heterogeneous System Architecture) Foundation,都沒能真正解決這個問題。而這個問題能不能解決,既是技術挑戰,也有利益上的角力。Intel,Nvidia,AMD,Qualcomm,ARM都有自己的算盤,都想推自己的標準。不管怎樣,在AI應用的驅動下,硬體平臺的多樣性和效率要求的挑戰會越來越明顯。整個產業對AI的熱情能不能推動這個問題的解決,很值得關注。
DSC和DSA(Domain-Specific Computing/Architecture)
在最近的一個演講中,當回答“請問除了之前演講中提到的以外,還有哪些處理器領域的未來趨勢是值得關注的?”這一問題時,計算機體系結構宗師David Patterson說到,“我認為未來之星是深度學習領域的DSA處理器。深度學習的重要性我想在座的都很清楚。另外,使用更高階的設計描述語言,例如Chisel,來加速設計,也會成為趨勢。”我個人一直關注DSC領域,也基本同意Patterson的看法(Chisel的部分我不予置評)。道理也很簡單,神經網路處理是一個新興的特殊domain,而且是一個有足夠體量來支援專門的方法學的domain。換句話說,在這個領域我們值得投入資源來實現一套完善的方法學,一旦成功會有巨大的回報。同時,這條路還很長,我們也還有足夠的時間這麼做。
不過,Domain-Specific Computing這個方向的提出也不是一天兩天了,要實現它的願景,確實需要做大量的工作。它是一整套方法學,需要從設計語言到模型和工具的多方面支援。雖說我們都知道“工欲善其事,必先利其器”的道理,但在實踐中,我們很多時候並沒有這個耐心。希望AI能給這個“看起來很美”的方法學一個有力的推動吧。
Dataflow VS Controlflow
嚴格的說,Dataflow架構本來是計算機體系結構中實現平行計算的一種軟硬體架構。有自己一套完整的方法學。下圖摘自Shaaban教授的課程[2], 就是dataflow architecture的一個概述。
但是,如果我們看這種架構的主要特徵:1. 沒有PC(Program Counter),也就是說沒有複雜的程式流控制;2. 節點的處理由運算元(availability of operands)啟用。簡單來說這種架構是資料驅動的。這一點和深度神經網路Inference的需求是非常一致的,因為神經網路是分層順序處理的,有大量的資料處理,但不需要複雜的控制流程。這也是為什麼我們現在看到的很多神經網路加速器的主要工作都放在了資料流的最佳化上。[1]中就指出“For spatial architectures used in accelerators, we will discuss how dataflows can increase data reuse from low cost memories in the memory hierarchy to reduce energy consumption.” GoogleTPU的脈動陣列架構,雖然並不是個嚴格意義上的Dataflow Machine,但它也可是認為dataflow驅動的設計。
同時,Dataflow programming也是一種重要的程式設計模型。用Wikipedia的說法,就是“dataflow programming is a programming paradigm that models a program as a directed graph of the data flowing between operations, thus implementing dataflow principles and architecture. ”。而我們知道,Google的TensorFlow深度學習框架就是一個“open source software library for numerical computation using data flow graphs”.
另外一個例子是做深度神經網路加速的Startup公司,Wave Computing(同時指出cloud的training和inference)[2],把他們的架構稱作“A Coarse Grain Reconfigurable Array (CGRA) for Statically Scheduled Data Flow Computing” 。具體來講,“Wave uses a data flow computing on a hybrid coarse grain/fine grain reconfigurable array (CGRA) of processors in a Wave dataflow processing unit (DPU). In this model, data flows between software kernels, which are called data flow agents. Each agent is compiled and statically scheduled across a reconfigurable array of data flow processing elements. The entire data flow computation is managed autonomously by the agents without the need for the control or memory of a host CPU. ”
總的來說,dataflow驅動是深度神經網路的一大特點。因此在設計神經網路處理器的時候,其硬體架構和程式設計模型採用這些比較特殊的dataflow架構也是自然的選擇。而目前很多神經網路硬體加速器的設計,也都借鑑了脈動陣列,CGRA(Coarse-Grain Reconfigurable Architecure)這些“古老”的技術。實際上,我們現在需要解決的問題(比如卷積運算的加速),並不是一個全新的問題,前人已經有了很完整的研究。雖然AI是個全新的應用,但它卻給了很多老的架構和技術新的機會。這也是一個很有意思的現象。
Clockless設計
在Wave Computing的設計中還有一個很有意思的地方,就是採用了Clockless CGRA Synchronization,從而實現了“In the large-scale CGRA, data flows between clusters of PEs at a nominal frequency of 6.7 GHz without the need for FIFOs used in other Globally Asynchronous Locally Synchronous(GALS) schemes”。
Clockless(或者叫asynchronous circuit, or self-timed circuit)設計採用握手訊號(handshaking)而不是clock訊號來實現模組間的同步,從而擺脫傳統IC設計中Clock tree的束縛,實現更低的功耗或者更快的處理。2006年的時候,當時的飛利浦電子孵化的一個startup(Handshake Solutions NV)實現了一個clockless的ARM9處理器。下圖摘自[4],對比了clocked和clockless電路。
但是,由於這種方法的特殊性,在缺乏EDA工具支援的情況下很難在大規模的晶片設計中實現,所以一直也沒有很多應用。不知道在未來的專用神經網路處理器中,特別是在要求極低功耗的可穿戴應用中是不是又會看到它的身影。
Near-Data Processing和先進儲存器
把深度神經網路的Inference放到離資料來源更近的地方,可以降低整個系統的複雜度,減少不必要的資料搬移,從而最佳化功耗和成本。其中PIM(Processing in Memory)主要是把處理直接放在儲存單元的位置,這需要在電路(模擬訊號)的層面重新設計儲存器。而把處理放在sensor當中也是一大趨勢,這裡既可以是直接在sensor中用模擬或者混合訊號電路做一些處理,也可以是在傳統的ISP中增加智慧處理的功能。下圖就是直接在memory cell做乘法和乘加的方法。[1]
同時,新型儲存器技術也一直是研究的熱點。而由於神經網路處理的瓶頸往往在於儲存器,相信新的儲存器技術會首先在神經網路應用中得到應用。比如,embedded DRAM (eDRAM)已經在一些神經網路處理器中被應用;而3D Memory(比如Hyper Memory Cube (HMC))的高頻寬和低功耗特性也很有吸引力。[1]
另外,目前的深度神經網路模型對“記憶”的要求越來越高,從RNN,到LSTM/GRU的“短期記憶”,到Memory Network,Neural Turing Machine和Differentiable neural computers[5]。
神經網路已經開始使用更大範圍的外部儲存空間(external memory)實現“長期記憶”。這也意味著對於新型儲存以及新的訪存機制有更多的挑戰和機會。
模擬和混合訊號設計
在今年的ISSCC會議上我們看到了幾個使用模擬和混合電路的例子。比如超低功耗人臉識別處理器就用了類比電路實現Haar-like人臉檢測。還有一些工作,也使用的定製電路和類比電路實現特殊的儲存器設計。而模擬和混合訊號設計往往可以和上面說的Near-Data Processing相結合,比如在影像sensor的模擬部分實現CNN處理或者其它一些演算法。這部分我是外行,只是感覺也有不少可做的地方,希望內行人多給意見。
FPGA器件和工具
我從2000年開始用FPGA,一直把FPGA作為晶片驗證的手段,而非直接的產品。但隨著深度神經網路需求的爆發,FPGA作為inference的平臺表現出很好的特性(靈活性和效率的平衡),在很多場景可以直接為應用服務。因此,可以預見,我們可以在FPGA領域看到快速的發展。首先,FPGA器件(Xilinx和Intel/Altera是主要供應商)本身的功能會越來越強大。Xilinx最新的高階FPGA已經是一個非常複雜的SOC平臺了,除了傳統的FPGA電路,還整合了多核CPU,硬體的影片編解碼功能,DDR介面,PCIe介面等等,很適合做大規模的inference應用。
另一方面,不管是Xilinx還是Intel,都在改進FPGA的軟體開發環境,試圖對深度學習提供更好的支援。比如,下圖所示的Xilinx reVISION Stack。
晶片製造和先進工藝
上面我討論的主要是晶片設計技術。晶片製造和工藝在AI環境的發展趨勢也是個重要的話題。比如前面提到的PIM和新型儲存器就和工藝關係很大。不過這方面我不是很熟悉,就不在這裡妄加評論了。
AI應用於晶片設計和生產
如果說AI應用會“逼著”晶片技術向前發展,它同時也會在很大程度上幫助晶片技術向前發展。深度神經網路強大之處在於,透過對大量資料進行學習,可以自己對問題(或應用)進行建模、提取feature或者作出判斷。從某種程度上說,它已經強大到我們無法理解的程度了(或者說它和我們人類獲取知識的方式並不相同)。而晶片設計和製造(工藝),都是建立在大量資料以及複雜的模型的基礎之上的。利用神經網路的優勢幫助我們提高晶片設計和製造技術是自然而然的思路。另一方面,晶片設計和製造又是高度依賴自動化設計工具的領域,這些EDA工具中很多環節的演算法也都有可能透過和AI結合來獲得更好的效果,或者提高生產效率。
舉個簡單的例子,大家都知道晶片的軟硬體debug是一件頭疼的事情,需要從大量現象中尋找線索,還需要結合長期的經驗。是否以後可以讓AI替我們“診斷”晶片出現的問題呢?就像現在神經網路表現很好的醫療領域一樣。
所以說,AI應用於晶片設計和生產,是有很大的想象空間的。至於具體的腦洞,也歡迎大家和我討論。
總之,AI一定會對晶片技術和產業帶來深刻的影響。如果哪位讀者看了這篇文章,發現了新的機會,請別忘了給我發紅包啊。
T.S.
END
參考:
1. Vivienne Sze, Yu-Hsin Chen, Tien-Ju Yang, Joel Emer, "Efficient Processing of Deep Neural Networks: A Tutorial and Survey",arxiv.org/pdf/1703.09039.pdf
2. Dr. Chris Nicol, Chief Technology Officer, Wave Computing,"A Coarse Grain Reconfigurable Array (CGRA) for Statically Scheduled Data Flow Computing"
3. Muhammad E. Shaaban,"cmpe655-spring2017, Multiple Processor Systems"
4. Jens Sparsø,Technical University of Denmark,"Asynchronous circuit design A Tutorial"
5. Alex Graves1, et al., "Hybrid computing using a neural network with dynamic external memory"