文 / 周小鹏
整理 / 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可以带来一定优势,但仍然存在许多需要解决的问题。 在单个功能上,它有很大的优势,但是从系统应用来看,这种优势会大打折扣,因为它有很多系统限制条件。
- 算法和业务逻辑在FPGA映射上还需进行优化以充分利用深度流水线与并行。
- 加速卡上的资源配比仍存在问题,做图像视频编解码常需要使用外部缓存,而缓存的容量、带宽等是需要与之匹配的,数据传输的延迟也会对性能产生影响。同时部分算法需要使用非常大容量的片内块缓存。
- 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)直播平台落地应用(测试中)
————————————————
版权声明:本文为CSDN博主「LiveVideoStack_」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/vn9PLgZvnPs1522s82g/article/details/103146403
「视频云技术」你最值得关注的音视频技术公众号,每周推送来自阿里云一线的实践技术文章,在这里与音视频领域一流工程师交流切磋。