PyTorch:在PyTorch 2.14中,容错性成为c10d的一等概念,支持进程组的原地重配置。当……
摘要
PyTorch 2.14版本引入了容错性作为c10d的一等概念,支持进程组的原地重配置,同时带来了NVGEMM内核、新的nccl2后端以及Apple Silicon的原生线性代数等特性。
查看缓存全文
缓存时间: 2026/09/04 02:19
在 PyTorch 2.14 中,容错性成为 c10d 的一等公民概念,支持原地进程组重配置。
当大规模作业中某个 rank 失败时,常规恢复方式是销毁进程组并重启,这会丢弃整个集群的热状态。Backend 和 ProcessGroup 现在提供重配置接口,允许原地重建进程组,并通过相同路径接入中止钩子以及集合通信的前/后钩子。
Gloo 与 nccl2 一同获得容错支持,且重配置 API 已有文档说明。发布博客将该 API 标记为不稳定状态。
🔗 阅读 PyTorch 2.14 发布博客:https://pytorch.org/blog/pytorch-2-14-release-blog/…
PyTorch 2.14 发布博客 – PyTorch
来源:https://pytorch.org/blog/pytorch-2-14-release-blog/
特色项目
- PyTorch 标志 (https://pytorch.org/projects/pytorch/)
我们很高兴宣布 PyTorch® 2.14 版本发布(发布说明 (https://github.com/pytorch/pytorch/releases/tag/v2.14.0))!
PyTorch 2.14 版本包含以下更新:
- NVGEMM 将 CuTeDSL 生成的 CUTLASS 内核引入 Inductor,支持尾声融合、缩放及 NVFP4 GEMM,并对分组归约尾声进行自动调优,与 Triton 和 ATen 并行
- 为 PyTorch 分布式引入新的 nccl2 后端,移植自 torchcomms,实现完整的集合通信契约,支持非阻塞通信器和即时通信器拆分
- 容错性成为 c10d 的一等公民概念,支持原地进程组重配置、单侧 RMA 窗口,以及适用于任何后端(而非仅限 NCCL)的 Flight Recorder
- Apple Silicon 获得原生线性代数支持,包括 Jacobi 内核 SVD、特征值分解、QR 和 Cholesky 分解,以及五部分归约重写和进一步的 MPSGraph 到 Metal 内核迁移
- torch.switch 将 torch.cond 推广到多路分支,torch.while_loop 现可被 CUDA 图捕获
- 通过 @dynamic_spec 实现声明式动态形状,在 torch.compile、torch.export 和 make_fx 间共享
- 更广泛的平台支持:ROCm 7.14 轮子从 TheRock pip SDK 构建,Intel XPU 添加原生图捕获,Inductor 靶向 Rubin(sm_107)架构
- 实验性 torch.compile 支持复数值张量:可选支持将受支持的复数运算分解为实部和虚部计算,使编译器后端能够优化更复杂的数工作负载
本版本包含自 PyTorch 2.13 以来 487 位贡献者的 2,995 次提交。我们衷心感谢社区成员的辛勤贡献。一如既往,我们鼓励大家尝试并报告任何问题,以持续改进 2.14。更多关于如何开始使用 PyTorch 2 系列的信息,请参阅我们的入门指南 (https://pytorch.org/get-started/locally/) 页面。您可将关于此版本的任何问题提交至我们的问答网络研讨会。研讨会将于 2026 年 9 月 17 日星期四举行,嘉宾包括 Andrey Talman (Meta)、Natalia Gimelshein (Meta)、Joe Spisak (Reflection AI) 和 Chris Gottbrath (Gottbrath Tech, 主持人),他们将分享 2.14 版本的概览,并回答社区关于 PyTorch 及此版本新功能的问题。立即注册 (https://pytorch.org/event/pytorch-2-14-release-live-qa/)。
即将于 2026 年 10 月 20-21 日在加利福尼亚州圣何塞举行的 PyTorch 会议北美站 (https://hubs.la/Q04vXWRN0) 上与全球 PyTorch 社区建立联系。探索 PyTorch 框架的新特性,涵盖编译器与运行时工作、分布式通信、设备可移植性、发布工程、CI、可观测性、加速器集成、贡献者基础设施等众多主题的会议。PyTorch 会议是工程师、研究人员和维护者齐聚一堂,解决训练、推理、内核、应用及负责任 AI 中实际问题的平台。
在 2.x 系列中,PyTorch 已从以研究为先的框架演变为统一、硬件无关的生产级训练与推理平台。PyTorch 2.12 (https://pytorch.org/blog/pytorch-2-12-release-blog/) 添加了与设备无关的 torch\.accelerator\.Graph API 和微缩放量化导出支持。PyTorch 2.13 (https://pytorch.org/blog/pytorch-2-13-release-blog/) 在 Apple Silicon 上实现了 FlexAttention,为 Inductor 提供了 CuTeDSL 代码路径,并引入了用于大规模集群训练的 torchcomms。
PyTorch 2.14 直接构建在这些基础之上。CuTeDSL 路径发展为 NVGEMM,一个完整的 GEMM 后端,支持尾声融合和低精度支持。torchcomms 作为 nccl2 后端进入代码库,配合容错重配置和单侧 RMA 窗口,将容错性从后端细节提升为 c10d 概念。Apple Silicon 从注意力内核迈向原生线性代数,动态形状通过跨编译、导出和追踪的规范实现声明化。
PyTorch 2.14 在性能、可靠性和硬件支持方面带来显著改进。本版本引入 NVGEMM,这是一个新的 GPU 数学后端,可自动为矩阵运算选择最快内核——包括支持在训练和推理中降低内存使用的低精度格式。对于跨多机训练的团队,重新设计的分布式通信后端(nccl2)提供更好的可扩展性,而新的容错功能允许训练作业从节点故障中恢复,无需从头重启。
Apple Silicon 用户受益于原生线性代数例程(SVD、QR、Cholesky 等)以及广泛迁移到手工优化的 Metal 内核,减少了 Mac GPU 上的开销。在编译器方面,新的控制流原语(torch.switch、torch.while_loop)为模型作者在编写动态逻辑时提供更多灵活性,同时仍能高效编译;新的 @dynamic_spec 装饰器提供了一种单一、简洁的方式来声明哪些张量维度可在运行时改变——简化了编译、导出和追踪的工作流。
平台支持扩展至 AMD ROCm 7.14、Intel XPU 原生图捕获和 NVIDIA 下一代 Rubin 架构。在底层,编译器现在默认重叠通信与计算,更智能地批处理小型 GPU 内核,并减少每次调用开销——所有这些共同带来更快的端到端模型执行速度,且无需用户修改任何代码。
性能改进
大规模 MPS 操作迁移至原生 Metal
延续 2.13 开始的迁移工作,另一组 MPS 算子从 Apple 的 MPSGraph 框架迁移至手写 Metal 计算内核,包括 index\_add、index\_select、argmin、argmax、conv3d、median、nanmedian、linspace、arange、nan\_to\_num、log\_sigmoid、sigmoid\_backward、mish 和 GLU。
归约操作进行了专门的五部分重写,涵盖完全归约、内部维度归约、步进和批量外部归约、小维度和窄内核,以及 argmax 和 argmin 的 split-K 路径。最后一部分将 min 和 max 从 MPSGraph 迁移。跳过输入类型提升并使用 vec4 加载消除了 MPSGraph 路径无法避免的工作量。
原生 Metal 路径消除了 MPSGraph 的逐操作编译成本,并让 PyTorch 直接控制线程调度和内存访问模式,降低了 Apple Silicon 上常见训练和推理工作负载的内核启动延迟。
API 不稳定
(PR#191101 (https://github.com/pytorch/pytorch/pull/191101)、#191097 (https://github.com/pytorch/pytorch/pull/191097)、#191098 (https://github.com/pytorch/pytorch/pull/191098)、#191099 (https://github.com/pytorch/pytorch/pull/191099) 和 #191100 (https://github.com/pytorch/pytorch/pull/191100) 由 Irakli Salia, Hugging Face 提交;#187109 (https://github.com/pytorch/pytorch/pull/187109) 和 #188802 (https://github.com/pytorch/pytorch/pull/188802) 由 Nikita Shulga, Thinking Machines Lab 提交)
MPS 内存和拷贝路径
长时间运行的解码工作负载使 MPS 缓存分配器的预留内存增长超出必要。分配器现在对大块分配进行分桶以限制预留内存,并使用放置堆来减少碎片化。
主机与设备传输也获得了更短的路径。CPU 到 MPS 的拷贝直接从固定缓冲区通过事件延迟回收进行位块传输,连续的同类型拷贝使用计算内核而非图,逐元素操作在内部连续切片视图上实现向量化,而 cat 为任意维度获得了向量化的连续快速路径。
API 不稳定
(PR#187441 (https://github.com/pytorch/pytorch/pull/187441) 和 #190438 (https://github.com/pytorch/pytorch/pull/190438) 由 Irakli Salia, Hugging Face 提交;#189512 (https://github.com/pytorch/pytorch/pull/189512) 和 #188613 (https://github.com/pytorch/pytorch/pull/188613) 由 Nikita Shulga, Thinking Machines Lab 提交;#188483 (https://github.com/pytorch/pytorch/pull/188483) 和 #188200 (https://github.com/pytorch/pytorch/pull/188200) 由 Joona Havukainen, Apple 提交)
MPS 上的 F.linear 解码路径
单个词元解码将一个 [B, 1, K] 激活传递给 F\.linear,这种形状在 MPS 上原本未进入快速路径,根据修复描述,这导致了 8.5 倍的 bf16 和 fp16 速度下降。现在序列长度为 1 的情况已被正确路由,新的 GEMV 内核支持在自回归解码中占主导地位的向量-矩阵形状。路由修复和新的 GEMV 内核共同缩小了 MPS 与 CUDA 在自回归工作负载上最大的剩余性能差距之一。
API 不稳定
(PR#189855 (https://github.com/pytorch/pytorch/pull/189855) 由 Giovanni Versiglioni, Apple 提交;#186927 (https://github.com/pytorch/pytorch/pull/186927) 由 Irakli Salia, Hugging Face 提交)
Inductor 默认启用计算与通信重叠
Inductor 的 simple\_overlap 重排序功能现在默认启用,而非选择性启用。该功能将集合通信与独立计算交错执行,以避免通信成为关键路径。通过默认启用重叠,经 Inductor 编译的分布式训练工作负载可自动从更好的 GPU 利用率中受益,无需任何配置更改。
API 不稳定
(PR#184240 (https://github.com/pytorch/pytorch/pull/184240)、#184235 (https://github.com/pytorch/pytorch/pull/184235) 由 Ivan Kobzarev, Meta 提交)
训练图的 reorder_for_locality 可选启用
reorder\_for\_locality,即 Inductor 的后梯度局部性重排序 pass,现在可通过新的 reorder_for_locality_in_training 配置选项(默认关闭)在训练图上选择启用,此前它仅在推理图上运行。这将局部性优化扩展到训练工作负载,为用户提供了一个调优旋钮,可在不影响默认行为的情况下改善训练图的缓存行为。
API 不稳定
(PR#186643 (https://github.com/pytorch/pytorch/pull/186643) 由 @reger-men 提交)
Inductor 中的组合内核与归约
组合内核将许多小内核批处理为一次启动,但批次中单个非常大的归约此前会影响整个内核。现在,大型归约从组合分区中分离出来,组合归约获得动态 RBLOCK 缩放,子内核主体作为非内联设备函数发出以减少寄存器压力。对于每个组合内核,主体是共享的,并且为 GB200 调优了分割归约启发式。净效果是更少的内核启动和更紧凑的资源使用,缩小了过大的归约会惩罚整个融合批次的差距。
API 不稳定
(PR#186668 (https://github.com/pytorch/pytorch/pull/186668)、#186957 (https://github.com/pytorch/pytorch/pull/186957) 和 #190689 (https://github.com/pytorch/pytorch/pull/190689) 由 Karthick Panner Selvam, Meta 提交;#184323 (https://github.com/pytorch/pytorch/pull/184323) 由 Jason Ansel, Meta 提交;#188579 (https://github.com/pytorch/pytorch/pull/188579) 由 Liqiang Lu, Nvidia 提交)
Dynamo 每次调用开销
对于包含许多小型编译区域的模型,固定的每次调用成本比图质量更重要。本版本在多个方面削减了该成本。compile\_wrapper 避免了每次调用时的 DispatchKeySet pybind 抖动,torch\.\_dynamo\.disable 获得了更便宜的路径,并且 pregraph 分析器标记现在仅在有活动分析器时发出,而非总是发出。未使用的函数输入被跳过创建守卫,且 invoke\_subgraph 对 pytree 参数(如数据类和命名元组)的重用查找更快。这些微优化共同降低了进入编译代码的成本,使 torch\.compile 对于混合了许多小型编译区域和 eager 执行的实际模型更加实用。
API 不稳定
(PR#190390 (https://github.com/pytorch/pytorch/pull/190390)、#190392 (https://github.com/pytorch/pytorch/pull/190392) 和 #190623 (https://github.com/pytorch/pytorch/pull/190623) 由 William Wen, Meta 提交;#187782 (https://github.com/pytorch/pytorch/pull/187782) 和 #191817 (https://github.com/pytorch/pytorch/pull/191817) 由 Aditya Sanjeev 提交)
Eager 调度与 CPU 内核
几个 eager 模式热路径变得更廉价。PyObject 调度得到优化,AOTAutograd 在保存图输入视图用于反向传播时避免了昂贵的 Tensor\.detach\(\),autograd 在分析器关闭时停止复制 at::Tensor,addmm 在 C 和 D 不同时避免了设备到设备的拷贝,CPU quantile 和 nanquantile 使用部分选择替代完全排序。
这些针对性的修复降低了 eager 模式下每个操作的开销,提升了性能下限,使得线性层、autograd 簿记和统计聚合等常见操作不会携带不必要的开销。它们保持了 PyTorch 默认开发体验的快速,而无需用户求助于 torch\.compile。
API 不稳定
(PR#187949 (https://github.com/pytorch/pytorch/pull/187949)、#189759 (https://github.com/pytorch/pytorch/pull/189759) 和 #189582 (https://github.com/pytorch/pytorch/pull/189582) 由 Richard Zou, Meta 提交;#191706 (https://github.com/pytorch/pytorch/pull/191706) 由 Animesh Jain, Meta 提交;#188394 (https://github.com/pytorch/pytorch/pull/188394) 由 Kimon N. 提交)
核心功能
torch.linalg.polar 和 torch.linalg.matrix_sqrth
torch\.linalg 的两个新增功能。torch\.linalg\.polar 使用 cuSOLVER 的 QDWH 算法计算极分解,在 CPU、CUDA 和 MPS 上提供了反向公式,使其可用于训练循环内而不仅仅是分析。torch\.linalg\.matrix\_sqrth 计算对称和埃尔米特正定矩阵的矩阵平方根,这种情况此前需要手动组合特征分解。
API 不稳定
(PR#185837 (https://github.com/pytorch/pytorch/pull/185837) 由 Simon Layton, Meta 提交;#189732 (https://github.com/pytorch/pytorch/pull/189732) 由 Irakli Salia, Hugging Face 提交;#187987 (https://github.com/pytorch/pytorch/pull/187987) 由 Colin Alberts, Cisco 提交)
Autograd 扩展点
三个新增功能提供了更多控制如何构建和检查 autograd 图的方式。torch\.autograd\.graph\.node\_creation\_hook 在每个 autograd 节点创建时触发,允许工具在图构建时附加元数据或注册钩子,而不是事后重建该上下文——其主要场景是将反向传播的内存使用归因于产生它的前向区域。ctx\.set\_output\_grad\_dtype 允许自定义 autograd\.Function 声明其输出进入梯度的 dtype,独立于输出自身的存储 dtype,适用于混合精度函数中两者不匹配的情况。cdist 和 pdist 现已实现双重反向传播,解除了对 create\_graph=True 用法的限制——这些用法此前会直接失败——例如通过成对距离计算的海森矩阵、梯度惩罚和海森向量积。
API 不稳定(PR#189284 (https://github.com/pytorch/pytorch/pull/189284) 由 Edward Yang, Meta 提交;#189634 (https://github.com/pytorch/pytorch
相似文章
@PyTorch:PyTorch 2.14 通过 NVGEMM 将 CuTeDSL 生成的 CUTLASS 内核引入 Inductor,为 PyTorch Distributed 提供新的 nccl2 后端…
PyTorch 2.14 引入了重大更新,包括在 Inductor 中使用 NVGEMM 处理 CUTLASS 内核,用于分布式计算的新 nccl2 后端,高级容错性,以及在 Apple Silicon 上的原生线性代数。
@PyTorch: PyTorch 2.14 引入了对 Inductor、PyTorch Distributed、c10d、动态形状、Apple Silicon 和加速器等的更新
PyTorch 2.14 引入了对 Inductor、PyTorch Distributed、动态形状、Apple Silicon 支持等方面的更新,并有现场问答和 PyTorchCon 公告。
@PyTorch:PyTorch 2.15 正式发布,583 位贡献者提交 3,117 次代码更新,涵盖分布式训练、NVGEMM、Apple Silicon 及加速器平台支持
PyTorch 2.15 发布,包含 3,117 次提交,重写的 NCCL 后端成为默认、新增 NIXL 单向传输、FSDP2 与流水线并行的更细粒度控制,并在 NVIDIA Blackwell(NVFP4)和 Apple Silicon(FP8)上带来更快的 LLM 解码,同时扩展了 AMD、Intel、ROCm 等平台支持。
@PyTorch:PyTorch 2.13 来了,包含来自 526 位贡献者的 3,328 次提交,并更新了 FlexAttention、CuTeDSL、nn.LinearCros…
PyTorch 2.13 已发布,主要更新包括:Apple Silicon 上的 FlexAttention(速度提升高达 12 倍)、CuTeDSL 后端、可将显存减少 4 倍的 nn.LinearCrossEntropyLoss、新的 torchcomms 通信后端、FSDP2 通信重叠、Python 3.15 wheel 支持以及更广泛的平台支持。计划于 7 月 22 日进行现场问答。
@PyTorch:PyTorch 2.13 为 Apple Silicon 带来 FlexAttention,借助 nn.Li… 将大词表模型的峰值内存最高削减 4×
PyTorch 2.13 发布版为 Apple Silicon 带来 FlexAttention,通过融合的 LinearCrossEntropyLoss 实现高达 12 倍加速,并将大词表模型的峰值内存降低 4 倍,同时还更新了分布式训练、编译和端侧推理。