Facebook 和英特尔合作改善了第三代英特尔® 至强® 可扩展处理器上的 PyTorch 性能。
利用英特尔® 深度学习加速的新 bfloat16 功能,该团队能够在多种培训工作负载下显着提高 PyTorch 性能与 FP32 相比,将代表性计算机视觉模型的培训性能提高了 1.64 倍,将 DLRM 模型的培训性能提高了 1.40 倍,并且 DLRM 模型的 INT8 推理性能是 FP32 的 2.85 倍。

英特尔与 Facebook 曾联手合作,在多卡训练工作负载中验证了 BFloat16 (BF16) 的优势:在不修改训练超参数的情况下,BFloat16 与单精度 32 位浮点数 (FP32) 得到了相同的准确率。现在,英特尔发布了第三代英特尔® 至强® 可扩展处理器(代号 Cooper Lake),该处理器集成了支持 BF16 的英特尔® 深度学习加速技术(英特尔® DL Boost),可大幅提升训练和推理能力,并且也支持去年推出的英特尔® 深度学习 INT8 加速技术。

英特尔和 Facebook 不断在提高 PyTorch 性能方面展开合作。此次双方联手采用支持 BF16 加速技术的第三代英特尔® 至强® 可扩展处理器来训练模型,性能较 FP32 提升了高达 1.64 倍。此次合作提高了 CPU 训练速度和推理性能,有利于 PyTorch 社区发展。

在本文中,我们将详细介绍第三代英特尔® 至强® 可扩展处理器集成英特尔® 深度学习加速技术支持的 BF16 加速,以及英特尔与 Facebook 如何通过协作,将该功能的优势引入 PyTorch 社区。

硬件升级

如今,大多数机器学习应用都使用单精度 32 位浮点数 (FP32) 来处理训练和推理工作负载。许多使用深度学习的人已经发现降低数值精度在训练 [BF16] 和推理 [INT8] 方面的作用很大。使用 16 位乘法器与 32 位累加器进行训练和推理对准确率影响很小,甚至没有影响;而采用 8 位乘法器与 32 位累加器处理某些推理工作负载时,准确率或有影响,或者影响极小。所以,这种方法在 DLRM 等工作负载中被广泛采用。

降低精度可从两方面提高性能:1) 增加乘积累加 (MAC) 吞吐量会提升受算力限制的运算量,2) 从 32 位到 16 位减少了数据量,提高了数据内存各层间传输速度,最终提升受内存带宽限制的运算量。

英特尔在第三代英特尔® 至强® 可扩展处理器中引入原生 BF16 支持——BF16→FP32 融合乘加 (FMA)(如图 1 所示)、FP32→BF16 转换和英特尔® 高级矢量扩展 512(英特尔® AVX-512)指令,与 FP32 FMA 相比,理论上会使计算吞吐量翻倍。此外,第三代英特尔® 至强® 可扩展处理器还为上一代产品中推出的 INT8 FMA 提供原生支持,与 FP32 FMA 相比,理论上会使计算吞吐量提高四倍。

图 1:在每个 FMA 单元内核的时钟周期中,英特尔® AVX-512 VDPBF16PS 指令将 32 个 BF16 值对相乘并累加到 16 个 fp32 值。

 

多平台支持

主流 OEM 系统提供商有望提供主要采用 4 路和 8 路配置的第三代英特尔® 至强® 可扩展处理器,以平衡成本和性能。4 路或 8 路系统的大内存容量使您可以在主内存中存放大型嵌入表(例如在稀疏神经网络中),由此加快训练速度。英特尔® 深度学习加速技术 BF16 指令会使训练和支持模型的性能提升。根据模型和准确率要求,推理工作负载也能从英特尔® 深度学习加速技术支持的 BF16 或 INT8 加速中受益。

软件升级

英特尔与 Facebook 积极合作,采用先进的全新硬件来提高 BF16 加速在 CPU 上的性能,并提供简单的编程接口来实现 BF16 加速。PyTorch 为用户提供简单的 API,便于他们在深度学习中使用 BF16 数据类型,并以此替代 FP32 模型。机器学习使用者通常会先设计和训练采用 FP32 数据类型的深度神经网络 (DNN),然后再将模型转换成低精度数据类型,从而提高性能。与通常需要进行损失缩放调整才能达到与 FP32 相当的训练准确率的 FP16 不同,BF16 无需调整即可工作。用户只需要将模型输入数据转换为 BF16,就可以把现有 FP32 模型用 BF16 进行训练。1.3+ 版本 PyTorch 会在模型的所有算子中自动传播 BF16 数据类型。

PyTorch ATen 由一些基础标量或矢量算子实现,这些基础算子与模板算子的数据类型相关。针对大多数算子,英特尔增加了对 BF16 的支持,并重载了这些基础算子。以 BF16 ReLU 为例,它就是建立在最小和最大 BF16 算子基础上的。对于存在内部简化的算子要特别注意,因为这些算子需要累积到更高精度 (FP32) 以保证模型准确率。

英特尔使用 oneAPI 深度神经网络库(oneDNN,以前也称为英特尔® MKL-DNN 库)进一步优化卷积、矩阵乘法、批归一化、ReLU、池化等常用的 torch.nn 运算。1.5+ 版本 PyTorch 包含已进行 BF16 加速优化的 oneDNN,可使用第三代英特尔® 至强® 可扩展处理器的原生 BF16 指令处理常用运算。如图 1 所示,在每个 FMA 单元内核时钟周期内,英特尔® AVX-512 VDPBF16PS 指令将 32 个 BF16 值对相乘,并累加到 16 个 FP32 值。VCVTNE2PS2BF16 指令将 32 个 FP32 值转换为 32 个 BF16 值。对于 oneDNN 库未涵盖的运算,使用 BF16 同样可使那些受内存限制的层受益。对于 oneDNN 不支持的 BF16 运算,BF16 将用于数据传输并使用 FP32 FMA 指令模拟 BF16 计算。这些优化会尽可能减少数据传输,确保 SIMD 指令、执行单元、寄存器和内存缓存分层架构得到高效运用。

与 FP32 FMA 相比,第三代英特尔® 至强® 可扩展处理器集成的 BF16→FP32 转换 FMA 指令,理论上会使吞吐量翻一番;而仅采用 BF16 格式就能将内存访问性能提升多达 2 倍。oneDNN 库为 BF16 卷积和 GEMM 运算(以及融合激活函数的运算)提供一种高度优化的实现。在训练期间,权重副本是存储在 FP32 中的,以方便权重更新。因此,模型执行还需要处理 FP32 数据类型。

Facebook 人工智能研究院 (FAIR) 实验室已经发布了深度学习推荐模型 (DLRM)。团队优化了 DLRM 所有组件的性能,包括多层感知器 (MLP) 层、反馈组件和嵌入组件。在高度优化的 DLRM FP32 训练模型的基础上,BF16 利用 FP32 可为优化器带来超过 1.4 倍的端到端性能提升和高达 2.85 倍的 INT8 推理性能提升。

结果

表 1 显示的是采用 BF16 后 ResNet-50 网络在 4 路第三代英特尔® 至强® 可扩展处理器上运行时性能提升 1.64 倍、ResNeXt-101 32x4d 网络性能提升 1.60 倍;DLRM 在单路第三代至强® 可扩展处理器上运行时,性能提升 1.4 倍。这些结果利用了原生集成 oneDNN 的 PyTorch。

 

 训练

每个实例的内核数

实例数

BF16(样本/秒)

FP32(样本/秒)

提速比率

DLRM

28

1

99321

71061

1.40

ResNet-50

28

4

399

243

1.64

ResNeXt-101 32x4d

28

4

193

120

1.60

 

表 1. 使用批处理样本数为 2K 的 MLPerf DLRM 模型时,单实例 BF16 训练性能与基准(FP32,使用英特尔® 数学核心函数库(英特尔® MKL))相比的提升情况;使用批处理样本数为 128/实例的 ResNet50/ResNext101 32x4d 模型时,四实例 BF16 训练性能与基准(FP32,使用英特尔® oneDNN)相比的提升情况。DLRM 模型超参数采用的是 MLPerf 配置。

此外,英特尔还用低精度 INT8 数据类型优化了 DLRM 推理。嵌入层量化为 INT8,这使大型嵌入层的内存占用减少了近 4 成。计算密集型 MLP 通过 INT8 指令得到加速,提速幅度超过 3.5 倍。端到端模型的提速幅度为 2.85 倍,如表 2 所示。

 

 
推理

每个实例的内核数

实例数

INT8(样本/秒)

FP32(样本/秒)

提速比率

DLRM

1

28

611082

214559

2.85

 

表 2. 在单路第三代英特尔® 至强® 可扩展处理器上运行批处理样本数为 16 的 DLRM Facebook 模型时,28 个实例 INT8 推理性能与基准(FP32,使用英特尔® MKL)相比的提升情况。测试中集成了 PyTorch 多实例共享-权重解决方案以及面向采用 8 位实现的 MLP 和 Embeddingbag 方法。

结论

英特尔将与 Facebook 持续合作,加速跨多种数据类型的 PyTorch 训练和推理。我们针对 PyTorch 启用并优化了 BF16 数据类型。与 FP32 相比,BF16 将具有代表性的计算机视觉模型的训练性能提升多达 1.64 倍,将 DLRM 模型的训练性能提升多达 1.4 倍。得益于第三代英特尔® 至强® 可扩展处理器集成的 INT8 推理加速技术,与 FP32 相比,DLRM 模型的推理性能提升多达 2.85 倍

 

点击查看原文

点击查看原文

 

 

作者简介

Andres Rodriguez 博士是英特尔数据平台事业部 (DPG) 的高级首席工程师兼首席人工智能架构师。他参与设计了针对云计算和企业客户的深度学习解决方案,并在整个英特尔深度学习产品领域中提供技术指导。他在人工智能领域拥有 15 年的经验。Andres 在卡内基梅隆大学获得机器学习方向博士学位,撰写过 20 多篇经过同行评审的期刊和会议文章,以及有关机器学习的专著章节。

Jianhui Li 博士是英特尔架构、图形和软件事业部的首席工程师,负责领导深度学习框架集成和工作负载优化工作。他曾是二进制翻译和 JIT 编译器方面的软件开发人员,领导开发了 Houdini(这款应用可以在基于人工智能的平台上透明地运行 Android* ARM 应用,带来出色的用户体验)。Jianhui 毕业于复旦大学,获得了计算机科学博士学位。他在二进制翻译和实际应用优化方面拥有 21 项美国专利。

Jiong Gong 是英特尔架构、图形和软件事业部的高级软件工程师。他担任基于英特尔® 架构优化 PyTorch 框架的软件架构师,并且是英特尔® 架构上低精度推理解决方案的主要贡献者之一。他在人工智能领域拥有 8 年的全栈经验,涵盖从人工智能应用到框架、库和编译器优化。Jiong 毕业于上海交通大学,获得了计算机科学硕士学位。

Hongzhen Liu 是英特尔架构、图形和软件事业部的高级软件工程师,负责开发和优化面向英特尔® 架构的深度学习框架,以及在此框架下的低精度(BFloat16、FP16、INT8)解决方案。他在并行计算、全栈软件优化以及人工智能应用中的高性能数学核心函数库设计方面拥有丰富的经验。Hongzhen 毕业于东南大学,获得了模式识别与智能系统硕士学位。

Shivani Sud 是一名从事云计算技术和机器学习系统架构的系统架构师。她是电信网络向软件定义基础设施转型方案的主要贡献者之一。在这之前,她的研究贡献主要集中于下一代移动设备、多设备使用和平台安全性。她拥有 7 项美国专利,撰写并发表过多篇经过同行评审的文章。

 

配置详情

ResNet50/ResNext101 (FP32/BF16):批处理样本数为 128/实例,4 个实例。
ResNet50/ResNext101 dataset (FP32/BF16):ImageNet 数据集
DLRM 批处理样本数 (FP32/BF16):2K/实例,1 个实例
DLRM 数据集 (FP32/BF16):Criteo TB 数据集
DLRM 批处理样本数 (INT8):16/实例,28 个实例,虚拟数据。
基于英特尔 2020 年 6 月 2 日进行的测试。
英特尔® 至强® 铂金 8380H 处理器,4 路,28 核,启用超线程技术,启用睿频,总内存 768 GB(24 插槽/32 GB/3200 MHz),BIOS:WLYDCRB1.SYS.0015.P96.2005070242 (ucode: 0x700001b),Ubuntu 20.04 LTS,内核 5.4.0-29-generic
PyTorch:https://github.com/pytorch/pytorch.git
英特尔面向 PyTorch 的扩展程序:https://github.com/intel/intel-extension-for-pytorch.git
gcc: 8.4.0,
oneDNN 版本:v1.4
ResNet50:https://github.com/intel/optimized-models/tree/master/pytorch/ResNet50
ResNext101 32x4d:  https://github.com/intel/optimized-models/tree/master/pytorch/ResNext101_32x4d
DLRM:  https://github.com/intel/optimized-models/tree/master/pytorch/dlrm

参考资料

https://software.intel.com/content/www/cn/zh/develop/articles/intel-and-facebook-collaborate-to-boost-pytorch-cpu-performance.html

https://www.facebook.com/yann.lecun/posts/10155891487497143

 

一般提示和法律声明

性能测试中使用的软件和工作负荷可能仅在英特尔微处理器上进行了性能优化。诸如 SYSmark 和 MobileMark 等测试均系基于特定计算机系统、硬件、软件、操作系统及功能。  上述任何要素的变动都有可能导致测试结果的变化。请参考其他信息及性能测试(包括结合其他产品使用时的运行性能)以对目标产品进行全面评估。更多信息,详见:  http://www.intel.com/performance

本文档包含尚在开发之中的产品、服务和/或进程的相关信息。本文中提供的所有信息可在不通知的情况下随时发生变更。关于英特尔的最新预测、计划、产品规格和路线图,请联系您的英特尔代表。

英特尔编译器针对英特尔微处理器的优化程度可能与针对非英特尔微处理器的优化程度不同。这些优化包括 SSE2、SSE3 和 SSSE3 指令集和其他优化。对于非英特尔微处理器上的任何优化是否存在、其功能或效力,英特尔不做任何保证。本产品中取决于微处理器的优化是针对英特尔微处理器。不具体针对英特尔微架构的特定优化为英特尔微处理器保留。请参考适用的产品用户与参考指南,获取有关本声明中具体指令集的更多信息。

© 英特尔公司版权所有。英特尔、英特尔标识以及其他英特尔商标是英特尔公司或其子公司在美国和/或其他国家的商标。其他的名称和品牌可能是其他所有者的资产。

 

点击查看原文

点击查看原文

版权声明:本文为slidestalk原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/slidestalk/p/13962249.html