当前,全行业都在向视频化时代进行转变,视频应用在更多行业中将成为标配,相关数据显示,在 2022 年的报告中,Top 100 的 APP 中视频占比达到 69%。IDC 数据预测,到 2025 年整个视频投向数据总量将达到 72.7%,这个趋势可能带来两个较大挑战。首先,视频体量大、增长快对计算能力是一个巨大挑战。其次,用户需要更高清、更交互和更沉浸的体验,这些需求推动着视频技术的持续迭代和前进,比如近年来,沉浸式媒体方向持续加温,大模型技术正在突飞猛进,让我们看到 AI 技术能为视频应用赋能更大的空间。实现这些体验升级,在算法、交互技术、工程链路和架构方面都有很大的迭代和演进空间。
为此,火山引擎在 8 月 22 日特别举办了“火山引擎视频云 &AIGC 技术大会”(下文称“本次大会”),在本次大会上,多位技术大咖讨论了视频化时代的四大趋势和三大挑战,并首次曝光了抖音集团自研的异构算力平台和技术突破、发布了多行业的场景方案和最佳实践。其中最吸引人关注的是字节跳动视频架构负责人、火山引擎视频云架构技术总监王悦和 NVIDIA 开发与技术部门亚太区总经理李曦鹏一起进行了《普惠开源,加速视化新进程》的主题演讲,火山引擎与 NVIDIA 联合官宣开源亿级视频处理框架“火山引擎多媒体处理框架(Babit Multimedia Framework,简称 BMF)”,以全面推动全行业视频应用融合。会后,InfoQ 对王悦、NVIDIA 高级计算专家王晓伟、方杰分别进行了采访,一起深度探讨了下 BMF 的成长之路。
一、“复杂度”和“复用性”是视频处理领域的两座大山
在当今这个全行业向视频化时代转变的大背景下,视频处理已经成为了一个重要的亟待创新的领域。随着泛互、5G 的快速发展,越来越多的数据以视频的形式被记录和传播。这使得视频处理技术的研究和应用变得尤为重要。在这个过程中,我们需要处理的数据量巨大,单纯的多核 CPU 计算无法满足性能和成本的要求。因此,结合 GPU、DSP 等协处理器进行硬件加速,以提高处理效率并降低成本,成为了视频处理领域的关键技术之一。
对于一些算法开发者来说,他们可能会选择 Python 等高级语言进行开发,因为这些语言具有强大的表达能力和丰富的库支持。然而,在一些多媒体处理的方案中,可能仅提供 C/C++ 的接口。此外,在一些场景中,为了更好地实现能力复用,开发者可能会发现已有成熟的能力所使用的开发语言和当前正在开发的工程并不是同一种。这就给开发者带来了一定的困扰,如何在不同的平台和环境下编写高效、灵活的代码,成为了视频处理领域的关键挑战。
在这个“关键挑战”中,复杂度和复用性是两个重要的方面。复杂度指的是算法本身的难度,以及在实际应用中需要处理的各种问题。这些问题包括串并联衔接、预加载、运行时动态调整 pipeline、音视频强相关的复杂场合等。这些问题的解决需要对视频处理技术有深入的理解和丰富的实践经验。
复用性则是指在不同的场景和平台上,能够快速地实现能力的迁移和重用。这需要我们在设计算法时,充分考虑到不同平台的特点和限制,尽量采用通用的模块和接口,以便于在不同的环境中进行移植和扩展。同时,开发者还需要关注现有的开源资源和技术成果,充分利用这些资源来提高我们的开发效率和代码质量。
于是 BMF 应时而生,BMF 是一套通用的多媒体处理框架,通过提供简洁易用的跨语言接口、灵活的调度和扩展性,以模块化的方式动态扩展、管理和复用视频处理的原子能力。它以 graph/pipeline 的方式构建高性能的多媒体处理链路,同时还可以直接调用单个处理能力实现工程集成,帮助多媒体用户便捷、高效地将项目落地于生产环境。目前主要应用于视频转码、视频抽帧、视频增强、视频分析、视频插帧、视频编辑、视频会议、VR 等领域。
Babit Multimedia Framework(BMF),“一沙一世界,八比特(8bit→Babit)一字节(ByteDance)”,从 BMF 研发团队对该框架的命名就可以看出,团队希望从细微之处追求极致,从细微之处出发构筑一个坚实的多媒体处理框架。面对行业挑战,最新版本的 BMF 主要聚焦在“复杂度”及“复用性”层面进行了探索。
从“降低多媒体处理开发的复杂度”层面,“复杂度”主要来源于四个层面,一是来自于深度学习算法的广泛应用和快速迭代;二是包括 GPU、板卡和硬件转换平台在内的异构平台的广泛使用;三是来自于多个算法团队之间的协同开发和运维;四是分布式应用的需求,例如过去视频处理通常用单机完成,但现在越来越多的处理需要分布式完成,并需要多种硬件配合。这些都会导致整个视频处理变得越来越复杂,并且对并行处理性能和开发迭代效率的要求越来越高。
所以 BMF 主要从三个方面去降低复杂度的。首先是 Pipeline 更加灵活,调度引擎解决了复杂的 Pipeline 和并行问题。其次,BMF 具备插件化的多语言模块机制,解决了多团队协同开发和原子能力复用的问题;第三,BMF 底层对异构平台的性能优化和多框架数据转换的处理方案也解决了异构平台和框架兼容性相关的问题。
譬如,在抖音业务上,视频增强转码需要通过图像去噪、插帧、超分和质量分析等技术来满足业务需求。然而,不同团队的算法工程开发人员需要以相对宽松的耦合状态来协同实现。如果基于像 FPGA 这样的方案,从算法、模块、开发到服务实现部署,需要非常高的协作成本。以插帧模块集成到上线为例,使用 FPGA 需要两周时间,而使用 BMF 框架,开发者无需考虑过多的开发语言,视频编辑码标准和集成问题,只要专注于算法和擅长的语言本身就可以了,通常使用 BMF 只需要一周时间就可以完成上线。
同时,大家应该都已经观察到,在不同场景中,通用计算方案已逐渐存在较大差异。面对复杂的数据处理,单纯依靠通用 CPU 计算模式已经无法满足性能和成本要求,通用计算方案越来越不从心,复杂度大幅提升,会朝着异构和混构的方向发展。因此,需要结合 GPU、ASIC、ARM、FPGA 等不同算力平台进行支撑,在不同视频应用场景中实现性能和成本的最佳平衡。所以 BMF 也在“异构”层面做出了自己的创新。以视频抽帧利用 NVIDIA GPU 加速为例,业务应用层使用几乎相同的一套代码,通过 BMF 提供的视频处理、filter、GPU 场景变换检测、硬件 Jpeg 编码等构成的全链路,快速完成了从纯 CPU 视频抽帧到 GPU 全链路的加速方案,业务团队的重构升级开发成本节省了二分之一。
从复用性层面,“高复用”是指在一个系统中,组件、模块或功能可以在不同的环境和场景中重复使用,从而提高开发效率和降低维护成本。目前 BMF 已实现多语言复用和不同模式的复用,并可在兼容行业标准的同时更容易扩展生态并高度复用:
多语言的复用:BMF 在一个以 C++ 实现的算法原子能力中,可以通过 BMF API 被 Python/Go/C++ 等不同开发语言使用。据此,不同项目可以根据自己的需求来复用这些原子能力,而无需为每种语言编写特定的实现代码。这种多语言复用有助于提高开发效率,减少代码冗余,同时也有利于团队协作和知识共享。
不同模式的复用:BMF 每个原子能力既可以被构建到 BMF pipeline/graph 去使用,也可以被当作一个标准接口单独调用集成使用。这种多样化的使用方式使得框架具有更高的可复用性。开发者可以根据实际需求选择合适的模式来使用原子能力,既可以在复杂的数据处理流程中发挥作用,也可以作为独立的模块进行调用,这种灵活性有助于提高框架的适应性和扩展性。
二、成熟视频处理框架之上,需要的是“创新”
其实,在 BMF 出现之前,业界早已经有了很多成熟的多媒体框架,比如通用型 FFmpeg、Gstreamer 框架,垂直型 OpenCV 框架、MediaPipe 框架、pyav、ffmpeg-go 框架等,但放眼过去,目前它们在业务迭代、效率和扩展方面都遇到了各种问题,主要瓶颈可能在于应对复杂场景、拓展与协作、标准与兼容,尤其是对于近些年的异构计算支持逐渐有所不足,领域框架亟待创新。
于是,火山引擎基于当前行业内的主流框架进行学习,取长补短,将它们的优点综合起来,并结合自身业务驱动,打造一套精确适用于业务场景的框架。“为了更好地复用公司内部已开发的原子能力,协同算法与工程、调度异构资源,我们在逐步规划设计和迭代打磨中形成了 BMF 框架。”王悦如是说。
BMF 框架主要可以分为 4 层——业务层、架构层、模块层和硬件抽象层,在每一层面,BMF 研发团队都做出了创新。
在业务层,抖音和火山引擎满足业务多样化需求。BMF 支持全视频场景,比如体量较大且标准严格的通用转码场景,BMF 可适应视频编辑、抽帧等业务场景的不同需求;又比如大量视频 AI 应用场景,BMF 从算法 AI、工程化快速落地,实现视频增强、视频质量分析、ROI Mapping 等。此外,视频会议和云导播等实时场景也可以通过 BMF 的实时调度动态引擎支持。
在应用层面,BMF 可以将多语言,如 C++、Python 和 Go 开发模块以无缝高效的模式串联起来协同工作,用户可以根据不同的项目需求进行开发集成。为了达到这个效果,在架构中间层,BMF 自研了一个自驱跳动和动态 Graph 引擎,框架可以完成对 graph/pipeline 的调度,并配备适合不同场景的多种执行方式,在这些方面,BMF 也获得了很多专利:
Engine 层“自驱动”调度(已申专利)——每个结点“自驱”的决定自身是否需要被调度,由并行调度器实时的响应和去冗余调度。
SDK 层的多模式与 Engine 共同发挥作用,支持多种使用模式,如默认的 Graph Mode,直接调用原子能力的 Sync Mode,节省整体初始化时长的预加载 Preload Mode。同时支持支持 Graph 向外输出的 Generate Mode、由外部向 Graph 输入的 Push Mode、以 Graph 常驻服务图片场景的 Server Mode 等。
同时,BMF 可以完成跨数据类型跨设备的数据流转 Backend,BMF 框架的底层自定义通用视频数据表示层,能够将几乎所有进入框架的视频数据以统一的 BMF 数据层表示,这种统一的数据表示方式不仅可以简化数据处理流程,还具有与主流数据类型的零拷贝转换能力,进一步提高了数据传输和处理的效率。另外,BMF 框架还通过统一的数据层实现了设备间的数据拷贝加速和数据表征。当用户需要进行跨数据类型和跨设备的数据处理时,BMF 提供了简洁的 Backend 接口,将底层的复杂处理过程隐藏起来,用户只需调用一两个接口即可轻松实现跨数据类型、跨设备的数据流转。这种统一的数据表示和转换能力,以及简洁的 Backend 接口,使得 BMF 框架在跨平台、跨设备的视频处理应用中具有显著优势,用户可以轻松地实现不同设备之间的数据共享和协同处理,提高了视频处理效率和灵活性。
除此之外,在架构层,BMF 还提供常用的跨设备 reformat、color space conversion、tensor 算子等 SDK。这些 SDK 调用主要是用于创建 Media Description,这个“dp”就是“期望的转换”,在实际的视频开发中,这方面的需求是高频出现的。但由于偏细节和复杂,所以总会出现编写困惑,于是 BMF 提供了这样的 SDK,帮助用户在开发过程中统一、简洁地处理这些复杂细碎的问题。
在模块层面上,生态建设对于一个模块的框架非常重要。BMF 的设计初期也采用了模块与框架之间总耦合的设计。在内部开发者的启动下,目前已经积累了 140 多个适用于视频场景的原子能力模块。这些模块通常在不同业务实现中被复用,其中一部分模块也进行了开源。
在硬件抽象层,我们知道视频场景开发涉及到多个主流框架的协同助力,由于数据量巨大和适合并行计算特点,往往需要通过异构加速优化性能,提升用户体验。BMF 对多种主流框架的数据实现了互转切换,比如 Numpy、Pytorch 等。同时,BMF 还丰富了可支持的原子能力,使得多种主流框架数据互转和工作变得顺畅和便捷,极大降低了多媒体处理和开发的复杂度。
值得关注的是,BMF 与 NVIDIA 达成了深度合作,针对 GPU 相关框架层处理能力进行深度优化,NVIDIA 增强了 BMF 的 GPU 亲和力,在框架层面提供更多的 GPU 加速能力。同时,NVIDIA 还为 BMF 提供了许多精细优化的 BMF 模块,这些模块可以做到开箱即用,并且作为示例向开发者展示如何高效地开发 BMF GPU 模块。NVIDIA 不仅将多项技术赋能到 BMF 中,还将 CV-CUDA、CODEC SDK 、TensorRT 以及 Maxine 集成到 BMF 中,使得 BMF 在多场景下具有全方位 GPU 加速能力,通过这些能力,用户可以极大缩短研发上线周期。
要知道,一直以来,NVIDIA GPU 具有独立的视频编解码硬件,在不占用 GPU 计算资源的前提下可提供低延迟高吞吐的视频转码能力,其高带宽高算力的特性非常适合图像处理。NVIDIA 打造了丰富的软件生态,使 GPU 成为视频处理的多项全能平台,目前在 AI 大模型领域也完成了许多框架的构建并持续在探索中,走在了视频图像研究领域的前沿。可以说,此次 NVIDIA 与 BMF 的合作,就是强强联合。
三、“开源”是推动视频处理技术创新的必由之路
观察当前领域内已经较为成熟的多媒体框架,我们会发现,他们都有一个共通点——已经开源。开源意味着代码公开可访问,这有助于吸引更多开发者参与框架的开发和维护。通过社区的力量,代码可以得到更快速的发展和改进,提高框架的质量和性能。其次,开源有助于促进框架的普及和推广,公开的代码使得更多人可以了解、学习和使用框架,扩大其影响力,同时公开的代码还可以吸引更多开发者参与竞争,推动框架不断发展和进步。因此,用户需求和开发需求高速迭代的情况下,只有选择开源道路,让所有开发者都参与进来,框架才能够快速发展。
所以说,在本次大会上,BMF 官宣开源对于领域来说是一件大事,也是一件小事。“大”在经过多番打磨、在字节跳动内部经过多次实践的 BMF 终于对外开源,更多的领域开发者受益;“小”在视频处理领域的框架开源是一个必做项。“一沙一世界”的 BMF,真正做到了既能仰望天空,也能脚踏实地。
据王悦表示,“BMF 在研发之初,就将未来开源视为一个明确的路径。火山引擎看到了传统多媒体框架的短板和瓶颈,需要一个更好的框架来适应多媒体发展,共同建设视频开发生态。实际上,开源的时间点比我们最初的规划晚一些,主要原因在于我们投入大量时间在内部完善框架和功能,优化性能和稳定性。当然,现在框架在内部经过了长时间的打磨,已经大规模应用在业务中,我们认为这是一个相对较好的时机来开源。”
值得一提的是,BMF 是国内首例开源互联网公司自研的多媒体处理框架,开源后的 BMF,主要目标是降低开发门槛,加速行业视频化进程。BMF 于 2017 年启动开发,至今已经经历了 4 年的迭代和线上验证,对于火山引擎来说,这是第一次将多年积累在项目系统梳理,并将认为最有价值的能力或方面展示给行业进行广泛探讨互动,作为已经在亿级 DAU 的短视频 APP 试炼过的框架,BMF 经受住大规模线上生产环境考验,BMF 代码的较高安全性和稳定性显而易见,这说明该框架开源后,将对音视频领域及视频处理领域产生极高的价值。
“BMF 开源后,火山引擎希望框架能接受全世界多媒体开发者的审阅和监督,并吸引开发者将其应用到自己的生产环境中,积极贡献代码,进一步提升框架的安全性和稳定性。”王悦在接受采访时非常郑重地说道。
据悉,BMF 的原代码是在 GitHub 上进行开源的,后续开源贡献者的每个提交,无论是在代码、文档、设计还是其他形式都可以公开展示。在开源之后,除了持续提升和部署中化测试以及安全扫描等技术手段来保证代码质量,火山引擎还希望与全球开发者一起围绕 BMF 框架建立开发沟通渠道,为社区提供易于访问和实用的共同平台,如论坛、邮件列表和 Slack,以便讨论问题和分享解决方案。为了更加细致的 Code Review 贡献流程,火山引擎会通过大量人力和代码审查,找到并修复漏洞和错误,对于合并到主分支代码,设定严格的贡献流程和准则。此外,火山引擎还会建立响应性强的维护团队,快速响应报告的漏洞和问题,确保问题在短时间内得到解决。
另外,火山引擎还将会为项目提供明确的贡献指南,让新贡献者了解如何开始以及他们的贡献是否受欢迎。之后火山引擎还将定期举办线上、线下活动,研讨项目进展、最佳实践及相关贡献者感兴趣的议题,同时会做好权益保护工作,力求构建一个有影响力的社区。
关于 BMF 的未来,王悦表示“未来发展路径非常明确。”目前 BMF 框架已整体开源,共有 9 个开箱案例,用户在 Colab 打开后可查看详细注解并实际运行。其中,有 20 多个 API 调用范例,充分展示了 BMF API 的使用方法,特别是能同时展示不同场景的使用细节,帮助用户低成本构建视频应用。此外,因为本次 BMF 开源是火山引擎与 NVIDIA 的合作之举,所以在未来,两者将共建底层能力,优化视频 GPU 解决方案。NVIDIA 侧表示,“未来将听取社区及用户的意见,在 NVIDIA 最新的软硬件平台上进行迭代,继续完善 BMF。”火山引擎将联合 NVIDIA 持续开源更多核心能力,完善解决方案(包括更多异构硬件支持、原子能力及移动端支持等),构建新模块,加速视频生态建设,对 BMF 感兴趣的同学可以到 GitHub 上去了解项目详情,共创 BMF 开源的理想社区。
评论