FPGA (现场可编程门阵列)由于其硬件并行加速能力和可编程特性, 在传统通信领域和 IC 设计领域大放异彩. 一路走来, FPGA 并非一个新兴的硬件器件, 由于其开发门槛过高, 硬件加速算法的发布和部署保护要求非常高, FPGA 的使用一直是高冷的美人, 没有走入平常百姓家. 也就导致 FPGA 的计算潜力还没有得到深入的挖掘.
阿里云虚拟化团队异构计算和高性能计算团队一直致力于将计算资源 "平民化"; 高性能计算团队在做的 E-HPC 就是要让所有云上用户都能够瞬间拥有一个小型的超算集群, 使得使用超算不再仅仅是一些超算中心和高校的特权; 而异构计算团队则致力于将目前最快, 最新的计算设备在云上提供给用户, 使得曾经高冷的计算资源不再拒人千里之外: 推出了 FPGA 云服务器 FaaS 服务, 其中的 F1 和 F2 实例已经对外提供服务, 可以通过一键部署的方式把 Intel 和 Xilinx 的小规格的器件计算能力赋予客户.
2018 年 5 月, 新晋的大规格 FPGA 实例, 基于 Xilinx 16nm Virtex UltraScale+ 器件 VU9P 的实例 F3 正式发布. 下面将对阿里云 FPGA 计算 (下面简称 FaaS) 服务本身, 以及这次发布的 F3 实例的底层硬件架构和平台架构进行技术解读.
FaaS
阿里 FPGA 云服务器平台 FaaS(FPGA as a Service)在云端提供统一硬件平台与中间件, 可大大降低加速器的开发与部署成本. 加速器开发商的加速器可以形成服务提供给加速器用户, 消除加速技术与最终用户的硬件壁垒. 用户则能够在无需了解底层硬件的情况下, 直接按需使用加速服务.
为了给加速器提供方和使用方提供更加高效, 统一的开发及部署平台, FaaS 提供两大套件: HDK 和 SDK.
HDK
HDK 给所有的加速器开发者提供统一的 FPGA 硬件接口, 提前帮用户解决了 FPGA 开发中难度最大的高速接口开发及调试, 例如 PCIe,SERDES 接口, DDR 控制器等等; 使得用户能够直接得到硬件平台和 FPGA 接口的最大性能, 不会因为团队开发能力和经验的欠缺, 造成硬件平台性能浪费; 高效, 可靠, 统一的接口套件也为云上平台的安全隔离, 设备稳定提供了保障, 不会因为用户的接口设计问题, 造成服务器宕机; 同时可以杜绝用户在 FPGA 端对主机的非法操作, 为整个云上安全提供保障.
HDK 包括两个部分, Shell 和 Role;Shell 部署在静态区域, 提供上述统一接口部分.
在提供统一接口, 安全性和便捷性的前提下, 阿里云 FaaS HDK 也尽最大的努力保证用户设计的灵活性, Role 的概念应运而生. Role 部署在动态区域, 是在 Shell 之外, 预先开发并提供的, 用户可以配合用户逻辑 (Customer Logic) 使用. 不同于 Shell, 用户可以根据需要, 随时更换 Role 部分; 这种 Shell + Role 的组合方式, 保证了 Shell 的最轻量化, 兼顾了统一性, 便捷性和灵活性.
SDK
SDK 包括两个部分:
和 HDK(Shell+Role)对应的主机端驱动 (Drivers) 和软件库(Libraries)
FPGA 管理工具 faascmd 套件
驱动和软件库和 HDK 的 Shell 以及 Role 相对应, 和 HDK 一起, 为用户提供统一及灵活的软件支持, 比如 DMA 驱动, 寄存器访问驱动等等.
faascmd 工具套件为用户提供云上 FPGA 管理服务, 包括安全校验, FPGA 镜像生成, 下载及管理, FPGA 加速卡状态查询反馈等功能. 公有环境使用 FPGA, 需要考虑用户 FPGA 文件的安全, faascmd 提供的秘钥及 OSS bucket 指定机制, 有效保证了用户的 FPGA 下载文件的私密性. 在线下的开发及应用中, 开发者直接对 FPGA 进行下载操作, 但在云上环境, 用户对公有的 FPGA 资源直接操作对安全造成较大影响. Faascmd 工具会对用户操作申请和物理 FPGA 资源进行隔离, 但保证了用户下载安全的同时, 提供给用户类似线下操作的体验; 同时会对用户提交的网表进行校验, 提高安全, 降低风险. faascmd 同时也提供调用接口, 用户能很容易的在自己的 App 中调用管理工具, 结合自身加速器特性实现各种管理功能.
FaaS 的 IP 市场
FaaS 帮助降低了 FPGA 逻辑开发者开发的准入门槛: 云上即开即用的 FPGA 资源, 灵活的付费模式使得硬件资源触手可及; FPGA 的逻辑开发上, 简化了开发流程, 统一了开发接口, 把核心加速逻辑从周边硬件设备的接口调试中隔离出来, 使得 FPGA 的新兴应用可以只关注业务加速的核心逻辑, 快速迭代; 在这两点上, 阿里云的 FaaS 迈出了 FPGA 资源平民化的第一步.
但是即便是大大简化的开发流程, 触手可及的硬件资源, FPGA 依然有一定的开发门槛. 如何把已有的 FPGA 逻辑 IP 价值最大化, 联通 FPGA 加速的需求方和提供方呢? 重要的一点就是如何解决在公共云数据中心层面保证 FPGA 加速 IP 的安全性, 特别是对不可信的第三方进行输出和部署这个难题, FaaS 是如何解决这个问题的呢?
答案是通过阿里云的 FaaS 的 IP 市场. 技术上, 通过与 Xilinx 联合开发的定制虚拟化技术达到 IP 加速与部署环境的强隔离, IP 的用户对原始 IP 的网表文件完全隔离, 网表文件的传输, 部署, 加速流程全程对用户都不可见, 同时加速计算能力又可以透明的向 IP 使用方第三方用户开放, 这是阿里云在 FPGA 云上加速服务另外一个技术创新. 这个创新, 完全杜绝了 FPGA IP 在云上输出的时候被盗版的可能, 提供了非常高的安全保护机制.
更加严格的保密机制也在规划中: 很快可以通过阿里云的 KMS 加密服务对 IP 进行加密保护, 每次对 IP 加载前都需要向 KMS 服务获取秘钥解密, 这样一来针对 IP 的使用下载有据可查; 并且使得 IP 发布方的 IP 在数据中心内部都是安全的, 因为没有了 IP 使用方的 KMS 秘钥, 即便是阿里云也无法对原始的网表进行解密操作.
在阿里云 FaaS IP 市场的帮助下, 即便是从来没有任何 FPGA 开发经验的用户, 也可以一键从 IP 市场中获取相应的加速逻辑, 并部署到对应的 FPGA 器件上面去. 相信通过即开即用的硬件资源, 统一的软硬件逻辑开发接口和 IP 市场, 阿里云能够真正实现 FPGA 计算资源平民化的承诺.
F3 硬件架构
阿里云 FaaS 的 F3 实例在底层硬件上, 是使用阿里云自主研发的高性能单卡双芯片的 VU9P 的板卡. 这里要划重点啦: 单卡双芯片. 一定有用户要问为什么要这么设计呢? 单卡双芯片的硬件设计有什么好处呢?
首先, 对于用户来说, 通过单卡双芯片的这样的规格设计, 与阿里云配套自研的服务器一起, 最高可以提供单实例 16 块 VU9P 的计算实例. 16 块 VU9P 这是非常高的计算密度了, 这是设计单卡双芯片的第一个目的: 通过提高计算密度, 在同等计算单元下集成了更多的加速芯片, 能够有效降低单位计算力的成本, 从成本和单位实例的垂直计算力提升上客户可以双重受益.
单卡双芯片的两个 VU9P 芯片通过 PCIe 桥接入系统, 那么双芯片之间的互相通信呢? 是不是只能通过 PCIe 的总线来进行呢, 答案是否定的, 除了 FPGA Direct 这种通过 PCIe 互相通信的能力之外, 在阿里云的自研的板卡上也是有特殊考虑的. 在两个芯片之间, 设计了一个高速互联通道, 使得两个 FPGA 之间可以通过这个特殊的通道以高达 600Gb/s 的速率进行通信, 这个通信技术称之为 FPGA Link. 要知道, 现在的数据中心主流部署的接入交换机光口通信也只能达到 100Gb/s 的通信速率, 更高的 200Gb/s 的交换机还在试部署中.
试想一下, 无需额外的交换机和光口硬件, 两个 FPGA 芯片可以通过 FPGA Link 技术以超短时延通过 6 倍于主流光口通信的速率进行通信, 这个将会以极低的成本帮助用户开启大量新的 FPGA 加速应用模式. 比如, 小规模的芯片仿真, 需要两个器件才能部署的下的情况, 可以将整体仿真模块拆解之后部署到两个芯片上, 两个芯片之间的数据通路和同步信号通过高速通道互联; 还有其他的应用场景, 需要把功能模块部署到两个 FPGA 芯片之上, 而两者之间需要大量的数据交换, 比如视频转码场景: 把小规模但是模块数目比较多的解码单元, 视频处理单元部署到一个 FPGA 之上, 把面积占用比较多的编码单元放到另外一个 FPGA 上, 编解码模组之间通过高速互联交换裸视频流. 这将大大改善部署的难度, 以及极大的解耦两个模块之间的相互依赖和设计难度. 以上举了两个例子, 读者一定能够举一反三的想到, 其他需要流水线处理并需要大量数据交换的场景, 阿里云的 F3 实例的双芯片实例能够为客户提供最大的价值.
不少应用场景对板载的 DDR 存储还是有要求的. 阿里云的 F3 实例, 为每个 FPGA 搭配了客户可见的 64GB 的 DDR 内存, 这 64GB 的 DDR 分成 4 个通道, 分别连接到 VU9P 的 3 个硅单元上面, 其中一个通道对应的 16GB DDR 保留常驻, 其余 3 个通道对应的 48GB 存储以可选的方式可以被客户逻辑加载使用.
目前, 看到了双芯片实例除了 FPGA Direct 技术和高达 600Gb/s 的 FPGA Link 高速互联能力之外, 另外值得一提的是: 双芯片的实例与其他的双芯片实例板卡之间也可以通过 400Gb/s 的光口进行互联, 而且 400Gb/s 的以太协议驱动是通过 Xilinx 预置的 MAC 硬核来加速, 不占用逻辑面积; 通过以太或者自定义的轻量级通信协议, 能够在 16 芯片之间, 以及更多的芯片之间搭建 2 维 Mesh 或者环形互联, 进一步扩展多片互联的使用模式和应用场景.
最后, 上一张图, 让大家对上面做的硬件的技术解析有一个相对更具体的认识.
F3 逻辑结构
F3 逻辑结构, 先给大家上一幅图:
SHELL 和 ROLE 概念
SHELL:
Shell 是 FPGA 的静态区域, 内部包含用户 PCIe, 管理 PCIEe, 板卡管理系统和一个 DDR 访问通道. 为了提高板卡的安全和稳定性, 用户无权修改 SHELL 区域.
ROLE:
在设计中提出了 Role 的概念, Role 和 Shell 是类似的封装. 而 Role 跟 Custom Logic 一起在动态区域. Role 的提出, 可以更加轻量化 Shell. 通过 Role 实现了同一个 Shell 既可以支持 OpenCL 开发, 也可以支持 RTL 开发; 最后就是 Role 的再次抽象降低了用户对于 FPGA 的开发门槛. 我们提供基础的 Role, 也允许用户自行设计 Role. 我们希望更多第三方的设计者通过分享自己 Role, 使得 FaaS 平台更加精彩.
ROLE 内部结构简介
Interconnect: 该部分主要是提供给用户四路 DDR 通道的访问和 USER_PCIe 对四路 DDR 通路的访问. 该模块帮助用户隔离了时钟域, 使用户逻辑在同一个时钟域上对 4 路 DDR 通道进行访问.
Inter chip interconnect: FPGA 单卡双芯片间互联通路;
Card interconnect: FPGA 卡间互联通路;
Custom Logic: 用户自定义逻辑部分;
Custom Logic 介绍
用户逻辑是属于 Role 的一部分, 属于动态加载区域. 为了方便用户标准化使用, 我们在 RTL 设计中使用了标准的 AXI-4 和 AXI-LITE 接口.
产品一键体验, 查看详情
来源: https://yq.aliyun.com/articles/591522