作者:PyTorch 团队

我们很高兴宣布发布 PyTorch® 2.5(发布说明)!此版本为 SDPA 提供了一个新的 CuDNN 后端,默认情况下可以为在 H100 或更新的 GPU 上使用 SDPA 的用户加速。此外,torch.compile 的区域编译提供了一种减少 torch.compile 冷启动时间的方法,允许用户编译重复的 nn.Module(例如 LLM 中的 Transformer 层)而无需重新编译。最后,TorchInductor CPP 后端提供了稳定的性能加速,并具有众多增强功能,例如 FP16 支持、CPP 包装器、AOT-Inductor 模式和最大自动调整模式。

自 PyTorch 2.4 以来,此版本包含来自 504 位贡献者的 4095 次提交。我们衷心感谢我们敬业的社区的贡献。和往常一样,我们鼓励您尝试这些功能,并报告您遇到的任何问题,以便我们改进 2.5。有关如何开始使用 PyTorch 2 系列的更多信息,请访问我们的 入门 页面。

此外,请查看我们的新生态系统项目发布,包括 TorchRecTorchFix.

Beta 原型
SDPA 的 CuDNN 后端 FlexAttention
torch.compile 区域编译,无需重新编译 编译后的 Autograd
TorchDynamo 添加了对异常处理和 MutableMapping 类型的支持 Flight Recorder
TorchInductor CPU 后端优化 使用 GEMM 模板在 CPU 上支持最大自动调整
Windows 上的 TorchInductor
在 CPU 路径上为急切模式和 TorchInductor CPP 后端提供 FP16 支持
自动加载设备扩展
增强了英特尔 GPU 支持

*要查看完整的公共功能提交列表,请单击 此处

BETA 功能

[Beta] SDPA 的 CuDNN 后端

cuDNN 的“融合闪存注意力”后端已落地,用于 *torch.nn.functional.scaled_dot_product_attention*。在 NVIDIA H100 GPU 上,与 FlashAttentionV2 相比,这可以提供高达 75% 的加速。对于在 H100 或更新的 GPU 上使用 SDPA 的所有用户,此加速默认启用。

[Beta] *torch.compile* 区域编译,无需重新编译

区域编译,无需重新编译,通过 *torch._dynamo.config.inline_inbuilt_nn_modules*,默认情况下在 2.5+ 中设置为 True。此选项允许用户编译重复的 *nn.Module*(例如 LLM 中的 Transformer 层)而无需重新编译。与编译完整模型相比,此选项可以减少编译延迟,与完整模型编译相比,性能下降 1%-5%。

有关更多信息,请参阅 教程

[Beta] TorchInductor CPU 后端优化

此功能促进了 Inductor 的 CPU 后端优化,包括 CPP 后端代码生成以及使用自定义 CPU 内核的 FX 融合。Inductor CPU 后端支持常见数据类型的矢量化以及所有 Inductor IR 操作,以及静态和符号形状。它与 Linux 和 Windows 操作系统兼容,并支持默认的 Python 包装器、CPP 包装器和 AOT-Inductor 模式。

此外,它扩展了 GEMM 模板的最大自动调整模式(在 2.5 中进行原型设计),提供了进一步的性能提升。后端支持各种 FX 融合,降低到自定义内核,例如用于线性/卷积操作和 SDPA 的 oneDNN。Inductor CPU 后端在三个基准套件(TorchBench、Hugging Face 和 timms)中始终如一地实现性能加速,在测试的 193 个模型中,97.5% 的模型优于急切模式。

原型功能

[原型] FlexAttention

我们引入了一个灵活的 API,它使您可以使用几行惯用的 PyTorch 代码实现各种注意力机制,例如滑动窗口、因果掩码和前缀 LM。此 API 利用 torch.compile 生成融合的 FlashAttention 内核,消除了额外的内存分配,并实现了与手工实现相当的性能。此外,我们使用 PyTorch 的 autograd 机制自动生成反向传递。此外,我们的 API 可以利用注意力掩码中的稀疏性,与标准注意力实现相比,带来显著改进。

有关更多信息和示例,请参阅 官方博客文章Attention Gym

[原型] 编译后的 Autograd

编译后的 Autograd 是对 PT2 堆栈的扩展,允许捕获整个反向传递。与 AOT 调度程序跟踪的反向图不同,编译后的 Autograd 跟踪被推迟到反向执行时间,这使其不受前向传递图中断的影响,并允许它将反向钩子记录到图中。

有关更多信息,请参阅 教程

[原型] Flight Recorder

Flight Recorder 是一个新的调试工具,有助于调试卡住的作业。该工具通过持续捕获有关集体操作的运行时信息来工作。在检测到卡住的作业后,可以使用该信息快速识别行为异常的等级/机器以及代码堆栈跟踪。

有关更多信息,请参阅以下 教程

[原型] 使用 GEMM 模板在 CPU 上支持最大自动调整

Torch.compile 中 Inductor CPU 后端的最大自动调整模式会在编译时分析操作的多种实现,并选择性能最佳的实现。这对 GEMM 相关的操作特别有利,使用基于 C++ 模板的 GEMM 实现作为使用 oneDNN 和 MKL 库的基于 ATen 的方法的替代方法。我们支持 FP32、BF16、FP16 和 INT8,并支持用于 x86 CPU 的后记融合。我们在 dynamo 基准套件上观察到高达 7% 的几何平均加速,以及 LLM 推理中高达 20% 的下一个标记延迟提升。

有关更多信息,请参阅 教程

[原型] Windows 上的 TorchInductor CPU

Torch.compile 中的 Inductor CPU 后端现在可以在 Windows 上运行。我们目前支持用于 Windows Inductor 的 MSVC (cl)、clang (clang-cl) 和英特尔编译器 (icx-cl)。

有关更多详细信息,请参阅 教程

[原型] 在 CPU 路径上为急切模式和 TorchInductor CPP 后端提供 FP16 支持

Float16 是一种常用的缩减浮点数类型,用于提高神经网络推理/训练的性能。自本版本以来,Float16 已在 CPU 路径上得到支持,适用于急切模式和 TorchInductor。

[原型] 自动加载设备扩展

PyTorch 现在支持自动加载树外设备扩展,通过消除手动导入的需要,简化了集成。此功能通过 torch.backends 入口点启用,通过确保无缝扩展加载来简化使用,同时允许用户在需要时通过环境变量禁用它。

有关更多信息,请参阅 教程

[原型] 增强了英特尔 GPU 支持

英特尔 GPU 支持增强功能现已适用于英特尔® 数据中心 GPU Max 系列和英特尔® 客户端 GPU(内置英特尔® Arc™ 显卡的英特尔® 酷睿™ Ultra 处理器和英特尔® Arc™ 显卡,用于 dGPU 部件),这将使您在 PyTorch 2.5 版本中更容易在英特尔 GPU 上加速您的机器学习工作流程。在本版本中,我们还为英特尔® 客户端 GPU 启用了 PyTorch 在 Windows 上的初始支持。

  • 扩展的 PyTorch 硬件后端支持矩阵,包括英特尔数据中心和客户端 GPU。  
  • SYCL* 内核的实现,以增强在英特尔 GPU 上的 Aten 运算符的覆盖范围和执行,从而提高 PyTorch 急切模式的性能。
  • 增强了 torch.compile 的英特尔 GPU 后端,以提高各种深度学习工作负载的推理和训练性能。

这些功能可通过 PyTorch 预览和夜间二进制 PIP 轮获得。有关英特尔 GPU 支持的更多信息,请参阅 文档