跳到正文
RadarAI· PyTorch:Blog(RSS)·· 2 小时前AI 评分58

PyTorch 2.15 发布:重写 NCCL 后端转为默认并提升多平台推理性能

AI 导读

PyTorch Foundation 发布 PyTorch 2.15,重写的 NCCL 后端成为所有 nccl 进程组的默认选项,并保留 TORCH_DIST_USE_NCCL2=0 和 nccl-legacy 回退路径。

正文 · AI 翻译

PyTorch:Blog· PyTorch Foundation·2026-10-29 01:44· 58 分钟前AI 评分62

PyTorch 2.15 发布博客

AI 导读

PyTorch Foundation 发布 PyTorch 2.15,重写的 NCCL 后端成为所有 nccl 进程组的默认选项,附飞行记录器在 collective 挂起时转储现场,并保留 TORCH_DIST_USE_NCCL2=0 和 nccl-legacy 回退路径。

正文 · 原文

我们很高兴宣布 PyTorch® 2.15 正式发布(发布说明)!

PyTorch 2.15 版本包含以下变更:

  • 重写的 NCCL 后端成为默认选项,并附带飞行记录器,可在挂起时转储现场,同时提供 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.Stream API
  • 更广泛的平台支持:AMD gfx950 上的 FlyDSL 内核、gfx1250(MI450)的 Tensor Data Mover 支持、ROCm 10.0 wheel、Intel GPU 上更简单的 SYCL 内核编写和多 GPU 性能分析、默认 wheel 采用 CUDA 13.2 并同时提供 CUDA 13.4,以及 Python 3.15 上的 torch.compile

本次发布自 PyTorch 2.14 以来包含来自 583 位贡献者的 3,117 次提交。我们衷心感谢敬业社区所做的贡献。一如既往,我们鼓励您试用这些功能,并在我们改进 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 在 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 预览了我们重写后的 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 不稳定

(PR #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 不稳定

(PR #195643、#197032、#198889 和 #198918,作者 Tristan Rice,Meta)

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

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

流水线并行现在在每次接收前才分配接收缓冲区,而不是为每个微批次预先分配,并在前向输出的发送完成后立即释放它们。调度接受 max_outstanding_sends 预算,FSDP 的 unshard 会在每个 rank 的启动气泡中错开执行,而不是在步骤开始时全部发出。根据调度确定,流水线并行 rank 之间的每条唯一边现在都有专用的 P2P 通信器。FSDP 的 reduce grads 现在可以与后续计算重叠。这些改进使 PyTorch 流水线可被 CUDA graph 捕获、具有确定性、具有优化的内存配置,并暴露性能调优旋钮以最小化暴露的通信。

API 不稳定

(PR #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 具有 gemv 路径,在 M3 Ultra 上提供 1.32–1.34 倍的 MoE 解码吞吐提升。若干线性代数求解器也被重写:512 x 512 矩阵的 QR 分解从约 7 秒降至 1.5 毫秒,三角求解现在采用分块方式。

(PR #196071、#199687、#198611、#198495、#194933、#198721、#198725、#198732、#195944 和 #196900,由 Hugging Face 的 Irakli Salia 提交;#196922、#196241 和 #195369,由 Thinking Machines Lab 的 Nikita Shulga 提交;#193153,由韩国技术教育大学的 Sunghyun Choi 提交;#188473,由威斯康星大学麦迪逊分校的 Shrivas Shankar 提交)

核心特性

默认使用 CUDA 13.2,并提供 CUDA 13.4 wheel

默认的 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 的实验性支持。

(PR #198913 和 #196014,由 Meta 的 Andrey Talman 提交;#194996 和 #198843,由 NVIDIA 的 Ashish Karale 提交;#196560、#199269 和 #196351,由 NVIDIA 的 Ting Lu 提交;#192653,由 NVIDIA 的 Wei Wang 提交;#186245,由 NVIDIA 的 Lakshay Garg 提交)

ROCm 10.0 与 TheRock wheel

PyTorch 2.15 在 2.14 引入的 ROCm 7.14 wheel 之外,新增了 ROCm 10.0 wheel。所有 ROCm wheel 现在都基于 AMD 的 TheRock 包构建,并且将 ROCm 作为 pip 依赖安装(对应的 rocm 包),而不再捆绑 ROCm 库。

(PR #194919、#198895 和 #196610,由 AMD 的 Ethan Wee 提交;#195672,由 Meta 的 Andrey Talman 提交)

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 的支持。

(PR #178393、#194117 和 #198018,由 OpenTeams 的 Rob Timpe 提交;#198233、#199398 和 #199356,由 Meta 的 Andrey Talman 提交)

平台特性与更新

CUDA

用于 NVFP4 解码的 NVGEMM

NVGEMM 是 2.14 中新增的 CuTeDSL GEMM 后端,现在它将 ModelOpt NVFP4 线性层的标量反量化因子折叠进 GEMM 中,从而在解码期间消除了每层单独的逐点启动。一个有界、形状感知的候选策略覆盖了 nvMatmulHeuristics 遗漏的 Blackwell NVFP4 解码形状,并且 NVGEMM 内核可以使用程序化依赖启动,使 Triton 消费者与生产者 GEMM 的尾部重叠。NVGEMM 还迁移到了 CUTLASS Operators 上。

API 不稳定

(PR #194651、#194652、#197485、#194792 和 #194793,作者 Michael Lazos,Meta;#194364,作者 Masaki Kozuki,NVIDIA)

ROCm

gfx950 上的 FlyDSL 内核与 gfx1250 上的 Tensor Data Mover

FlyDSL 加入 CuTeDSL、Triton 和 Helion,成为 PyTorch 可使用的内核 DSL。在 gfx950 上,Inductor 会与 Triton 和 ATen 一起,为 GEMM、ragged F.grouped_mm 以及 MXFP4/MXFP8 scaled_mm 自动调优 FlyDSL 模板,并且在 eager 模式下,FlyDSL 可以覆盖 RMSNorm 和 topk。FlyDSL 是可选的,需要 FlyDSL 0.3.x。

在 gfx1250(MI450)上,Inductor 使用 Tensor Data Mover 进行稠密 mm/addmm、逐点和归约代码生成,以及 FlexAttention 前向和解码。gfx1250 已被加入 nightly wheel 架构列表。

API 不稳定

(PR #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)

Apple Silicon 上的 FP8、流和更快的 MoE 推理

torch.float8_e4m3fn 现已在 MPS 上受支持,同时支持的还有 _scaled_mm(带 tensorwise 或 rowwise 缩放)以及针对解码尺寸形状的 gemv 快速路径。MPS 还新增了仿照 CUDA 的公共流 API:torch.mps.Stream、current_stream、set_stream、torch.mps.stream 上下文管理器和 Tensor.record_stream。

API 不稳定

(PR #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 内核的门槛。

(PR #196387、#196932、#198200、#198720 和 #200223,由 Intel 的 Yifeng Cui 提交)

增强的 XPU 运行时能力

此版本扩展了 XPU 运行时能力,为 torch.xpu.Event 增加 IPC 支持,使事件可跨进程共享并与 torch.multiprocessing 集成。此外,torch.xpu.MemPool 现在支持 use_on_oom 和非拆分分配策略,为需要处理内存不足情况或利用分布式对称内存工作流的应用提供了更大的灵活性。

API 不稳定

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

改进的 XPU 性能分析体验

此版本增加了对 XPU Graph 重放的内核级可见性、XCCL 集合通信的跨 rank 关联,以及多 GPU 工作负载中所有 Intel GPU 的逐内核硬件计数器收集。这些增强功能可为基于图、多 GPU 以及分布式训练和推理提供更深入的性能分析。 

(PR #195128,由 Intel 的 Chuanqi Wang 提交;PR #5486 和 #1479,由 Intel 的 Adrian Ostrowski 提交) 

C++ ABI

扩展的稳定 ABI 与仅头文件接口

torch::stable::sort 加入稳定 ABI,Python 互操作垫片获得 dtype/设备转换以及一个 is_tensor 探测,与现有的张量转换并存。更多 c10/util(irange、load、数学常量、类型转换和溢出检查)移入 torch/headeronly,旧路径保留为转发包含。如果 TORCH_TARGET_VERSION 比其 libtorch 头文件更新,扩展现在会收到编译时错误,并且 load_inline 可以生成在自由线程 Python 上可安全导入的 pybind11 模块。

(PR #198038,由 Red Hat 的 Adrian Abeyta 提交;#194673、#194781 和 #193962,由 Red Hat 的 Chris Leonard 提交;#192774,由 NVIDIA 的 Paweł Gadziński 提交;#196802,由 Meta 的 Alex Malyshev 提交)

性能分析与调试

使用 Cuspy 进行 CUDA Graph 内核归因

从 CUDA 图重放的内核现在可以归因回捕获它们的代码。内核注解从 CUPTI 节点创建回调中记录,并由 export_chrome_trace 内联写入,借助 record_py_stacks,CUDA 图会为每个节点捕获 Python 启动栈。CUPTI 监视器已重命名为 Cuspy,并通过 CuspyConfig 启用。

API 不稳定

(PR #191999、#194854、#196528、#198419 和 #196529,由 Meta 的 Natalia Gimelshein 提交;#196066,由 Meta 的 Ryan Zhang 提交)

弃用与向后不兼容的变更

  • 不再支持 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。
  • 来自 torch.ops 和自定义算子的 C++ 警告现在会传播到 Python。 参见 #193451。
  • 不再支持 macOS 14。 PyTorch 2.15 需要 macOS 15 或更高版本才能使用 MPS(Apple Silicon GPU)加速。macOS 14 已停止支持,针对它的 MPS 变通方案已被移除。PyTorch 可能仍可在 macOS 14 上运行,但未在该系统上测试,相关问题也不会修复。参见 #199261。
  • FSDP2 将分片和非分片梯度的 dtype 分离。 参见 #194434。

文章 PyTorch 2.15 发布博客 首次出现在 PyTorch。

来源:PyTorch:Blog · pytorch.org

来源:RadarAI · aihot.news