0
1. 背景
歷經(jīng)近 5 個(gè)月的邀請內(nèi)測,Amazon AWS 于 4 月 20 日宣布 FPGA EC2 實(shí)例 F1 正式上線。就在 F1 內(nèi)測公布后這短短幾個(gè)月時(shí)間,國內(nèi)互聯(lián)網(wǎng)巨頭 BAT 加華為紛紛借勢宣布開展 FPGA 云加速器業(yè)務(wù),這一波異構(gòu)計(jì)算之風(fēng)勢頭之猛可見一斑。
其實(shí),F(xiàn)PGA 以其高能效和可重編程的優(yōu)勢,在大型互聯(lián)網(wǎng)企業(yè)內(nèi)部早有應(yīng)用并逐漸成為常態(tài)。例如媒體壓縮,加解密,AI,大數(shù)據(jù)處理等領(lǐng)域,F(xiàn)PGA 方案較傳統(tǒng) CPU 和 GPGPU,往往可達(dá)到幾倍甚至幾十倍的能效提升。然而過高的開發(fā)門檻和開發(fā)成本,卻讓中小型企業(yè)對 FPGA 技術(shù)可望而不可及。即便是大企業(yè),力量也只夠集中開發(fā)有數(shù)的幾種加速器難以全面鋪開。
FPGA 結(jié)合云計(jì)算形成新的 FPGA-as-a-Service 或者 Accelerator-as-a-Service 平臺(tái),則可以整合多方資源解決上述問題。平臺(tái)廠商與 FPGA 硬件廠商合作,在云端提供統(tǒng)一硬件平臺(tái)與中間件,可大大降低加速器的開發(fā)與部署成本。加速器開發(fā)商的加速器上傳到云,可以形成服務(wù)銷售給加速器用戶,消除加速技術(shù)與最終用戶的硬件壁壘。而加速器用戶則能夠在無需了解底層硬件的情況下,直接按需購買和使用加速服務(wù),較傳統(tǒng)方案更快更省地完成數(shù)據(jù)處理。
FPGA 云服務(wù)作為一種面向未來的全新平臺(tái),橫跨互聯(lián)網(wǎng)與芯片設(shè)計(jì)領(lǐng)域,相信對任何人都是新鮮和陌生的。本文就為大家介紹一下 AWS F1 的結(jié)構(gòu)特征以及具體的開發(fā)部署方式。
2. AWS F1 實(shí)例
2.1 硬件
AWS F1 使用的是 Xilinx 最新一代 UltraScale + 架構(gòu)的高配 FPGA VU9P,并提供上圖所示的兩種 EC2 實(shí)例。兩種實(shí)例都屬于高配機(jī)型,雖然較其他 EC2 服務(wù)器每小時(shí)單價(jià)貴出不少,考慮到 Xilinx 官方 VU9P 開發(fā)版 VCU118 $6,995 的高價(jià),單 FPGA 實(shí)例 $1.65/hr 的定價(jià)還是非常公道和容易接受的。$1.65/hr 就可以用上高端 FPGA,這也降低了科研和個(gè)人開發(fā)者的使用門檻。
不過需要注意的是,這兩個(gè)實(shí)例都使用了大容量 SSD,SSD 存儲(chǔ)要另行計(jì)費(fèi)。再就是 FPGA 開發(fā)編譯時(shí)間較長(F1 的 Hello world 約 4 小時(shí)。。。),可以選擇便宜的非 FPGA 實(shí)例編譯,或者選擇本地編譯。
2.2 軟件
AWS 傳統(tǒng)服務(wù)器是配套 AMI(Amazon Machine Image) 使用,AMI 是預(yù)裝操作系統(tǒng)與服務(wù)的服務(wù)器硬盤鏡像。AWS 為 F1 開發(fā)與部署提供了 FPGA Developer AMI,其中預(yù)裝了免費(fèi)授權(quán) Xilinx Vivado 和 SDx 開發(fā)軟件,以及管理 FPGA 必要的軟件和驅(qū)動(dòng)。預(yù)裝開發(fā)環(huán)境的 AMI 即開即用非常簡便,但動(dòng)輒幾小時(shí)的編譯時(shí)間也增加了開銷。為了讓開發(fā)者可以本地編譯,Xilinx 專門為 Amazon F1 提供了免費(fèi)的使用授權(quán)(詳見:Xilinx Vivado Design Suite for Public Cloud),如下圖所示,免費(fèi)項(xiàng)目包括 Vivado System Edition (限 VU9P)、Partial Reconfiguration、SDAccel 等曾經(jīng)非常昂貴的開發(fā)軟件,可見兩家企業(yè)在云計(jì)算上的合作力度相當(dāng)之大。
AWS 還為 FPGA 開發(fā)了新的鏡像格式,稱為 AFI(Amazon FPGA Image)。AFI 是 AWS 統(tǒng)一管理加速器鏡像的一種核心機(jī)制。用戶可使用 aws ec2 create-fpga-image命令將編譯好的加速器注冊為 AWS AFI,然后可在任意 F1 實(shí)例上使用 AFI Management Tools部署執(zhí)行。AFI 是 F1 實(shí)例上對 FPGA 編程的唯一方式,從安全和管理角度考慮,Amazon 目前沒有今后應(yīng)該也不會(huì)提供直接下載 Bitstream 到 FPGA 的接口。
這樣,AMI 定義虛擬機(jī)系統(tǒng)鏡像,AFI 定義 FPGA 加速器鏡像,兩者合起來就能配置一臺(tái)完整的帶 FPGA 加速的服務(wù)器。加速器開發(fā)商可以將加速器 AFI,或者 AMI+AFI 發(fā)布到 AWS Marketplace 進(jìn)行銷售。而加速器用戶只需使用傳統(tǒng)的 EC2 流程即可購買開啟 FPGA 加速實(shí)例。
3. 開發(fā)與部署
3.1 HDK 與 SDK
一個(gè)完整的 FPGA 加速項(xiàng)目涉及到軟件開發(fā)和硬件開發(fā)。軟件開發(fā)環(huán)境通常稱為 SDK,相對應(yīng)的,AWS 提供了 HDK(Hardware Development Kit) 來支持 F1 FPGA 上的客戶邏輯設(shè)計(jì)。HDK 中包含一個(gè) Shell 邏輯層,提供了 PCIe、DDR 控制、時(shí)鐘控制等通用服務(wù)邏輯。HDK 還提供了一些自動(dòng)化腳本幫助客戶編譯加速器,并打包成可以注冊 AFI 的 tar 格式。
F1 的 SDK 提供了實(shí)用的 FPGA 部署工具。部署工具就是上面提到過的 AFI Managment Tools, 使用這些程序可以查看、加載、清除 FPGA 上的客戶邏輯,也可以啟動(dòng) AWS 開發(fā)的虛擬 JTAG 服務(wù)用于遠(yuǎn)程調(diào)試。
目前 HDK 和 SDK 帶有兩個(gè)簡單實(shí)例的軟硬件代碼,CL_HELLO_WORLD 和 CL_DRAM_DMA,他們各自使用到的功能特性列在下表。開發(fā)者可以參照例程,快速開始開發(fā)自己的加速應(yīng)用。
3.2 開發(fā)流程
上圖是知乎專欄 [微陣] 作者 jonsonxp 總結(jié)的當(dāng)前 F1 客戶邏輯(CL)的開發(fā)流程。
加速器開發(fā)者提供 CL 源代碼 (e.g. Verilog, VHDL, SystemVerilog),為了保護(hù)客戶的設(shè)計(jì)資產(chǎn),首先必須使用 IEEE P1735(詳見 Xilinx 手冊 UG1118) 對源代碼進(jìn)行加密處理。加密選項(xiàng)可同時(shí)保護(hù)源碼和最終生成的 DCP 文件。未經(jīng)加密生成的 DCP 在生成 AFI 時(shí)會(huì)報(bào)錯(cuò)失敗。
加密后的 CL 源碼經(jīng)過邏輯綜合,再和 HDK 中的 Shell 邏輯組合形成完整的 FPGA 設(shè)計(jì),就可以按照正常的 Vivado 設(shè)計(jì)流程進(jìn)行布局布線以及物理優(yōu)化。最終我們要提交到 AWS 的文件不是通常的 Bitstream,而是布局后的 DCP 和一個(gè)描述設(shè)計(jì)的 manifest.txt 文件。這兩個(gè)文件打包成 tar 上傳到開發(fā)中的 AWS S3 云存儲(chǔ),就可以調(diào)用 AWS CLI 的 aws ec2 create-fpga-image 命令將加速器注冊為可在任意 F1 實(shí)例上部署的 AFI。由于 F1 HDK 中提供了完整的樣例和自動(dòng)化腳本,基本上開發(fā)者只要準(zhǔn)備好源文件,剩下的工作都可以自動(dòng)完成。
事實(shí)上,整個(gè)開發(fā)流程只有三個(gè)必要條件,一是使用 AWS 的官方 Shell 進(jìn)行開發(fā),二是 CL 必須加密,三是生成合法 DCP 以及提供正確的 Manifest.txt。開發(fā)過程和客戶邏輯上幾乎沒有過多的限制,這對開發(fā)者是非常友好的。相比其他一些正在進(jìn)行的 FPGA 云方案,他們基于安全原因或者管理系統(tǒng)不成熟,大多只對客戶暴露 OpenCL 開發(fā)界面,這對源碼保護(hù)和硬件開發(fā)的自由度都有影響。
3.3 加速器部署
加速器注冊為 AFI 后,AWS 會(huì)返回一個(gè) AGFI(Amazon Global FPGA Image ID) 用于部署。在 F1 實(shí)例上為 FPGA 加載加速器也非常容易,如下面命令所示,該命令將 AGFI 為 agfi-0123456789abcdefg 的加速器加載到本地服務(wù)器 PCIe Slot 0 上的 FPGA。
$ sudo fpga-load-local-image -S 0 -I agfi-0123456789abcdefg
目前 AGFI 部署加速器好像還沒有權(quán)限管理,任何人只要知道加速器的 AGFI 就可以隨意使用,存在一定安全問題。再者,AWS F1 目前支持(虛擬)服務(wù)器級(jí)別部署,沒有 FPGA 虛擬化功能來支持單 FPGA 加載多加速器,如果使用虛擬化技術(shù)可以進(jìn)一步提高 FPGA 的使用率并降低部署成本。不過 F1 剛剛起步,相信一切都在完善之中。
4. 結(jié)語
傳統(tǒng)基于 CPU 的單一架構(gòu)云服務(wù)經(jīng)過多年粗放發(fā)展,逐漸難以維持快速增長的計(jì)算需求。在云端使用 FPGA 開發(fā)高能效定制硬件,從而降低計(jì)算成本已成大勢所趨。趨勢之下,先行者微軟的 Catapult 1 代和 2 代給我們展示了成功的應(yīng)用場景,但微軟并沒有將技術(shù)開放出來,普通開發(fā)者可見而不可得。而 Amazon 的 AWS F1 依托多年開發(fā)完善的 AWS 云平臺(tái)體系,從 AMI 擴(kuò)展出 AFI,從 SDK 擴(kuò)展出 HDK,非常平滑地將傳統(tǒng)云資源管理,擴(kuò)展為可以支持 FPGA 加速器的服務(wù)器管理系統(tǒng),并圍繞加速器開發(fā)者和加速器用戶建立起云平臺(tái),才是將 FPGA 技術(shù)帶入主流互聯(lián)網(wǎng)市場的重要一步。我們也看到,當(dāng)前 F1 應(yīng)用實(shí)例還不多,管理工具以及 HDK 和 SDK 也比較樸素,互聯(lián)網(wǎng)和芯片產(chǎn)業(yè)的初次親密接觸還會(huì)有一個(gè)不短的磨合期。未來可期,只要方向?qū)?,技術(shù)能解決的問題都不是問題。
雷鋒網(wǎng)按:原作者JonsonXP,本文原載于作者的知乎專欄。
雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。