重点内容
测试版(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)
- 2.6.0 版本调用方式:
-
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 量化器(https://github.com/pytorch/executorch/) 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)
- 2.6.0 版本:
新特性
发布工程
- 在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选择所需方法。该实现与其他并行方案及torch.compile兼容。
c10d
- 实现了ncclCommInitRankScalable
分布式检查点(DCP)
- 缓存保存计划,减少规划步骤开销
- 构建HF格式的存储读取器/写入器,用于写入检查点
CUDA
- Blackwell架构支持已覆盖本地内核、CUDA数学库和torch.compile
- 公开torch.cuda.gds API
MPS
- Metal后端原型支持torch.compile
- 通过Python提供Metal内核编写能力
ROCm
- CK高效内存注意力增加注意力偏置支持
- CK闪电注意力后端
- 增强Windows上ROCm的PyTorch支持
- 支持gfx1102架构(Navi33)的wheel构建
- hipblaslt行级f8 gemm支持
XPU
- 为Intel GPU添加AOT Inductor支持
- 支持Windows平台上XPU的torch.compile
- 支持使用torch.utils.cpp_extension API的SYCL
- 提升Intel GPU在PyTorch 2导出后训练量化的性能
- 启用Windows Kineto性能分析器
- 基于oneDNN后端,为XPU支持TF32
torch.compile
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:
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 类型
- 修复 torch.compile + 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:🤘: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推理性能
- 改进零点内存创建
- 避免非连续目标张量或输入广播时的不必要复制
torch.compile
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说明
torch.compile
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 缓存的算子基准
torch.compile
Dynamo
- 新增内部图断点 API,提供更友好的错误提示
- 用 torch.compile() 替换内部调用的 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将效率与灵活性推向新高度,无论是大模型训练还是边缘设备部署,这次更新都值得立即尝鲜!