作者简介
赵谦博士,日本熊本大学研究员,上海研鸥科技联合创始人兼CTO,主要从事FPGA芯片体系结构、EDA工具以及云端硬件加速系统等方向的研发工作。在FPGA、FPL和ICFPT等FPGA领域核心会议发表有多篇学术论文。赵谦博士也是开源加速器管理平台“hCODE”作者,知乎FPGA话题活跃作者,译有《CPU自制入门》一书。
历经近5个月的邀请内测,Amazon AWS于4月20日宣布FPGA EC2实例F1正式上线。就在F1内测公布后这短短几个月时间,国内互联网巨头BAT加华为纷纷借势宣布开展FPGA云加速器业务,这一波异构计算之风势头之猛可见一斑。
其实,FPGA以其高能效和可重编程的优势,在大型互联网企业内部早有应用并逐渐成为常态。例如媒体压缩,加解密,AI,大数据处理等领域,FPGA方案较传统CPU和GPGPU,往往可达到几倍甚至几十倍的能效提升。然而过高的开发门槛和开发成本,却让中小型企业对FPGA技术可望而不可及。即便是大企业,力量也只够集中开发有数的几种加速器难以全面铺开。
FPGA结合云计算形成新的FaaS(FaaS,FPGA-as-a-Service)或者AaaS(AaaS,Accelerator-as-a-Service)平台,则可以整合多方资源解决上述问题。平台厂商与FPGA硬件厂商合作,在云端提供统一硬件平台与中间件,可大大降低加速器的开发与部署成本。加速器开发商的加速器上传到云,可以形成服务销售给加速器用户,消除加速技术与最终用户的硬件壁垒。而加速器用户则能够在无需了解底层硬件的情况下,直接按需购买和使用加速服务,较传统方案更快更省地完成数据处理。
FPGA云服务作为一种面向未来的全新平台,横跨互联网与芯片设计领域,相信对任何人都是新鲜和陌生的。本文就为大家介绍一下AWS F1的结构特征以及具体的开发部署方式。
AWS F1 硬件
图1:ASW F1两种实例的资源配置
AWS F1使用的是Xilinx最新一代UltraScale+架构的高配FPGA VU9P,并提供图1所示的两种EC2实例。两种实例都属于高配机型,虽然较其他EC2服务器每小时单价贵出不少,考虑到Xilinx官方VU9P开发版VCU118 $6,995的高价,单FPGA实例$1.65/hr的定价还是非常公道和容易接受的。$1.65/hr就可以用上高端FPGA,这也降低了科研和个人开发者的使用门槛。
不过需要注意的是,这两个实例都使用了大容量SSD,SSD存储要另行计费。再就是FPGA开发编译时间较长(F1的Hello world约4小时。。。),可以选择便宜的非FPGA实例编译,或者选择本地编译。
AWS F1 软件
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),如图2所示,免费项目包括Vivado System Edition (限VU9P)、Partial Reconfiguration、SDAccel等曾经非常昂贵的开发软件,可见两家企业在云计算上的合作力度相当之大。
图2:面向AWS F1开发的Vivado免费授权
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加速实例。
AWS 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。开发者可以参照例程,快速开始开发自己的加速应用。
图3:AWS F1示例工程详情
用户逻辑(CL)开发流程
图4:AWS F1客户逻辑(CL)开发流程
如图4所示,这是赵谦博士总结的当前 F1 客户逻辑(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开发界面,这对源码保护和硬件开发的自由度都有影响。
AWS F1加速器部署
加速器注册为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刚刚起步,相信一切都在完善之中。
传统基于CPU的单一架构云服务经过多年粗放发展,逐渐难以维持快速增长的计算需求。在云端使用FPGA开发高能效定制硬件,从而降低计算成本已成大势所趋。
趋势之下,先行者微软的Catapult 1代和2代给我们展示了成功的应用场景,但微软并没有将技术开放出来,普通开发者可见而不可得。而Amazon的AWS F1依托多年开发完善的AWS云平台体系,从AMI扩展出AFI,从SDK扩展出HDK,非常平滑地将传统云资源管理,扩展为可以支持FPGA加速器的服务器管理系统,并围绕加速器开发者和加速器用户建立起云平台,才是将FPGA技术带入主流互联网市场的重要一步。
我们也看到,当前F1应用实例还不多,管理工具以及HDK和SDK也比较朴素,互联网和芯片产业的初次亲密接触还会有一个不短的磨合期。未来可期,只要方向对,技术能解决的问题都不是问题。