我们非常高兴地宣布 PyTorch® 2.5(发布说明)的发布!本版本引入了新的 cuDNN 后端支持 SDPA,默认情况下为使用 H100s 或更新 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 系列的信息,请参阅我们的入门页面。
此外,请查看我们的新生态系统项目发布,包括 TorchRec 和 TorchFix。
测试版 | 原型 |
SDPA 的 cuDNN 后端 | FlexAttention |
torch.compile 区域编译无需重新编译 | 编译 Autograd |
TorchDynamo 增加了异常处理和可变映射类型支持 | 飞行记录器 |
火炬电感器 CPU 后端优化 | 支持 CPU 上的最大自动调整功能,使用 GEMM 模板 |
火炬电感器在 Windows 上 | |
CPU 路径上支持 FP16,适用于动态模式和火炬电感器 CPP 后端 | |
自动加载设备扩展 | |
增强英特尔 GPU 支持 |
*点击此处查看所有公开功能提交的完整列表。
测试功能
[Beta] cuDNN 后端为 SDPA
cuDNN 的“融合 Flash Attention”后端已集成到 torch.nn.functional.scaled_dot_product_attention 中。在 NVIDIA H100 GPU 上,这可以提供高达 75%的速度提升,相对于 FlashAttentionV2。这种加速默认对所有使用 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 融合,降低到定制的内核,如用于线性/卷积操作的 oneDNN 和 SDPA。Inductor CPU 后端在三个基准测试套件(TorchBench、Hugging Face 和 timms)中持续实现性能加速,在 193 个测试模型中有 97.5%优于 eager 模式。
原型功能
[原型] FlexAttention
我们引入了一个灵活的 API,该 API 可以通过几行惯用的 PyTorch 代码实现各种注意力机制,如滑动窗口、因果掩码和 PrefixLM。此 API 利用 torch.compile 生成融合的 FlashAttention 内核,消除了额外的内存分配,并实现了与手写实现相当的性能。此外,我们使用 PyTorch 的 autograd 机制自动生成反向传播。此外,我们的 API 可以利用注意力掩码的稀疏性,在标准注意力实现的基础上实现显著的改进。
如需更多信息及示例,请参阅官方博客文章和 Attention Gym。
[原型] 编译 Autograd
编译 Autograd 是 PT2 栈的扩展,允许捕获整个反向传播过程。与 AOT 分派器跟踪的反向图不同,编译 Autograd 跟踪是在反向执行时间延迟的,这使得它不受前向传播图中断的影响,并允许它将反向钩子记录到图中。
请参阅教程获取更多信息。
[原型] 飞行记录器
飞行记录器是一种新的调试工具,可以帮助调试卡住的作业。该工具通过持续捕获运行中的集体信息来工作。一旦检测到卡住的作业,就可以使用这些信息快速识别出行为异常的节点/机器以及代码堆栈跟踪。
如需更多信息,请参阅以下教程。
[原型] 在 CPU 上使用 GEMM 模板实现的最大自动调整支持
torch.compile 配置文件中的 Inductor CPU 后端最大自动调整模式在编译时对操作的多个实现进行多级实现,并选择性能最佳的一个。这对于 GEMM 相关操作特别有益,使用基于 C++模板的 GEMM 实现作为 ATen 方法(使用 oneDNN 和 MKL 库)的替代方案。我们支持 FP32、BF16、FP16 和 INT8,并支持 x86 CPU 的尾调用融合。我们在 dynamo 基准测试套件中看到了高达 7%的几何平均速度提升,在LLM推理中,延迟提升了高达 20%。
请参阅教程获取更多信息。
[原型] Windows 上的 TorchInductor CPU
torch.compile 中的电感 CPU 后端现在支持 Windows。目前我们支持 Windows 电感版本的 MSVC(cl)、clang(clang-cl)和 Intel 编译器(icx-cl)。
请参阅教程以获取更多详细信息。
[原型] CPU 路径上对 eager 模式和 TorchInductor CPP 后端的 FP16 支持
Float16 是一种常用的减少浮点类型,用于神经网络推理/训练中的性能提升。自本版本起,CPU 路径上对 eager 和 TorchInductor 的 float16 都得到了支持。
[原型] 自动加载设备扩展
PyTorch 现在支持自动加载树外设备扩展,通过消除手动导入的需求来简化集成。此功能通过 torch.backends 入口点启用,通过确保无缝扩展加载来简化使用,同时允许用户通过环境变量禁用它(如果需要的话)。
查看教程以获取更多信息。
[原型] 增强英特尔 GPU 支持
英特尔 GPU 支持增强现在适用于英特尔®数据中心 GPU Max 系列和英特尔®客户端 GPU(内置英特尔® Arc™图形的英特尔® Core™ Ultra 处理器以及英特尔® Arc™图形用于 dGPU 组件),旨在使您在 PyTorch 2.5 版本中加速机器学习工作流程更加容易。我们还在此次版本中为英特尔®客户端 GPU 在 Windows 上启用了 PyTorch 的初始支持。
- 扩展了 PyTorch 硬件后端支持矩阵,包括英特尔数据中心和客户端 GPU。
- 将 SYCL*内核的实现用于增强 Aten 算子在 Intel GPU 上的覆盖率和执行,以提升 PyTorch eager 模式下的性能。
- 优化了 torch.compile 的 Intel GPU 后端,以提升各种深度学习工作负载的推理和训练性能。
这些功能可通过 PyTorch 预览版和夜间二进制 PIP 轮获得。有关 Intel GPU 支持的更多信息,请参阅文档。