AI計(jì)算的幾條路線
1993年,當(dāng)黃仁勛等三個(gè)電子工程師在加州圣何塞的一家餐館碰頭準(zhǔn)備成立一家圖形處理芯片公司時(shí),他們還不知道20年后,他們做的這個(gè)芯片還能用來做人工智能、自動(dòng)駕駛。
1985年,Xilinx創(chuàng)始人之一Ross Freeman發(fā)明FPGA芯片的時(shí)候,他也不會(huì)想到近30年后,F(xiàn)PGA芯片會(huì)被廣泛應(yīng)用于人工智能領(lǐng)域的計(jì)算。黃仁勛還能親自帶領(lǐng)NVIDIA參加人工智能芯片大戰(zhàn),而Ross Freeman在1989年年僅41歲就因肺炎不幸早逝。
目前人工智能的產(chǎn)業(yè)重心,已經(jīng)從早期的深度學(xué)習(xí)算法和框架,轉(zhuǎn)到了AI硬件平臺(tái)。Google開發(fā)出專用的AI芯片——TPU,如下圖。
可是,另一個(gè)巨頭微軟卻全面擁抱FPGA作為AI計(jì)算平臺(tái)。同時(shí),亞馬遜和百度也是FPGA路線。百度在一個(gè)電路板上集成了CPU、GPU和FPGA,稱為“XPU”。亞馬遜的云服務(wù)提供F1加速平臺(tái),提供FPGA計(jì)算加速。
微軟為什么選擇FPGA
下圖是微軟的FPGA擴(kuò)展卡,叫做DPU,“Soft DNN Processing Unit”。
微軟FPGA戰(zhàn)略是成體系的,包括三個(gè)主要部分:
1. FPGA擴(kuò)展卡能夠互聯(lián)、擴(kuò)展,同時(shí)融入到數(shù)據(jù)中心服務(wù)中去,提供高帶寬、低延遲的加速服務(wù);
2. FPGA是可編程的,方便用戶開發(fā)自己的程序;
3. 微軟為自己的神經(jīng)網(wǎng)絡(luò)模型CNTK提供了編譯器和開發(fā)環(huán)境。
為什么微軟選擇了FPGA?因?yàn)槲④浐虶oogle是兩種不同的基因,Google喜歡嘗試新技術(shù),所以自然要用TPU去追求最高的性能。但是,微軟是一家商業(yè)文化很重的公司,選擇一個(gè)方案看的是性價(jià)比和商業(yè)價(jià)值。做專用芯片盡管很炫,但是是否真的值得?
做芯片主要的缺點(diǎn)是投資大、時(shí)間周期長(zhǎng),芯片做好后里面的邏輯就不能修改。人工智能的算法一直在快速迭代,而做芯片至少要一兩年的時(shí)間,意味著只能支持舊的架構(gòu)和算法。如果芯片想要支持新的算法,就要做成通用型,提供指令集給用戶編程,通用性又會(huì)降低性能,增加功耗,因?yàn)橛行┕δ苁抢速M(fèi)的。所以不少芯片公司盡管做了芯片,但是很多產(chǎn)品還是FPGA做的,比如比特大陸的挖礦機(jī),芯片做出來就已經(jīng)無法支持新的挖礦算法了。
阿呆8年前在微軟亞洲研究院參與用FPGA+Open Channel SSD加速Bing搜索引擎的研究,那個(gè)時(shí)候FPGA做機(jī)器學(xué)習(xí)性能已經(jīng)可以甩CPU幾條大街了,同時(shí)還能節(jié)省購買服務(wù)器的成本,降低散熱、土地等成本。所以微軟選擇FPGA是基于商業(yè)考慮和長(zhǎng)期積累和探索的經(jīng)驗(yàn)。
CPU、GPU、ASIC和FPGA橫向?qū)Ρ?/p>
我們現(xiàn)在常見的硬件計(jì)算平臺(tái)包括CPU、GPU、ASIC和FPGA。CPU是最通用的,有成熟的指令集,例如X86、ARM、MIPS、Power等,用戶只要基于指令集開發(fā)軟件就能使用CPU完成各種任務(wù)。但是,CPU的通用性決定了計(jì)算性能是最差的,在現(xiàn)代計(jì)算機(jī)中,很多計(jì)算都需要高度的并行和流水線架構(gòu),但是,CPU盡管流水線很長(zhǎng),計(jì)算核心數(shù)最多只有幾十個(gè),并行度不夠。比如看一個(gè)高清視頻,那么多像素要并行渲染,CPU就拖后腿了。
GPU克服了CPU并行度不夠的缺點(diǎn),把幾百上千個(gè)并行計(jì)算核心堆到一個(gè)芯片里,用戶用GPU的編程語言,比如CUDA、OpenCL等就可以開發(fā)程序用GPU來加速應(yīng)用。但是,GPU也有嚴(yán)重的缺點(diǎn),就是最小單元是計(jì)算核心,還是太大了。在計(jì)算機(jī)體系結(jié)構(gòu)中,有一個(gè)很重要的概念就是粒度,粒度越細(xì),就意味著用戶可以發(fā)揮的空間越多。就跟蓋樓一樣,如果用小小的磚頭,可以做出很多漂亮的造型,但是建設(shè)時(shí)間久,如果用混凝土預(yù)制件,很快就蓋好大樓了,可是樓的樣式就受到限制。如下圖,就是預(yù)制件蓋樓,搭積木一樣,很快,可是都長(zhǎng)得差不多,想蓋的別的樓就不行。
ASIC克服了GPU粒度太粗的缺點(diǎn),能讓用戶從晶體管級(jí)開始自定義邏輯,最后交給芯片代工廠生產(chǎn)出專用芯片。不管是性能還是功耗,都比GPU好很多,畢竟從最底層開始設(shè)計(jì),沒有浪費(fèi)的電路,而且追求最高的性能。但是ASIC也有很大的缺點(diǎn):投資大、開發(fā)周期長(zhǎng)、芯片邏輯不能修改?,F(xiàn)在做一款大規(guī)模芯片,至少需要幾千萬到幾億的投資,時(shí)間周期一兩年左右,尤其是AI芯片,沒有通用IP,很多要自己開發(fā),時(shí)間周期更久。芯片做好后,如果有大問題或者功能升級(jí)(有些小問題可以通過預(yù)留的邏輯修改金屬層連線解決),還不能直接修改,而要重新修改版圖,交付工廠流片。
所以,最后就回到了FPGA:兼顧ASIC計(jì)算粒度細(xì)和GPU可編程的優(yōu)點(diǎn)。FPGA的計(jì)算粒度很細(xì),可以到與非門級(jí)別,但是邏輯還能修改,是可編程的。
FPGA入門
我們上大學(xué)學(xué)計(jì)算機(jī),首先學(xué)習(xí)的基礎(chǔ)知識(shí)是布爾代數(shù),從與非門等邏輯門出發(fā),可以搭出加法器、乘法器等數(shù)字邏輯,最后一級(jí)級(jí)組合,實(shí)現(xiàn)很復(fù)雜的計(jì)算功能(阿呆這里八卦一下,深度學(xué)習(xí)的泰斗Hinton教授是布爾的孫子的兒子)。在ASIC里面,與非門通過晶體管實(shí)現(xiàn),但是晶體管無法做到可編程,必須要做成版圖,送到芯片代工廠生產(chǎn)才能用。那怎樣做到數(shù)字邏輯也能可編程呢?我們都知道,數(shù)字邏輯可以用真值表來表示,如下圖就是與非門的真值表。
FPGA的發(fā)明人想了一個(gè)辦法,就是用一個(gè)查找表來存儲(chǔ)真值表的輸出結(jié)果。如下圖就是一個(gè)3bit的異或門查找表,3bit一共是8個(gè)狀態(tài),查找表保存了每個(gè)狀態(tài)的結(jié)果,輸入的3個(gè)bit作為索引,直接從表里讀到計(jì)算結(jié)果,通過一個(gè)選擇開關(guān)輸出。這樣避免了搭建計(jì)算邏輯,同時(shí)簡(jiǎn)化了芯片結(jié)構(gòu),只需要在芯片里面放許許多多的查找表,大家一起級(jí)聯(lián)和組合就能實(shí)現(xiàn)復(fù)雜的邏輯和計(jì)算。目前主流的FPGA采用SRAM工藝,就是把查找表的狀態(tài)都保存在SRAM里面,
但是,僅僅有查找表是不夠的,數(shù)字集成電路的根是時(shí)鐘,所有的邏輯按照時(shí)鐘節(jié)拍來同步。舉個(gè)例子,幾個(gè)流氓打群架,是沒有章法的,但是幾萬人的大軍作戰(zhàn),如果還是各打各的,就發(fā)揮不了群體的優(yōu)勢(shì)。比如士兵與士兵之間如何配合?連與連之間如何分工合作?大軍作戰(zhàn)需要講究陣法,中國(guó)古代的戰(zhàn)神們就熟讀兵書,會(huì)用八卦陣、長(zhǎng)蛇陣等陣法,按照統(tǒng)一的號(hào)令指揮大軍作戰(zhàn),無往不利。比如,法正和黃忠搭配,在定軍山對(duì)山擺好陣勢(shì),法正站在山頂舉令旗指揮,在他的號(hào)令下,最終老將黃忠把悍將夏侯淵劈作兩半,就是靠陣法以弱勝強(qiáng)的例子。FPGA里面有幾十萬甚至百萬個(gè)查找表,需要統(tǒng)一的號(hào)令來行動(dòng),這就是時(shí)鐘。
下圖是FPGA內(nèi)部的基本單元,查找表+D觸發(fā)器+選擇開關(guān)。D觸發(fā)器用來存儲(chǔ),查找表是組合邏輯。每個(gè)時(shí)鐘周期會(huì)輸出一個(gè)值,通過選擇開關(guān)來選擇用查找表還是D觸發(fā)器。
如果你看明白了上面FPGA的基本單元,你就理解了數(shù)字電路的基礎(chǔ)——RTL,Register Transfer Level,寄存器傳輸級(jí)。數(shù)字電路包含兩個(gè)基本部分:組合邏輯和時(shí)序邏輯,組合邏輯就是我們前面講的布爾代數(shù),可以做邏輯運(yùn)算,但是沒有記憶功能,上圖中的查找表就是起了組合邏輯的作用。時(shí)序邏輯是帶有記憶功能,可以按照時(shí)鐘節(jié)拍控制輸入輸出,上圖中的D觸發(fā)器起了記憶功能,我們叫做寄存器。這樣,組合邏輯和時(shí)序邏輯結(jié)合起來,我們就可以從這個(gè)層面設(shè)計(jì)大規(guī)模數(shù)字電路,叫做RTL設(shè)計(jì),就是說從組合邏輯和時(shí)序邏輯級(jí)別來設(shè)計(jì)復(fù)雜的計(jì)算系統(tǒng)。
FPGA如何實(shí)現(xiàn)可編程?
那么問題來了,F(xiàn)PGA怎么實(shí)現(xiàn)可編程?如果要控制上面的基本單元,需要存好查找表的幾個(gè)狀態(tài)值,比如4輸入查找表,就要存16bit,同時(shí)要存1個(gè)組合邏輯的選擇bit和1個(gè)D觸發(fā)器初始值bit。FPGA把這些配置數(shù)據(jù)保存在SRAM里面,并配置到每個(gè)基本單元中,通過寫自定義數(shù)據(jù)到SRAM,就實(shí)現(xiàn)了對(duì)整個(gè)FPGA邏輯的可編程。
有了上面的基本邏輯單元還不夠,多個(gè)基本邏輯怎么級(jí)聯(lián)?級(jí)聯(lián)的連接部分怎么可編程?
下圖是FPGA內(nèi)邏輯塊之間互聯(lián)的結(jié)構(gòu)圖。邏輯塊的輸入輸出通過連接塊Connection Block CB和交換塊結(jié)合級(jí)聯(lián)到其他的邏輯塊,連接塊決定邏輯塊的信號(hào)連到哪根連接線上,交換塊決定哪些連接線是通的,把邏輯塊需要的信號(hào)連到相鄰的邏輯塊。連接塊和交換塊都是可以基于SRAM方法編程的,連接塊里面是一些選擇開關(guān),交換塊里面是一些交換器。
看得出來,連接線遠(yuǎn)比邏輯塊更復(fù)雜,在現(xiàn)代FPGA芯片中,連線一般占了90%的面積,真正的邏輯部分只有10%左右面積。
FPGA的擴(kuò)展資源
FPGA里面只是上面的組合邏輯是不夠的,因?yàn)橛脩粲袝r(shí)候不想自己搭邏輯,有些常用的邏輯希望直接用現(xiàn)成的。所以現(xiàn)代FPGA自帶了很多常用的計(jì)算單元,比如加法器、乘法器、片上RAM,甚至嵌入式CPU,它們不是通過查找表搭的,而是跟ASIC一樣,用晶體管搭成,這樣更省芯片面積,同時(shí)性能更好。這些計(jì)算單元可以讓用戶配置和組合。
比如,深度學(xué)習(xí)中會(huì)使用大量的乘法器,這個(gè)時(shí)候,F(xiàn)PGA內(nèi)部提供很多乘法器就發(fā)揮了很大的作用,這些乘法器和用戶邏輯結(jié)合,可以實(shí)現(xiàn)很多人工智能計(jì)算,并達(dá)到高性能。
-
FPGA
+關(guān)注
關(guān)注
1645文章
22049瀏覽量
618402 -
微軟
+關(guān)注
關(guān)注
4文章
6685瀏覽量
105753 -
人工智能
+關(guān)注
關(guān)注
1806文章
49014瀏覽量
249446
原文標(biāo)題:阿呆讀可重構(gòu)計(jì)算1:為什么微軟選擇FPGA做AI?
文章出處:【微信號(hào):SSDFans,微信公眾號(hào):SSDFans】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
AI讓FPGA獲得新生:CPU+GPU都搞不定的機(jī)器學(xué)習(xí)問題,微軟和百度用FPGA解決了
當(dāng)我問DeepSeek AI爆發(fā)時(shí)代的FPGA是否重要?答案是......
FPGA+AI王炸組合如何重塑未來世界:看看DeepSeek東方神秘力量如何預(yù)測(cè)......
FPGA的學(xué)習(xí)方向路線?
微軟HoloLens正研發(fā)AI芯片 可識(shí)別語音和圖像
為什么微軟選擇FPGA做AI?
EdgeBoard FZ5 邊緣AI計(jì)算盒及計(jì)算卡
基于FPGA的異構(gòu)計(jì)算是趨勢(shì)
FPGA將成為英特爾進(jìn)入微軟AI市場(chǎng)遲到的船票
微軟推出Brainwave項(xiàng)目以提供更快的FPGA芯片
FPGA的計(jì)算性能還能否滿足現(xiàn)代社會(huì)的需求
NVIDIA 攜手微軟打造大規(guī)模云端 AI 計(jì)算機(jī)
「重大突破」微軟量子超級(jí)計(jì)算機(jī)路線圖公布!

評(píng)論