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