本期分享内容均摘自英特尔公司陆扬老师所著白皮书《云服务提供商 (CSP) 如何获益于面向媒体云应用程序的英特尔®至强®Skylake 平台》,阅读完整原文请在 AI 前线公众号内回复关键字“英特尔”,获取白皮书完整 PDF。

本期 AI 前线社群分享我们很高兴邀请到 Intel 数据中心市场部门高级架构师陆扬,为我们带来《高性能视频云服务的构建与提升》的干货分享。

首先给大家介绍下今天的讲师: 陆扬, Intel 数据中心市场部门高级架构师 ,主要负责中国区互联网客户。在 Intel 有十多年的开发和互联网工作的经验,与亚太区一线 ISV/ 客户紧密合作,围绕 Intel IA 架构,帮助客户系统的性能测评和调优,平台的迁移和升级,以及深度技术合作。本次分享主要会从以下六个方面进行:

  • 媒体云计算行业现状

  • 指令集升级的影响

  • 传统视频处理应用程序

  • HEVC/H.265 应用程序

  • 图像处理应用程序

  • 视频和图像的深度学习应用

媒体云计算行业现状

媒体处理是当前云计算行业中最热门、发展最快的应用之一,尤其是占用大量计算和存储资源的视频和图像处理的应用和服务。云服务提供商 (CSP) 一直在致力于提升媒体云计算的效率,特别是视频处理、分析、搜索以及流媒体处理的性能。

本次分享介绍了英特尔新至强平台的新技术及其对媒体云计算性能提升,阐释了新型 SIMD(单一指令多数据流)AVX-512 指令集如何帮助视频、图像处理以及视频深度学习的应用提升性能。

近几年来,媒体云计算应用和服务一直在快速增长。到 2020 年,视频流量将占互联网用户消费流量总量的 82%。

近几年来,各种新兴媒体云计算应用层出不穷,例如视频转码、视频理解、分析、深度学习、监控、视频搜索、视频广播、会议、云游戏以及人工智能 (AI) 等。


云计算场景和业务的要求越复杂,后端服务器的处理能力面临的挑战就越高,尤其是当 4K/8K 视频格式逐渐兴起并趋向成熟时。4K 和 8K 视频格式能提供更高的视频质量和更好的最终用户体验,但也需要更高的处理能力以及更多的存储和网络带宽资源。


现在每天都有海量的视频和图片生成、上传和下载,如何以最高效的方式处理这些海量数据是对媒体云计算服务提供商 (CSP) 的巨大挑战。在中国,各媒体云服务提供商都在努力寻求最高效的媒体云解决方案和平台,以便在保持视频品质的同时实现最佳性能,确保更好的用户体验,和更合理的成本。

指令集升级的影响

基础的媒体云计算模块包括视频转码、编辑、特征抽取和分析等环节。其中,视频转码消耗了大部分计算资源,并且是进行其他进一步处理和分析的基础。而英特尔的 SIMD 向量化技术是优化这些计算密集型运算的关键。

目前新至强已经集成了 AVX-512 技术,这一技术的性能特征和编码方法,利用 IA 架构平台来解决技术难题以实现性能提升。该解决方案能够为媒体云计算客户提供以下优势:

  • 适用于云服务提供商行业的高效视频处理解决方案。基础视频编码和转码性能提升 2 到 4 倍,这可显著提升媒体处理集群的处理能力。

  • 适用于各种在线应用程序的高性能图像处理解决方案。减小在线图像处理延迟和带宽。

  • 加速深度学习算法,帮助消除新兴云服务提供商应用程序的性能瓶颈。

在数代不同的 x86 平台上从 MMX、SSE、AVX、AVX2 演进到了 AVX-512 指令集,向量的宽度也从 64b 增长到了 512b。

MMX:8x 64 位寄存器 (MM0 … MM7)

SSE:8x 128 位寄存器 (XMM0 … XMM7) 、4x 单精度 FP / XMM 寄存器

SSE2:更宽的整数向量宽度,128b;双精度 FP / XMM 寄存器

SSE3:升级的向量指令

SSE4(4.1 和 4.2):16x 128 位寄存器 (XMM0-XMM15),以及新指令( 47 + 7 新指令)

AVX:用于浮点计算的 256 位宽 SIMD,以及 16x256 位宽 (ymm0-ymm16)

AVX2:256 位 SIMD 适用于整数计算,新指令适用于 FMA(混合乘加运算)以及扩展指令

AVX-512: 512 位 SIMD 指令适用于整数和浮点计算,2 个 512 位 FMA

新至强平台引进了 512 位向量化技术,与 AVX2 相比,峰值性能最多可提升 2 倍。微架构级性能的升级(尤其是针对 SIMD 向量化的调整)可以明显提升视频和图像处理的性能。

传统视频处理应用程序

那么利用 AVX-512 技术是提升媒体云计算的性能的呢?在传统视频处理方面,离线视频转码应用程序是典型的 CPU 和内存密集型的应用,其最耗时的核心代码可通过 SIMD 向量化技术来优化。

有些函数无法通过编译程序自动优化,也没有类似的高性能 API 可以直接调用,那么我们就需要分析代码并根据开发手册和相关文档用 SIMD 的向量化指令手动重写。 如果可以借助 SIMD 的指令集重构代码,那么即使是编译调整,也是有望显著提升性能的。

以传统的 H.264 视频转码程序举例来说,如图 3 所示,通过采用 SIMD (SSE/AVX2) 指令,大部分热点函数都已被向量化优化,但是,到目前为止尚未用到 AVX-512 技术。


图 5.8*4 块计算及其 SIMD 优化图解

以基础的 8x4 块计算函数为例, 为了使函数 x264_pixel_satd_8x4 更易于理解,我们设计了图 5 中的图形模型。我们可以看出,8x4 块 SATD 计算要求必须使用两个哈达玛变换式(先按行,后按列)。此外,我们注意到哈达玛变换式有 4 个输入,因此,我们需要将数据分别存储到 4 个独立的 SIMD 单位上,以便进行并行计算。我们可以将每个 128 位数据(即每个黑盒子中 8x16 位整数)载入一个 m128i,形成共 4 个 *m128i,以作为第一个哈达玛转换式的输入。此外,还需要矩阵转置来帮助形成第二个哈达玛转换式(按列)。为了测试 SIMD 向量化实现的性能,我们首先使用 rand()% 10 随机生成两个像素矩阵中的元素。为了确保准确性,在这里我们分开测试函数,而不是成批测试 ,性能结果见表 2。

从表 2 中我们可以看到,与原始版本相比,每行中最优的 SIMD 向量化实现方案(高亮和红色字体显示)获得了 3 倍到 5 倍的性能加速。具体而言,在 8x4 块计算示例中,与原始版本相比,SSE 代码实现了 3.26 倍的性能提升,并且超过了其他两个 SIMD 实现。

原因是 8x4 块充分利用了 SSE 的 128 位寄存器,相比之下,AVX2 和 AVX-512 均浪费了部分空间。但重要的是,AVX-512 代码在 8x16 和 16x16 块计算中实现了最佳性能,其中 16x16 块是我们的初始配置中的目标函数(即 x264_pixel_satd_16x16)。

基于上述 AVX-512 向量化代码的编程模型和范例,客户可以在自己的视频应用程序中重写热门函数,以确保得到最大性能提升。

HEVC/H.265 应用程序

视频编码标准主要通过大众熟悉的 ITU-T 和 ISO/IEC 的标准开发演进而来。 2013 年引进的 H.265/HEVC(高效视频编码)是 ISO / IEC 和 ITU-T 推出的最新视频编解码器标准,旨在最大程度地提高压缩能力和降低数据损失。HEVC/H.265 技术可帮助视频云服务提供商以较小的带宽提供高质量视频,并进一步支持 4k(4096×2160) 和 8k (7680×4320) 的超高分辨率视频服务。

H.265/HEVC 编解码器的计算复杂性是之前 H.264/MPEG 的 4 倍以上,这对后端服务器平台的视频处理能力提出了前所未有的要求,而且事实证明,x86 的 SIMD 向量化技术可以显著提升 HEVC 编码性能。

如图 6 所示,SIMD (SSE/AVX2) 指令已经集成到 H.265/HEVC 源代码中。但是,尚未启用 AVX-512。接下来我们将以 DCT(离散余弦变换)为例阐述如何利用 AVX-512 指令集加速 HEVC 的视频处理应用,包括 4x4、8x8、16x16(第八热门函数),以及 32x32(第四热门函数)的计算。

为了查找 DCT 的源代码,我们先在 x265 ccmake 配置中设置 “--disable asm”,然后利用 VTune 查看源代码。dct32 的源代码如图 7 所示。

下面我们先展示如何在英特尔新至强 平台上使用 SIMD 进行基础 4*4 块计算,然后再讲如何利用 AVX-512 进行进一步的加速计算。

图 8 展示了 dct4 的核心概念。我们可以看到,dct4 中的基本运算是矩阵乘积。因此,我们可以将每个 128 位数据(即每个黑盒子中的 4x 32 位整数)载入一个 mm128i,并对其执行 SIMD 运算,如,_mm_mullo_epi32、_mm_add_epi32, 和 _mm_srai_epi32。与 x264 中的 SATD 的优化方式不同,AVX2 和 AVX-512 可以通过减少循环次数来进一步加速 dct4。特别是,AVX2 可以将循环数从 4 倍减少到 2 倍,并将每个 2x8x32 位 = 256 位数据载入m256i,而 AVX-512 可以进一步将循环数减少到 1 倍,并将每个 4x8x32 位 = 512 位数据载入 __m512i。8x8、16x16 和 32x32 块计算也可以使用与上述 4x4 示例类似的方法来优化,其中,SSE 先加速循环内的矩阵乘积,而 AVX2 和 AVX-512 可通过减少循环次数来进一步加速。

为了测试 SIMD 实现的性能,我们使用 rand()%40 – rand()%40 随机生成源矩阵中的元素。测试结果见表 3。

从表 3 中我们可以看到,对于 4x4/8x8/32x32/ 数据集,AVX-512 代码是最高效的选择,能够分别比初始代码提供 44.46%、70.45% 和 37.60% 的性能提升。理论上,AVX-512 应该在所有情况下都是最高效选择,包括 dct4、dct8、dct16 以及 dct32。

然而,初始化操作(如 _mm512_set_epi32)相当耗时,因此会抵消掉一些优势。 在 dct16 中,SSE 可以使用常量初始化运算(如 _mm_set1_epi32),并实现最佳性能,比初始代码加速 43.50%。图像处理应用程序为了使 x86 平台的性能最优化,方便客户利用和部署高级英特尔架构技术,英特尔开发了一整套高性能库,适用于客户端和服务器平台以及各种领域,例如系统性能分析工具 Vtune,英特尔编译器 icc、数学核心库 MKL、集群分析、图形图像开发工具包 MediaSDK,以及多线程编程工具 TBB 等等。

IPP 针对以下的应用程序和算法开发了最佳的线程级并行和向量化实现的最优方案:

  1. 图像、视频以及音频处理

  2. 数据通信

  3. 数据压缩和加密

  4. 信号处理等

GraphicsMagick 是常用的图像处理库,已经在许多云处理应用程序中得到广泛应用。为了更好的支持现有的图像处理应用,IPP2018 在 IPP 库到 GraphicsMagick API 的一系列函数中实现了多种提高性能的插件和补丁,以便在最少的人工干预模式下实现性能提升,从而优化了 resizeImage、scaleImage、GaussianBlurImage、flipImage 和 flopImage 等多种图像处理函数。这里以图像的缩放为例来评估 IA SIMD 技术的性能,尤其是 AVX-512 向量化指令集在新至强平台上的贡献。

图 9 是使用 IPP 图像缩放 API 来优化初始的 GraphicsMagick 函数的结果。由于 IPP 库已经实现并集成了多种 SIMD 指令,在这 5 种标准图像的缩放应用中达到了 4 倍以上性能加速,而 AVX-512 的性能也比 AVX2 要高出 20% 以上。

视频和图像的深度学习应用

视频和图像文件中包含了许多有价值的信息,比如时间和地点、人物及其行为,甚至人物穿着和环境变化。

如图 10 所示,我们可以根据这些信息类型利用数据挖掘和机器学习,提取出大量有用的信息,然后进行专门的分析研究得出必要的结论,例如防盗版,帮助找到犯罪嫌疑人或失踪人员,分析视频之间的关系,以及根据人物的爱好来推广更多商业模式等等。基于视频内容的广告和促销具有巨大的潜在商业价值,这促使媒体云客户投放了更多的资源进行视频分析与进一步数据挖掘和深度学习的应用上。

深度学习技术是云计算数据中心中发展最快速的领域之一,并且已经成为推动服务器市场发展的最新主力。许多媒体云服务提供商已经开始深入研究并开发这个领域。

对于高维度高并行的视频和图像处理而言,这种典型的计算密集型应用,提取和分析视频数据会消耗很多计算资源,而 x86 的 SIMD 向量化指令可以大大提升计算吞吐量和程序执行效率。

英特尔开发了一套高性能库来优化深度学习应用程序的性能。英特尔数学函数库(英特尔 MKL)用以提升机器学习、科学、工程金融与设计等应用的数学运算函数的速度,如密集和稀疏线性代数(BLAS:基础线性代数子程序、LAPACK:线性代数、PARDISO:稀疏矩阵求解)、FFT、向量数学、概要统计、深度神经网络等等。这些传统的深度学习程序已通过最优的线程化和 SIMD 向量化最大限度地提升了处理器的性能。

以 caffe 的评分和训练程序为例,如下图所示,英特尔 AVX2/AVX-512 指令将评分流程加速了 2 到 9 倍,将训练流程加速了 2 到 4 倍,而 AVX-512 指令在英特尔新至强平台上提供的性能要比 AVX2 高 10% 到 40%。


媒体云计算应用越来越普及,并且正在成为传统数据中心和移动互联网产业的重要部分。针对这些数据和计算密集型的应用,x86 平台构建了适用于视频、图像、音频以及进一步深度学习计算的卓越生态系统。

本次分享详细阐述了英特尔新至强平台上的全新 AVX-512 技术和指令集,演示了如何利用它来优化媒体云应用程序。随着新的业务和使用模式的不断涌现和 IA 智能平台的稳步升级,高性能、高可靠性的技术必定会为越来越多的媒体处理应用程序带来更多的福音。

Q&A 环节

Q1:AVX-512 比 AVX2 的提升在用户层面会有什么直观的影响吗?

A1:陆扬老师:如文章所述,AVX-512 比 AVX2 的提升就是程序的执行效率,直观感受就是程序执行时间的减少和吞吐量的提高

Q2:请问用 AVX512 优化后的 caffe 源码是开源的吗?开发者如何高效使用它?

A2:陆扬老师:Intel 优化过的 caffe 是开源的,可以参考 git clone

https://github.com/intel/caffe.git

其实 Intel 优化了很多开源的 DL/ML 项目,可以从 software.intel.com 中了解

Q3: MKL, IPP 现在是免费用了吗?还是开源了?

A3:陆扬老师:IPP 可以从如下地址下载 https://software.intel.com/en-us/intel-ipp

MKL 的下载地址是 https://software.intel.com/en-us/mkl是 免费下载的,代码部分没有全部开源

Q4:分享中提到的 AVX-512 指令在英特尔新至强平台上提供的性能要比 AVX2 高 10% 到 40%,这个提升主要是因为什么?

A4:陆扬老师:AVX512 比 AVX2 的提升是 向量寄存器的位宽加倍了

Q5:在深度学习上,硬件和软件应该怎么搭配,硬件的作用是什么?

A5:Intel 高明老师:芯片升级和网络升级首先取决于需求,什么样的工作负载需要千兆,还是万兆,还是 25G,或是百 G,是否需要 RDMA,要明确。芯片的计算能力要匹配相应的网络性能,另外网络的优化也至关重要,DPDK 的使用可以大幅提升 CPU 网络处理能力,降低成本。当然是才用 DPDK 需要相关技术能力投入,会增加人力成本,需要综合评估,做到最优 TCO。

Intel 陆扬老师:其实不管是深度学习还是其他互联网的应用,软硬件配套升级才能达到最优性能。升级硬件架构得到更强劲的 CPU 和更新的微架构提升,包括 CPU 频率,核数,寄存器架构,cache line 升级,内存以及网络的提升等等。软件的作用就是感知和启用这些新功能,否则无法发挥硬件平台的所有优势和技术。


©著作权归作者所有:来自51CTO博客作者mb5fdb0a1b25659的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. Java:下一个 COBOL?
  2. 微软收购GitHub花的75亿美元,到底值不值?
  3. 搏击码农:一旦让我开始,我就不会停止!丨二叉树视频
  4. Netty+Spring Boot仿微信 全栈开发高性能后台及客户端
  5. 戳破泡沫,人工智能应该这样看!
  6. 如何将Python自然语言处理速度提升100倍:用spaCy/Cython加速NLP
  7. DeepMind给AI模型做了个IQ测试,结果是这样的
  8. Kafka落选!InfoWorld最佳开源数据平台奖公布
  9. LinkedIn开源TonY:在Hadoop上运行TensorFlow的框架

随机推荐

  1. 什么是php扩展
  2. 在php中get和post区别
  3. php header的作用
  4. 什么是php工厂模式
  5. php join的用法
  6. php中define的用法
  7. asp与php网站优缺点
  8. php保留两位小数的方法
  9. php构造函数的作用
  10. 排序算法—归并排序【附代码】