英特尔 PyTorch 团队撰写

PyTorch* 2.6 刚刚发布,带来了一系列令人兴奋的新特性,包括 torch.compile 对 Python 3.13 的兼容性、新的安全性和性能增强,以及 torch.load 默认参数的更改。PyTorch 还宣布其官方 Anaconda 频道已被弃用。

性能特性中有三项增强了英特尔平台上的开发者效率

  1. 改进的英特尔 GPU 可用性
  2. 针对 LLM 在 x86 CPU 上的 FlexAttention 优化
  3. x86 CPU 对 eager 和 Inductor 模式的 FP16 支持

改进的英特尔 GPU 可用性

为了向从事人工智能 (AI) 工作的开发者提供更好的英特尔 GPU 支持,这些 GPU 上的 PyTorch 用户体验得到了增强。此改进包括简化的安装步骤、Windows* 发行版二进制分发,以及对支持的 GPU 型号的扩展覆盖,包括最新的 Intel® Arc™ B 系列独立显卡。

这些新特性有助于促进 PyTorch 生态系统内的加速机器学习工作流程,提供一致的开发者体验和支持。希望在 Intel® Core™ Ultra AI PCIntel® Arc™ 独立显卡上使用 PyTorch 模型进行微调、执行推理和开发的应用程序开发者及研究人员,现在可以直接使用 Windows、Linux* 和适用于 Linux 的 Windows 子系统 2 的二进制版本安装 PyTorch。

新特性包括

  • 简化的英特尔 GPU 软件栈设置,支持一键安装 torch-xpu PIP wheels,以便开箱即用地运行深度学习工作负载,从而消除了安装和激活英特尔 GPU 开发软件捆绑包的复杂性。 
  • torch core、torchvision 和 torchaudio 的 Windows 二进制版本已适用于英特尔 GPU,支持范围从带有 Intel® Arc™ Graphics 的 Intel® Core™ Ultra Series 2Intel® Arc™ A 系列显卡 扩展到最新的 GPU 硬件 Intel® Arc™ B 系列显卡支持。 
  • 通过带有 SYCL* 内核的英特尔 GPU 进一步增强了 Aten 算子覆盖范围,以实现流畅的 eager 模式执行,同时还修复了英特尔 GPU 上 torch.compile 的错误并进行了性能优化。 

入门指南中了解英特尔® 客户端 GPU 和 英特尔® 数据中心 GPU Max 系列上的新环境设置、PIP wheels 安装和示例。 

针对 LLM 在 X86 CPU 上的 FlexAttention 优化

FlexAttention 最早于 PyTorch 2.5 中引入,旨在支持各种 Attention 机制,甚至它们的组合。这个 PyTorch API 利用 torch.compile 生成融合的 FlashAttention 内核,从而消除了额外的内存分配,并实现了与手写实现相当的性能。

以前,FlexAttention 是基于 Triton 后端为 CUDA* 设备实现的。自 PyTorch 2.6 起,通过 TorchInductor CPP 后端添加了对 FlexAttention 的 X86 CPU 支持。这项新特性利用并扩展了当前的 CPP 模板能力,以支持基于现有 FlexAttention API 的各种 Attention 变体(例如对于 LLM 推理至关重要的 PageAttention),并在 x86 CPU 上带来了优化的性能。通过此功能,用户可以轻松使用 FlexAttention API 在 CPU 平台上构建其 Attention 解决方案并获得良好的性能。

通常,FlexAttention 被流行的 LLM 生态系统项目(如 Hugging Face transformers 和 vLLM)在其 LLM 相关建模(例如 PagedAttention)中用于实现更好的开箱即用性能。在官方采用之前,Hugging Face 中的此使能 PR 可以帮助我们了解 FlexAttention 在 x86 CPU 平台上带来的性能优势。

下图显示了 PyTorch 2.6(带有此功能)和 PyTorch 2.5(不带此功能)在典型 Llama 模型上的性能比较。对于实时模式(Batch Size = 1),跨不同输入 token 长度的下一个 token 性能提升约 1.13 倍至 1.42 倍。对于典型 SLA(P99 token 延迟 <=50ms)下的最佳吞吐量,PyTorch 2.6 比 PyTorch 2.5 性能提升超过 7.83 倍,因为 PyTorch 2.6 可以同时运行 8 个输入(Batch Size = 8)并仍保持 SLA,而 PyTorch 2.5 只能运行 1 个输入,这是因为 PyTorch 2.6 中基于 FlexAttention 的 PagedAttention 在多 Batch Size 场景下提供了更高的效率。

Figure 1. Performance comparison of PyTorch 2.6 and PyTorch 2.5 on Typical Llama Models

图 1. PyTorch 2.6 和 PyTorch 2.5 在典型 Llama 模型上的性能比较

x86 CPU 对 Eager 和 Inductor 模式的 FP16 支持

Float16 是一种常用的缩减浮点类型,可提高神经网络推理和训练的性能。最近发布的 Intel® Xeon® 6 with P-Cores 等 CPU 支持带有原生加速器 AMX 的 Float16 数据类型,这极大地提高了 Float16 的性能。x86 CPU 上的 Float16 支持最初作为原型功能在 PyTorch 2.5 中引入。现在,它在 eager 模式和 Torch.compile + Inductor 模式方面都得到了进一步改进,并已升级到 Beta 级别以供更广泛采用。当模型使用 Float16/Float32 混合精度进行预训练时,这有助于在 CPU 端进行部署,而无需修改模型权重。在支持 AMX Float16 的平台(即带有 P-cores 的 Intel® Xeon® 6 处理器)上,Float16 在典型的 PyTorch 基准测试套件(TorchBench、Hugging Face 和 Timms)中的通过率与 Bfloat16 相同。它也显示出与 16 位数据类型 Bfloat16 相当的良好性能。

总结

在这篇博客中,我们讨论了 PyTorch 2.6 中旨在增强英特尔平台开发者效率的三项特性。这三项特性旨在提高英特尔 GPU 可用性,优化适用于大型语言模型 (LLM) 的 x86 CPU 上的 FlexAttention,以及在 eager 和 Inductor 模式下支持 x86 CPU 上的 FP16。获取 PyTorch 2.6 并亲自尝试,或者您可以在 Intel® Tiber™ AI Cloud 上访问 PyTorch 2.6,利用针对英特尔硬件和软件优化的托管笔记本。

致谢

PyTorch 2.6 的发布是英特尔平台的一个令人兴奋的里程碑,这离不开社区的深入协作和贡献。我们衷心感谢 AlbanAndreyBinJasonJerryNikita 分享宝贵想法、仔细审查 PR 并提供富有洞察力的 RFC 反馈。他们的奉献推动了持续改进,并为英特尔平台推动了生态系统的发展。

参考资料

产品和性能信息

使用 AWS EC2 m7i.metal-48xl 的测量:2 个 Intel® Xeon® Platinum 8488C,开启 HT,开启 Turbo,NUMA 2,可用集成加速器 [已使用]:DLB [8]、DSA [8]、IAA[8]、QAT[CPU 上,8],总内存 512GB (16x32GB DDR5 4800 MT/s [4400 MT/s]),BIOS Amazon EC2 1.0,微代码 0x2b000603,1 个弹性网络适配器 (ENA),1 个 Amazon Elastic Block Store 800G,Ubuntu 24.04.1 LTS 6.8.0-1018-aws,由英特尔于 2025 年 1 月 15测试。

通知和免责声明

性能因用途、配置和其他因素而异。在性能指数网站上了解更多信息。性能结果基于在给定配置下于所示日期的测试,可能无法反映所有公开可用的更新。有关配置详情,请参阅备份。任何产品或组件都不能绝对安全。您的成本和结果可能会有所不同。英特尔技术可能需要启用硬件、软件或服务激活。

英特尔公司。Intel、Intel 徽标和英特尔其他标志是英特尔公司或其子公司的商标。其他名称和品牌可能是其他方的财产。

AI 免责声明

AI 功能可能需要购买软件、订阅或由软件或平台提供商启用,或者可能有特定的配置或兼容性要求。详情请访问 www.intel.com/AIPC。结果可能会有所不同。