基于FPGA的异构计算在多媒体中的应用

2019-11-20 10:14:02 浏览数 (1)

目前处于AI大爆发时期,异构计算的选择主要在FPGA和GPU之间。尽管目前异构计算使用最多的是利用GPU来加速,FPGA作为一种高性能、低功耗的可编程芯片,在处理海量数据时,FPGA计算效率更高,优势更为突出,尤其在大量服务器部署时,隐形的运营成本会得到显著降低。本文来自CTAccel的研发总监周小鹏在LiveVideoStackCon2019 北京站上的分享。

文 / 周小鹏

整理 / LiveVideoStack

大家好,我是来自CTAccel的研发负责人周小鹏,我分享的题目是《基于FPGA的异构计算在多媒体中的应用》。FPGA从1984年被发明到现在已经35年了,现在的FPGA有足够的规模去做大规模计算。我们团队主要是研究它能否解决多媒体领域中的现有问题。

1. 团队介绍

联捷计算科技成立于2016年,英文名CTAccel。实际上我们团队从2014年就开始研究这项技术了,主要致力于以FPGA为载体的数据中心的异构计算,让它能帮助我们解决一些实际的问题。

2. 主题

今天分享的主题包括两点,一个是基于FPGA的异构计算的一般性问题,另一个就是我们团队(CTAccel)基于FPGA的异构计算方案。

2.1 基于FPGA的异构计算的一般性问题

对于FPGA在异构计算的一般性问题,结合我们的认识,从以下五个方面来说。

2.1.1 当前处理的困境

上图左边描述的是2016年AMD发布的一个报告。Intel宣布停止CPU的Tick-Tock发展模式,Moore定律的失效意味着CPU性能的提升慢于之前18个月为一周期的速度。但是数据计算需求增长却越来越快,对计算的需求越来越多。这些需求包括多媒体转码,搜索计算,加解密以及矩阵的计算。由于计算需求越来越大,就需要新的底层硬件来支持大规模计算。

上图描述的是网络和存储本身的技术发展,数据中心内部网络速度越来越快,从最早的1Gbps到现在100Gbps;存储速度也从机械硬盘的0.7MB/s加快到固态驱动器的1GB。但是CPU处理IO的速度没有那么快,例如AES256加密和SHA-1签名,如果是使用单核CPU处理,处理能力只有100MB/s,与存储速度之间存在很大的差距。从网络的角度来讲,如今处理网路协议所需要的CPU核数也是很大的,CPU处理速度是不能匹配网络处理速度的。如果从硬件方面解决此问题,FPGA可以提供一些帮助。

2.1.2 FPGA及其历史

传统的FPGA概念,就像图中所示。实际是把电路板上一些小的门电路,安装在芯片上通过改变连线来改变它的功能,叫做现场可编程门列阵。它其实是一个半定制化专用集成电路,里面已经有一些基本门电路,也会有一些触发器,以及互联资源。通过改变这些互连资源对门电路、触发器的连接方式来改变功能,这样就可能实现例如数字滤波器、矩阵变换等基本功能。现在的FPGA相较之前已经发生了巨大的改变。之前只有门电路、触发器,互连资源,但是现在里面已经包含了比较高层一点的功能模块,例如增加dsp、bram,甚至包括ddr控制器、pcie控制器、serdes、光口,以及arm、powerpc、gpu等系统级的单元。

在30多年的时间里,FPGA大致有四个发展阶段,从1984年赛灵思发明FPGA到1991年这段时间的主要发展体现是芯片晶体管数目的逐渐增多,主要解决的问题是如何扩大电路的规模。从1992年到1999年是FPGA的扩张阶段,这一阶段依然在探求扩大电路规模的方法。由于当时芯片规模依然较小,为实现复杂功能,这一阶段解决的另一个问题就是通过软件进行芯片间的功能分治。第三阶段是从2000年到2007年,当时FPGA的规模已经相对较大,这一阶段主要解决的是数字信号处理方面的问题,比如软件对互连资源的布局布线,如何充分利用晶体管等问题。从2008年开始进入到FPGA的转型阶段,这一阶段不仅包含可编程逻辑,还包括Ethernet MAC和PCI Express以及一些高速接口、微处理器,甚至包括GPU、浮点计算器单元。FPGA在朝着系统化方向发展,规模越来越大,为计算机提供最底层的技术基础。在不断发展的过程中,FPGA的功耗越来越小,容量越来越大,速度也越来越快,这也是它现在可以用于数据中心的技术基础。

2.1.3 基于FPGA的异构计算的特点

CPU、GPU都基本采用冯诺依曼架构,它的组成部件包括指令存储、数据存储、译码逻辑、算数逻辑单元以及共享内存。它的工作原理是将取得的指令和数据进行指令译码,然后执行返回结果。

CPU、GPU都是典型的单指令多数据的模型。CPU中ALU数量有限,可以支持复杂的控制逻辑,对应的缓存容量也较大。在GPU中,算术逻辑单元较多,但是可完成的控制种类较少,相应缓存容量也有限。两者解决的问题不同,但他们的最小执行单元都是指令。编程的本质就是将算法和业务逻辑拆解为顺序执行的指令的过程。

对于FPGA来讲,它是自由指令架构,本身只提供部件池。组成部件包括CLB(可编程逻辑单元)、BRAM、DSP单元、PCIE控制器、时钟单元、高速收发器等。可以通过设计,利用这些部件实现不同功能。工作流程也可根据应用定制。从计算的角度来讲,它可以支持单操作多数据,因为它不需要译码,故也不存在指令的概念。同时它也支持单数据多操作,可对同一数据多次操作。FPGA的最小执行单位是寄存器和算术逻辑单元,FPGA编程的本质是将算法和业务逻辑映射到FPGA基本部件,这与CPU也是不同的。

基于FPGA的计算过程,相比于CPU/GPU的优点:

1)延时低稳定性强

FPGA可定制单操作多数据、单数据多操作以及混合模型,可形成更细粒度的操作、流水和并行。并且由于数据流动路径固定,处理延迟也是固定的。因此,它会有低延时强稳定的优点。

2)功耗低

晶体管全部用于算法和业务处理,冗余少,利用率更高。

3)并发度高

对于FPGA,芯片资源是足够控制并行和顺序执行之间平衡的。在FPGA的应用单元和CPU、GPU有效率利用核数相当时,由于延时更低,所以FPGA并发度更高。

4)IO资源丰富

FPGA有高速接口,甚至包括光口、以太网接口,可以支撑靠近接口的计算。

下面将以最基本的编解码原理来说明FPGA适合图像编码的原因。上图描述了视频编码的过程。首先将视频划分为不同编码单元,然后对每个单元进行编码,先经过变换然后进行量化,之后进行反量化反变化,得到重构的数据再和原数据进行预测编码,对量化的残差数据进行熵编码。功能单元的划分和每个单元的处理是串行的过程;而处理过程的预测、变换、量化都是矩阵乘的过程,又是并行过程;熵编码也是串行的。整体过程是串行并行相结合的,CPU、GPU难以支撑这个过程,FPGA中可由不同电路完成。

从实测数据来看,上图柱状图展示了JPEG图压缩到一定大小时,FPGA和GPU方式下QPS值的大小。可以看出,无论在何种情况下,FPGA相对来说是有一定优势的。这种优势来源于它的底层技术架构。

2.1.4 FPGA异构计算的系统级问题

FPGA可以带来一定优势,但仍然存在许多需要解决的问题。在单个功能上,它有很大的优势,但是从系统应用来看,这种优势会大打折扣,因为它有很多系统限制条件。

  1. 算法和业务逻辑在FPGA映射上还需进行优化以充分利用深度流水线与并行。
  2. 加速卡上的资源配比仍存在问题,做图像视频编解码常需要使用外部缓存,而缓存的容量、带宽等是需要与之匹配的,数据传输的延迟也会对性能产生影响。同时部分算法需要使用非常大容量的片内块缓存。
  3. FPGA在系统级别的资源配比,Host调度上也会存在一定的效率问题。我们如何在用户无感知的情况下,对系统状态进行监控,这是我们在软件侧要解决的问题。为适应部署需求,还需要解决虚拟机支持和docker部署方面的问题。

从产品侧来讲,系统在FPGA异构卡、网卡、ssd与其他异构平台之间能否P2P传递数据,让系统更有效也是需要考虑的。FPGA与Host之间能否有效传递数据也是我们研究的一部分,并且也尝试了不同的技术。

2.1.5 FPGA异构计算的开发流程和方法学

上图展示了异构系统开发的流程。左图展现了传统FPGA的开发流程,可以看出和芯片的开发流程是相像的,由于是硬件开发,所以需要代码转换的过程,还需要分析电路是否满足要求,要做仿真、测试、优化,最后才能得到满足要求的设计进行板级测试。为了满足数据中心的快速落地的需求,FPGA需要用到更高层的工具和编程语言。

除了工具、开发流程,平台也是一个方面。在我们的开发中,有固定的hdk和sdk,会提供对应的接口操作基本驱动、hdk里的监控接口。真正的设计在于功能的设计。

从产品的角度讲,我们主要考虑数据可用、接口可用、系统稳定易用、迁移成本低、性能这五个维度。应用要能提供足够多的接口对接原有的软件生态。系统稳定是最基本的,能否一键升级、一键部署也是需要考虑的。另外迁移成本包括修改接口对用户流程的影响,端对端整体分析才能确定系统性能的提升量。从性能指标来看,,除了吞吐,还有延时、任务工作时长、CPU利用率等。当单卡无法实现功能时,多张卡之间的调度、功能切分,以及使用多卡时性能是否能线性增长都是需要考量的。

2.2 CTAccel基于FPGA的异构计算方案

接下来,我讲一下针对以上谈到的一般问题,我们团队所做的方案。虽然是具体应用,但是它不会违背我们之前分析的问题。具体从目前主要产品及产品形态、多媒体图像的处理,和视频视频以及目前已落地应用的情况四个方面分享。

2.2.1 CTAccel主要产品和产品形态

目前,CTAccel主要有两款产品。一个用于图像处理,一个用于视频。产品设计的主要目的是为了提升计算性能,提高用户体验。节省客户投资也是我们产品的优点之一。

我们的产品有两种形态,一种是基于硬件卡形态的。这种主要集中于私有部署,用于客户有自己的数据中心或者自己的服务器的情况。客户可以自行购买硬件卡插入服务器,将我们的软件安装在卡上就可以使用我们的产品。另一种是基于公有云的。我们的产品可以支持不同的云平台。

2.2.2 CTAccel的图像处理方案

图像处理主要有三个功能,分别是解码器,像素处理,编码器。像素处理上,我们主要做缩放、旋转、裁剪、水印、去噪等处理。功能可以串行调用,也可以顺序调用。编码器目前可支持JPEG,Webp,HEIC。这些都是有损压缩,相互之间可以通过编解码互转。除最基本的以外,JPEG目前还可以实现渐进式转码。Lepton是专门用于无损压缩的,它可对JPEG格式的图片再一次压缩,达到更好的压缩效果,主要用于存储。软件栈可以支持OpenCV、ImageMagick、GraphicsMagick、Lepton以及ffmpeg,我们目前还在设计支持restful web API的软件。我们也做了一个图片处理服务的设计供大家参考。最右侧的图展现了我们产品的分布,包括AFU和Service&Driver以及OpenCV等接口。客户可以直接调用外面的接口,如果需要WEB接口的话,我们也可以再封装一层。

我们做了很多的功能,也聚焦了几个主要应用领域。其中一个是AI预处理。在GPU处理器前,需要对图像进行解码,压缩到规定尺寸,还有一些归一化处理。针对这个问题,我们希望能对图像进行流量清洗处理,直接得到可以被GPU处理的图片。图像转码的应用,即各种格式图像进行互转。图像存储主要用Lepton格式。

这张图展现了我们产品优点体现在哪里。通过计算加速,整个链路延时会缩短。对于计算资源消耗大的问题,通过优化可以增大系统的吞吐量。可以看出,存储上的优点是明显的,资源压缩到越小,越节省空间。

通过使用FPGA卡预处理,可以更好的与GPU匹配,更好的发挥GPU性能。下面是一些具体的案例及其性能。

  • JPEG转码WebP案例
  • JPEG与Lepton互转案例
无损存储的性能无损存储的性能
  • JPEG转码JPEG案例
  • Heic转码JPEG案例
  • AI互转匹配情况

2.2.3 CTAccel的视频处理方案

视频处理方案包括H264,H265的编解码处理以及一些像素处理。软件支持ffmpeg和gstreamer。

2.2.4 落地应用

1)手机落地应用

2)O2O平台落地应用

3)社交网站落地应用

4)直播平台落地应用(测试中)

0 人点赞