PyTorch Blog

PyTorch 2.15 Release Blog

6.9内容质量

TL;DR · AI 摘要

PyTorch 2.15 Release Blog - PyTorch Featured projects We are excited to announce the release of PyTorch® 2.15 release no...

核心要点

  • 主题聚焦:PyTorch 2.15 Release Blog
  • 来源:PyTorch Blog,建议结合原文判断细节。
  • AI 分析暂不可用,本条为保底评分与摘要。
#AI#编程#后端#安全#产品
打开原文

PyTorch 2.15 版本发布博客 - PyTorch

特色项目

我们非常高兴地宣布 PyTorch® 2.15 版本正式发布([版本说明](release notes))!

PyTorch 2.15 版本包含以下主要更新:

  • 重写的 NCCL 后端成为默认配置,新增挂起时自动记录日志的功能,支持通过设置 TORCH_DIST_USE_NCCL2=0 或 nccl-legacy 实现回滚
  • torch.distributed 新增单边传输功能,支持 NIXL 后端和可捕获 CUDA 图的传输机制
  • FSDP2 和流水线功能获得更精细的内存与通信控制,支持精度敏感参数使用 fp32,CUDA 图捕获梯度累积,以及梯度规约与计算重叠执行
  • 通过 NVGEMM 在 NVIDIA Blackwell GPU 上实现更快的 4-bit(NVFP4)大语言模型解码,采用更少且重叠度更高的内核启动方式
  • Apple Silicon 新增 FP8 支持和加速解码功能,包含 float8_e4m3fn 和 _scaled_mm 算子,新增支持解码加速路径的 grouped_mm(MoE 解码性能提升 1.32–1.34 倍),并开放 torch.mps.Stream APIs
  • 平台支持范围扩展,包括 AMD gfx950 上的 FlyDSL 内核、gfx1250(MI450)的 Tensor Data Mover 支持、ROCm 10.0 轮子包、Intel GPU 上更简洁的 SYCL 内核开发和多 GPU 分析功能、CUDA 13.2 作为默认轮子包(同时支持 CUDA 13.4),以及 Python 3.15 上的 torch.compile

该版本包含自 PyTorch 2.14 以来 583 位贡献者提交的 3,117 个 commits。我们衷心感谢社区的持续贡献。一如既往,我们鼓励大家积极尝试新功能并反馈问题,帮助我们持续改进 2.15 版本。更多关于如何开始使用 PyTorch 2.x 系列的信息,可访问我们的[入门页面](Getting Started page)。

欢迎参加 2026 年 11 月 5 日星期四上午 11 点(太平洋时间)的 Q&A 网络研讨会,探讨 PyTorch 2.15 相关问题。Meta 的 Tristan Rice、Natalia Gimelshein、Huy Do 和 Jane Xu 将分享 2.15 版本概览并回答社区关于 PyTorch 和本版本新功能的提问。Gottbrath Tech 的 Chris Gottbrath 将担任主持人。立即注册参会。

在 2.x 系列版本中,PyTorch 正从以研究为主的框架演进为统一的、与硬件无关的大规模生产训练和推理平台。PyTorch 2.13 在 Apple Silicon 上引入了 FlexAttention,为 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 预览了我们从 torchcomms 移植的重写 NCCL 后端,作为可选的 nccl2 后端。在 2.15 版本中,它成为所有 nccl 进程组的默认选项,通过设置 TORCH_DIST_USE_NCCL2=0 和 nccl-legacy 后端名称作为回滚路径。通信器现在会在进程组创建时立即生成,重新配置时可以启用收缩/扩展快速路径(NCCL 2.29 或更新版本),使存活的进程跳过完整的引导过程。在 ROCm 上,通过 RCCL 2.30.7 也启用了容错重新配置功能。

为了使后端在生产环境中可调试,一个与后端无关的飞行记录器会在集体操作挂起时将事后分析写入磁盘,同时 watchdog 健康状态会发布到调试服务器,任何 rank 的超时都会触发所有 rank 的飞行记录器转储。在集群规模下,单个停滞的 GPU 可能会导致整个训练运行中断,而找出原因通常需要手动重现故障。飞行记录器会捕获每个 rank 在挂起时正在执行的操作。

API 不稳定

(由 Tristan Rice(Meta)、Chinmay Kuchinad(AMD)、Tushar Jain(Meta)、Atharva Kshirsagar(Red Hat)提交的 PR #192281、#192895、#199240、#198865、#198339、#194774、#192233、#199092、#192075)

使用 NIXL 后端的单边传输

torch.distributed 新增了用于单边数据移动的 Python 传输 API,NIXL 是首个支持的后端。传输通过存储连接到对等节点,无需进程组或集体操作,Transport.read_stream/write_stream 会在 CUDA 流上排队传输,从而可以与 torch.cuda.graph 捕获。

(由 Tristan Rice(Meta)提交的 PR #195643、#197032、#198889、#198918)

FSDP2 与流水线并行:内存和通信控制

FSDP2 现在可以更精细地控制精度和捕获。对精度敏感的参数(如 MoE 路由器门控和归一化权重)可以在 fp32 中保持,而模型其余部分在 bf16 中训练,仍然每个 fully_shard 保留一次 all-gather(MixedPrecisionPolicy(param_dtype_override_fn=...))。现在可以将完整的梯度累积步骤捕获到单个 CUDA 图中。梯度精度也可以按参数设置。梯度直接在 .grad 中累积,并遵循每个参数的 grad_dtype,这在 reduce_dtype=None 时会改变默认行为(参见弃用和不兼容更改)。

流水线并行现在在每次接收前仅分配接收缓冲区,而不是提前为每个微批次分配,且在发送完成后立即释放前向输出。调度接受最大未完成发送预算,FSDP 解碎片操作会在每个 rank 的启动阶段分散执行,而不是在步骤开始时全部发出。根据调度确定的每个流水线并行 rank 之间的唯一边现在会获得专用的 P2P 通信器。FSDP 减少梯度现在可以与后续计算重叠。这些改进使 PyTorch 流水线支持 cudagraphable、确定性操作,并优化了内存配置,同时暴露了用于最小化通信的性能调优参数。

(由 Chien-Chin Huang(Meta)、Anshul Sinha(Meta)、Andrew Or(Apache Spark PMC)、Animesh Jain(Meta)、Sanket Purandare(Meta)提交的 PR #196640、#196724、#196727、#196641、#196963、#196626、#198417、#194114、#196463、#196464、#196706)

性能改进

更快的 MPS 解码和线性代数内核

在 2.14 迁移的基础上,更多 MPS 操作符从 MPSGraph 迁移到原生 Metal 内核。单行 softmax 在 128,256 词汇表上的计算速度提升 8 倍,上采样反向操作加速达 21.7 倍,归约操作现在共享一套内核,使 norm 完整归约速度提升超过 100 倍。

对于解码操作,F.linear 现在使用现有的 gemv 内核(几何平均速度提升 1.23 倍,小型投影最高达 5 倍),新的 MPS grouped_mm 内核在 M3 Ultra 上实现了 1.32–1.34 倍的 MoE 解码吞吐量提升。多个线性代数求解器也进行了重写:512x512 矩阵的 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 轮子包

默认 PyTorch 轮子包升级至 CUDA 13.2(13.2.2 工具包),同时随附 CUDA 13.4 GA 轮子包,支持 Linux x86_64、Linux aarch64 和 Windows 平台。CUDA 13.4 轮子包新增对 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 轮子包

PyTorch 2.15 在 2.14 引入的 ROCm 7.14 轮子包基础上新增 ROCm 10.0 轮子包。所有 ROCm 轮子包现在基于 AMD 的 TheRock 软件包构建,并通过 pip 安装 ROCm 依赖(匹配的 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 解码

在 2.14 版本新增的 CuTeDSL GEMM 后端 NVGEMM 现在将 ModelOpt NVFP4 线性层的标量反量化因子合并到 GEMM 中,解码时不再为每个层单独启动点乘操作。一个基于形状的候选策略覆盖了 Blackwell NVFP4 解码形状中 nvMatmulHeuristics 未覆盖的情况,NVGEMM 内核可通过程序化依赖启动实现 Triton 消费者与生产者 GEMM 尾部重叠。NVGEMM 同时迁移至 CUTLASS 操作符。

(PRs #194651 , #194652 , #197485 , #194792 和 #194793 由 Michael Lazos、Meta 提供;#194364 由 Masaki Kozuki、NVIDIA 提供)

ROCm

#### gfx950 上的 FlyDSL 内核与 gfx1250 的 Tensor 数据搬运器

FlyDSL 加入 CuTeDSL、Triton 和 Helion,成为 PyTorch 可使用的内核 DSL。在 gfx950 上,Inductor 为 GEMM、稀疏 F.grouped_mm 和 MXFP4/MXFP8 scaled_mm 与 Triton 和 ATen 一起自动调优 FlyDSL 模板,急切模式下 FlyDSL 可覆盖 RMSNorm 和 topk 操作。FlyDSL 为可选功能,需要 FlyDSL 0.3.x 版本支持。

在 gfx1250 (MI450) 上,电感器使用 Tensor Data Mover 来实现密集矩阵乘法 / addmm、逐点运算和归约代码生成,以及 FlexAttention 的前向和解码过程。gfx1250 已被添加到夜间构建的轮子架构列表中。

(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 芯片)

#### Apple 芯片上的 FP8、流和更快的 MoE 推理

现在 MPS 支持 torch.float8_e4m3fn,以及带有张量级或行级缩放的 _scaled_mm,并为解码尺寸形状提供了 gemv 快速路径。MPS 还新增了基于 CUDA 的公共流 API:torch.mps.Stream、current_stream、set_stream、torch.mps.stream 上下文管理器以及 Tensor.record_stream。

(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 和 non_split 分配策略,为需要处理内存不足情况或利用分布式对称内存工作流的应用提供更大的灵活性。

(PRs #191182 , #192495 , #192514 , #192038 和 #192033 由 Guangye Yu, Intel 提交)

#### 改进的 XPU 分析体验

此版本为 XPU 图表重放添加了内核级可见性,为 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 互操作 shim 新增 dtype/device 转换和 is_tensor 探测,与现有的张量转换功能并存。更多 c10/util 功能(如 irange、load、数学常量、类型转换和溢出检查)迁移至 torch/headeronly,旧路径保留为转发包含。如果 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 图表内核归因

Kernels replayed from a CUDA graph can now be attributed back to the code that captured them. Kernel annotations are recorded from CUPTI node-creation callbacks and written inline by export_chrome_trace , and with record_py_stacks CUDA graphs capture the Python launch stack for each node. The CUPTI monitor is renamed Cuspy and is enabled with a CuspyConfig .

(PRs #191999 , #194854 , #196528 , #198419 and #196529 by Natalia Gimelshein, Meta; #196066 by Ryan Zhang, Meta)

Deprecations and Backwards-Incompatible Changes

  • Python 3.10 is no longer supported. PyTorch 2.15 requires Python 3.11 or newer: 3.10 wheels are no longer built, and 3.10 is no longer tested in CI. Building from source on 3.10 is not supported, and upcoming releases will remove the remaining 3.10 code paths, including in torch.compile (Dynamo). See #198233 and #199417 .
  • nccl now selects the rewritten NCCL backend. Set TORCH_DIST_USE_NCCL2=0 or use the nccl-legacy backend to restore the legacy ProcessGroupNCCL . See #192281 .
  • C++ warnings from torch.ops and custom ops now propagate to Python. See #193451 .
  • macOS 14 is no longer supported. PyTorch 2.15 requires macOS 15 or newer for MPS (Apple Silicon GPU) acceleration. macOS 14 has reached end of life, and the MPS workarounds for it have been removed. PyTorch may still run on macOS 14, but it isn’t tested there and issues on it won’t be fixed. See #199261 .
  • FSDP2 separates sharded and unsharded gradient dtypes. See #194434 .

/post-content

/inner-wrap