首页-百威平台-百威注册-比特外库百威娱乐
首页-百威平台-百威注册-比特外库百威娱乐报道,压缩技术对于图像、视频应用十分重要。在保证同样主观质量的前提下,如何将图像压缩到更小体积,以便于互联网信息传输,火山引擎视频云团队不断突破压缩技术“天花板”。
字节跳动在公司成立之初便建设了图像处理平台,起初主要服务于今日头条APP的图文资源。随着业务扩展,后逐步服务于抖音图集、短视频封面、图虫等用户几乎能看到的所有图片展示场景。火山引擎视频云团队将字节跳动图像处理的实践,整理为《 veImageX 演进之路》系列,将从产品应用、后端技术、前端技术、算法、客户端 SDK 详细解读字节跳动背后的图像技术。
veImageX是火山引擎基于字节跳动内部服务实践,推出的图像一站式解决方案 ,覆盖上传、存储、处理、分发、展示、质量监控全链路应用。
背景
互联网内容的展示离不开图片,通过 CDN 展示分发图片可以提升图片访问速度,但是也需要为带宽付费。HEIF 图片格式有着卓越的压缩性能,相比 WebP 可节省 30% 的图片码率,由此能够为业务节省相当规模的带宽成本。
但 HEIF 格式是一把双刃剑,相比其他格式,在提升压缩率的同时,也需要消耗更多 CPU 计算资源。为了降低 HEIF 格式的编码计算成本,veImageX 采用了FPGA异构架构,逐步将 HEIF 编码的流量从 CPU 计算集群迁移到 FPGA 计算集群。
在流量迁移过程中,最初整体流量较小,FPGA 编码服务看起来很稳定。但随着迁移过程递进,当 FPGA 的单卡 QPS 上涨到一定阈值后,FPGA 卡所在宿主机的性能瓶颈逐渐暴露出来,从而影响整体的迁移工作。
本文会对迁移过程中遇到的性能瓶颈进行分析,并给出优化解决方案。经过一系列的优化措施,veImageX 整体 CPU 负载从80%降低至30%,相应的服务延时从140ms降低为4ms。
架构
首先,我们看一下 FPGA HEIF 静图分发链路的整体架构。
链路分为三块:
业务 App:一般会集成 veImageX 的图片 SDK。既可以兼容各类图片格式(自然也包括 HEIF),提供图片的下载、解码、展示功能。也支持将访问图片过程中产生的指标数据上报,以便于在控制台查看这些性能指标,比如解码耗时、图片加载成功率等。
veImageX 分发基础链路:主要解决图片分发问题,提供基础的图片实时处理能力。其中 CDN 缓存了图片请求,提供加速访问的能力;veImageX 源站服务主要负责访问权限的校验、流量控制、图片资源下载以及静态图片的主体处理流程。对于 HEIF 静图编码场景,veImageX 源站服务则需要和 FPGA HEIF 编码服务互动,协作完成。
FPGA HEIF 编码服务:自上而下可分为编码服务层、编码驱动层、编码硬件层。
为了解决计算资源异构引入的耦合问题,FPGA HEIF 编码能力通过 HTTP 服务化的方式提供出来。所有的 FPGA 卡部署于字节跳动自研的Lambda计算平台。通过 Lambda 函数+资源虚拟化的方式,将 HEIF 编码功能抽象为上游可直接调用的服务,并且能够确保将编码请求均衡地调度到各个 FPGA 卡上。物理机上的每一张 FPGA 卡和对应的主机 CPU 以及内存资源都被打包,经由 Executor 管理。此外,为了防止 FPGA 卡被突发流量打挂,Executor 内置了一个执行队列,用于控制 FPGA 卡的并发吞吐。
编码服务层主要负责解析 HTTP 请求,获取待编码的图片数据。待编码的图片数据一般通过 JPEG 格式传入,因此其中内嵌了一个 JPEG 解码器。此外,veImageX HEIF 支持自适应编码选项,通过服务层内的自适应模型预测编码所用到的质量参数。服务层中的 HEIF 编码器是一个适配层,屏蔽了底层计算架构的差异,对于 CPU 和 FPGA 都可以提供相同的编码接口,将传入的 RGBA 像素矩阵编码为 HEIF 码流。