2023 年 1 月 10 日 — 作者:英特尔的 Ashraf Bhuiyan、AG Ramesh,谷歌的 Penporn Koanantakool TensorFlow 2.9.1 是第一个默认包含英特尔® oneAPI 深度神经网络 (oneDNN) 库驱动的优化的版本,用于第三代英特尔® 第三代至强® 处理器(Cascade Lake)。此后,英特尔和谷歌一直在继续合作,为下一代英特尔至强处理器引入新的 TensorFlow 优化。…
作者:英特尔的 Ashraf Bhuiyan、AG Ramesh,谷歌的 Penporn Koanantakool
TensorFlow 2.9.1 是第一个默认包含英特尔® oneAPI 深度神经网络 (oneDNN) 库驱动的优化的版本,用于第三代英特尔® 第三代至强® 处理器(Cascade Lake)。此后,英特尔和谷歌一直在继续合作,为下一代英特尔至强处理器引入新的 TensorFlow 优化。
这些优化使用新的基于矩阵的指令集英特尔® 高级矩阵扩展 (AMX) 来加速 TensorFlow 模型。英特尔 AMX 指令旨在加速使用谷歌的 bfloat16 和 8 位低精度数据类型的深度学习操作,如矩阵乘法和卷积。低精度数据类型被广泛使用,并且在不显着降低精度的条件下,与默认的 32 位浮点格式相比,提供了显着的改进。
我们很高兴地宣布,这些功能现在作为预览版在 TensorFlow 的 GitHub 上的 nightly 版本以及英特尔优化版本中提供。TensorFlow 开发人员现在可以使用英特尔 AMX 在第四代英特尔® 至强® 可扩展处理器(以前称为 Sapphire Rapids)上使用 TensorFlow 中提供的现有混合精度支持。我们对结果感到兴奋 - 通过使用英特尔 AMX,几个流行的 AI 模型在从第三代到第四代英特尔至强处理器的迁移过程中运行速度提高了高达 19 倍。
英特尔® 高级矩阵扩展 (AMX) 是一个基于 X86 的扩展,它引入了用于两个矩阵的点积的新编程框架。英特尔 AMX 作为 AI 加速引擎,建立在先前几代英特尔至强处理器中的功能之上,例如 AVX-512(用于优化的矢量操作)和深度学习加速(通过矢量神经网络指令,用于优化的资源利用/缓存和更低精度 AI 优化)。
在英特尔 AMX 中,引入了称为“瓦片”的新类型二维寄存器文件,以及一组 12 个用于对瓦片进行操作的新 X86 指令。新指令 TDPBF16PS 执行 bfloat16 瓦片的点积,而 TDPBSSD 执行带符号 8 位整数瓦片的点积。其他指令包括瓦片配置以及数据移动到英特尔 AMX 单元。更多详细信息可以在英特尔发布的 文档 中找到。
英特尔 AMX 优化包含在官方 TensorFlow nightly 版本 中。最新的稳定版 2.11 版本 包含初步支持,但完整支持将在后续的稳定版本中提供。
在英特尔第四代英特尔至强上运行 TensorFlow 的用户可以进行最小的更改来利用这些优化
a) 对于 bfloat16 混合精度,开发人员可以使用 Keras 混合精度 API 来加速他们的模型,如 此处 所述。您只需在代码中包含以下几行,即可轻松调用自动混合精度!from tensorflow.keras import mixed_precision policy = mixed_precision.Policy('mixed_bfloat16') mixed_precision.set_global_policy(policy) |
以下图表显示了在使用英特尔 AMX 低精度的情况下,在 2 插槽、56 核第四代英特尔至强上针对各种流行的视觉和语言模型的性能改进,其中基线是 2 插槽、40 核第三代英特尔至强,使用 FP32 精度。我们使用 英特尔优化版 TensorFlow* 预览版 和来自 英特尔® 架构模型库 的 launch_benchmark 脚本 。
在此图表中,第四代英特尔至强上的混合精度模型的推断比第三代英特尔至强上的 FP32 模型快 1.9 倍到 9.6 倍。(BS=x 表示一个大的批次大小,取决于模型)
在第四代英特尔至强上使用自动混合精度训练模型比在第三代英特尔至强上使用 FP32 模型快 2.3 倍到 5.5 倍。
同样,在第四代英特尔至强上的量化模型推断比在第三代英特尔至强上的 FP32 精度快 3.3 倍到 19 倍。
除了上述流行模型之外,我们还测试了数百个其他模型,以确保在所有情况下都能观察到性能提升。
我们正在努力在 TensorFlow 的未来版本中持续调整和改进英特尔 AMX 优化。我们鼓励用户在英特尔第四代处理器上使用英特尔 AMX 优化其 AI 模型,以获得显着的性能提升;不仅对于推断,而且对于预训练、微调和迁移学习。我们希望听到您的反馈,请通过 TensorFlow GitHub 页面 或 oneAPI 深度神经网络库 GitHub 页面 提供反馈。
本博文中介绍的结果是英特尔的 TensorFlow 和 oneDNN 团队以及谷歌 TensorFlow 团队的合作者的许多人的工作。
英特尔: Md Faijul Amin、Mahmoud Abuzaina、Gauri Deshpande、Ashiq Imran、Kanvi Khanna、Geetanjali Krishna、Sachin Muradi、Srinivasan Narayanamoorthy、Bhavani Subramanian、Yimei Sun、Om Thakkar、Jojimon Varghese、Tatyana Primak、Shamima Najnin、Mona Minakshi、Haihao Shen、Shufan Wu、Feng Tian、Chandan Damannagari。
谷歌: Eugene Zhulenev、Antonio Sanchez、Emilio Cota。