AWS F1正式上线,深度解析FPGA与公有云的亲密接触

作者:jonsonxp

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传统服务器是配套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等曾经非常昂贵的开发软件,可见两家企业在云计算上的合作力度相当之大。

这样,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)的开发流程。

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

文章原文链接: https://zhuanlan.zhihu.com/p/26553527?utm_medium=social&utm_source=wecha...