学习FPGA之二:云端加速

        随着互联网,移动互联网,人工智能,物联网(5G),甚至元宇宙的发展,海量的数据越来越多,但是经过有效处理的1%都不到。数据被称为人工智能时代的石油,数据的处理越来越重要,数据中心的运算,传输是在低层需要支持的重要环节,因此,数据中心市场也逐渐成为了各大半导体与互联网公司的必争之地。

        一方面,传统FPGA厂商,也就是Intel 和赛灵思一直在大力发展FPGA作为硬件加速器,用于加速数据的计算和传输。另一方面,互联网公司也纷纷下场,使用FPGA来加速自家的云上数据中心。

        为了使FPGA在云端更易用,高效和可靠,FPGA虚拟化技术也随之出现。今天就学习FPGA是如何在大数据中心进行应用的。

        我们先从成功的项目看起:

一:微软 Catapult 项目

        2014年,微软发布了一个项目,叫 Catapult,在这个项目中,微软将英特尔的Stratix V 系列FPGA部署到了自家数据中心的1632台服务器中,并用FPGA对必应搜索引擎的文件排名运算进行了硬件加速,获得了高达 95% 的吞吐量提升。

        Catapult 的项目负责人认为不能光从软件层面去优化性能,必须通过硬件进行定制运算,也就是在特定场景对硬件设计进行优化,这刚好是FPGA的强项。他认为,传统的基于CPU的服务器和网络设备已经无法满足日益增长的计算量和网络带宽要求,于是,有了这个项目。

1.1 加速单元的考虑因素

        在大型数据中心部署硬件加速单元,是有挑战的,必须解决以下几项问题:

        1: 灵活性和可扩展性。做为云服务器的性质,决定了数据中心的负载是不固定的(应用层的流量不稳定,比如:双11这种特例),给定的任务也是纷繁复杂的(应用要达成的目的完全不同,有电商应用,也有文档应用),加速器要保证在不同应用场景下,硬件资源的合理利用。

        2: 与原有数据中心设备的同构性,要能合理重复利用原有软硬件,而不是因为要加速,导致现有数据中心结构和布局要修改。

        3: 要有一定的容错性,因为数据中心本身是有较强容错性的,当故障发生时能哆方便的定位,调试和分析。

1.2 加速硬件的对比

        可以实现加速的硬件有 CPU,GPU,FPGA,ASIC。我们从五个指标:性能,灵活性,同构性,成本和功耗来看各自的优缺点。

        1: CPU——最高的显然是同构性和灵活性,因为目前服务器本身,核心处理器就是CPU,是传统数据中心计算的主力,再利用它来做加速运算,肯定是可行的。但是它的性能(计算能力)肯定是最差的,因为CPU并不是专门设计来做并行运算的。

        2: GPU——因为设计之初,它是为了并行运算而来的,所以,它的性能最佳,非常擅长各种人工智能的算法。但是它是功耗黑洞,所以有非常高的能耗成本。因为它主要用于运算,所以,碰到通信密集型的应用,它需要与CPU,网卡进行配合,所以它的灵活性和同构性一般。

        3: ASIC——因为是定制,所以,一定会解决性能和功耗(比如:google的tpu),但是它的灵活性自然很差。然后,因为是定制,成本一定非常的高。

        4: FPGA——它在灵活性上是最强的,这和他的设计鸡皮疙瘩初衷是一致的。其它指标一般,但也没有短板,性能上,比CPU有数量级的提升,功耗和成本也不错,在部署上可能需要额外的软件开发,例如:驱动,配置软件,以及FPGA虚拟化相关的软件框架和接口,但并不需要大规模修改已有的数据中心,同构性还行。

        综上所述,FPGA在性能,灵活性,同构性,成本和功耗五个方面达到比较理想的平衡,这也是微软选择它作为数据中心加速器的主要原因。

1.3: 项目的三个阶段

        这个项目经过了三个阶段的改进:

        第一阶段:单板多FPGA

        采用了6片赛灵思的Virtrix-6的FPGA,结果在部署中出现不少问题:无法使用超过6片或较小量的FPGA资源,资源会产生浪费或不足。同构性较差,需要针对数据中心进行改造,稳定性也较差。

学习FPGA之二:云端加速_第1张图片

        第二阶段:单板单FPGA

        单板多FPGA架构变成了单板单FPGA的结构,加速卡使用了英特尔的Stratix V 系列的FPGA芯片。这一代的特点是:使用了名为 “shell & role" 的系统结构,shell 指的是通用的基础功能和IP。比合:内存控制器,DMA模块,各种I/O接口和控制器。Role指的是可以重构区域,通过使用Shell标准化接口,实现各类用户的应用。Role其实就是用户可编程部分。

        在软件方面也做了修改。加入 Mapping Manager,Health Manager,前者用来给FPGA做配置表,后者监测预警。

        另外,将必应排名算法放到了FPGAk进行硬件加速。

学习FPGA之二:云端加速_第2张图片

优化结果:

  1. 当系统延时相同的情况下,采用FPGA进行硬件加速后吞吐量提升了接近一倍;
  2. 对于相同的吞吐量要求,采用FPGA后系统延时会下降29%。

        第三阶段:资源池化

        第二阶段的工作最主要的问题是,为了实现FPGA之间的低延时通信,引入了一个6x8的二维Torus网络。相比于传统数据中心网络TOR交换机直连CPU的结构,这个Torus网络相当于在当前数据中心网络里额外增加了一个二层网络,而这个二层网络在扩展性和同构性方面带来了很多问题。

        此外,还应注意的是,这个方案中FPGA加速器只能用来作为特定应用的硬件加速器,而对于数据中心的常用网络功能,如数据包加解密、流量控制、虚拟化等基础设施结构和应用来说,FPGA并没有任何帮助和补强的作用。

        优化方案很简单:

        取消了FPGA互连的第二级网络,直接将FPGA与数据中心网络进行互连,

学习FPGA之二:云端加速_第3张图片

这样的架构,带来一些其它好处:

第一,FPGA可以被用来加速数据中心的各类网络和存储功能。

第二,FPGA不再与CPU在地理位置上紧密耦合。因为结合点是网络,就可以变成异地的架构。CPU可以远程使用FPGA,这样,对于闲置的FPGA可以供远端的CPU使用,打破地域限制。

        为了实现对池化FPGA资源的统一管理和分配,微软提出了一种硬件即服务(Hardware-as-a-Service)”的使用模型,

        学习FPGA之二:云端加速_第4张图片

        微软的Catapult项目可以称作是FPGA在大型商业数据中心里进行大规模部署和使用的开山之作,直至目前仍然也是这个领域最具代表性的工作。Catapult兼顾了学术创新和工程的实用性,这样对于业界其他公司更具有直接的借鉴意义。在结果方面,微软使用了自家已经深度优化的纯软件方案作为对比,使得FPGA取得的显著性能提升更具可信度和说服力。

        所以,池化有点相当于软件行业讲的服务化(如:SAAS)的概念。

        好了,微软的项目大概就介结这么多了。      

二:FPGA 即服务(FPGA as a Service)

        FPGA进入微软的数据中心,客户是微软内部的计算部门(比如:搜索引擎Bing),但对于Amazon这种为广大客户提供云服务的场景,它提供了另一种方式:FPGA as  a Service。

        Amazon是最早提供云服务(AWS)的软件企业,相同的,在FPGA上,它也很早提出了云服务的概念,看看上面微软提供的第三阶段产品,差不多是一个意思。并且,硬件的运算服务上云,FPGA也不是首个,早在这之前,Amazon就将GPU的算力做为服务放到云上供使用。

        2017年,AWS公布了 FPGA的云计算加速实例 AWS- F1

        和微软提供的私有云不同,公有云需要解决的问题是要面向更广大的开发者,他们可能没有足够的研发实力和资本,与FPGA厂家也没有紧密的合作关系,无法获得更好的技术支持。这时就需要FPGA的云服务提供完整的开发,调试,部署,维护的基础设施架构,并兼顾FPGA开发和使用时的便利性。

        因此需要满足以下需求:

        1: 平台需要将FPGA的逻辑抽象化。

        2: 平台需要提供完整的FPGA软硬件开发工具。

        因为微软并没有将整个项目开放出来,所以,如果想快速创业,研发自已的FPGA,可以使用Amazon的AWS- F1 来生成自已的AFI,这是一个不错的选择,但不知道价格和国内用户是否可以使用(好象我国有一家叫深鉴科技的公司,在研发语音识别引擎时,使用了AWS- F1)

        我们看看基于 AWS- F1 如何完成开发的?

学习FPGA之二:云端加速_第5张图片

        在AWS- F1 最重要的是 AMI 和 AFI,这个需要了解一下:

        AMI定义虚拟机系统镜像,AFI定义FPGA镜像,两者合起来就能配置一台完整的带FPGA的服务器。加速器开发商可以将加速器AFI,或者AMI+AFI发布到AWS Marketplace进行销售。而加速器用户只需使用传统的EC2流程即可购买开启FPGA加速实例。

        AWS- F1 提供SDK和HDK来完成开发,事实上,整个开发流程只有三个必要条件,一是使用AWS的官方Shell进行开发,二是CL必须加密,三是生成合法DCP以及提供正确的Manifest.txt。开发过程和客户逻辑上几乎没有过多的限制,这对开发者是非常友好的。相比其他一些正在进行的FPGA云方案,他们基于安全原因或者管理系统不成熟,大多只对客户暴露OpenCL开发界面,这对源码保护和硬件开发的自由度都有影响。

        当然,要使用AWS- F1 进行开发,没那么容易,这里只是简单陈述一下。

        除了Amazon,国内的阿里云,腾讯云,华为云也推出了类似的服务。

        我们再来看看电信领域,对于FPGA的应用:

三:SDN,NFV 与 FPGA

3.1 什么是 SDN ,NFV

        NFV:Network Function Virtualization  网络功能虚拟化。

        SDN:Softwore Defined Network 软件定义网络。

        我理解大概意思是:传统网络 涉及的设备太多,虽然单个能提供高性能,但随着数据规模的增长,使用专用设备带来的问题也出来了,兼容性差,维护升级困难,供应商垄断资源提高了成本,加入新协能要开发新硬件……

        因此,现在开始推 NFV,这也主要是针对带宽指数级的增长。NFV使用了通用的服务器,通用的存储设备,以及通用的交换机。一句话,就是将网络功能,在通用的服务器中用软件实现。
NFV和SDN一起配合,核心是将网络的控制面和转发面分离,让所有的转发面也可以同时被控制,避免网络管理员要通过多个设备来进行配置管理(现在公司的一个IT人员的工作就很繁杂,反而是运维人员,因为有了K8这种调度神器,工作就简单多了,如果有NFV,估计IT人员的工作也会变得更加简单)

学习FPGA之二:云端加速_第6张图片

3.2: 使用FPGA来助力虚拟网络

         在网络的数据处理过程中,有一些情况不需要大量的计算资源,如:DHCP,RADIUS,但另一类需要很大的计算能力。如:路由转发,数据包处理。要同时支持大数据量处理,又要支持变化的不同的协议功能,CPU有瓶颈,如果用ASIC,又无法灵活支持变化的协议。在这种背景下,FPGA是最佳选择。

        Intel和中国电信发布了技术白皮书,在系统层面使用了FPGA作为数据平面的主要计算加速单元。

        微软Catapult 项目中使用了FPGA的智能网卡,这就是基于FPGA的网络数据包处理。

        

四:FPGA加速卡

        FPGA厂商正在逐渐从一个单纯的芯片厂商,转变为系统级解决方案提供商。

4.1: FPGA应用方案的转型

        传统芯片厂商,只卖芯片和相应的EDA软件就行了,其它就是客户自已搞定了,最多再提供一点技术支持。但这对于FPGA并不适用,因为在各个新兴的业务领域里,有CPU,GPU,ASIC可用,FPGA并不是客户的第一选择,另外,客户一般是偏向应用的新算法,新设计,并不是FPGA的开发。所以,必须要为客户完成相应的硬用平台才行。基于此原因,FPGA厂商更倾向于提供给客户一个完整的系统级解决方案。

        FPGA厂商提供的是专业板卡,通常以PCIe扩展卡的方式进行部署,板卡上会有高速I/O接口和存储资源。软件层面,还提供驱动,各类软件库、编程接口。FPGA厂商的目的是不断提供原厂软硬件解决方案的同时,也在不断吸收第三方的IP与应用,从而构建一个完整的FPGA生态系统。

        除了原厂,很多第三方厂家,如:华为,浪潮,Melanox也在推出自已的FPGA加速卡产品。虽然他们使用都是英特尔和赛灵思的芯片,但都针对各自的细分领域做了优化设计,以适应目标应用的需要。

4.2: 英特尔的FPGA加速卡

        英特尔的FPGA加速卡产品,名为:Programmable Acceleration Card,简称PAC,主要场景是加速数据中心的各类应用。因为数据中心主流的芯片是Xeon,所以,Intel的优势得天独厚。另外,也向软件开发者进一步抽象底层的FPGA硬件资源,开源了名为OPAE的技术。后续,英特尔又发布了PAC D5005,性能更好。

        再次强调一下,因为英特尔在数据中心处理器领域的核心支配地位,使得英特尔是目前唯一一个能够提供全栈式数据中心解决方案的公司。

4.3: 赛灵思的FPGA加速卡

        赛灵思发布的加速卡名为:Alveo。在FPGA器件方面,和PAC相比,可以说在伯仲之间。

4.3.3: 第三方FPGA加速卡

        第三方的加速卡:浪潮,华为,Mellanox 推出的卡。

        浪潮,华为使用的是赛灵思的FPGA。

        Mellanox是以色列的厂商,也有FPGA加速卡,最后被英伟达收购。

        好了,我认为到了重点了,FPGA虚拟化。

5: FPGA虚拟化

        传统的FPGA开发,是一种单用户,单任务,单时刻的模式,也就是说FPGA只能为一个用户和一个应用编程,而且编程者需要了解太多的知识,门槛很高。芯片的利用率也很低。因此,FPGA的虚拟化技术应运而生。

        实现方案很简单,和写软件的思路是一样的,如果要解藕一定要做抽象。这里需要抽象出一层:用来和硬件做映射,并且完成资源分配,调度,管理。我们以其中一种实现方案为例,看下图示:

                应用层:采用HDL或高层语言编写的用户应用

                                虚拟化映射工具

                抽象层:资源分配、管理、硬件映射与配置等

                           硬件映射与配置工具

                硬件层:FPGA,FPGA+FPGA,FPGA+CPU等

        对于FPGA虚拟化的主要目标和定义如下:

        1: 提供多租户使用。类似软件领域的SAAS模式吧。
        2: 资源管理:对FPGA逻辑资源进行抽象,为用户提供驱动,API,以及监控任务调度。
        3: 灵活性:上层可以支持更多场景,使用更多的语言来编写(不限于HDL)
        4: 独立性:用户之间隔离,互不干扰。
        5: 可扩展性:硬件层可以扩展其它加速板卡和不同厂商的FPGA产品,软件层需要有能力支持多种开发环境,开发语言,以及多种开发框架。
        6: 高性能:尽可能发挥FPGA的性能,虚拟化技术本身的性能损耗要尽可能的小。
        7: 安全性:保证用户安全。
        8: 稳定性:要保证系统和服务稳定运行。
        9: 开发效率:需要大幅提升开发效率,缩短设计的面试时间,增加设计和应用的竟争力。

        2004年,FPGA虚拟化的早期 层次划分:
        1: 时域划分:时间片方式轮转顺序执行小的模块。这主要是针对FPGA资源不足的场景。
        2: 虚拟化执行:将FPGA资源分类,将应用划分成多个可以互相通信的运行单元或任务。多个任务由统一的运行环境进行调度,这类似于CPU指令集的定义和执行方法。
        3: 硬件虚拟机:对硬件进行虚拟和抽象。

        随着FPG A技术发展,单片FPGA的容量,资源,处理能力提升。应用场景也不断扩展。2018年,FPGA的虚拟化重新划分了三个层次:
        1: 资源级虚拟化: 根据FPGA片上资源的虚拟化程度,分为架构虚拟化和 I/O虚拟化。
        2: 单节点级的虚拟化: 这主要是针对单个FPGA,资源管理和基础设施的搭建都围绕单个FPGA器件。
        3: 多节点级虚拟化:虚拟化的最小粒度为多个FPGA器件,这主要适用于FPGA大型的应用场景。

        下面列一下常见的虚拟化方案:

5.1: Overlay

学习FPGA之二:云端加速_第7张图片        这种方案很简单,就是增加一层,这一层的两个处理器:软核处理器 实际上也只有 英特尔和赛灵思有产品支持。主要是为上层用户提供了一个他们更熟悉的编程接口。

        这种方案可以缩短FPGA的编译时间,也方便了不同FPGA架构间的移植。因为上层编程设计与具体的底层FPGA无关。

        但是,它也有很明显的缺陷:

        1:不能实现上层用户的全部逻辑。比如:仍然需要专门的硬件工程师开发数据通路的部分。

        2:  overlay 没有业界标准的开发模型,大家得学习掌握CGRA的编程模型。

5.2: 部分可重构(Partial Reconfiguration)与虚拟化管理器(Hypervisor)

学习FPGA之二:云端加速_第8张图片

        FPGA 本身的特点就是部分可重构。可以将FPGA内部划分出一个或多个区域,并在运行过程中单独对这些区域进行编程和配flhf,以改变区域内电路的逻辑,不影响其它部分的正常运行,这样使用FPGA可以在时间和空间两个维度,由硬件直接进行多任务切换。

        拿微软的Catapult 项目为例,在第二阶段工作中,它使用了  Role 和 Shell 模式,Role 实际上就是用的可重构单元,可以根据不同用户应用进行编程和配置,而Shell 是固定的通用功能。另外,IBM的cloudFPGA 项目也用到该技术。

        但是,如果强行划分多个可重构区域,也可能严重影响系统性能。所以,如何优化可重构区域的划分数目,还是学术界和工业界在探索的问题,并不是很成熟。

5.3: FPGA资源池与虚拟化框架

学习FPGA之二:云端加速_第9张图片

        使用资源池的方式,是很容易想到的一种方式,也就是把多个FPGA或者成对的硬件资源连接起来,形成一个大资源池,供多租户使用。

        在硬件层面,需要实现多FPGA级联,在软件层面,需要有一个虚拟化框架,对用户任务进行有效的FPGA部署,具体来说就是对各类硬件资源进行分配调度,管理包括通信和数据传输。

        之前提到的微软Catapult 和 IBM 的 cloudFPGA项目都有各自的多组户支持,以及 提出的 HaaS服务(Hardware as a Service),这其实就是使用的资源池化的技术。

        在虚拟化框架协议方面的另一个重要的工作是对MapReduce框架的FPGA支持。做过大数据的都知道,MR 是大数据的基础,使用FPGA来实现map 和 reduce 的编程接口,然后将FPGA分布式部署和配置,就可以实现硬件层面的MAP/Reduce 了。

5.4: FPGA 虚拟化的未来研究方向

有一些问题需要解决:

5.4.1: 需要对FPGA资源池,虚拟化框架以及多用户支持做更多更深入的研究。

        达到理想的无限的资源池,使用用户完全无需担心硬件的使用和分配情况。虚拟化研究往往不能只有一个公司主导,而如何协调和统一多个公司开发和提出的框架和标准,是一个充满争意的焦点问题。

5.4.2: 增加FPGA虚拟化环境的可扩展性。

        理想的FPGA虚拟化平台,应该支持不同的FPGA架构,不同的厂商。

5.4.3: 需要研究安全性和可靠性

        可能被恶意用户控制和侵入,带来灾难性的后果。

        FPGA很难,入门就很难,目前我还在科普学习阶段,这次就学到这里了。

        

你可能感兴趣的:(读书笔记,芯片,FPGA,芯片,学习笔记)