英特尔® 至强融核™ 处理器针对深度学习提供了出色的性能 - 正在迅速完善性能

作者: 英特尔公司的 Dheevatsa Mudigere、Dipankar Das、Vadim Pirogov、Murat Guney、Srinivas Sridharan 和 Andres Rodriguez

最近,百度发布了深度学习的性能指标 - DeepBench,规定了深度学习 (DL) 应用的最低计算和通信基元的性能。 其目标是提供标准性能指标,通过厂商的 DL 库来评估不同的硬件平台。

英特尔继续通过英特尔数学核心函数库(英特尔 MKL),针对 DL 优化英特尔® 至强和英特尔® 至强融核™处理器。 英特尔 MKL 2017 包括一组 面向 DL 应用的性能基元 。 这个库支持最常用的基元(加速图像识别拓扑所必需的)和 GEMM 基元(加速各类 RNN 所必需的)。 功能包括卷积、内积、池化、标准化和激活基元,支持向前(推断)和向后(梯度传播)操作。 凭借社区许可可以 免费获得 MKL 2017 库,有些优化则作为开源 英特尔 MKL-DNN 项目的一部分提供。

本性能指标评测使用英特尔® 至强融核™处理器。 本文介绍了英特尔® 至强融核™ 在 DL 操作中的卓越表现,以及未来的快速发展势头。

DeepBench 背景信息

DeepBench 涵盖不同的基元,如 GEMM(普通矩阵-矩阵乘法),卷积层和循环层等。这些基元在不同类型网络和应用中有具体的配置。 最新版本是首次尝试,并不完整。希望社区的积极参与能形成综合的基元性能指标评测。将适用于大量的应用,如图像和语音识别,自然语言处理 (NLP)。在深度神经网络 (DNN)、卷积神经网络 (CNN)、循环神经网络 (RNN) 和长期短期存储器网络 (LSTM) 中使用。

而且,DeepBench 包括各种小批次任务,以了解扩展的影响(数据并行)。 创建 DeepBench 主要是为了比较不同的硬件平台。 百度发布的指标是绝对性能(从 TeraFLOP /秒的角度而言)。

本文的后续部分介绍了针对不同 DL 应用的英特尔® 至强融核处理器的性能和适用性。

GEMM

深度学习中的大多数计算可以用矩阵-矩阵乘操作表示,使 GEMM 成为核心计算基元。 DL 应用中的矩阵(完全连接 (FC) 层、循环神经网络(RNN) 和长期短期存储器网络 (LSTM))通常存在偏差,体积较小,产生密集的小型 GEMM 操作,形状不规则(细长型和短粗型)。 在 DeepBench 中的 GEMM 核心测试案例中有所体现。 英特尔数学核心函数库(英特尔 MKL) 2017 包含优化的 GEMM 实施,在面向矩阵的英特尔至强处理器和英特尔至强融核处理器上实现了高性能,这些矩阵常见于 DL 应用,通过封装 GEMM 应用编程接口 (API) 来实现。

不同于传统 GEMM 操作(大型的方矩阵),这些密集的小型操作形状不规则,并行性有限,尺寸偏差大,带来了严峻的挑战。 针对 RNN 优化 GEMM 性能 [1] 的百度白皮书显示,传统方法无法实现峰值性能。

专门封装的 API 实施优化的 block-GEMM 操作,利用模块公式实现模块再利用,不需要重新排列数据和精细并行化,随需应变的同步达到最小化,以增加小型矩阵的并发性。 在这些优化的作用下,设计师高效利用英特尔® 至强和英特尔® 至强融核™处理器的完整高速缓存层级结构,提取足够的并行性,利用了全部内核,显著提升了(接近峰值)典型 DL 矩阵的性能。

英特尔至强融核处理器上的 DeepBench GEMM 内核结果包括传统的英特尔 MKL GEMM 和新封装的 GEMM API。 在配备英特尔 MKL 2017(现已公开发布)的英特尔至强融核处理器 7250(代号为 Knights Landing,或 KNL)上测量这些数字。 从 DeepBench GEMM 结果(图 1)(百度测量的 Nvidia 性能)可知,在几乎所有的单一配置中,英特尔至强融核处理器的性能高于 Nvidia* M40 GPU 的性能(后者的峰值 FLOP 与英特尔至强融核处理器相当)。在一些小型、中型 (N <= 64) 矩阵中,英特尔至强融核处理器的性能高于 Nvidia* Pascal TitanX。 下一代英特尔至强融核处理器(代号为 Knights Mill)的原始计算能力将显著提高,我们期待明年发布的新品会有更出色的性能。


图 1 资料来源: 来自百度的数据,2016 年 9 月 26 日

卷积

卷积操作是 DL 应用中的另一个主要计算内核。 在基于图像的应用 (CNN) 中,卷积层负责大部分的计算任务。 同时,卷积层也逐步应用于语音和 NLP(作为声学模型)应用。

卷积层操作包括 6 重嵌套循环,位于输出特征图 (K),输入特征图 (C),特征图的高度和宽度 (H, W) 和内核的高度和宽度 (R, S)。 此外,操作在所有小批 (N) 样本中完成。 因此,能为典型的层配置带来大量计算。

这个操作是按照原生顺序编写的嵌套循环,没有进行重新使用(循环迭代过程中,权重没有变化),受内存带宽的限制,因此无法利用英特尔至强融核处理器的全部计算能力。 MKL 利用直接卷积算子,提供卷积层的优化实施,几乎达到可实现的峰值性能。

直接卷积内核包括以下优化:

  • 重新进行卷积操作,以更好地利用高速缓存层级结构。 循环的输入和输出特征图 (K, C) 在模上高速缓存中分块,支持输出特征图和独立乘加融合计算的内层循环矢量化。
  • 对数据进行规划,确保最内层循环的访问是连续的,以更好地利用高速缓存行和带宽,同时提升预取器的性能。
  • 寄存器分块,以改进寄存器文件中的数据重新利用,减少内核的高速缓存数据传输,隐藏 FMA 操作的延迟。
  • 最佳工作分区,以保证全部内核得到充分利用,把负载不平衡降到最低。

如欲了解关于实施情况的详细信息,请参阅英特尔至强融核处理器参考书 [2]的机器学习章节。

使用配备英特尔 MKL 2017 的英特尔至强融核处理器 7250,对数据进行测量。 针对 DeepBench 的卷积内核(图 2),我们利用 libxsmm [3],进行开源英特尔优化的卷积层实施,并记录实施结果。 卷积层的绝对性能高于 Nvidia M40(两者的 FLOP 接近)。 然而,英特尔 MKL 的最新版只支持直接卷积算子,差别较大的标记内核应用于其它卷积层,用于对比英特尔至强融核处理器中的直接卷积内核和基于 Winograd 的实施。 目前,英特尔 MKL 不提供优化的 Winograd 卷积实施。 正在努力实现将基于 Winograd 的实施集成至 MKL。 尽管 Winograd 卷积算法会显著提升某些卷积形状和尺寸的速度,但是不会提升全部的拓扑性能。


图 2 资料来源: 来自百度的数据,2016 年 9 月 26 日

AllReduce

AllReduce 是 DeepBench 中的通信基元,涵盖深度学习网络和应用中常见的讯息尺寸。 这个性能指标评测包含测量 5 种不同讯息尺寸(浮点计算)的 MPI_AllReduce 延迟: 2 个、4 个、8 个、16 个 和 32 个节点上的100K、3MB、4MB、6.4MB 和 16MB 本文采用的 AllReduce 性能指标评测,源自俄亥俄州立大学的微性能指标评测套件 [4],本文进行了少许修改。

我们得出的 MPI_AllReduce 时间是在英特尔至强融核处理器 7250 上利用英特尔 MPI 5.1.3.181 测量的,使用配备了宽树拓扑的英特尔® Omni-Path 架构 (Intel® OPA) 100 系列架构的内部 Endeavor 集群。 百度发布的竞争性数据是在每节点配有(支持优化的跨节点通信) 8 个 NVIDIA TitanX-Maxwell 卡的 GPU 集群上测量的。 上述对比采用的是包含 1 个节点的英特尔至强融核处理器。32 节点的英特尔至强融核处理器测量相当于 4 个 GPGPU 节点,每个节点最多配备 8 个卡。

英特尔至强融核处理器的 DeepBench 结果和上述集群中(图 3)的英特尔 MPI 库 2017 一致。 因为在节点内(对等)通信,8 个 GPU(在单个节点内)的延迟胜过基于英特尔至强融核处理器的 8 个节点的延迟。 然而,对于跨节点通信,英特尔至强融核处理器的 AllReduce 延迟要好得多。 对于多数的讯息尺寸,基于英特尔至强融核处理器的 16 个节点的延迟胜过 2 个 GPU (x8) 节点。 图 3 以百度作为 number-1 测量的 TitanX-Maxwell 为基准。


图 3 资料来源: 来自百度的数据,2016 年 9 月 26 日

此外,我们还显示了优化通信库的结果(也可以点此查看 Pradeep Dubey的 IDF 16 技术课程,使得相关讯息尺寸和节点数量 (Fig. 4) 的 AllReduce 延迟平均提升了 3.5 倍。 本文的性能指标评测只采集单个 MPI_AllReduce 操作的延迟。 在任何应用环境中,通常会有多项操作同时进行,在这种情况下,我们期待性能会进一步改善。


图 4 资料来源: 英特尔内部测量,2016 年 9 月 [5]

循环层 – RNN/LSTM

DeepBench 还包括循环层 - vanilla RNN 和 LSTM 层,主要基于 DeepSpeech2 模式配置,适用不同的小批尺寸,以采集扩展的影响。 这些循环层的核心计算内核仍旧是 GEMM 操作,GEMM 性能指标评测中采集了与循环层对应的矩阵尺寸。 从图 1 可以得出,相比 Nvida Maxwell GPU 的最新版,英特尔至强融核处理器的性能整体上更出色。在许多情况下,英特尔至强融核处理器的性能比 Nvidia Pascal GPU 还要好,后者的峰值 flop 是前者的 2 倍多。 然而,这些层作为独立基元,目的是展示 RNN/LSTM-specific 优化。 最新发布的性能指标评测不包含上述案例中的英特尔至强融核处理器结果。 我们目前正在进行针对 RNN 层的优化实施,利用具体的使用模式,以高效利用可用的高速缓存。 RNN 层支持引入英特尔 MKL 库之后,上述案例中的英特尔至强融核处理器结果将被添加。

这些性能指标评测结果是实时快照,英特尔将继续投资软件优化,提升英特尔至强和英特尔至强融合处理器产品家族的性能,尤其在卷积性能指标评测方面。 英特尔将继续更新结果,为客户提供针对深度学习工作负载的芯片。

作者

英特尔公司的 Dheevatsa Mudigere、Dipankar Das、Vadim Pirogov、Murat Guney、Srinivas Sridharan 和 Andres Rodriguez

[1] http://svail.github.io/rnn_perf/

[2] http://lotsofcores.com/KNLbook

[3] https://github.com/hfp/libxsmm

[4] http://mvapich.cse.ohio-state.edu/benchmarks/

[5] FTC 免责声明 在性能检测过程中涉及的软件及其性能只有在英特尔微处理器的架构下方能得到优化。

诸如 SYSmark 和 MobileMark 等测试均系基于特定计算机系统、硬件、软件、操作系统及功能, 上述任何要素的变动都有可能导致测试结果的变化。 请参考其他信息及性能测试(包括结合其他产品使用时的运行性能)以对目标产品进行全面评估。 如欲了解更多信息,请访问: www.intel.com/benchmarks.

配置: 英特尔® 至强融核™ 处理器 7250(68 核, 1.4 GHz, 16GB MCDRAM),128 GB DDR4-2400 MH,英特尔® Omni-Path 主机架构接口适配器 100 系列 1 端口,Red Hat* Enterprise Linux 6.7,英特尔® ICC 版本,面向 linux 的英特尔® MPI 库 5.1.3,英特尔® Optimized DNN Framework

优化声明: 英特尔的编译器针对非英特尔微处理器的优化程度可能与英特尔微处理器相同(或不同)。 这些优化包括 SSE2®、SSE3 和 SSSE3 指令集以及其它优化。 对于在非英特尔制造的微处理器上进行的优化,英特尔不对相应的可用性、功能或有效性提供担保。 此产品中依赖于处理器的优化仅适用于英特尔微处理器。 某些不是专门面向英特尔微体系结构的优化保留专供英特尔微处理器使用。 请参阅相应的产品用户和参考指南,以了解关于本通知涉及的特定指令集的更多信息。 通知版本编号 20110804

 

有关编译器优化的更完整信息,请参阅优化通知