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 的设备。
- • 之前该函数始终在 "cpu" 设备上建立新 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)
- • 2.6.0 版本:
- • 使用
- • 完成对
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()。
- • 这两个 API 从 2.2 版本开始已被废弃,建议改用
- • 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 项目获取。
- • 2.6.0 版本中使用
- • 新增
torch.fx.passes.graph_transform_observer.GraphTransformObserver
接口,用于启用更细粒度的节点级别追踪。- • 旧版重写
on_node_creation
和on_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
(私有调用)
- • 2.6 版本:
- • 此函数被标记为私有,建议使用
弃用内容(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 添加 add 和 mul 类型提示
分布式 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编译开发者性能
发布评论