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





