pytorch v2.7.0震撼发布!Blackwell GPU支持+编译性能狂飙,AI开发者必看10大升级

重点内容

测试版(Beta):

  • • Torch.Compile 支持 Torch 函数模式
  • • Mega 缓存

原型(Prototype):

  • • 支持 NVIDIA Blackwell 架构
  • • PyTorch 原生上下文并行
  • • 增强 Intel GPU 加速能力
  • • FlexAttention 大型语言模型(LLM)首个 token 在 X86 CPU 上的处理
  • • FlexAttention 大型语言模型(LLM)在 X86 CPU 上的吞吐量模式优化
  • • Foreach Map 操作
  • • 推理用 Flex Attention
  • • Inductor 中的 Prologue 融合支持

追踪中的回归问题

NCCL 初始化时在 12.2 驱动下出现 CUDA “无效参数”失败 部分使用 12.2 CUDA 驱动(版本 535)的用户报告在 NCCL 或对称内存初始化过程中遇到“CUDA 驱动错误:无效参数”的问题。该问题正在调查中,详情见 #150852。如果您是从源码编译的 PyTorch,已知的解决方法是使用 CUDA 12.2 工具包重新编译 PyTorch。否则,您可以尝试升级系统中的 CUDA 驱动。

向后不兼容的变更

  • • 不再支持 Triton 版本低于 2.2.0。
  • • 移除了对 CUDA 12.4 和 Anaconda 在 CI/CD 环境中的支持。
    • • 在 CI/CD 中移除了对 CUDA 12.4 的支持,转而支持 CUDA 12.8。
    • • 移除了 CI/CD 中对 Anaconda 的支持。
  • • 不再支持 Triton 低于 2.2.0 的版本(没有 ASTSource 支持的版本)。
  • • 修改了 torch.Tensor.new_tensor() 的行为,默认会在当前 Tensor 所在设备上创建新 Tensor。
    • • 之前该函数始终在 "cpu" 设备上建立新 Tensor,现在将和其他 .new_* 方法保持一致,使用当前 Tensor 的设备。
  • • 以后发布的 Linux 轮子包(wheel)构建将使用 Manylinux 2.28 和 CXX11_ABI=1。
    • • 迁移到 manylinux_2_28(基于 AlmaLinux 8)后,不再支持使用 glibc 2.26 的操作系统发行版,包含 Amazon Linux 2 和 CentOS 7 等。
  • torch.onnx.dynamo_export 现在使用 ExportedProgram 的逻辑路径。
    • • 使用 torch.onnx.dynamo_export API 的用户可能会发现某些 ExportOptions 不再被支持(例如 diagnostic_options、fake_context 和 onnx_registry 被移除或忽略),仅保留 dynamic_shapes。
    • • 建议用户迁移到使用 torch.onnx.export(..., dynamo=True),并通过 dynamic_shapes 参数指定模型动态形状。
    • • 版本差异:
      • • 2.6.0 版本:torch.onnx.dynamo_export(model, *args, **kwargs)
      • • 2.7.0 版本:torch.onnx.export(model, args, kwargs=kwargs, dynamo=True)
  • • 完成对 LRScheduler.print_lr()LRScheduler 构造函数中 verbose 参数的废弃。
    • • 这两个 API 从 2.2 版本开始已被废弃,建议改用 LRScheduler.get_last_lr() 获取学习率。
    • • print_lr 和 verbose 参数用法混乱且文档不足,使用率低,因此彻底移除。
    • • 2.6.0 版本示例中仍可使用 verbose 并调用 print_lr,2.7.0 版本改为调用 get_last_lr()。
  • • libtorch_python.so 的符号默认改为不可见(除了 Apple 平台)。
    • • 之前 libtorch_python.so 中的符号均默认可见,现在改为仅显式标记的符号为公开,其余均隐藏。
    • • 部分使用私有符号的扩展可能因此导致链接失败。
  • • 用于 PyTorch 2 导出量化的 capture_pre_autograd_graph 已被废弃,建议改用 torch.export.export(相关问题 #139505)。
    • • 2.6.0 版本中使用 capture_pre_autograd_graph 的示例代码,2.7.0 版本改为使用 export,XNNPACK 量化器请从 executorch 项目获取。
  • • 新增 torch.fx.passes.graph_transform_observer.GraphTransformObserver 接口,用于启用更细粒度的节点级别追踪。
    • • 旧版重写 on_node_creationon_node_erase 的方式改为在 with 语句块中通过注册新钩子函数实现。
  • torch.ao.quantization.pt2e.graph_utils.get_control_flow_submodules 不再作为公共 API。
    • • 此函数被标记为私有,建议使用 _get_control_flow_submodules 代替。
    • • 示例:
      • • 2.6 版本:from torch.ao.quantization.pt2e.graph_utils import get_control_flow_submodules
      • • 2.7 版本:该导入将报错,应改为 from torch.ao.quantization.pt2e.graph_utils import _get_control_flow_submodules (私有调用)

弃用内容(Deprecations)部分请留意官方最新公告。

弃用说明

torch.onnx.dynamo_export 已被废弃。 用户应改用 torch.onnx.export 并设置参数 dynamo=True。版本差异:

  • • 2.6.0 版本调用方式:torch.onnx.dynamo_export(model, *args, **kwargs)
  • • 2.7.0 版本调用方式:torch.onnx.export(model, args, kwargs=kwargs, dynamo=True)

XNNPACKQuantizer 在 PyTorch 中已废弃,并迁移到 ExecuTorch 项目。 请改用 executorch.backends.xnnpack.quantizer.xnnpack_quantizer,不要再使用 torch.ao.quantization.quantizer.xnnpack_quantizer。 该量化器最初在 PyTorch 中用于初期开发,但因其不属于核心量化流程,已移至 ExecuTorch。版本差异示例:

  • • 2.6.0 版本:from torch._export import capture_pre_autograd_graph from torch.ao.quantization.quantize_pt2e import prepare_pt2e from torch.ao.quantization.quantizer.xnnpack_quantizer import ( XNNPACKQuantizer, get_symmetric_quantization_config, ) quantizer = XNNPACKQuantizer().set_global( get_symmetric_quantization_config() ) m = capture_pre_autograd_graph(m, *example_inputs) m = prepare_pt2e(m, quantizer)
  • • 2.7.0 版本:from torch.export import export from torch.ao.quantization.quantize_pt2e import prepare_pt2e # 请从 executorch 获取 xnnpack 量化器(/) from executorch.backends.xnnpack.quantizer.xnnpack_quantizer import ( XNNPACKQuantizer, get_symmetric_quantization_config, ) quantizer = XNNPACKQuantizer().set_global( get_symmetric_quantization_config() ) m = export(m, *example_inputs) m = prepare_pt2e(m, quantizer)

新特性

发布工程

  • • 在CI/CD中新增对CUDA 12.8的支持
  • • 在CI/CD中新增对Python 3.13和3.13t的支持
  • • 为pytorch-triton包新增aarch64支持
  • • 新增对Windows XPU的CI/CD支持
  • • 新增对ROCm MI300的CI/CD支持
  • • 新增对PEP585中标准集合类型提示泛型的支持
  • • 新增Windows Arm64每夜构建版本

Python前端

  • • 引入新的torch.utils.serialization.config命名空间,用于所有序列化相关配置
  • • 新增torch.serialization.config.save.use_pinned_memory_for_d2h选项,用于加速传入GPU设备时的torch.save操作
  • • 新增torch.utils.serialization.config.load.calculate_storage_offsets选项,可以减少随机读取,显著提升对随机访问性能差的storage的加载性能
  • • 支持dtype参数上的__torch_function__处理器,类似于子类对象

C++扩展

  • • 支持与libtorch无关的扩展,保持稳定的torch ABI兼容性

分布式 上下文并行

  • • 提供了Context Parallel API,帮助用户在序列维度上并行计算torch.nn.functional.scaled_dot_product_attention。实现了Ring Attention和基于AllGather方法,通过先执行all-gather后等待完成,再执行本地SDPA。支持三种SDPA内核:SDPBackend.FLASH_ATTENTION、SDPBackend.EFFICIENT_ATTENTION和SDPBackend.CUDNN_ATTENTION,并提供用户API选择所需方法。该实现与其他并行方案及torchpile兼容。

c10d

  • • 实现了ncclCommInitRankScalable

分布式检查点(DCP)

  • • 缓存保存计划,减少规划步骤开销
  • • 构建HF格式的存储读取器/写入器,用于写入检查点

CUDA

  • • Blackwell架构支持已覆盖本地内核、CUDA数学库和torchpile
  • • 公开torch.cuda.gds API

MPS

  • • Metal后端原型支持torchpile
  • • 通过Python提供Metal内核编写能力

ROCm

  • • CK高效内存注意力增加注意力偏置支持
  • • CK闪电注意力后端
  • • 增强Windows上ROCm的PyTorch支持
  • • 支持gfx1102架构(Navi33)的wheel构建
  • • hipblaslt行级f8 gemm支持

XPU

  • • 为Intel GPU添加AOT Inductor支持
  • • 支持Windows平台上XPU的torchpile
  • • 支持使用torch.utils.cpp_extension API的SYCL
  • • 提升Intel GPU在PyTorch 2导出后训练量化的性能
  • • 启用Windows Kineto性能分析器
  • • 基于oneDNN后端,为XPU支持TF32

torchpile Dynamo

  • • 支持在Dynamo中追踪contextlib.contextmanager
  • • 提供nonstrict_trace逃逸舱,用于复杂代码的非严格追踪
  • • 支持动态形状的延迟编译
  • • 支持追踪生成器
  • • 支持通过白名单指定源文件应用动态形状
  • • 支持追踪列表子类

Inductor

  • • FlexAttention支持非2的乘方head_dim
  • • 新增FlexAttention内核参数调优选项:num_warps和num_stages
  • • FlexAttention CPU端支持score和mask的向量化
  • • ConfigFuzzer新增调试工具,用于发现Torch编译配置中的错误组合
  • • 支持将点位运算融合入模板序言,启用环境变量TORCHINDUCTOR_PROLOGUE_FUSION即可
  • • CUTLASS后端增加生成配置的实例级别(TORCHINDUCTOR_CUTLASS_INSTANTIATION_LEVEL),详见config.py
  • • CUTLASS后端添加L2 Swizzle配置:cuda.cutlass_max_profiling_swizzle_options
  • • 在AOT Inductor指定package_cpp_only时输出CMakeLists.txt
  • • 一张Dynamo图可映射到多张Inductor图,支持使用graph_partition配置启用

性能分析器

  • • 增加重载名称支持
  • • 通过experimentalConfig启用所有线程性能分析

量化

• 支持KleidAI的内核,运行4bit对权重进行对称量化(可使用按通道或组的方式,组大小为32的倍数),激活动态量化为int8,权重在运行时从int4提升到int8以执行int8的矩阵乘法。动态量化由torch.ops.aten._dyn_quant_matmul_4bit完成,权重及可选偏置打包通过torch.ops.aten._dyn_quant_pack_4bit_weight。示例代码如下,使用torchao:

代码语言:javascript代码运行次数:0运行复制
from torchao.dtypes import PlainLayout
from torchao.experimental.packed_linear_int8_dynamic_activation_intx_weight_layout import (
    PackedLinearInt8DynamicActivationIntxWeightLayout,
)
from torchao.experimental.quant_api import (
    int8_dynamic_activation_intx_weight,
)
from torchao.quantization.granularity import (
    PerGroup,
    PerRow,
)
from torchao.quantization.quant_api import quantize_
from torchao.quantization.quant_primitives import MappingType

my_model = Model()
quantize_(
    my_model,
    int8_dynamic_activation_intx_weight(
        weight_dtype=torch.int4,
        granularity=PerGroup(32),  # 也支持PerRow()
        has_weight_zeros=True,  # 应设置为True
        weight_mapping_type=MappingType.SYMMETRIC_NO_CLIPPING_ERR,  # 也可用MappingType.SYMMETRIC,但误差更大
        layout=PackedLinearInt8DynamicActivationIntxWeightLayout(target="aten"),
    ),
)

ONNX

  • • 新增torch.onnx.verification.verify_onnx_program接口,用于验证导出ONNX模型的数值准确性。可通过compare_intermediates选项识别中间张量数值差异的算子,并可用model-explorer等工具可视化验证结果
  • • 支持通过dynamic_shapes添加自定义轴名称
  • • torch.onnx.export(dynamo=True)现在默认优化导出模型

改进项

发布工程

  • • 新增TorchCache基准测试
  • • 升级ROCm持续集成至版本6.3
  • • 将cufile添加到CUDA 12.x构建的依赖列表,默认启用
  • • 为ROCm wheel包和libtorch构建添加gfx1102和gfx12支持

Python前端

  • • torch.addcmul新增对CPU标量支持
  • • 对使用py_limited_api=True的cpp扩展设置-DPy_LIMITED_API标志
  • • weights_only序列化新增uintx/intx支持
  • • torch.jit.load新增警告提示
  • • 允许torch.save中配置record/storage对齐方式
  • • 支持torch.Stream的with语句管理

自动求导

  • • 允许torch.autograd.graph.GradientEdge作为torch.autograd.backward的输出
  • • 为torch.linalg.lstsq的残差实现梯度
  • • reflection_pad2d_backward新增确定性内核
  • • 改进softmax反向传播的CUDA本地实现
  • • 改进AutoAC的帕累托前沿图

数据加载器

  • • 当in_order为False时,数据加载器按工人空闲分配任务
  • • 更新pin memory相关API,不再传递device参数。device和pin_memory_device未来将被弃用

线性代数

  • • 改善torch.cum{min,max}对空输入dim参数的验证
  • • 对复数排序操作抛出正确错误

嵌套张量(NJT)

  • • 支持NJT在batch维上的chunk()反向传播
  • • 支持NJT剩余的*_like工厂函数
  • • 改进NJT与稠密张量的matmul,与反向传播支持

torch.nn

  • • 为nn.Module.set_submodule方法添加strict参数,修复非点分字符串的bug
  • • 改善reflection_pad1d、reflection_pad2d和reflection_pad3d的输入维度检查

torch.optim

  • • AdamW重构为继承自Adam
  • • SGD和Adam(W)支持可微学习率和权重衰减

构建前端

  • • 通过HomeBrew安装的PyTorch启用OpenMP支持
  • • 在pytorch中为ppc64le架构启用onednn
  • • 启用对Blackwell GPU家族的构建支持
  • • 通过分片代码生成文件,解决RaspberryPi构建时的内存溢出问题

C++前端

  • • 新增isAcceleratorExcluded API

分布式 c10d

  • • 简化abort和shutdown,将其添加至Backend和ProcessGroup对象
  • • 非CUDA设备上使用new_group代替split_group
  • • 移除c10d的pybind对象初始化中的call_guard
  • • 在指定XCCL后端时,启用XPU上的合并路径并调度到XPU张量屏障
  • • 在函数式集合操作中保持PyWork的Python引用计数
  • • 当TCPStore中agent存储处于活动时,启用软失败绑定
  • • 优化getDefaultBackend的容错性

分布式数据并行(DDP)

  • • 新增init_sync选项控制初始化期间的集合操作
  • • Python reducer与编译模式解耦

FullyShardedDataParallel2(FSDP2)

  • • 延迟初始化中对reduce_dtype进行限制
  • • 启用XPU设备上的FSDP2
  • • 增强反向传播后条件的鲁棒性
  • • 在FSDP2库代码中启用MTIA设备
  • • 避免在inference_mode时重置all_gather_output的版本计数器
  • • 支持FSDP2忽略部分参数
  • • 在XPU设备上启用FSDP相关测试
  • • 启用HPU设备上的FSDP2

DTensor

  • • 添加aten.amin/amax至linear_reduction_strategy
  • • distribute_tensor API新增src_data_rank参数
  • • 为_scaled_mm添加调度策略
  • • 添加aten.view.dtype操作支持
  • • 启用切分传播支持跨mesh计算
  • • 为DTensor新增CuDNN SDPA操作支持
  • • 优化shard_dim_alltoall,改用alltoall_single实现
  • • 弃用_shard_tensor,默认使用src_data_rank=None
  • • 针对aten.minimum添加点位操作策略

TensorParallel

  • • TP API中增加src_data_rank参数传递

Torch Elastic

  • • 新增在杀死worker时终止当前进程的逻辑
  • • 使etcd_rendezvous可公开导入
  • • 暴露rendezvous的keepalive参数

流水线

  • • 新增generate_stage_to_rank_mapping实用工具
  • • 移除调度中的stage_index_to_group_rank

CPU 通用

  • • 在向量化ATen后端(SVE)实现float、double、int的blend操作
  • • 升级oneDNN子模块至v3.7.1

x86

  • • 添加对int8 brgemm的支持

CUDA

  • • 优化CUDA流优先级管理
  • • 向Python暴露sharedMemPerMultiprocessor设备属性
  • • 完善sharedMem cudaDeviceProps的Python暴露
  • • 为embedding_bag增加输入索引非负范围检查
  • • 修复代码风格检查警告
  • • 修改内存固定(pin memory)行为,避免无CUDA上下文时自动初始化
  • • 为SM 10.0(Blackwell)添加行级缩放矩阵乘积的cutlass内核
  • • 新增CUDA后端的get_stream_from_external接口
  • • 更新cuDNN-frontend子模块至1.10.0,支持cuDNN卷积和SDPA集成

MPS

  • • 支持多个操作符:angle、entr、spherical_bessel_j0、xlog1py、sinc、round.decimals、linalg.det、cholesky.ex、bilineard2d_aa、linalg.solve、zeta、cholesky、fused_rms_norm、lu_unpack、lu_factor_ex、slogdet和logdet
  • • 扩展数据类型支持:angle和atan2支持long类型,torch.special.sinc支持复数类型,torch.mm/torch.bmm支持整型
  • • 支持torch.accelerator.synchronize()在MPS上调用
  • • 增加内核调度时错误检测
  • • MPSInductor改进:
    • • 修复转置索引生成
    • • 修复多范围变量内核调用
    • • 优化内核编译失败时的错误信息
    • • 修复大规模乘

错误修复

Python 前端

  • • 修复 torch.lerp 的类型提升问题
  • • 修复当同时使用 slots 和 Python 垃圾回收时 torch.Tensor 的内存泄漏
  • • 修复 cuda_array_interface 对 torch.bfloat16 的支持
  • • 修复罕见的就地操作导致返回的 torch.Tensor 不正确的调度器错误
  • • 停止在 CPU 上使用 MKL 生成随机数
  • • 将加速器检测移至构建时进行
  • • 修复 FakeTensorMode 下 torch.load 创建的 FakeTensor 设备不正确问题(针对普通张量)
  • • 修复在 CPU 上 torch.acos、torch.asin、torch.atan、torch.exp、torch.sigmoid、torch.div 对复数类型支持的问题

自动求导

  • • 修复 inplace foreach 操作中 torch.autograd.graph.allow_mutation_on_saved_tensors 的问题
  • • 修复 hardswish 反向传播的边界条件
  • • CPU 上 batchnorm 反向传播回退实现中 Half 类型求和使用 float 类型
  • • 修复 torchpile + ddp + 非重入 AC pack hook 触发计数错误

线性代数

  • • 修复 eigh 中的工作区计算

嵌套张量(NJT)

  • • 修复 NJT min/max 反向传播在非锯齿形归约时的问题
  • • 修复 NJT frexp() 同时处理两个输出的问题
  • • 修复 NJT fill.Scalar 对连续输入的支持
  • • 修复无嵌套特定内核的复合隐式操作的推理模式
  • • 修复 SDPA 的浮点运算计数器和测试

torch.nn

  • • 修复 flex-attention 反向传递过程中损坏的 meta 函数

构建前端

  • • 修复 VecLib 中不平衡的 #pragma diagnostic pop
  • • 通过调整编译标志修复 ARMv8-A(树莓派 4)原子操作兼容性
  • • 使 PyTorch 能被 CMake 4.x 版本构建

C++ 前端

  • • 修复 Apple Clang 构建时使用 -march=armv8.6a 导致的内部编译器错误
  • • 通过禁用树向量化修复 aarch64 neoverse-v1 下使用 gcc10.2 的 Inductor 回归问题

分布式 分布式检查点(DCP)

  • • 修复 dcp gather_object/scatter_object_list 问题

分布式(c10d)

  • • 修正 CudaEventCache 的悬挂引用
  • • 在 distributed.nn.all_reduce 中确保 all-reduce 输入连续
  • • 移除 PyTorch 通用 all_to_all 的 Alltoallv 特化
  • • 增加 TCPStore 处理远程对端关闭连接的情况
  • • 修复关闭时的内存泄漏
  • • 修复函数式集合操作在编译时不强制 FX 步幅的问题
  • • 关联张量分配支持与 NCCL 版本匹配
  • • 修改 API 以通过 torch.device 获取设备字符串
  • • 修复 Windows 上 dist.init_process_group 的问题
  • • 修复 isend 和 irecv 的可捕获性问题

DistributedStateDict(DSD)

  • • 修复 DDP 中 strict=False 的情况
  • • 修复存在无参数进程组时的问题
  • • 修复优化器 state_dict 在使用扁平命名空间时共享参数不匹配的问题

FullyShardedDataParallel2(FSDP2)

  • • 修复 FP8 张量的根节点问题
  • • 增加 fix 来修复无根参数时 buffer_dtype 的问题
  • • 支持在 FSDP 单元间使用自定义 all_reduce 钩子
  • • 修复无参数的 FSDP 包装模块错误

DTensor

  • • 修复 torch.distributed._functional_collectives.AsyncCollectiveTensor 对 aten.to 支持的问题
  • • 推迟 DTensor RNG 状态同步,直到首次随机操作或手动设置种子调用,以支持更灵活的 OffsetBasedRNGTracker 初始化
  • • 修复 _scaled_dot_product_flash_attention 分片问题
  • • 修正 all-reduce 重新分配成本

流水线

  • • 修复模型输出为视图时 backward_one_chunk 的问题
  • • 修复 ZB 和 compile 时抛出的错误
  • • 修复 FSDP+PP 流同步错误
  • • 修复 PP 梯度缩放问题
  • • 禁止单阶段调度中 num_microbatches 大于 num_stages
  • • 修复 V 调度的形状推断问题

CPU 通用

  • • 使用 SLEEF 实现 CPP 后端 asinh 的代码生成

x86

  • • 限制 Conv/Linear + 广播加法融合中另一个张量的形状

CUDA

  • • 使 PYTORCH_NO_CUDA_MEMORY_CACHING 只有在值为 1 时生效
  • • 修复 cuda 初始化中的竞争条件
  • • 修复几个 64 位索引问题,复杂128扫描中正确计算线程数
  • • 修正 topk 中的资源获取模式,确保内存模型正确
  • • 修复 UpSampleNearest3D 的 int64 索引问题
  • • 修复某些断言触发时GPU数量打印问题
  • • 更新 avg_pool2d 反向传播时 SM 10.0 的线程数,防止运行时崩溃
  • • 只针对 SM 9.0 使用 f8f8bf16 行级缩放矩阵乘法
  • • 修复 Upsample2D 的 64 位索引问题
  • • 修复 _preload_cuda_deps 中的路径查找
  • • 支持 Blackwell 架构:再次修正 sm100、sm120 的反向启动边界

MPS

  • • 针对 MPS 后端 gather_out 的变通方案
  • • 修复标量参数的 fmin/fmax
  • • 修复混合数据类型调用 mm 时崩溃
  • • 修复 torch.add(x,y, alpha=2) 崩溃
  • • 修复不同数据类型下的 nllnd_loss_backward 崩溃
  • • 确保 MPSStream 可由 C++ 使用
  • • 确保 MPSProfiler 可由 C++ 使用
  • • 修复连续非连续位运算的回归问题
  • • 修复大批量张量的 lu 分解
  • • 确保 _scaled_dot_product_attention_math_mps 输入为 4 维
  • • 修复空输入的 cholesky_ex
  • • 修复超过 4 维张量的注意力操作
  • • 修复 smooth l1 loss 的空占位符错误
  • • 修复 torch.chalf 的 sqrt 及其它问题
  • • 修复 unary_kernel_strided 逻辑
  • • 修复标量到张量的位移操作
  • • 修复非连续张量的多项式采样
  • • 修复超过 3 维张量的三角形操作
  • • 修复 lstm_mps 中缺失自动释放导致的内存泄漏
  • • 修复 runUniqueGraph 缺失自动释放池导致内存泄漏
  • • 变通方案修复 5 维张量的随机数生成错误
  • • 修复 Wreorder-init-list
  • • 修复 libfmt 调用中的无效格式字符串
  • • 修复 M4 上 c10::metal::log_gamma 的正确性
  • • 修复非连续张量的 lu 分解

性能

发布工程

  • • 新增H100的性能测试

稀疏前端

  • • 移除代码库中不必要的张量复制

分布式 分布式检查点(DCP)

  • • 引入基于进程的异步检查点机制

c10d

  • • 将TCPStore的ALLOC_BUFFER_SIZE从4000调整为4096(2的幂次)以提升性能
  • • 通过在删除ExpandableSegments对象时释放IpcMutex和在WorkNCCL析构时释放GIL,提升IPC张量释放性能

CPU 通用优化

  • • 简化vec128的bfloat16/half浮点乘加操作
  • • 排序操作并行化

x86架构优化

  • • 当mkldnn_convolution_pointwise不需要梯度时,设置prop_kind为forward_inference
  • • 支持add和max的reduce操作
  • • 使用零点来决定卷积输入零点掩码

CUDA

  • • 使PYTORCH_NO_CUDA_MEMORY_CACHING仅在设为1时生效
  • • 修复CUDA初始化中的竞态条件
  • • 修复部分64位索引问题,调整complex128扫描时的线程数量
  • • 修正topk中的内存行为以符合内存模型的正确性
  • • 修复UpSampleNearest3D的64位索引问题
  • • 解决某些断言触发时GPU数量打印错误
  • • 为SM 10.0架构调整avg_pool2d反向的线程数,防止运行时崩溃
  • • 仅在SM 9.0上使用f8f8bf16行级缩放矩阵乘法
  • • 修复Upsample2D中的64位索引问题

MPS

  • • 加快整数批量矩阵乘法性能
  • • 实现linear1d着色器
  • • Metal单元核实现sqrt操作
  • • 加速带stride的张量上的一元操作
  • • 新增strides一元操作
  • • 以着色器实现masked_fill_scalar
  • • 实现bilineard2d着色器
  • • 优化Cholesky操作
  • • 提升插值速度

ROCm

  • • 改善stride不为1时的反向索引性能
  • • 优化向量化元素级内核
  • • 在tl.load中跳过单次使用的缓冲区L1缓存
  • • 提升3D形状reduce sum运算性能
  • • 为BFloat16和Half启用_load_dwordx4指令集扩展
  • • 优化低CU数量下的reduce sum计算
  • • 调优非最快维度的3D张量求和性能
  • • 优化stride为1的反向索引内核
  • • 针对块基数排序使用IPT=8
  • • 调整首选BLAS库默认值

XPU

  • • 优化SDPA推理性能
  • • 改进零点内存创建
  • • 避免非连续目标张量或输入广播时的不必要复制

torchpile Dynamo

  • • 在C++中实现动态形状保护
  • • 直接访问Python帧本地变量以进行保护检查
  • • 若干Dynamo追踪时间的性能改进

Inductor

  • • 支持Arm Neon和SVE的FP32 GEMM包装器
  • • 新增GEMM内核:persistent_tma
  • • 启用CPP分组GEMM模板
  • • 提供i8 x i8 -> i32 GEMM内核在AMX ISA上的自动调优支持
  • • 新增CPU AVX512的GEMM模板:_weight_int4pack_mm_for_cpu
  • • 支持SmoothQuant的int8线性模式融合
  • • 新增torchao da8w8模式,支持对称量化的激活和权重
  • • 支持二维归约维度切片,支持名为r0_和r1_的两个归约维度,生成嵌套循环
  • • 新配置允许在triton代码生成中跳过单次使用缓冲区的L1缓存
  • • 实现大窗口尺寸的max_pool2d_with_indices归约
  • • 优化Inductor CPU后端外层循环融合的启发式算法
  • • 支持Inductor CPU后端GroupNorm的并行归约
  • • 支持在线softmax计算,利用定制归约同时计算最大值与求和,单次访问数据
  • • 增加ROCm专用矩阵乘法调优参数

torch.fx

  • • 对Graph.nodes.__iter__进行微优化
  • • 优化map_aggregate(immutable_dict)性能
  • • 将DCE随机检查移至导入时执行

量化

  • • 通过ACL直接启用AArch64的快速qlinear静态/动态路径
  • • 提升KleidAI 4 bit内核性能
  • • 在AArch64上为8位量化的embedding bag添加NEON实现,在Neoverse V1架构核心上性能提升约5.5倍

文档更新

Python前端

  • • 修正了torch.addbmm()中输入参数的描述
  • • 修正了numpy文档引用
  • • 添加了torch.cat类型提升的文档说明
  • • 补充了torch.topk中重复值时索引稳定性的详细说明
  • • 为torch.diagonal文档添加了重载说明
  • • 移除了torch.{min,max}文档中不正确的警告信息
  • • 更新了addbmm、addmm、addmv和baddbmm的描述
  • • 修正torch.max中可选参数dim和keepdim的描述
  • • 更新了torch.bucketize的文档
  • • 修正了推荐的张量操作顺序中低效写法

自动求导

  • • 抑制torch.autograd.gradcheck中的vmap警告

嵌套张量(NJT)

  • • 更新开源嵌套张量文档,重点介绍NJT内容

torch.nn

  • • 在CrossEntropyLoss文档中添加目标类型的说明

torch.optim

  • • 澄清了*AdamWs中“解耦权重衰减”的含义
  • • 修正了AMSGrad算法的描述

构建前端

  • • 移除文档中关于PRE_CXX11_ABI的引用

分布式 FullyShardedDataParallel2(FSDP2)

  • • 强调set_requires_gradient_sync与no_sync的等价性

分布式(c10d)

  • • 更新了wait()函数的文档
  • • 在宏定义结尾添加注释以提升可读性

DTensor

  • • 补充from_group API的部分文档,并新增二维测试
  • • 在文档中暴露__create_chunk_list__函数

DistributedStateDict(DSD)

  • • 更新文档,提及set_optimizer_state_dict的限制

Torch Elastic

  • • 替换了错误的 .. note:: 调用
  • • 修正了record的文档字符串

流水线

  • • 更新了教程和相关文档

CUDA

  • • 修正clock_rate单位为MHz的文档

XPU

  • • 改善“Intel GPU 入门”硬件要求及注意事项
  • • 改进SYCL扩展、源码构建及AOT Inductor文档
  • • 更新Intel XPU性能分析文档
  • • 更新XPU Windows版本README中的CMAKE_PREFIX_PATH说明

torchpile Dynamo

  • • 删除了关于使用suppress_errors处理编译器错误的建议
  • • 自动生成的Dynamo文档更新

Inductor

  • • 美化了emulate_precision_casts相关文档
  • • 对导出和AOT Inductor文档做了小幅修正
  • • 更新了AOT Inductor教程
  • • 不再建议将inductor.config.descriptive_names设为False

torch.fx

  • • 改进splitter的日志记录
  • • 更新torch/fx/graph节点列表的字面量类型注释
  • • 改善torch/fx/_pytree.py及torch/utils/_pytree.py的类型注释
  • • 修正replace_pattern函数文档字符串中的细微错误

torch.export

  • • 导出编程模型更新
  • • 更新动态形状文档中dims()及建议的解析器修正
  • • 清理torch.export.load()的文档字符串

量化

  • • 添加torchao相关文档链接至PyTorch库

ONNX

  • • 更新基于TorchDynamo的ONNX导出器内存使用示例代码
  • • 跟进废弃提醒信息
  • • 开放验证工具接口

开发者相关更新

Python 前端

  • • 使用 importlib 在 collect_env 中收集包信息
  • • 为 torch.Size 添加 addmul 类型提示

分布式 FullyShardedDataParallel2 (FSDP2)

  • • 为 fully_shard 启用类型支持,使返回值可进行类型链式调用

分布式 (c10d)

  • • 改进 flight recorder 的数据转储机制
  • • 新增是否启用日志跟踪捕获功能
  • • 在基于文件的 flight recorder 转储中添加文件刷新支持
  • • 在监控线程中捕获 c10 错误并记录日志
  • • 新增 API 用于获取进程组(PG)级别的状态/错误代码
  • • 将初始化时的 record 参数调整到正确位置
  • • 支持多加速器设备的测试泛化

张量并行 (TensorParallel)

  • • 模块被分布式使用两次时新增警告

流水线 (Pipelining)

  • • 改进形状推断的调试日志

MPS

  • • 支持 metal 对象中的 includes 功能
  • • 新增上下文管理器用于捕获 Metal 命令,便于调试和性能分析

XPU

  • • 减小 Windows 平台 XPU 包的二进制大小
  • • 添加 XPU 平台 Python 3.13 构建支持
  • • 使 XPU Triton 构建支持 manylinux 2.28
  • • 修复虚拟环境(venv)中的 XPU 构建问题

基准测试 (Benchmark)

  • • 从算子基准中移除旧的 ONNX 基准测试
  • • 添加选项将算子基准输出写入 JSON 文件
  • • 改进算子基准结果的解析
  • • 新增更多算子基准支持,包括 add_、addcmul、arange、baddbmm、bmm、clamp、div、div_、gelu、index_add、logical_and、mul_、sub_、topk、where 等
  • • 新增 cachebench 用于 PT2 缓存的算子基准

torchpile Dynamo

  • • 新增内部图断点 API,提供更友好的错误提示
  • • 用 torchpile() 替换内部调用的 torch._dynamo.optimize()

Inductor

  • • 支持导出用于自动微分编译(AOT)的 unwrap/wrap 子类,解决 torchao 中用户需手动unwrap子类的问题
  • • 自动调优日志现在会显示在 TORCH_LOGs 中,名称为 “autotuning”
  • • 用 OrderedSet 替换 set 类型,Inductor 代码库中只使用 OrderedSet
  • • MPS 现被视为 GPU_TYPE
  • • 为 qlinear 操作分离一元后置操作融合与降级处理
  • • 新增辅助类,用于启发式算法中的内核内存分析
  • • 将 ir_pre_fusion.txt 和 ir_post_fusion.txt 文件从 TORCH_COMPILE_DEBUG 移动到 TORCH_LOGS,例如设置 TORCH_LOGS="+ir_pre_fusion"
  • • 实现 AOT编译模型(AOTICompiledModel)的深拷贝

torch.fx

  • • 降级部分日志等级,减少噪音
  • • 重构不可变集合的实现
  • • 使 fx.node.map_arg() 和 map_aggregate() 具有泛型支持

结语

PyTorch 2.7.0将效率与灵活性推向新高度,无论是大模型训练还是边缘设备部署,这次更新都值得立即尝鲜!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。原始发表:2025-04-27,如有侵权请联系 cloudcommunity@tencent 删除pytorchgpu编译开发者性能