英特尔与 Facebook 合作采用第三代英特尔® 至强® 可扩展处理器和支持 BFloat16 加速的英特尔® 深度学习加速技术,提高 PyTorch 性能
英特尔与 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
参考资料
一般提示和法律声明
性能测试中使用的软件和工作负荷可能仅在英特尔微处理器上进行了性能优化。诸如 SYSmark 和 MobileMark 等测试均系基于特定计算机系统、硬件、软件、操作系统及功能。 上述任何要素的变动都有可能导致测试结果的变化。请参考其他信息及性能测试(包括结合其他产品使用时的运行性能)以对目标产品进行全面评估。更多信息,详见: http://www.intel.com/performance。
本文档包含尚在开发之中的产品、服务和/或进程的相关信息。本文中提供的所有信息可在不通知的情况下随时发生变更。关于英特尔的最新预测、计划、产品规格和路线图,请联系您的英特尔代表。
英特尔编译器针对英特尔微处理器的优化程度可能与针对非英特尔微处理器的优化程度不同。这些优化包括 SSE2、SSE3 和 SSSE3 指令集和其他优化。对于非英特尔微处理器上的任何优化是否存在、其功能或效力,英特尔不做任何保证。本产品中取决于微处理器的优化是针对英特尔微处理器。不具体针对英特尔微架构的特定优化为英特尔微处理器保留。请参考适用的产品用户与参考指南,获取有关本声明中具体指令集的更多信息。
英特尔公司版权所有。英特尔、英特尔标识以及其他英特尔商标是英特尔公司或其子公司在美国和/或其他国家的商标。其他的名称和品牌可能是其他所有者的资产。
点击查看原文
点击查看原文
英特尔与 Facebook 合作采用第三代英特尔® 至强® 可扩展处理器和支持 BFloat16 加速的英特尔® 深度学习加速技术,提高 PyTorch 性能的更多相关文章
- [转帖]抢先AMD一步,英特尔推出新处理器,支持LPDDR5!
抢先AMD一步,英特尔推出新处理器,支持LPDDR5! http://www.eetop.cn/cpu_soc/6946240.html 2019.10 intel的最新技术发展. 近日,知名硬件爆料 ...
- [转帖]高通推出八核笔电处理器骁龙8cx 能超英特尔吗?
高通推出八核笔电处理器骁龙8cx 能超英特尔吗? https://baijiahao.baidu.com/s?id=1619154699684981202&wfr=spider&for ...
- 基于英特尔® 至强 E5 系列处理器的单节点 Caffe 评分和训练
原文链接 在互联网搜索引擎和医疗成像等诸多领域,深度神经网络 (DNN) 应用的重要性正在不断提升. Pradeep Dubey 在其博文中概述了英特尔® 架构机器学习愿景. 英特尔正在实现 Prad ...
- 对话Facebook人工智能实验室主任、深度学习专家Yann LeCun
对话Facebook人工智能实验室主任.深度学习专家Yann LeCun Yann LeCun(燕乐存),Facebook人工智能实验室主任,NYU数据科学中心创始人,计算机科学.神经科学.电子电气科 ...
- Recommending music on Spotify with deep learning 采用深度学习算法为Spotify做基于内容的音乐推荐
本文参考http://blog.csdn.net/zdy0_2004/article/details/43896015译文以及原文file:///F:/%E6%9C%BA%E5%99%A8%E5%AD ...
- 不用写代码就能实现深度学习?手把手教你用英伟达 DIGITS 解决图像分类问题
2006年,机器学习界泰斗Hinton,在Science上发表了一篇使用深度神经网络进行维数约简的论文 ,自此,神经网络再次走进人们的视野,进而引发了一场深度学习革命.深度学习之所以如此受关注,是因为 ...
- 玩深度学习选哪块英伟达 GPU?有性价比排名还不够!
本文來源地址:https://www.leiphone.com/news/201705/uo3MgYrFxgdyTRGR.html 与“传统” AI 算法相比,深度学习(DL)的计算性能要求,可以说完 ...
- ubuntu16.04系统深度学习开发环境、常用软件环境(如vscode、wine QQ、 360wifi驱动(第三代暂无))搭建相关资料
事后补充比较全面的(找对资料真的省一半功夫):https://www.jianshu.com/p/5b708817f5d8?from=groupmessage Ubuntu16.04 + 1080Ti ...
- 【吴恩达课后测验】Course 1 - 神经网络和深度学习 - 第二周测验【中英】
[中英][吴恩达课后测验]Course 1 - 神经网络和深度学习 - 第二周测验 第2周测验 - 神经网络基础 神经元节点计算什么? [ ]神经元节点先计算激活函数,再计算线性函数(z = Wx + ...
随机推荐
- TP5上传图片到七牛云,并且删除七牛云的图片
一,通过composer 下载七牛云 sdk composer require qiniu/php-sdk 二,手动下载七牛云sdk 1,https://developer.qiniu.com/kod ...
- Python:MySQL数据库环境相关问题
系统环境 Ubuntu 16.04.2 LTS mysql Ver 14.14 Distrib 5.7.18, for Linux (x86_64) using EditLine wrapper P ...
- golang Gin framework with websocket
概述 golang websocket 库 示例 后端 前端 结论 概述 对于 golang 的 web 开发, 之前写过 2 篇 blog, 分别介绍了: 在 Gin 框架下, 各类 http AP ...
- 手撸ORM浅谈ORM框架之基础篇
好奇害死猫 一直觉得ORM框架好用.功能强大集众多优点于一身,当然ORM并非完美无缺,任何事物优缺点并存!我曾一度认为以为使用了ORM框架根本不需要关注Sql语句如何执行的,更不用关心优化的问题!!! ...
- 实验四 CSS样式的应用
实验四 CSS样式的应用 注意:以下实验项目皆以本文件为操作对象,实验结果用记事本保留后预览,最后将添加的CSS代码转载到实验报告中 另本网页中蓝色加下划线的字即为默认的超链接样式 实验目的: 掌握 ...
- 1-JAVA类、接口、抽象、多态
类中全部成员变量用priviate修饰,用get获取,set设值 对于boolean类型的值,getter方法也一定要写成isXXX 的形式,而setXXX类型不变 this关键字的作用 当方法的局部 ...
- python 使用pyinstaller打包程序
使用pyinstaller 打包.py脚本,在其他计算机可以直接运行,不需要python环境 安装pyinstaller库 pip install pystaller 打包程序 pyinstaller ...
- xuexi0.2
1.数据结构就是研究数据如何排布和如何加工. 2.数组的目的是为了管理程序中类型相同,意义相关的变量. 3.数组的优势是比较简单,可以通过访问下标来进行随机访问.数组的限制:元素类型必须相同,数组的大 ...
- 自定义常用input表单元素二:纯css实现自定义radio单选按钮
这是接着上一篇纯css自定义复选框checkbox的第二篇,自定义一个radio单选按钮,同样,采用css伪类和"+"css选择器为思路,下面是预览图: 下面直入主题放代码:HTM ...
- lumen中间件 Middleware
app/http 下新建 TestMiddleware.php <?php namespace App\Http\Middleware; use Closure; class TestMiddl ...