ITPub博客

首页 > 人工智能 > 深度学习 > PyTorch 2.15 发布博客 - PyTorch

PyTorch 2.15 发布博客 - PyTorch

深度学习 作者:ITPUB社群 时间:1970-01-01 08:33:46 0 删除 编辑

精选项目

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

PyTorch 2.15 版本包含以下变更:

  • 重写的 NCCL 后端成为默认后端,并配备飞行记录器,在挂起时转储信息,同时提供 TORCH_DIST_USE_NCCL2=0 或 nccl-legacy 作为回滚路径
  • 为 torch.distributed 提供单边传输,包含 NIXL 后端和可被 CUDA(NVIDIA 并行计算平台和编程模型) 图捕获的传输
  • FSDP2 和流水线并行获得更精细的内存与通信控制,包括对精度敏感参数使用 fp32、CUDA 图捕获的梯度累积,以及与计算重叠的梯度归约
  • 通过 NVGEMM 中更少、重叠更好的内核启动,在 NVIDIA Blackwell GPU(图形处理器) 上实现更快的 4 位(NVFP4)LLM(大语言模型) 解码
  • 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

本版本由 583 位贡献者提交的 3,117 个 commit 组成,自 PyTorch 2.14 以来。我们衷心感谢敬业社区所做的贡献。一如既往,我们鼓励您试用这些功能并报告任何问题,以帮助我们改进 2.15。有关如何开始使用 PyTorch 2 系列的更多信息,请访问我们的入门页面。

欢迎参加我们于 2026 年 11 月 5 日(星期四)太平洋时间上午 11 点举行的 PyTorch 2.15 问答网络研讨会,提出您关于 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 预览了从 torchcomms 移植而来的重写 NCCL 后端,作为可选的 nccl2 后端。在 2.15 中,它成为每个 nccl 进程组的默认后端,并提供 TORCH_DIST_USE_NCCL2=0 和 nccl-legacy 后端名称作为回滚路径。通信器现在随进程组一起急切创建,重新配置可以选择加入收缩/增长快速路径(NCCL 2.29 或更新版本),使存活的 rank 跳过完整的引导过程。在 ROCm 上使用 RCCL 2.30.7 时,也启用了用于容错的重新配置。

为了使后端在生产环境中可调试,一个后端无关的飞行记录器会在集合通信挂起时将事后分析写入磁盘,并将看门狗健康状态发布到调试服务器,以便任何 rank 上的超时都会触发所有 rank 的飞行记录器转储。在集群规模下,单块停滞的 GPU 就可能使整个训练运行停止,而查找原因往往意味着手动复现故障。飞行记录器会捕获挂起时刻每个 rank 正在执行的操作。

(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 作为首个后端。传输通过存储(store)连接到对等节点,无需进程组或集合通信;Transport.read_stream/write_stream 在 CUDA 流上排队传输,因此可以用 torch.cuda.graph 捕获。

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

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

FSDP2 现在可以更精细地控制精度和捕获。对精度敏感的参数(例如 MoE 路由门控和归一化权重)可以保持 fp32,而模型其余部分以 bf16 训练,同时每个 fully_shard 仍只进行一次 all-gather(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 图捕获、具有确定性、内存配置经过优化,并提供了用于最小化暴露通信的性能调优参数。

(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 倍,upsample backward 最高提速 21.7 倍,归约操作现在共享一组内核,使 norm 全归约提速超过 100 倍。

对于解码,F.linear 现在使用现有的 gemv 内核(几何平均提速 1.23 倍,小型投影最高提速 5 倍),新的 MPS grouped_mm 具有 gemv 路径,在 M3 Ultra 上使 MoE 解码吞吐量提高 1.32–1.34 倍。若干线性代数求解器也被重写:512 x 512 矩阵的 QR 分解从约 7 秒降至 1.5 毫秒,三角求解现在采用分块方式。

(PR #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 wheels。CUDA 13.4 wheels 新增对 NVIDIA Rubin GPU 的实验性支持。

(PR #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 wheels 之外,新增 ROCm 10.0 wheels。所有 ROCm wheels 现在基于 AMD 的 TheRock 包构建,并将 ROCm 作为 pip 依赖安装(匹配的 rocm 包),而不是捆绑 ROCm 库。

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

(PR #178393、#194117 和 #198018,作者 Rob Timpe,OpenTeams;#198233、#199398 和 #199356,作者 Andrey Talman,Meta)

平台功能与更新

CUDA

用于 NVFP4 解码的 NVGEMM

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

(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 架构列表。

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

(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,作者 Yifeng Cui,Intel)

增强的 XPU 运行时能力

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

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

扩展的 Stable ABI 与 Header-Only 接口

torch::stable::sort 加入 stable ABI,Python 互操作 shim 在现有张量转换之外新增了 dtype/device 转换和 is_tensor 探测。更多 c10/util(irange、load、数学常量、类型转换和溢出检查)移入 torch/headeronly,旧路径保留为转发 include。如果 TORCH_TARGET_VERSION 比扩展的 libtorch 头文件更新,扩展现在会得到编译时错误,并且 load_inline 可以生成可在自由线程 Python 上安全导入的 pybind11 模块。

(PR #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 graph 重放的内核现在可以归因回捕获它们的代码。内核注解从 CUPTI 节点创建回调中记录,并由 export_chrome_trace 内联写出,使用 record_py_stacks 时 CUDA graph 会捕获每个节点的 Python 启动栈。CUPTI 监视器更名为 Cuspy,并通过 CuspyConfig 启用。

(PR #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。
  • 来自 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 Blog

原创地址:https://pytorch.org/blog/pytorch-2-15-release-blog/

原文作者:bsterling;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2022-11-21

  • 博文量
    1255
  • 访问量
    562688