FPGA与CPU相比进一步强化了算力,尤其适合各类并行化计算;而与GPU相比,其更细粒度及灵活的并行化及流水线控制天然的对复杂算法有更强的适应性,能够充分发挥出算力优势,从而带来计算效率的提升。针对数据中心算力不断增强,算法不断细分、复杂化的大背景下,FPGA具有更好的发展前景。

文/樊平

整理/LiveVideoStack

大家好,我是深维科技创始人/CEO 樊平,非常高兴有这个机会跟大家分享和交流一下,如何基于FPGA来构造高性能的图像处理解决方案。

1.解决方案提出的背景

随着需求的快速增长,目前数据中心需要处理的图像越来越多,处理内容包括图像转码,像素级的操作、缩略图处理以及各种图像的智能分析,这些处理需求带给数据中心的负担日益加重。

2. FPGA图像处理加速的潜力

2.1 深维科技在图像方案上的性能数据

上图是深维科技目前在图像方案上已经做到的性能数据,第一是图像的吞吐(每秒可以处理图片的数量),目前CPU是根据E5的2650双U服务器的性能去比较,加一张FPGA优良版的加速卡就可以做到20倍的吞吐。在业务流程里对延时相对都很敏感,深维可以在提升吞吐的同时降低延迟达5倍,数据中心的成本因为服务器成本和所有功耗成本的降低,使得整体的TCO的降低可以达到5倍以上,也就是降低到原来的20%以下。同时可以改善功耗,提高10倍能效比。这些性能都是通过深维科技一款名叫ThunderImage的产品为大家提供的。

2.2 ThunderImage介绍

除了刚才提到的性能,深维科技对丰富的图片的格式进行了支持,例如JPEG图片编解码的处理。随着目前高清图片内容越来越多,大家需要对图片的尺寸/压缩率做进一步提升,这其中比较流行的一种格式是Google从VP8编码提取出来的一套标准WebP。深维科技目前很好支持了WebP的M4和M6两种模式,另外深维科技也支持其他图片格式和一些图片的缩放算法,像Lanczos这类比较复杂的滤波算法都可以支持。

用户在数据中心进行方案集成过程中,传统数据中心的设计环境是软件,把FPGA导入到数据中心之后,对方案的可用性有非常高的要求。深维科技把整个方案做了很好的封装,以ImageMagick和OpenCV标准开源框架为接口进行替换,用户只需要改动几行代码之后就可以对接口完成替换。这样的使用模式完全类似于软件的形态,并且可以做到无缝兼容,包括一些像VIPS这类型的新框架深维科技都在逐步支持。

在业务部署的过程当中,深维科技从客户得到很多关于细节的反馈,其中一个常见的问题是图片在业务流程里部署时,客户发现硬件的编解码往往和参考软件的结果存在不一致的现象,这是由于硬件做加速过程当中,为了适应加速的效果会对算法进行改动。

现在这款ThunderImage方案可以做到硬件编解码和参考软件结果完全一致的,每个比特的结果和CPU的流程跑出来的结果都可以做到严格一致,对实际业务的评估部署阻力会降低很多。ThunderImage方案可以做到每个像素都一样,因此满足了实际业务的场景需求。

深维科技的整个产品都可以部署在两种平台上,一种是云平台,例如AWS和华为云,其他云平台也会陆续发布出来。另一种是线下部署,深维科技在线下的本地部署支持了Linux的不同版本,可以比较方便匹配客户不同的生产环境配置,服务器也可以支持英特尔和AMD两款CPU的型号。目前硬件平台可以支持Alveo U200、Huawei FX300以及一些早期的型号,根据客户的场景可以比较快地适配到相应的板卡。

3.常见的业务场景

涉及图片部分的产品有几个典型的应用场景,第一是缩略图的场景,整个流程包括图片的上传、JPEG解码、缩放、JPEG编码和推送客户端,很好的适配了以下几种典型场景:第一是手机的云相册,客户上传大量的图片到云端,在不同的终端上浏览上传的图片,在浏览时不需要把原图转成各种尺寸的图像推送到客户端,只需要在线算出不同的尺寸推送到客户端,在电商平台和社交网络上都大量涉及到这样的应用场景。

第二个场景是WebP转码,把JPEG格式转成WebP格式,达到节省30%以上的带宽或者存储的目标。另外深维也支持配合类似AI Inference的任务,在AI Inference Engine上输入图像尺寸大部分都是小图,小图通常是CPU端去配合生成(预处理),在Inference之后还要有一些存档和编码的需求。目前方案很好地适配了预处理和后处理的场景,可以实现整个AI Inference的全流程加速。

4.生产环境集成

4.1 与OBS进行集成

关于如何与生产环境集成,深维科技与OBS有一个比较完整的方案,首先上图是一个典型的场景,需要有大量的JPEG图像上传到OBS,上传完之后的OBS包含了大量用户图片。第二个阶段是用户会从安卓、苹果、Windows等不同的终端去发起一个访问,这个访问会发向CDN,由于大部分情况下本地各种终端之间存在差异,访问的命中率会比较低,CDN会检查并返回给OBS进一步请求图片。请求之后OBS会调用ThunderImage以最高的性能反馈给OBS相应尺寸的图片,最后推送到客户端,与OBS这种常见生长环境集成的模式还是比较清晰的。

4.2 核心性能指标分析

如图是性能指标的分析,第一个是QPS(每秒可以处理图片的张数),这个核心指标是在1K图片缩放到240×180的时候可以达到4900张的峰值,4900是目前深维科技在同类产品里所能看到的最好效果。另一个数字是吞吐(每秒按照能处理输入图像流量的大小),吞吐可以达到1.8GB,相应此时CPU的流量是136MB,大概有15倍左右的加速。另外在延迟方面,在4K转640×480图片尺寸的时候,ThunderImage可以做到58毫秒,此时CPU延迟已经达到1303毫秒,之间存在20倍左右的差距。在FPGA进行加速时,也就是将FPGA插到一个服务器里,服务器可以在性能有20倍的提升的同时做到CPU的利用率只有4%,纯CPU版本是100%,因此整体加速效果是一致的,ThunderImage在各方面都有接近20倍的性能提升,有些方面性能提升还要更高一些。

4.3 通用计算方案

FPGA加速效果在图片处理方案上是非常明显的,在FPGA计算加速方向上已经有各类方案,包括GPU、CPU、FPGA和ASIC。方案的比较在整体上有两个重要的约束:效率(追求性能)和灵活性。FPGA相对于GPU的底层有更细粒度的并行化和流水线的控制,能够做比特级、任意数据不对齐的操作,所有这些灵活性和底层更细粒度控制带来了更好的计算效率,相对于整体就会带来低延时、更高的能效和性能,所以深维非常看好FPGA将会成为下一代数据中心非常重要的通用的计算加速载体。

FPGA相对ASIC有一个很明显的好处,ASIC在整个设计生产环节需要18个到24个月流片周期,而且对量也有一定的要求。FPGA有这些好处的同时也存在编程比较困难的致命问题,因此FPGA的设计开发有着很大的挑战,开发周期也会比较长。数据中心主要的用户以软件开发为主,软件开发目前追求敏捷和快速迭代,这种长周期的开发形态非常制约业务部署。

4.4 软、硬件开发方法区别

深维科技针对以上问题也提出了解决方案,如上图所示,最左边的是CPU的软件开发流程:写代码、编译,排除语法错误、运行,根据实际运行时的错误进行调试。

FPGA+CPU的开发流程传统是基于硬件设计语言去做的,Verilog/VHDL设计流程涉及到的环节也需要写代码,对等同样复杂度算法要增加10倍以上的代码量,因此整个设计流程非常复杂。对比两个系统开发流程就不难理解为什么基于硬件设计语言的FPGA开发过程往往需要半年到一年的周期,而不是软件开发的周期只要数周到几个月的时间。

赛灵思也注意到了设计流程的复杂度,于是在2012年收购了AutoESL公司,这家公司提供HLS高层次的设计方法,这个方法很好的支持了C和C++语言来编程FPGA,这种方式放到最右边的框图对流程进行相应的简化,首先是系统层设计OpenCL,Kemel设计是使用是C和C++语言来写代码,但需要加一些标注。在软件形式下去编译仿真程序,排除语法错误、运行仿真程序,迭代多次后完成。在仿真环境上调好以后才需要上板生成FPGA程序,编译成FPGA最后做一次,然后再上板去调。这个流程显然已经简化很多,而且不需要频繁在硬件层面去调试,大部分工作都是在软件环节去做。

5. 深维科技的核心能力:快速开发,全栈优化

很多客户都已经试过了HLS这套开发方法,并对开发迅速这一特点有所体会,但是对于最后能不能达到预期的性能提升还存在一些问题。因为中间也经过很多年的尝试和成熟收敛,HLS已经取得了比较好的效果,普遍的认识是HLS与RTL相比,后者在细节优化上要更好一些。深维科技目前做了一些尝试,之前提到能够做到20倍以上的性能加速,应该是超过了一些RTL的产品性能。

深维科技在实现性能加速的过程中做了一些特殊的工作,关于OpenCL和HLS系统设计的范围,首先在CPU有一个Opencl描述的调度,数据是通过主机的DDL和板上FPGA加速卡的DDL进行交换。FPGA有一些相应的kernel,kernel目前是用HLS和C++来描述的。这样的任务有几个需要解决的问题,第一个问题是如何做到快速开发,如上文所述,使用C++和HLS就可以加快推出方案的速度。第二个问题是深维科技有面向行业的应用开发平台,这样可以简化面向图像处理应用领域时有通用的开发平台,可以对很多类似的任务进行共享,例如调度、适配、框架这些事情。另外还有组件库,深维科技把Codec和各种处理算法已经变成了一个标准的组件,可以在平台上对其进行非常方便的组合。

另外针对开发速度变快之后性能如何提升的问题,深维科技提出了全栈优化的技术。全栈优化是从算法层、架构层到底层的优化技术,这也是由于HLS往往会遮蔽底层实现过程,当性能达不到要求时,深维科技把综合布局、布线优化方面,在底层展开进行进一步优化,这主要依托于深维科技在EDA和FPGA芯片的设计经验,为了提升效率,深维科技也有相应的EDA的工具。综上,我们比较了一下整体研发的效果,在FPGA加速里有三类设计方法,第一类是CPU软件设计方法,它的特点是流程复杂度低,但是产品性能也低,项目周期很短。第二类是FPGA+CPU用传统RTL的设计方法,它的特点是流程复杂度非常高,性能比较高,但是项目周期非常长。第三类是深维科技目前在实践的方法FPGA+CPU(HLS+DPComp),这其中涉及到深维科技自己的工具和方法,设计方法的流程复杂度中等且内部可控。整个项目周期能够达到与软件开发类似的周期(15周到数月),并且可以达到非常高的产品性能。

活动推荐

假如您想了解更多关于FPGA的硬件加速特性,以及在视频、图片编码与转码以及AI计算方面的技术探索与实践。12月13日·深圳,LiveVideoStack联合赛灵思,邀请CTAccel、Aupera、DeePoly等4位技术专家共同打造【赛灵思视频加速技术】专题,您可以近距离与众多专家深入探讨,还能现场体验产品Demo。点击【阅读原文】即可报名。

基于FPGA异构计算快速构建高性能图像处理解决方案相关推荐

  1. mysql htap 开源_基于开源应用快速构建HTAP系统

    原标题:基于开源应用快速构建HTAP系统 利用ProxySQL.MySQL.ClickHouse快速构建HTAP系统1. 关于ClickHouse 企业里随着数据量的增加,以及日趋复杂的分析性业务需求 ...

  2. 在 FPGA 上快速构建 PID 算法

    在 FPGA 上快速构建 PID 算法 副标题:优秀的IC/FPGA开源项目(四)-使用HLS构建PID算法 <优秀的IC/FPGA开源项目>是新开的系列,旨在介绍单一项目,会比<优 ...

  3. 基于FPGA的快速傅里叶变换加速(三)

    基于FPGA的快速傅里叶变换加速(三) 硬件加速介绍及部分verilog代码实现 1. 硬件加速 1.1 FPGA 1.1.1 FPGA介绍 概念: 基本结构: 工作原理: 1.1.2 开发板 开发板 ...

  4. 基于FPGA的视频图像直方图均衡 图像处理 图像增强 VGA对比度增强CLAHE

    基于FPGA的视频图像直方图均衡 图像处理 图像增强 VGA对比度增强CLAHE 本设计是基于FPGA的视频图像直方图均衡,实现的效果是可以实时地将摄像头采集的图像进行直方图均衡,具体过程是FPGA控 ...

  5. 基于FPGA的快速FIR算法FFA

    理论一:基于FPGA并行FIR的设计(理论篇) 经过理论1的推导使用FFA算法从新推到组合公式: 可推到出两路并行: FFA滤波器结构: 3路并行结构如下:

  6. 【python 算法接口】使用FastAPI框架快速构建高性能的api服务

    无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家.教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家.点这里可以跳转到教程.人工智能课程 一.FastAPI ...

  7. 基于FPGA+MPU+MCU全自动血细胞分析仪解决方案

    全自动血细胞分析仪是医院临床检验应用非常广泛的仪器之一,用来检测红细胞.血红蛋白.白细胞.血小板等项目.是基于电子技术和自动化技术的全自动智能设备,功能齐全,操作简单,依托相关计算机系统在数据处理和数 ...

  8. 基于开源应用快速构建HTAP系统(2)-阿里云开发者社区

    上述规则的意思是,当SELECT语句中包含 "+CLICKHOUSE" 关键字时,就会自动转发到 ClickHouse 后端去处理,其余的都发送到MySQL后端处理.例如下面这两条 ...

  9. Linux三大主流网站构建平台,Linux快速构建LAMP网站平台

    1.1 问题 本例要求基于Linux主机快速构建LAMP动态网站平台,并确保可以支撑PHP应用及数据库,完成下列任务: 1)安装LAMP平台各组件,启动LAMP平台 软件包:httpd.mariadb ...

最新文章

  1. jQuery和dom的相互转换
  2. Android程序如何在代码中改变图片原有的颜色
  3. 2018-11-25
  4. 薅羊毛丨5个平价好物,终于终于终于打折了!
  5. MyBatis:事务回滚
  6. dubbo:reference、dubbo:service和@Service、@Reference使用情况
  7. c语言如何一直变换颜色,【图片】(原创)用纯C变了个变色输出字符的程序。。。【c语言吧】_百度贴吧...
  8. 收藏 | 小目标检测的一些问题,思路和方案
  9. Linux运维人员成长之路学习书籍推荐(未删减版)
  10. 编写有效用例电子版_JavaScript ES6代理的实际用例
  11. 既然现在处理器性能过剩,为什么PC用起来不流畅?
  12. Javascript中常用的经典技巧
  13. Intellij IDEA 神级插件!效率提升 10 倍!
  14. 3D变化——旋转的立方体
  15. 图像处理在医学方面的应用
  16. 2019CCPC湖南全国邀请赛(广东省赛、江苏省赛)重现赛
  17. 【最新】报表开发工具-->FineBI安装与启动---Windows
  18. 内存的基础知识(常用数量单位、进程运行原理、存储单元、内存地址、绝对装入、静态重定位、动态重定位、静态链接、动态链接等)
  19. 为什么用vue,它解决了什么问题,如何使用它?
  20. 微软预览word_如何在Microsoft Word中更改语言

热门文章

  1. 粘性控件,滑动停留StickLayout(导航栏滑动停留)
  2. ExtJS + Gears
  3. 基于SpringMVC、Maven以及Mybatis的环境搭建 【转】
  4. hdoj1428 -- 漫步校园 (记忆化搜索)
  5. lsof 详解 (转载)
  6. virtual function的一些心得
  7. Cisco测试命令和TCP/IP连接故障处理
  8. 洛谷 - P3355 骑士共存问题(二分图最大独立集)
  9. CodeForces - 1263A Sweet Problem(思维,水题)
  10. DeepSORT多目标跟踪算法