1. 程式人生 > >人工智慧(Artificial Intelligence,AI )計算的路線

人工智慧(Artificial Intelligence,AI )計算的路線

人工智慧(Artificial Intelligence),英文縮寫為AI。它是研究開發用於模擬延伸和擴充套件人的智慧的理論、方法、技術及應用系統的一門新的技術科學。

人工智慧是計算機科學的一個分支,它企圖瞭解智慧的實質,並生產出一種新的能以人類智慧相似的方式做出反應的智慧機器,該領域的研究包括機器人、語言識別、影象識別、自然語言處理和專家系統等。人工智慧從誕生以來,理論和技術日益成熟,應用領域也不斷擴大,可以設想,未來人工智慧帶來的科技產品,將會是人類智慧的“容器”。人工智慧可以對人的意識、思維的資訊過程的模擬。人工智慧不是人的智慧,但能像人那樣思考、也可能超過人的智慧。

1993年,當黃仁勳等三個電子工程師在加州聖何塞的一家餐館碰頭準備成立一家圖形處理晶片公司時,他們還不知道20年後,他們做的這個晶片還能用來做人工智慧、自動駕駛。

1985年,Xilinx創始人之一Ross Freeman發明FPGA晶片的時候,他也不會想到近30年後,FPGA晶片會被廣泛應用於人工智慧領域的計算。黃仁勳還能親自帶領NVIDIA參加人工智慧晶片大戰,而Ross Freeman在1989年年僅41歲就因肺炎不幸早逝。

目前人工智慧的產業重心,已經從早期的深度學習演算法和框架,轉到了AI硬體平臺。Google開發出專用的AI晶片——TPU,如下圖。

可是,另一個巨頭微軟卻全面擁抱FPGA作為AI計算平臺。同時,亞馬遜和百度也是FPGA路線。百度在一個電路板上集成了CPU、GPU和FPGA,稱為“XPU”。亞馬遜的雲服務提供F1加速平臺,提供FPGA計算加速。

微軟為什麼選擇FPGA

下圖是微軟的FPGA擴充套件卡,叫做DPU,“Soft DNN Processing Unit”。

微軟FPGA戰略是成體系的,包括三個主要部分:

1. FPGA擴充套件卡能夠互聯、擴充套件,同時融入到資料中心服務中去,提供高頻寬、低延遲的加速服務;

2. FPGA是可程式設計的,方便使用者開發自己的程式;

3. 微軟為自己的神經網路模型CNTK提供了編譯器和開發環境。

為什麼微軟選擇了FPGA?因為微軟和Google是兩種不同的基因,Google喜歡嘗試新技術,所以自然要用TPU去追求最高的效能。但是,微軟是一家商業文化很重的公司,選擇一個方案看的是價效比和商業價值。做專用晶片儘管很炫,但是是否真的值得?

做晶片主要的缺點是投資大、時間週期長,晶片做好后里面的邏輯就不能修改。人工智慧的演算法一直在快速迭代,而做晶片至少要一兩年的時間,意味著只能支援舊的架構和演算法。如果晶片想要支援新的演算法,就要做成通用型,提供指令集給使用者程式設計,通用性又會降低效能,增加功耗,因為有些功能是浪費的。所以不少晶片公司儘管做了晶片,但是很多產品還是FPGA做的,比如位元大陸的挖礦機,晶片做出來就已經無法支援新的挖礦演算法了。

阿呆8年前在微軟亞洲研究院參與用FPGA+Open Channel SSD加速Bing搜尋引擎的研究,那個時候FPGA做機器學習效能已經可以甩CPU幾條大街了,同時還能節省購買伺服器的成本,降低散熱、土地等成本。所以微軟選擇FPGA是基於商業考慮和長期積累和探索的經驗。

CPU、GPU、ASIC和FPGA橫向對比

我們現在常見的硬體計算平臺包括CPU、GPU、ASIC和FPGA。CPU是最通用的,有成熟的指令集,例如X86、ARM、MIPS、Power等,使用者只要基於指令集開發軟體就能使用CPU完成各種任務。但是,CPU的通用性決定了計算效能是最差的,在現代計算機中,很多計算都需要高度的並行和流水線架構,但是,CPU儘管流水線很長,計算核心數最多隻有幾十個,並行度不夠。比如看一個高清視訊,那麼多畫素要並行渲染,CPU就拖後腿了。

GPU克服了CPU並行度不夠的缺點,把幾百上千個平行計算核心堆到一個晶片裡,使用者用GPU的程式語言,比如CUDA、OpenCL等就可以開發程式用GPU來加速應用。但是,GPU也有嚴重的缺點,就是最小單元是計算核心,還是太大了。在計算機體系結構中,有一個很重要的概念就是粒度,粒度越細,就意味著使用者可以發揮的空間越多。就跟蓋樓一樣,如果用小小的磚頭,可以做出很多漂亮的造型,但是建設時間久,如果用混凝土預製件,很快就蓋好大樓了,可是樓的樣式就受到限制。如下圖,就是預製件蓋樓,搭積木一樣,很快,可是都長得差不多,想蓋的別的樓就不行。

ASIC克服了GPU粒度太粗的缺點,能讓使用者從電晶體級開始自定義邏輯,最後交給晶片代工廠生產出專用晶片。不管是效能還是功耗,都比GPU好很多,畢竟從最底層開始設計,沒有浪費的電路,而且追求最高的效能。但是ASIC也有很大的缺點:投資大、開發週期長、晶片邏輯不能修改。現在做一款大規模晶片,至少需要幾千萬到幾億的投資,時間週期一兩年左右,尤其是AI晶片,沒有通用IP,很多要自己開發,時間週期更久。晶片做好後,如果有大問題或者功能升級(有些小問題可以通過預留的邏輯修改金屬層連線解決),還不能直接修改,而要重新修改版圖,交付工廠流片。

所以,最後就回到了FPGA:兼顧ASIC計算粒度細和GPU可程式設計的優點。FPGA的計算粒度很細,可以到與非門級別,但是邏輯還能修改,是可程式設計的。

FPGA入門

我們上大學學計算機,首先學習的基礎知識是布林代數,從與非門等邏輯閘出發,可以搭出加法器、乘法器等數字邏輯,最後一級級組合,實現很複雜的計算功能(阿呆這裡八卦一下,深度學習的泰斗Hinton教授是布林的孫子的兒子)。在ASIC裡面,與非門通過電晶體實現,但是電晶體無法做到可程式設計,必須要做成版圖,送到晶片代工廠生產才能用。那怎樣做到數字邏輯也能可程式設計呢?我們都知道,數字邏輯可以用真值表來表示,如下圖就是與非門的真值表。

FPGA的發明人想了一個辦法,就是用一個查詢表來儲存真值表的輸出結果。如下圖就是一個3bit的異或門查詢表,3bit一共是8個狀態,查詢表儲存了每個狀態的結果,輸入的3個bit作為索引,直接從表裡讀到計算結果,通過一個選擇開關輸出。這樣避免了搭建計算邏輯,同時簡化了晶片結構,只需要在晶片裡面放許許多多的查詢表,大家一起級聯和組合就能實現複雜的邏輯和計算。目前主流的FPGA採用SRAM工藝,就是把查詢表的狀態都儲存在SRAM裡面,

但是,僅僅有查詢表是不夠的,數字積體電路的根是時鐘,所有的邏輯按照時鐘節拍來同步。舉個例子,幾個流氓打群架,是沒有章法的,但是幾萬人的大軍作戰,如果還是各打各的,就發揮不了群體的優勢。比如士兵與士兵之間如何配合?連與連之間如何分工合作?大軍作戰需要講究陣法,中國古代的戰神們就熟讀兵書,會用八卦陣、長蛇陣等陣法,按照統一的號令指揮大軍作戰,無往不利。比如,法正和黃忠搭配,在定軍山對山擺好陣勢,法正站在山頂舉令旗指揮,在他的號令下,最終老將黃忠把悍將夏侯淵劈作兩半,就是靠陣法以弱勝強的例子。FPGA裡面有幾十萬甚至百萬個查詢表,需要統一的號令來行動,這就是時鐘。

下圖是FPGA內部的基本單元,查詢表+D觸發器+選擇開關。D觸發器用來儲存,查詢表是組合邏輯。每個時鐘週期會輸出一個值,通過選擇開關來選擇用查詢表還是D觸發器。

如果你看明白了上面FPGA的基本單元,你就理解了數位電路的基礎——RTL,Register Transfer Level,暫存器傳輸級。數位電路包含兩個基本部分:組合邏輯和時序邏輯,組合邏輯就是我們前面講的布林代數,可以做邏輯運算,但是沒有記憶功能,上圖中的查詢表就是起了組合邏輯的作用。時序邏輯是帶有記憶功能,可以按照時鐘節拍控制輸入輸出,上圖中的D觸發器起了記憶功能,我們叫做暫存器。這樣,組合邏輯和時序邏輯結合起來,我們就可以從這個層面設計大規模數位電路,叫做RTL設計,就是說從組合邏輯和時序邏輯級別來設計複雜的計算系統。

FPGA如何實現可程式設計?

那麼問題來了,FPGA怎麼實現可程式設計?如果要控制上面的基本單元,需要存好查詢表的幾個狀態值,比如4輸入查詢表,就要存16bit,同時要存1個組合邏輯的選擇bit和1個D觸發器初始值bit。FPGA把這些配置資料儲存在SRAM裡面,並配置到每個基本單元中,通過寫自定義資料到SRAM,就實現了對整個FPGA邏輯的可程式設計。

有了上面的基本邏輯單元還不夠,多個基本邏輯怎麼級聯?級聯的連線部分怎麼可程式設計?

下圖是FPGA內邏輯塊之間互聯的結構圖。邏輯塊的輸入輸出通過連線塊Connection Block CB和交換塊結合級聯到其他的邏輯塊,連線塊決定邏輯塊的訊號連到哪根連線線上,交換塊決定哪些連線線是通的,把邏輯塊需要的訊號連到相鄰的邏輯塊。連線塊和交換塊都是可以基於SRAM方法程式設計的,連線塊裡面是一些選擇開關,交換塊裡面是一些交換器。

看得出來,連線線遠比邏輯塊更復雜,在現代FPGA晶片中,連線一般佔了90%的面積,真正的邏輯部分只有10%左右面積。

FPGA的擴充套件資源

FPGA裡面只是上面的組合邏輯是不夠的,因為使用者有時候不想自己搭邏輯,有些常用的邏輯希望直接用現成的。所以現代FPGA自帶了很多常用的計算單元,比如加法器、乘法器、片上RAM,甚至嵌入式CPU,它們不是通過查詢表搭的,而是跟ASIC一樣,用電晶體搭成,這樣更省芯片面積,同時效能更好。這些計算單元可以讓使用者配置和組合。

比如,深度學習中會使用大量的乘法器,這個時候,FPGA內部提供很多乘法器就發揮了很大的作用,這些乘法器和使用者邏輯結合,可以實現很多人工智慧計算,並達到高效能。

本文來源於 http://m.elecfans.com/article/691499.html