ai编码插件(实时高密度AI辅助编码的ASIC解决方案)
作者 / 周炎均
整理 / LiveVideoStack
大家好,我是周炎均,NETINT的技术总监和软件架构师。很高兴有机会能够和大家交流NETINT的实时高密度AI辅助视频编码的ASIC解决方案。首先,请允许我简单介绍一下NETINT Technologies Inc.。NETINT是一家专注于新型智能存储和视频/图像编解码解决方案的科技公司,在温哥华、多伦多和上海都设有研发中心。NETINT自主设计的SoC可提供基于ASIC的超大规模、超高密度、超低延迟的视频解决方案,我们的T系列视频转码器产品已被全球众多顶级大公司所使用。
接下来,我要谈一谈基于ASIC的高密度AI辅助视频编码解决方案,以上是本次演讲的议程。我会首先讲解一些我们正在设计的ASIC解决方案的典型应用场景,虽然这些应用场景并不新颖,但是通过使用ASIC解决方案,它们将会变得更加具备经济性、高效性和可大规模实用性。其后,我会讲解如何使ASIC解决方案更具适应性——即如何确保它有较长的产品寿命,并且在不同的操作系统中可以更易于使用,以及如何方便高效地集成到不同的应用上。我还会讲述如何扩展ASIC方案,包括在服务器内部扩展硬件加速器的容量,或在服务器外部扩展容量。同时,我们也会探讨一些有关降低延迟的话题。
1 案例分析1.1 AI辅助的云上感兴趣区域(ROI)编码
第一个典型的案例是人工智能辅助的云上感兴趣区域编码。工作流程通常是先使用DNN引擎来识别感兴趣的区域,并生成兴趣区域图。在这个例子中,我们简单地使用一个人脸检测模型来框出人脸,边界框坐标就是ROI布局区域,这个ROI区域会反馈到编码器,然后由编码器通过对兴趣区域使用较小的QP,从而为该区域保留更多详细信息。使用ASIC解决方案,可以有效减少此类案例的延迟,因为我们把视频编码器和DNN引擎搭配使用,极大地简化了整体工作流程,能够实时高效地执行此类操作。
1.2 针对场景和视频类别的AI辅助视频编码
另一个典型的用例是针对不同场景或视频类别的AI辅助视频编码。通常情况下, 这类编码流程是使用DNN引擎对输入视频进行分类,并生成一组编码参数,然后使用新参数调整或重新配置编码器,可能涉及的适应性参数包括:阶梯分辨率/比特率、CRF值、GOP结构等。在流媒体开始大规模流行前,视频ABR梯形图需要预先编码,从经济性上讲仅适用于预编码和视频点播之类的应用场景。现在,通过ASIC解决方案所独具的实时编码能力,就可实现在直播过程中应用此类技术。
1.3 使用NSFW内容检测的实时流媒体
使用NSFW(不宜浏览内容)内容检测实时流媒体,指的是通过NSFW识别媒体中所包含的色情、暴力之类不宜浏览的内容。通过对输入媒体流的解码,使用DNN引擎进行NSFW检测,如果在媒体中发现此类内容,系统会向上层报告NSFW事件,而上层会下达模糊或直接阻止此类内容的指令,在完成编辑之后再发送视频到编码器进行真正的编码。ASIC解决方案可有效减少此类处理过程中的延迟,简化了工作流程,并且具备实时性。ASIC解决方案使复杂的AI辅助视频编码案例,具有了可扩展性、可适应性和经济性。
2 适应性 – 如何确保产品使用周期
再来谈谈产品的适应性,即如何延长产品寿命。开发芯片是一笔很大的投资,仅研发费用就高达数千万美元,这个产品可能需要几年的时间才能成熟。我们希望产品能够在市场上长期销售,这样的话投资才是合理的。对于NETINT来说,我们的新一代芯片具备以下功能,这些功能将使它在未来很长一段时间内,成为一款卓越的视频和人工智能应用加速器。NETINT的芯片支持绝大多数流行的编解码器如:AVC HEVC/HEIF AV1等,同时也支持LCEVC。它还支持HDR,实际上,是全套的HDR技术,包括HDR10/HDR10 /HLG/Dolby Vision。它具备支持高达8K@60fps的性能,是AR/VR应用的理想选择。支持子帧低延迟,支持高达x265的慢速预设质量,支持视频2D处理,包括缩放、叠加等。它还支持片上DNN推导。这是一款同时具有AI引擎和编解码器引擎的芯片。
2.1 如何实现最大互操作性
适应性的另一个方面是——如何实现最大的互操作性,如何确保您的解决方案可以在不同的操作系统中使用。NETINT拥有一项已获得专利的解决方案——使用NVMe作为主机到硬件加速器的设备接口。NVMe是非易失性内存接口协议,旨在用于基于PCIe的存储设备,例如SSD(固态磁盘),它还可以扩展到支持可计算型存储。Linux内核和Windows都嵌入了具备稳定性和相关性能的NVMe驱动程序,当设备通过NVMe与主机对话时,不需要为硬件加速器安装定制的内核驱动程序,Windows会自动获取支持,不需要费时开发对应的驱动程序。同样,它也支持Android(安卓),因为安卓系统使用的是Linux内核,支持NVMe还意味着你可以在NVMe-oF协议之上,进行平行扩展。平行扩展意味着可以在服务器外部扩展容量,稍后我们详细讨论这个话题。同时,支持NVMe还使我们能够将存储功能与硬件加速器进行实际有效地合并。NETINT即将发布同时具有SSD存储功能和视频转码功能的系列产品,且该产品旨在为边缘(Edge)部署应用场景而设计,如:基站和边缘服务器。另一方面,如果采用传统的方法,就需要设计自己专用的主机设备接口,必须自主定制的内核驱动程序,这经常导致在不同操作系统中引发各种不兼容的问题,并且很难支持Windows系统。
2.2 如何确保易于集成
为了易于整合,当设计一个ASIC解决方案时,我们需要考虑如何确保它易于集成到现有的工作流程中。实际上,目前大家都普遍使用FFmpeg来进行视频编解码和视频过滤。因此,开发适配的FFmpeg插件是目前业内的首选。视频编码器/解码器(AVC / HEVC / AV1 / LCEVC)均具有专属的FFmpeg/ Libavcodec插件,各种视频2D操作(如缩放、覆盖、转置、裁剪),也都有专属的FFmpeg / Libavfilter插件。然而,传统意义上人工智能推导(AI inferences)是独立于视频处理的,通常具有独立的工作流程。NETINT的ASIC解决方案允许在同一芯片上,同步运行AI推导和视频编解码。我们还将开发用于AI推导的FFmpeg插件,其中包括特征图的生成(用于ROI编码)和NSFW(不宜浏览内容)检测等。此AI运作性能将同时集成FFmpeg libavfilter插件、Libavcodec插件和Libavfilter插件。
NETINT软件栈建立在NETINT固件之上,固件与主机通过NVMe接口通信,所以在此基础之上,就可以使用操作系统通用的NVMe驱动程序。而且用户可以使用我们提供的完全开源和免费的Libnetint函数库,自主对其进行自定义设置,从而实现针对本地系统特性的重新编译,以进一步实现最大化互操作性。Libnetint函数库包含libavcodec / libavfilter插件,我们还提供了可自定义的编码器控制插件模块,此模块会提供一些码控以及2-pass编码的示例代码,用户可以把这个代码重新编译为适配的专属算法。
3 可拓展性3.1 用ASIC解决方案实现高密度
可扩展性,即如何扩展ASIC解决方案的容量。NETINT和Tirias Research近期发布了一份的白皮书《Video & Interactive Media at Cloud Edge》。这是一篇很棒的论文,我强烈建议大家去NETINT的网站下载并看一看。上图来自该论文,显示了在TCO(Total Cost of Ownership / 总拥有成本)方面,搭载了NETINT基于ASIC解决方案的编码服务器的运营成本是基于GPU的编码服务器的1/2,是基于软件或基于CPU的编码服务器的1/10;在功耗或碳排放方面,NETINT的ASIC解决方案大约是基于GPU的服务器的1/4,是基于软件或CPU的编码服务器的1/20;密度方面,NETINT的ASIC解决方案可以在一台服务器上处理80x1080p30的媒体流,是基于GPU的编码服务器的两倍,是基于软件或CPU的编码服务器的10倍。我们管向上扩展到服务器内部的编码容量称为垂直扩展,NETINT的ASIC解决方案可以在服务器内部达到极高的应用密度,实际案例中,我们有客户使用2U服务器,每个服务器搭载24个NETINT Codensity视频编码器,可以实现192路实时1080p30编码流。
3.2 NVMe-oF协议下的可组合基础设施
上图显示的是平行扩展。如前文中提到的,NETINT的ASIC解决方案采用NVMe作为主机到设备的接口,这使我们能够利用NVMe-over-fabrics技术来扩展服务器外部的硬件加速器容量。NVMe-oF是存储行业用于平行扩展(即在服务器外部扩展)的解决方案,它可靠、低延迟且技术成熟。通过对ASIC硬件加速器执行相同的扩展技术可以极大地节省不必要的成本投入。在这个示例中,一个机柜有多个计算节点以及多个带有视频转码AI DNN加速器的服务器。计算节点通过以太网或光纤通道等与硬件加速器节点相连接,从而使所有硬件加速器在所有计算节点或服务器之间共享。尽管物理上它们并不在计算服务器之中,但这项技术允许在一组服务器之间共享视频转码器及DNN引擎的资源池。因此,用户无需担心卡的外型、哪个服务器能插什么样的卡,以及需要为每个服务器分配多少转码器或AI的算力。这些顾虑均可通过一些配置工具来指定和分配视频编解码器 AI算力从而组成一个专属服务器,这就是为什么它被称为可组合型基础设施。
4 延 迟4.1 如何降低延迟
我们要探讨的第四个主题是延迟,这个话题将涵盖多个方面来讲解。低延迟是AR/VR和其他交互式视频应用的关键影响因素。5G技术的成熟和边缘计算的大规模部署将有效减少网络延迟,而使用ASIC解决方案,还可以在此基础上极大地减少视频编码和DNN推导延迟。目前有几种通用技术可减少视频编码延迟,例如去掉lookahead。如果你使用过x265,你可能知道它的medium预置启用了lookahead,这会带来至少20帧的延迟。然而,NETINT的T408视频编码器可以在不使用lookahead的情况下实现x265 medium质量,这就大大减少了此类延迟。而在某些应用程序中,例如视频会议,你可能希望禁用B帧来进一步减少延迟。还有一些技术更与ASIC解决方案相关,下面我将在详细说明一下这些技术,包括:
- 同芯片DNN推导和视频解码/编码
- 通过控制渲染和编码的时间来减少延迟
- 通过预留空间的编码能力减少延迟
- 通过SRIOV虚拟化减少延迟
- 通过硬件编码器获得更好的延迟一致性
- 通过软件编码实现子帧延迟
4.2 通过同一芯片和编解码器降低延迟
AI和视频编码器集成。在NETINT的下一代芯片中,我们的视频编/解码器 AI都将集成于同一芯片上,这可以让用户在同一个芯片上实现一些复杂的AI 辅助编码,例如,实时流解码——当源流中的视频流进来时,YUV数据保存在芯片中,然后进行扩展,执行YUV/RGB转换和DNN推导,并将计算结果传回主机。主机将生成ROI图,或者设置另一组编码参数供使用。新参数将作为帧元数据发送到编码引擎,也可以通过一些缓冲进行解码,并将解码后的YUV缓冲区和原始YUV也导入编码器,这样就可以使编码器对芯片内生成的感兴趣区域进行编码,然后由主机传输出去。在同一芯片上通过编解码器压缩和AI推导从而完成所有数据处理流程,这将极大地提升工作效率并显著减少延迟。
4.3 通过协调编码时间降低延迟
使用ASCI方案也可在保持每个流非常低的延迟的同时实现满容量,这里以8个1080p30流编码为例。假设有8帧来自8个不同的流同时到达编码器,而编码引擎只有一个,则它必须逐帧地进行编码,这样每一帧都需要4ms。因此,在此情况下编码延迟至少为32ms,因为必须等待其他的流完成编码后才能对下一个流进行编码,这种情况我们称为不协调编码。但是,如果可以进行协调编码,则可以同时从8个不同的流中分离出8帧,尽管编码引擎仍在逐帧进行编码,每帧完成编码同样需要4ms,但因为是同时对分离出的8个帧进行编码所以对于每个流来说,完成编码所需的延迟也是的4ms。考虑到其他的系统消耗的话,整体完成所需的延迟大概是6ms到7ms,这样的延迟在实际应用场景中是非常低的。所以,如果应用程序能够控制编码的时间,并在确保容量的同时实现低延迟,这将是一个非常具备经济性和竞争力的解决方案。
4.4 通过预留空间编码降低延迟
然而,在许多情况下,我们无法有效控制编码时间。在实时流传输的情况下,应用程序通常无法控制帧到达的时间,因此无法指示开始编码的时间。但是,使用ASIC解决方案,可以对延迟敏感、又无法控制时序的应用程序,使用预留空间编码的功能。上图是我们使用NETINT的T408转码器获得的测试结果,我们将1个流、2个流、5个流或8个流1080p放在同一个卡上,每一个都以它们能达到的最大速度运行。可见,流的数量越少,延迟就越小。这是意料之中的,因为流越少,延迟数也就越好,关键在于NETINT的T408转码器可以同时处理8个1080p30的流。通过ASIC方案,使得预留空间编码这种“奢侈”的能力具有可行性,因为ASIC解决方案的密度或容量是CPU或软件解决方案的10倍。
4.5 通过SRIOV降低虚拟化延迟
很多时候,必须在虚拟化环境中运行新的应用程序。当编码在虚拟机中启动时,通常需要使用SRIOV标准,绕过虚拟机监视器以进一步减少延迟。在上图这个例子中,NETINT卡提供了多个PCIe虚拟功能,每个虚拟功能都连接到一个虚拟机上,可以看到每个虚拟机中都有一个虚拟NVMe设备,即虚拟编码器。在虚拟CPU上运行的应用程序,可以通过NVMe设备进行编码。当编码命令或编码数据发送到NVMe设备时,会直接使用PCIe的虚拟功能,并将旁路虚拟机监视器传递给设备,如此就会在虚拟机上获得与在主机上相同的延迟。
4.6 延迟一致性 — ASIC vs Software
这里我想谈谈延迟一致性。与软件编码器相比,ASIC解决方案提供了更好的延迟一致性。使用ASIC解决方案,视频内容、视频编解码器、比特率、编码延迟等这类因素对最终的编码延迟时间所造成的的影响并没有太大变化。不管是定位视频还是相位,编码时间都差不多。相反的,软件编码器的延迟时间则随视频帧的复杂性会产生大幅度变化,且AVC / HEVC / AV1各自占用不同的CPU资源进行编码,编码时间或延迟时间也将非常不同。对于不同的比特率,软件编解码器通常有不同的延迟。而ASIC编码器通常不会出现此问题。延迟一致性与已知图像延迟一样重要,这就是为什么对延迟敏感的应用程序应使用ASIC的主要原因之一。
4.7 子帧延迟
我今天要讲的最后一个与延迟相关的主题是子帧延迟——延迟小于帧间隔。一个1080p30视频流的帧间隔是33ms,子帧延迟就是编码一帧的延迟需要小于33ms。NETINT的T408转码器可以处理1080p@240fps,编码引擎可以每4ms对一帧进行编码。因此,实现1080p的子帧延迟并不难,我们甚至可以对整个坐标系进行编码。当然,正如我在前文中所述,当以最大容量进行编码时,需要控制编码器时序以避免冲突,或者需要预留空间以减少冲突。不过,对于1080p的低分辨率来说,采用全帧编码即可实现子帧延迟。对于更高的分辨率,例如4k,编码时间通常与帧间隔相当。以4k流为例,对一帧进行编码大约需要15ms,有时原视频数据传输时间也与帧间隔相当。在这种情况下,需要使用子帧编码,全帧编码是指编码器接收到一个完整的帧后对帧进行编码,然后输出整个编码帧。子帧编码则指编码器在接收数据时开始编码,并在切片生成时就开始输出切片,子帧编码允许数据传输在很大程度上与编码并行运行,从而实现子帧延迟。
5 要点总结
此次演讲的主题是:用于实时高密度AI辅助编码的ASIC解决方案,涵盖了4个主要方面——应用案例、适应性、可扩展性和延迟。这里有3个要点,希望能给大家带来一些思考。
首先,ASIC解决方案是低TCO、低延迟、高适应性的,支持高密度实时AI辅助编码应用,它使AI智能辅助编码更经济实用;其次,使用NVMe作为主机到设备的接口,可以最大限度地提高互操作性,它可以通过平行扩展或可组合的基础设施技术来扩展服务器外部的编码和人工智能算力;第三,使用ASIC解决方案可以实现低延迟和延迟一致性,通过将DNN引擎与编码器集成、用协调编码时序避免冲突、用预留空间编码来减少冲突、用SRIOV等技术减少虚拟化中的延迟、并用子帧编码来实现高分辨率的子帧延迟。
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com