@PyTorch:PyTorch 2.13 来了,包含来自 526 位贡献者的 3,328 次提交,并更新了 FlexAttention、CuTeDSL、nn.LinearCros…

X AI KOLs Following 工具

摘要

PyTorch 2.13 已发布,主要更新包括:Apple Silicon 上的 FlexAttention(速度提升高达 12 倍)、CuTeDSL 后端、可将显存减少 4 倍的 nn.LinearCrossEntropyLoss、新的 torchcomms 通信后端、FSDP2 通信重叠、Python 3.15 wheel 支持以及更广泛的平台支持。计划于 7 月 22 日进行现场问答。

PyTorch 2.13 来了,包含来自 526 位贡献者的 3,328 次提交,并更新了 FlexAttention、CuTeDSL、nn.LinearCrossEntropyLoss、torchcomms、FSDP2、Python 3.15 wheels、ROCm、Arm 和 XPU。 发布博客和说明涵盖了 Apple Silicon 上的 FlexAttention(在稀疏模式上相比 SDPA 速度提升高达约 12 倍)、CUDA 上的确定性反向路径、用于 Inductor 的 CuTeDSL“原生 DSL”后端、可将峰值 GPU 显存减少高达 4 倍的 nn.LinearCrossEntropyLoss、用于大规模集群训练的 torchcomms,以及 FSDP2 通信重叠改进。 请于太平洋时间 7 月 22 日上午 11 点,与 @albanDesmaison(@Meta)、Andrey Talman(@Meta)、Piotr Bialecki(@NVIDIA)和 Chris Gottbrath 一起参加 2.13 现场问答。 阅读发布博客并注册现场问答:https://pytorch.org/blog/pytorch-2-13-release-blog/…
查看原文
查看缓存全文

缓存时间: 2026/07/09 15:38

PyTorch 2.13 正式发布,包含来自 526 位贡献者的 3,328 次提交,更新涵盖 FlexAttention、CuTeDSL、nn.LinearCrossEntropyLoss、torchcomms、FSDP2、Python 3.15 wheels、ROCm、Arm 和 XPU。

发布博客和说明涵盖了 FlexAttention 在 Apple Silicon 上的稀疏模式相比 SDPA 最高约 12 倍加速、CUDA 上的确定性反向路径、为 Inductor 提供的 CuTeDSL “原生 DSL” 后端、nn.LinearCrossEntropyLoss 可将峰值 GPU 内存降低高达 4 倍、用于大规模集群训练的 torchcomms,以及 FSDP2 通信重叠改进。

7 月 22 日上午 11 点(太平洋时间),欢迎加入 @albanDesmaison(Meta)、Andrey Talman(Meta)、Piotr Bialecki(NVIDIA)和 Chris Gottbrath 的 2.13 直播问答。

阅读发布博客,并注册直播问答:https://pytorch.org/blog/pytorch-2-13-release-blog/…


PyTorch 2.13 Release Blog – PyTorch

来源: https://pytorch.org/blog/pytorch-2-13-release-blog/

特色项目

  • PyTorch 徽标 (https://pytorch.org/projects/pytorch/)

我们很高兴地宣布 PyTorch® 2.13 发布(发布说明 (https://github.com/pytorch/pytorch/releases/tag/v2.13.0))!

PyTorch 2.13 版本包含以下变更:

  • FlexAttention 登陆 Apple Silicon (MPS),在稀疏模式上相比 SDPA 提供高达约 12 倍的加速,并在 CUDA 上获得确定性的反向路径,实现可复现的梯度计算
  • CuTeDSL “原生 DSL” 后端为 Inductor 提供第二个高性能代码路径(与 Triton 并列),用于关键 GPU 操作,编译速度更快
  • nn.LinearCrossEntropyLoss将最终预测和损失计算操作融合,在大词汇量语言模型训练中将峰值 GPU 内存降低高达 4 倍
  • torchcomms,PyTorch Distributed 的新通信后端,提高了大规模集群训练的容错性、可扩展性和可调试性
  • FSDP2 现在通过专用进程组(可选)重叠 reduce-scatter 和 all-gather 通信,提高了分布式训练吞吐量
  • 通过 pytorch 仓库索引支持 Linux 上 Torch 的 Python 3.15 wheel。该支持包含与无 GIL 的 3.15t 兼容的构建。
  • 更广泛的平台支持:ROCm 获得 AOTriton 0.12b,支持原生 HIP CMake;Arm 添加了 Armv9-A torch.compile 目标;Intel XPU 公开了新的设备遥测 API

此版本包含自 PyTorch 2.12 以来来自 526 位贡献者的 3,328 次提交。我们衷心感谢我们热心的社区所做的贡献。一如既往,我们鼓励您尝试这些功能并在我们改进 2.13 的过程中报告任何问题。有关如何开始使用 PyTorch 2 系列的更多信息,请访问我们的入门 (https://pytorch.org/get-started/locally/) 页面。

有问题吗?请于 2026 年 7 月 22 日上午 11 点(太平洋时间)加入我们的小组讨论直播问答,小组成员包括 Alban Desmaison、Andrey Talman、Piotr Bialecki,主持人为 Chris Gottbrath。我们将简要介绍此版本并现场回答您的问题。立即注册 (https://pytorch.org/event/pytorch-2-13-release-live-qa/)。

在整个 2.x 系列中,PyTorch 已从一个以研究为主的框架演变成一个统一的、硬件无关的平台,用于大规模的生产训练和推理。PyTorch 2.11 (https://pytorch.org/blog/pytorch-2-11-release-blog/) 引入了用于分布式训练的可微分集合通信和下一代 GPU 上的 FlashAttention-4。PyTorch 2.12 (https://pytorch.org/blog/pytorch-2-12-release-blog/) 添加了设备无关的 torch.accelerator.GraphAPI、高达 100 倍加速的批量特征分解以及微缩放量化导出支持。

PyTorch 2.13 在跨平台和规模上将性能进一步提升:FlexAttention 登陆 Apple Silicon,提供高达 12 倍的加速;CuTeDSL 将 CUTLASS 级别的 GEMM 内核引入 Inductor;融合的 nn.LinearCrossEntropyLoss 将大词汇量模型的峰值内存降低高达 4 倍。在分布式方面,新的 torchcomms 后端提高了集群规模的容错性和可调试性,FSDP2 解锁了 all-gather 和 reduce-scatter 之间的通信重叠,以实现更高的训练吞吐量。此版本还标志着 ExecuTorch 集成 (https://pytorch.org/blog/executorch-becomes-part-of-pytorch-core/) 到 PyTorch 核心,使得设备端推理成为该框架的一等公民。

性能改进

FlexAttention Flash 后端的确定性反向

此改进专注于现有 FlexAttention CUDA 实现的正确性和调试,通过使梯度计算可复现。默认情况下,FlexAttention flash 后端在反向传播中使用原子操作进行 dQ 累积,这会引入非确定性——对相同输入的重复运行可能产生略有不同的梯度。这使得调试、回归测试和可复现研究变得困难。

新的确定性反向路径 (compute_dq_write_order) 使用预计算的写入顺序替换原子操作,保证比特级的可复现梯度,且没有显著的性能损失。在 create_block_mask 上测量的端到端开销在较长序列长度下远低于 1%(例如,在 S=32768 时为 +0.2%),使得确定性对于大多数生产工作负载几乎免费。用户可以通过现有的 torch.use_deterministic_algorithms(True) 设置选择加入,无需额外代码更改。

API 不稳定

(PR #174813 (https://github.com/pytorch/pytorch/pull/174813) 来自 Driss Guessous, Meta)

大规模 MPS 操作迁移到原生 Metal

PyTorch 的 MPS 后端此前将大多数操作委托给 Apple 的 MPSGraph 框架,这会增加每次分派的编译和调度开销。对于高频、延迟敏感的操作,此开销可能主导执行时间。此版本将一系列广泛的操作迁移到手写的 Metal 计算内核——copy/cast、uniform/normal/randint、比较、缩减 (sum/mean)、cumsum/cumprod、排序 (多块和稳定)、embedding 反向以及带边界检查的 scatter/gather。

原生 Metal 路径消除了 MPSGraph 的每次操作编译成本,并赋予 PyTorch 对线程分发和内存访问模式的直接控制,从而减少 Apple Silicon 上常见训练和推理工作负载的内核启动延迟。

API 不稳定

(PR #184740 (https://github.com/pytorch/pytorch/pull/184740) 来自 Nikita Shulga, Meta, #185609 (https://github.com/pytorch/pytorch/pull/185609) 和 #185119 (https://github.com/pytorch/pytorch/pull/185119) 来自 Irakli Salia, EPAM.)

Apple Silicon (MPS) 上的 FlexAttention

FlexAttention 是 PyTorch 的统一 API,允许将自定义注意力模式表示为简单的 Python 函数,并编译为融合内核,现已可在 Metal/MPS 上使用。MPS 实现提供了手写的 Metal 内核,用于稀疏预填充和解码路径(包括 GQA 和捕获缓冲区)。因此,您无需为每个所需的注意力变体编写自定义 CUDA 内核,FlexAttention 将编写一个 2 行的 Python 函数,编译器会自动为您构建一个快速内核。

基准测试数字在稀疏掩码上令人印象深刻。在长序列稀疏注意力模式上,相比 SDPA 的加速效果显著——例如,在形状为 1×8×32768×64、256 元素滑动窗口 (0.8% 密度) 上,FlexAttention 运行约 35 毫秒,而 SDPA 约 431 毫秒(约 12.3 倍);较小规模的 8192 长度 / 64 窗口情况实现了 约 4.15 倍加速。密集模式仍然有利于 SDPA,这符合预期。API 不稳定 (PR #182552 (https://github.com/pytorch/pytorch/pull/182552), #186215 (https://github.com/pytorch/pytorch/pull/186215), 和 #181575 (https://github.com/pytorch/pytorch/pull/181575) 来自 Irakli Salia, EPAM)

核心功能

nn.LinearCrossEntropyLoss

在标准的大词汇量训练中(例如,具有 10 万+ 词元词汇表的语言模型),计算交叉熵损失需要物化整个词汇表上的 logits 矩阵,这可能会消耗数十 GB 的 GPU 内存。nn.LinearCrossEntropyLoss(以及相应的 linear_cross_entropy 函数)将最终线性投影和交叉熵计算融合到一个模块中,该模块以块为单位处理词汇表维度,而不会物化完整的 logits 矩阵。这使大词汇量工作负载的峰值内存降低高达约 4 倍,同时保持与未融合路径的数值等价。该实现开箱即用支持标签平滑、权重绑定和 z-loss 正则化,并与 torch.compile 集成以进行进一步优化。作为单独的 nn.Linear + nn.CrossEntropyLoss 的即插即用替代品,采用无需其他代码更改。

API 不稳定

(参见 #172446 (https://github.com/pytorch/pytorch/pull/172446), #172286 (https://github.com/pytorch/pytorch/pull/172286), 和 #185852 (https://github.com/pytorch/pytorch/pull/185852) 来自 Pearu Peterson, OpenTeams.)

使用 torch.load 直接加载 Safetensors

Safetensors 已成为广泛采用的模型权重分发格式(被 Hugging Face、Stability AI 等使用),因为它支持内存映射加载且没有任意代码执行风险。以前,加载 safetensors 文件需要安装和导入单独的库。现在 torch.load(“foo.safetensors”) 原生工作,自动检测格式并直接返回张量。这消除了常见工作流中的一个依赖项,并使 PyTorch 能够无缝加载以 safetensors 格式分发的模型。

API 不稳定 (PR #170592 (https://github.com/pytorch/pytorch/pull/170592) 来自 Nikita Shulga, Meta)

Python 3.15 二进制支持 – 发布工程

PyTorch wheels 现在支持 Python 3.15,包括实验性的无 GIL 3.15t 构建。重要提示:Python 3.15 目前处于预发布(beta)阶段,最终稳定版计划于 2026 年 10 月发布。支持仅限于 torch wheels(torchvision 尚未针对 3.15 构建),并且仅限于 x86_64 和 aarch64 上的 Linux 构建,涵盖 CPU、CUDA、ROCm 和 XPU 变体。torch.compile 在 Python 3.15 上尚不支持。此版本中没有针对此 Python 版本的 Windows 或 macOS 3.15 wheels。

Python 3.15 和 3.15t wheels 未发布到 PyPI——它们只能通过 download.pytorch.org 下载,使用以下任一命令:

CPU

pip3 install torch –index-url https://download.pytorch.org/whl/cpu

CUDA(替换 CUDA 版本,例如 cu126 / cu130)

pip3 install torch –index-url https://download.pytorch.org/whl/cu130

ROCm(替换 ROCm 版本)

pip3 install torch –index-url https://download.pytorch.org/whl/rocm7.2

XPU

pip3 install torch –index-url https://download.pytorch.org/whl/xpu

在无 GIL 解释器下运行时,相同的命令会安装无 GIL 的 3.15t 构建。

API 不稳定。有关更新,请参阅跟踪问题:#184352 (https://github.com/pytorch/pytorch/issues/184352) (PR #182954 (https://github.com/pytorch/pytorch/pull/182954) 来自 Nikita Shulga, PR #184600 (https://github.com/pytorch/pytorch/pull/184600) 和 #186244 (https://github.com/pytorch/pytorch/pull/186244) 来自 Andrey Talman, Meta, #186017 (https://github.com/pytorch/pytorch/pull/186017) 来自 Rob Timpe, OpenTeams)

分布式训练

torchcomms 后端

PyTorch Distributed 历史上依赖 c10d 的 ProcessGroup 抽象进行集合通信(all-reduce、all-gather 等),该抽象主要围绕 NCCL 设计。随着分布式训练变得更加复杂(多维度并行、弹性扩展、异构互连),原始后端的错误处理和可观测性限制成为运维团队的瓶颈。

torchcomms 是一个新的通信后端,已集成到 PyTorch Distributed 的 CI 和设备网格路径中,提供改进的容错性(优雅超时和部分组恢复)、跨大型集群的更好可扩展性,以及通过结构化日志和集合跟踪提供的更丰富的可调试性。它在保持 API 兼容性的同时,作为现有 c10d 后端的现代替代方案。

API 不稳定

(PR #181662 (https://github.com/pytorch/pytorch/pull/181662) 来自 Tristan Rice, Meta, #178533 (https://github.com/pytorch/pytorch/pull/178533) 来自 Pangiotis Kourdis, Intel, 和 #182057 (https://github.com/pytorch/pytorch/pull/182057) 来自 Kapil Sharma, Meta)

FSDP2 单独的 Reduce-Scatter 组

在完全分片数据并行 (FSDP) 训练中,默认情况下 all-gather 和 reduce-scatter 共享单个 NCCL 通信器。由于 NCCL 在同一个通信器上序列化操作,这两个集合无法重叠,导致通信带宽未充分利用。FSDPModule.set_separate_reduce_scatter_group(enable=True) 为 reduce-scatter 提供其专用的 NCCL 通信器,使其能够与 all-gather 操作并发进行。这实现了 AG/RS 重叠,提高了完全分片工作负载的训练吞吐量,而无需更改模型代码。

API 不稳定

(PR #186335 (https://github.com/pytorch/pytorch/pull/186335) 来自 Wei Feng, Meta)

编译和导出

torch.compiler.set_default_backend

当使用自定义或树外编译器后端时(例如,用于专用硬件),用户以前必须为每个 torch.compile() 调用显式传递 backend=,这使得代码冗长且容易出错。torch.compiler.set_default_backend 镜像了 torch.set_default_dtype 和 torch.set_default_device 建立的模式,允许后端作者或基础设施团队设置一次进程范围的默认值。所有后续的 torch.compile() 调用将自动使用该后端,除非显式的 backend= 参数覆盖它。这简化了跨大型代码库采用自定义后端的过程。

API 不稳定

(PR #178944 (https://github.com/pytorch/pytorch/pull/178944) 来自 Angela Yi, Meta)

平台功能和更新

CUDA

用于 Inductor 的 CuTeDSL “原生 DSL” 后端

CuTeDSL 是一个基于 NVIDIA 的 CuTe (CUDA Templates) 库构建的 Python 原生领域特定语言,使开发者能够直接控制 GPU 张量布局、分块策略和内存访问模式。PyTorch 的 Inductor 编译器现在可以将 CuTeDSL 用作与 Triton 并列的替代代码生成后端——专门用于矩阵乘法 (GEMM) 和归一化 (RMSNorm),这是 transformer 训练中最关键的两个性能操作。这些源自 Quack 的内核覆盖为这些工作负载生成更高质量的矩阵乘法代码,而无需依赖 Triton。内核编译也已从线程池移至子进程池,消除了 Python 的 GIL 瓶颈,提高了编译时并行度。

API 不稳定 (PR #181267 (https://github.com/pytorch/pytorch/pull/181267) 来自 Michael Lazos, #182108 (https://github.com/pytorch/pytorch/pull/182108) 来自 Simon Layton, 和 #186310 (https://github.com/pytorch/pytorch/pull/186310) 来自 Driss Guessous, Meta)

ROCm

AOTriton 0.12b、Origami GEMM 选择、原生 HIP CMake

ROCm 栈获得了三项改进:AOTriton 升级到 0.12b,支持非对称头维度、确定性算法和新的 GPU 目标(gfx1100/gfx1151 提升为稳定版,gfx950 上的部分 FlashAttention v3)。Origami 工具用分析性 GEMM 配置选择取代了暴力自动调优,缩短了调优时间。构建系统现在使用 CMake 的原生 HIP 语言支持。

API 不稳定

(PR #184288 (https://github.com/pytorch/pytorch/pull/184288) 和 #172512 (https://github.com/pytorch/pytorch/pull/172512) 来自 Xinya Zhang 和 Umesh Chand, AMD)

Arm

为 torch.compile 添加 Armv9-A 目标支持

AArch64 上的 torch.compile 现在

相似文章

PyTorch 2.12 版本亮点(7分钟阅读)

TLDR AI

PyTorch 2.12 引入了显著的性能改进,包括在 CUDA 上实现高达 100 倍加速的批量本征分解、新的设备无关的 torch.accelerator.Graph API,以及在 torch.export 中支持微缩放量化,持续推动该框架向统一生产平台的演进。

@AnimaAnandkumar: TorchLean 代码库现已开放!TorchLean 是一个用于可验证神经网络软件的 Lean 4 框架。它支持……

X AI KOLs Following

TorchLean 是一款全新发布的 Lean 4 框架,可实现神经网络软件的形式化验证,具备类型化张量、可验证自动微分、PyTorch 互操作性及 GPU 执行等特性。此次发布进一步扩展了对扩散模型、GPT 风格 Transformer 和状态空间模型等现代架构的支持,将实际的机器学习工作流与数学证明检查紧密连接。