精选项目
我们很高兴地宣布 PyTorch® 2.15 正式发布(发布说明)!
PyTorch 2.15 版本包含以下变更:
- 重写后的 NCCL 后端成为默认, 并附带一个在挂起时转储现场信息的 flight recorder,以及
TORCH_DIST_USE_NCCL2=0或nccl-legacy作为回滚路径 - torch.distributed 的单边传输, ,并采用 NIXL 后端和可被 CUDA 图捕获的传输
- FSDP2 和流水线在内存与通信控制上更为精细, 对精度敏感的参数使用 fp32,梯度累积由 CUDA 图捕获,梯度归约与计算重叠进行
- 在 NVIDIA Blackwell GPU 上实现更快的 4 位(NVFP4)LLM 解码 通过 NVGEMM 中更少、重叠更好的内核启动实现
- Apple Silicon 获得 FP8 支持和更快的解码, 并支持
float8_e4m3fn以及_scaled_mm,新增带解码快速路径的 grouped_mm(在 MoE 解码上达到 1.32–1.34 倍 tokens/s),以及公开的torch.mps.StreamAPI - 更广泛的平台支持 ,包括在 AMD gfx950 上的 FlyDSL 内核、对 gfx1250(MI450)的 Tensor Data Mover 支持、ROCm 10.0 wheel、更简单的 SYCL 内核编写以及在 Intel GPU 上的多 GPU 性能分析、默认 wheel 升级到 CUDA 13.2 并同时提供 CUDA 13.4,以及在 Python 3.15 上的 torch.compile
本版本由自 PyTorch 2.14 以来的 583 位贡献者提交的 3,117 个 commit 组成。我们衷心感谢我们敬业的社区所做出的贡献。一如既往,我们鼓励您试用这些功能,并在我们改进 2.15 的过程中报告任何问题。有关如何开始使用 PyTorch 2 系列的更多信息,请访问我们的 入门指南 页面。
欢迎在 2026 年 11 月 5 日(星期四)太平洋时间上午 11 点参加我们的问答网络研讨会,提出您对 PyTorch 2.15 的任何问题。Tristan Rice、Natalia Gimelshein、Huy Do 和 Jane Xu(均来自 Meta)将分享 2.15 版本的概览,并回答社区关于 PyTorch 及本版本新功能的问题。Chris Gottbrath(Gottbrath Tech)将担任主持人。 立即注册。
在整个 2.x 系列中,PyTorch 一直在从以研究为先的框架演变为一个统一的、硬件无关的平台,用于大规模生产训练和推理。 PyTorch 2.13 将 FlexAttention 引入 Apple Silicon,为 Inductor 提供 CuTeDSL 代码路径,并推出用于大规模集群训练的 torchcomms。 PyTorch 2.14 将这条路径发展为 NVGEMM,预览了重写后的 NCCL 后端,并将原生线性代数引入 Apple Silicon。
PyTorch 2.15 在此基础上继续发展。重写后的 NCCL 后端现在为每个 nccl 进程组,NVGEMM 针对低精度解码进行了调优,Apple Silicon 新增了 FP8 和解码专用内核,AMD 支持扩展到新的编译器 DSL,并(预览支持)下一代 Instinct,Intel GPU 则获得了更简单的内核编程模型和更深入的性能分析。
分布式训练
重写后的 NCCL 后端成为默认
当模型跨多块 GPU 训练时,这些 GPU 会通过通信后端不断交换数据,而在 NVIDIA 硬件上,该后端就是 NCCL。在 PyTorch 2.15 中,每个使用 nccl 默认在我们的重写后端上运行。
PyTorch 2.14 预览了我们重写后的 NCCL 后端,该后端从 torchcomms 移植而来,作为可选的 nccl2 后端。在 2.15 中,它是每个 nccl 进程组的默认选项,同时 TORCH_DIST_USE_NCCL2=0 以及 nccl-legacy 后端名称作为回滚路径。通信器现在随进程组一起提前创建,重新配置可以选择进入收缩/增长快速路径(NCCL 2.29 或更新版本),从而让存活的 rank 跳过完整的引导过程。在 ROCm 上,配合 RCCL 2.30.7 也启用了面向容错的重新配置。
为了让后端在生产环境中可调试,一个与后端无关的飞行记录器会在集合通信挂起时把事后分析信息写入磁盘,并且看门狗的健康状态会发布到调试服务器,因此任意 rank 上的超时都会触发所有 rank 的飞行记录器转储。在集群规模下,单块停滞的 GPU 就可能让整个训练运行中断,而查找原因往往意味着要手动复现故障。飞行记录器会捕获挂起那一刻每个 rank 正在做什么。
API 不稳定
(PRs #192281, #192895, #199240, #198865 以及 #198339 作者:Tristan Rice,Meta; #194774 作者:Chinmay Kuchinad,AMD; #192233 以及 #199092 作者:Tushar Jain,Meta; #192075 作者:Atharva Kshirsagar,Red Hat)
基于 NIXL 后端的单向传输
torch.distributed 新增了用于单向数据传输的 Python 传输 API,并以 NIXL 作为首个后端。传输通过存储连接到对等节点,无需进程组或集合通信,并且 Transport.read_stream/write_stream 在 CUDA 流上排队传输,以便它们能够被捕获, torch.cuda.graph.
API 不稳定
(PRs #195643, #197032, #198889 以及 #198918 作者:Tristan Rice,Meta)
FSDP2 与流水线并行:内存与通信控制
FSDP2 现在对精度和捕获提供更精细的控制。对精度敏感的参数(例如 MoE 路由门控和归一化权重)可以保持为 fp32,而模型其余部分以 bf16 训练,并且仍然每次只进行一次 all-gather(全收集) fully_shard (MixedPrecisionPolicy(param_dtype_override_fn=...))。现在,完整的梯度累积步骤可以在单个 CUDA 图中捕获。梯度精度也可以按参数设置。梯度直接累积在 .grad 并遵循每个参数的 grad_dtype,这会改变默认行为,当 reduce_dtype=None (参见弃用与向后不兼容变更)。
流水线并行现在会在每次接收之前才分配接收缓冲区,而不是为每个微批次预先分配,并在前向输出的发送完成后立即释放它们。调度器接受一个 max_outstanding_sends 预算,并且 FSDP unshard 会在每个 rank 的启动气泡中错峰执行,而不是在步骤开始时全部发出。根据调度确定,流水线并行 rank 之间的每条唯一边现在都会获得专用的 P2P 通信器。FSDP reduce grads 现在可以与后续计算重叠。这些改进使 PyTorch 流水线可被 CUDA 图捕获、具有确定性,并拥有优化的内存配置,同时暴露性能调优旋钮以最小化暴露的通信。
API 不稳定
(PRs #196640, #196724, #196727, #196641 以及 #196963 作者:Chien-Chin Huang,Meta; #196626 作者:Anshul Sinha,Meta; #198417 作者:Andrew Or,Apache Spark PMC); #194114 作者:Animesh Jain,Meta; #196463, #196464 以及 #196706 作者:Sanket Purandare,Meta)
性能改进
更快的解码与线性代数 MPS 内核
在 2.14 迁移的基础上,更多 MPS 算子从 MPSGraph 迁移到原生 Metal 内核。对 128,256 词表执行单行 softmax 的耗时降低 8 倍,上采样反向传播最高提速 21.7 倍,而归约运算现在共用同一组内核,使得 norm 完整归约提速超过 100 倍。
对于解码, F.linear 现在使用现有的 gemv 内核(几何平均加速 1.23 倍,在小型投影上最高可达 5 倍),而新的 MPS grouped_mm 在 M3 Ultra 上拥有一条 gemv 路径,可将 MoE 解码吞吐量提升 1.32–1.34 倍。若干线性代数求解器也经过了重写:512 x 512 矩阵的 QR 分解从约 7 秒降至 1.5 毫秒,三角求解现在也采用了分块实现。
(PRs #196071, #199687, #198611, #198495, #194933, #198721, #198725, #198732, #195944 以及 #196900 作者:Irakli Salia,Hugging Face; #196922, #196241 以及 #195369 作者:Nikita Shulga,Thinking Machines Lab; #193153 作者:Sunghyun Choi,韩国技术教育大学; #188473 作者:Shrivas Shankar,威斯康星大学麦迪逊分校)
核心特性
默认使用 CUDA 13.2 及 CUDA 13.4 Wheels
默认的 PyTorch wheel 升级到 CUDA 13.2(13.2.2 工具包),同时为 Linux x86_64、Linux aarch64 和 Windows 提供 CUDA 13.4 GA wheel。CUDA 13.4 wheel 新增了对 NVIDIA Rubin GPU 的实验性支持。
(PRs #198913 以及 #196014 作者:Andrey Talman,Meta; #194996 以及 #198843 作者:Ashish Karale,NVIDIA; #196560, #199269 以及 #196351 作者:Ting Lu,NVIDIA; #192653 作者:Wei Wang,NVIDIA; #186245 作者:Lakshay Garg,NVIDIA)
ROCm 10.0 与 TheRock Wheels
PyTorch 2.15 在 2.14 引入的 ROCm 7.14 wheel 之外,新增了 ROCm 10.0 wheel。所有 ROCm wheel 现在都基于 AMD 的 TheRock 软件包构建,并且它们将 ROCm 作为 pip 依赖项(匹配的 rocm 包)安装,而不是捆绑 ROCm 库。
(PRs #194919, #198895 以及 #196610 作者:Ethan Wee,AMD; #195672 作者:Andrey Talman,Meta)
Python 3.11 至 3.15,以及 Python 3.15 上的 torch.compile
PyTorch 2.15 支持 Python 3.11 至 3.15,包括自由线程的 3.14t 和 3.15t 构建。在 2.15 中,Dynamo 新增了对 Python 3.15 的支持。
(PRs #178393, #194117 以及 #198018 作者:Rob Timpe,OpenTeams; #198233, #199398 以及 #199356 作者:Andrey Talman,Meta)
平台功能与更新
CUDA
NVGEMM 用于 NVFP4 解码
NVGEMM 是 2.14 中新增的 CuTeDSL GEMM 后端,现在将 ModelOpt NVFP4 线性层的标量反量化因子折叠进 GEMM,从而在解码期间消除了每层单独的逐点启动。一个有界、形状感知的候选策略覆盖了 nvMatmulHeuristics 遗漏的 Blackwell NVFP4 解码形状,并且 NVGEMM 内核可以使用程序化依赖启动,使 Triton 消费者与生产者 GEMM 的尾部重叠。NVGEMM 还迁移到了 CUTLASS Operators 上。
API 不稳定
(PRs #194651, #194652, #197485, #194792 以及 #194793 作者:Michael Lazos,Meta; #194364 作者:Masaki Kozuki,NVIDIA)
ROCm
gfx950 上的 FlyDSL 内核与 gfx1250 上的张量数据搬运器
FlyDSL 与 CuTeDSL、Triton 和 Helion 一样,成为 PyTorch 可使用的内核 DSL。在 gfx950 上,Inductor 会为 GEMM、ragged F.grouped_mm 以及 MXFP4/MXFP8 scaled_mm 与 Triton 和 ATen 并列,并且在 eager 模式下 FlyDSL 可以覆盖 RMSNorm 和 topk。FlyDSL 是可选的,需要 FlyDSL 0.3.x。
在 gfx1250(MI450)上,Inductor 使用张量数据搬运器(Tensor Data Mover)来生成稠密 mm/addmm、逐点运算和归约代码,以及 FlexAttention 的前向和解码。gfx1250 已被加入 nightly wheel 架构列表。
API 不稳定
(PRs #192877, #190903, #194032, #191446 以及 #191447 作者:Xiaobing Zhang,AMD; #194981 作者:Yutao Xu,AMD; #196719 作者:Heng Yi,AMD; #191166, #196525 以及 #197329 作者:Glen Cao,AMD; #196610 作者:Ethan Wee,AMD)
MPS(Apple Silicon)
FP8、流以及 Apple Silicon 上更快的 MoE 推理
torch.float8_e4m3fn 现已在 MPS 上获得支持,同时还有 _scaled_mm ,支持按张量或按行缩放,并为解码规模形状提供 gemv 快速路径。MPS 还新增了仿照 CUDA 的公共流 API: torch.mps.Stream, current_stream, set_stream, torch.mps.stream 上下文管理器,以及 Tensor.record_stream.
API 不稳定
(PRs #194074, #196916, #197862, #196945, #196918 以及 #196955 作者:Irakli Salia,Hugging Face; #191415, #193464 以及 #195867 作者:Kurt Mohler,OpenTeams; #196395 作者:Aditya Venkataraman,Meta)
XPU(Intel GPU)
SYCL 内核编程简化
此版本为 XPU 后端引入了 SYCL 自由函数内核支持,大多数现有 SYCL 内核已迁移到新的编程模型。通过用显式的自由函数内核替代冗长的基于函子的实现,开发者可以以更直观的方式编写设备代码,从而降低为 Intel XPU 开发和移植自定义 GPU 内核的门槛。
(PRs #196387, #196932, #198200, #198720,以及 #200223 作者:Yifeng Cui,Intel)
增强的 XPU 运行时能力
此版本通过为 torch.xpu.Event 提供 IPC 支持,扩展了 XPU 运行时能力,使事件能够跨进程共享并与 torch.multiprocessing 集成。此外,torch.xpu.MemPool 现在支持 use_on_oom 和非拆分分配策略,为需要处理内存不足情况或利用分布式对称内存工作流的应用提供了更大的灵活性。
API 不稳定
(PRs #191182, #192495, #192514, #192038 以及 #192033 作者:Guangye Yu,Intel)
改进的 XPU 性能分析体验
此版本新增了对 XPU Graph 重放的内核级可见性、XCCL 集合通信的跨 rank 关联,以及在多 GPU 工作负载中跨所有 Intel GPU 的逐内核硬件计数器采集。这些增强功能可为基于图、多 GPU 以及分布式训练和推理提供更深入的性能分析。
(PR #195128 作者:Chuanqi Wang,Intel;PR #5486 以及 #1479 作者:Adrian Ostrowski,Intel)
C++ ABI
扩展的稳定 ABI 与仅头文件接口
torch::stable::sort 加入稳定 ABI,Python 互操作垫片新增 dtype/device 转换以及一个 is_tensor 探针,与现有的张量转换并存。更多 c10/util (irange、load、数学常量、类型转换和溢出检查)迁移到 torch/headeronly,旧路径保留为转发包含。现在如果扩展的 libtorch 头文件比其自身头文件更新,扩展会在编译时收到错误,并且可以生成可在自由线程 Python 上安全导入的 pybind11 模块。 TORCH_TARGET_VERSION 比它们的 libtorch 头文件更新,并且 load_inline 可以生成可在自由线程 Python 上安全导入的 pybind11 模块。
(PRs #198038 作者:Adrian Abeyta,Red Hat; #194673, #194781 以及 #193962 作者:Chris Leonard,Red Hat; #192774 作者:Paweł Gadziński,NVIDIA; #196802 作者:Alex Malyshev,Meta)
性能分析与调试
使用 Cuspy 进行 CUDA Graph 内核归因
从 CUDA 图重放的内核现在可以追溯到捕获它们的代码。内核注解通过 CUPTI 节点创建回调记录,并由 Cuspy 内联写入,使用 CUDA 图时会捕获每个节点的 Python 启动栈。CUPTI 监视器已更名为 Cuspy,并通过一个开关启用。 export_chrome_trace,并且借助 record_py_stacks CUDA 图会捕获每个节点的 Python 启动栈。CUPTI 监视器已更名为 Cuspy,并通过一个开关启用。 CuspyConfig.
API 不稳定
(PRs #191999, #194854, #196528, #198419 以及 #196529 作者:Natalia Gimelshein,Meta; #196066 作者:Ryan Zhang,Meta)
弃用与向后不兼容的变更
- 不再支持 Python 3.10。 PyTorch 2.15 要求 Python 3.11 或更高版本:不再构建 3.10 的 wheel,CI 中也不再测试 3.10。不支持在 3.10 上从源码构建,即将发布的版本将移除剩余的 3.10 代码路径,包括 torch.compile(Dynamo)中的路径。参见 #198233 并且 #199417.
- nccl 现在默认选择重写后的 NCCL 后端。 设置
TORCH_DIST_USE_NCCL2=0或将nccl-legacy后端以恢复旧版ProcessGroupNCCL参见 #192281. - 来自 C++ 的警告 torch.ops ,自定义算子现在也会传播到 Python。 参见 #193451.
- macOS 14 已不再受支持。 PyTorch 2.15 在 MPS(Apple Silicon GPU)加速方面要求 macOS 15 或更高版本。macOS 14 已停止支持,针对它的 MPS 变通方案已被移除。PyTorch 可能仍可在 macOS 14 上运行,但未在该系统上测试,相关问题也不会修复。参见 #199261.
- FSDP2 将分片和非分片的梯度数据类型分开。 参见 #194434.