國內(nèi)首款FPGA云服務(wù)器的深度學(xué)習(xí)算法背景及算法分析
由騰訊云基礎(chǔ)產(chǎn)品中心、騰訊架構(gòu)平臺(tái)部組成的騰訊云FPGA聯(lián)合團(tuán)隊(duì),在這里介紹國內(nèi)首款FPGA云服務(wù)器的工程實(shí)現(xiàn)深度學(xué)習(xí)算法(AlexNet),討論深度學(xué)習(xí)算法FPGA硬件加速平臺(tái)的架構(gòu)。
在1 月 20 日,騰訊云推出國內(nèi)首款高性能異構(gòu)計(jì)算基礎(chǔ)設(shè)施——FPGA 云服務(wù)器,將以云服務(wù)方式將大型公司才能長期支付使用的 FPGA 普及到更多企業(yè),企業(yè)只需支付相當(dāng)于通用CPU約40%的費(fèi)用,性能可提升至通用CPU服務(wù)器的30倍以上。具體分享內(nèi)容如下:
1. 綜述
2016年3月份AI圍棋程序AlphaGo戰(zhàn)勝人類棋手李世石,點(diǎn)燃了業(yè)界對人工智能發(fā)展的熱情,人工智能成為未來的趨勢越來越接近。
人工智能包括三個(gè)要素:算法,計(jì)算和數(shù)據(jù)。人工智能算法目前最主流的是深度學(xué)習(xí)。計(jì)算所對應(yīng)的硬件平臺(tái)有:CPU、GPU、FPGA、ASIC。由于移動(dòng)互聯(lián)網(wǎng)的到來,用戶每天產(chǎn)生大量的數(shù)據(jù)被入口應(yīng)用收集:搜索、通訊。我們的QQ、微信業(yè)務(wù),用戶每天產(chǎn)生的圖片數(shù)量都是數(shù)億級別,如果我們把這些用戶產(chǎn)生的數(shù)據(jù)看成礦藏的話,計(jì)算所對應(yīng)的硬件平臺(tái)看成挖掘機(jī),挖掘機(jī)的挖掘效率就是各個(gè)計(jì)算硬件平臺(tái)對比的標(biāo)準(zhǔn)。
最初深度學(xué)習(xí)算法的主要計(jì)算平臺(tái)是 CPU,因?yàn)?CPU 通用性好,硬件框架已經(jīng)很成熟,對于程序員來說非常友好。然而,當(dāng)深度學(xué)習(xí)算法對運(yùn)算能力需求越來越大時(shí),人們發(fā)現(xiàn) CPU 執(zhí)行深度學(xué)習(xí)的效率并不高。CPU 為了滿足通用性,芯片面積有很大一部分都用于復(fù)雜的控制流和Cache緩存,留給運(yùn)算單元的面積并不多。這時(shí)候,GPU 進(jìn)入了深度學(xué)習(xí)研究者的視野。GPU原本的目的是圖像渲染,圖像渲染算法又因?yàn)橄袼嘏c像素之間相對獨(dú)立,GPU提供大量并行運(yùn)算單元,可以同時(shí)對很多像素進(jìn)行并行處理,而這個(gè)架構(gòu)正好能用在深度學(xué)習(xí)算法上。
GPU 運(yùn)行深度學(xué)習(xí)算法比 CPU 快很多,但是由于高昂的價(jià)格以及超大的功耗對于給其在IDC大規(guī)模部署帶來了諸多問題。有人就要問,如果做一個(gè)完全為深度學(xué)習(xí)設(shè)計(jì)的專用芯片(ASIC),會(huì)不會(huì)比 GPU 更有效率?事實(shí)上,要真的做一塊深度學(xué)習(xí)專用芯片面臨極大不確定性,首先為了性能必須使用最好的半導(dǎo)體制造工藝,而現(xiàn)在用最新的工藝制造芯片一次性成本就要幾百萬美元。去除資金問題,組織研發(fā)隊(duì)伍從頭開始設(shè)計(jì),完整的設(shè)計(jì)周期時(shí)間往往要到一年以上,但當(dāng)前深度學(xué)習(xí)算法又在不斷的更新,設(shè)計(jì)的專用芯片架構(gòu)是否適合最新的深度學(xué)習(xí)算法,風(fēng)險(xiǎn)很大??赡苡腥藭?huì)問Google不是做了深度學(xué)習(xí)設(shè)計(jì)的專用芯片TPU?從Google目前公布的性能功耗比提升量級(十倍以上的提升)上看,還遠(yuǎn)未達(dá)到專用處理器的提升上限,因此很可能本質(zhì)上采用是數(shù)據(jù)位寬更低的類GPU架構(gòu),可能還是具有較強(qiáng)的通用性。這幾年,F(xiàn)PGA 就吸引了大家的注意力,亞馬遜、facebook等互聯(lián)網(wǎng)公司在數(shù)據(jù)中心批量部署了FPGA來對自身的深度學(xué)習(xí)以云服務(wù)提供硬件平臺(tái)。
FPGA 全稱「可編輯門陣列」(Field Programmable Gate Array),其基本原理是在 FPGA 芯片內(nèi)集成大量的數(shù)字電路基本門電路以及存儲(chǔ)器,而用戶可以通過燒寫 FPGA 配置文件來來定義這些門電路以及存儲(chǔ)器之間的連線。這種燒入不是一次性的,即用戶今天可以把 FPGA 配置成一個(gè)圖像編解碼器,明天可以編輯配置文件把同一個(gè) FPGA 配置成一個(gè)音頻編解碼器,這個(gè)特性可以極大地提高數(shù)據(jù)中心彈性服務(wù)能力。所以說在 FPGA 可以快速實(shí)現(xiàn)為深度學(xué)習(xí)算法開發(fā)的芯片架構(gòu),而且成本比設(shè)計(jì)的專用芯片(ASIC)要便宜,當(dāng)然性能也沒有專用芯片(ASIC)強(qiáng)。ASIC是一錘子買賣,設(shè)計(jì)出來要是發(fā)現(xiàn)哪里不對基本就沒機(jī)會(huì)改了,但是 FPGA 可以通過重新配置來不停地試錯(cuò)知道獲得最佳方案,所以用 FPGA 開發(fā)的風(fēng)險(xiǎn)也遠(yuǎn)遠(yuǎn)小于 ASIC。
2. Alexnet 算法分析2.1 Alexnet模型結(jié)構(gòu)Alexnet模型結(jié)構(gòu)如下圖2.1所示。
圖2.1 Alexnet模型
模型的輸入是3x224x224大小圖片,采用5(卷積層)+3(全連接層)層模型結(jié)構(gòu),部分層卷積后加入Relu,Pooling 和NormalizaTIon層,最后一層全連接層是輸出1000分類的softmax層。如表1所示,全部8層需要進(jìn)行1.45GFLOP次乘加計(jì)算,計(jì)算方法參考下文。
層數(shù)
kernel個(gè)數(shù)
每個(gè)kernel進(jìn)行卷積次數(shù)
每個(gè)kernel一次卷積運(yùn)算量
浮點(diǎn)乘加次數(shù)
第1層
96
3025
(1x363)x(363x1)
96x3025x363=105M=210MFLOP
第2層
256
729
(1x1200)x(1200x1)
256x729x1200=224M=448MFLOP
第3層
384
169
(1x2304)x(2304x1)
384x169x2304=150M=300MFLOP
第4層
384
169
(1x1728)x(1728x1)
384x169x1728=112M=224MFLOP
第5層
256
169
(1x1728)x(1728x1)
256x169x1728=75M=150MFLOP
第6層
1
4096
(1x9216)x(9216x1)
4096x9216=38M=76MFLOP
第7層
1
4096
(1x4096)x(4096x1)
4096x4096=17M=34MFLOP
第8層
1
1000
(1x4096)x(4096x1)
1000x4096=4M=8MFLOP
總和
1.45GFLOP
表2.1 Alexnet浮點(diǎn)計(jì)算量
2.2 Alexnet 卷積運(yùn)算特點(diǎn)