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 也比较朴素,互联网和芯片产业的初次亲密接触还会有一个不短的磨合期。未来可期,只要方向对,技术能解决的问题都不是问题。