近日,PyTorch 团队正式发布了 v2.8.0 版本,带来了多项重要功能更新、性能优化和错误修复。本文将详细介绍该版本的主要变化,帮助开发者更好地理解新特性及其影响。

亮点功能

  • 不稳定版本特性

  • torch::stable::Tensor

  • • 在 Intel CPU 上利用原生 PyTorch 进行高性能量化大语言模型(LLM)推理

  • • 实验性 Wheel 版本支持

  • • Inductor CUTLASS 后端支持

  • • Inductor CUDA 图的图划分功能

  • • 控制流算子库

  • • HuggingFace SafeTensors 在 PyTorch 分布式 Checkpoint 中的支持

  • • 在 PyTorch C++ Extension API 中提供 SYCL 支持

  • • XPU 设备上的 A16W4 支持

  • • 使用torch.compile的分层编译

  • • Intel GPU 分布式后端(XCCL)支持

跟踪中的回归问题

  • Windows 上使用 CUDA 12.9.1 构建 wheel 时发生栈溢出
    由于 CUDA 12.9.1 引入的一个 bug,我们无法在该版本下完成完整的 Windows wheel 构建,因为在编译torch.segment_reduce()时会导致构建崩溃。
    因此,我们提供了一个不包含torch.segment_reduce()的 wheel 版本来规避该问题。
    如果你需要torch.segment_reduce()的支持,请使用其他版本的 CUDA。

向后不兼容的变更(Backwards Incompatible Changes) CUDA 支持
  • • 在CUDA 12.8 和 12.9构建中,移除了对MaxwellPascal架构的支持。
    由于二进制体积限制,在 PyTorch 2.8.0 中,已移除对sm50 - sm60 架构的支持(仅限 CUDA 12.8 和 12.9 版本)。
    如果需要支持这些架构,请改用CUDA 12.6

Python 前端
  • • 当调用算子(op)时,输入的dtype 不被支持将抛出NotImplementedError,而不是RuntimeError
    请更新异常处理逻辑以反映此变化。

在 2.7.0:

try:     torch.nn.Hardshrink()(torch.randint(0, 5, (10,))) except RuntimeError:     ...

在 2.8.0:

try:     torch.nn.Hardshrink()(torch.randint(0, 5, (10,))) except NotImplementedError:     ...
  • 为自定义autograd.Function增加了缺失的“视图上的就地操作检查”
    在 2.8.0 中,如果自定义的autograd.Function修改了一个需要梯度的叶子变量(leaf)的视图(view),现在会正确抛出错误。
    以前则会静默导致内存泄漏。

示例:

class Func(torch.autograd.Function):     @staticmethod     defforward(ctx, inp):         inp.add_(1)         ctx.mark_dirty(inp)         return inp     @staticmethod     defbackward(ctx, gO):         pass a = torch.tensor([1.0, 2.0], requires_grad=True) b = a.view_as(a) Func.apply(b)

2.7.0 版本
运行不报错,但是会内存泄漏。

2.8.0 版本
报错:

RuntimeError: a view of a leaf Variable that requires grad is being used in an in-place operation
  • • 对tensordotout 版本现在会在requires_grad=True时正确抛出错误。
    以前不会报错,但无法为out张量计算梯度。

在 2.7.0:

a = torch.empty((4, 2), requires_grad=True) b = torch.empty((2, 4), requires_grad=True) c = torch.empty((2, 2), requires_grad=True) # 不报错,但无法计算 c 的梯度 torch.tensordot(a, b, dims=([1], [0]), out=c)

在 2.8.0:

# 会报 RuntimeError
torch.compile
  • 修正了mark_dynamic张量在特定情况下被错误地形状特化的问题
    以前,如果在关闭 guard 的情况下测试符号形状,则 guard 可能被遗漏。
    已在 2.8 修复。如果新 guard 使mark_dynamic的张量被特化,会导致错误。
    解决方法:使用maybe_mark_dynamic替代mark_dynamic

  • • 多个与torch.compile相关的配置变量已重命名或移除:

    • enable_cpp_framelocals_guard_eval现在无效

    • rocm.n_max_profiling_configs弃用 → 请改用rocm.ck_max_profiling_configsrocm.ck_tile_max_profiling_configs

    • autotune_fallback_to_aten弃用 → ATen 回退需显式配置

    • use_mixed_mmmixed_mm_choice弃用

    • descriptive_names = False弃用 → 请使用"torch","original_aten""inductor_node"

    • custom_op_default_layout_constraint从 inductor config 移动到 functorch config

    • emit_current_arch_binary弃用

    • aot_inductor.embed_cubin重命名为aot_inductor.embed_kernel_binary

    • aot_inductor.compile_wrapper_with_O0重命名为compile_wrapper_opt_level

  • • 对高阶算子(HigherOrderOperators,如cond)增加了更严格的别名/突变检查。
    如果输入与输出间存在不支持的别名或突变,将报错。
    解决方法:对有别名的输出调用.clone()

  • guard_or_xdefinitely_x接口合并
    删除了definitely_true/definitely_false,请改用guard_or_true/guard_or_false

torch.export
  • • 移除了torch.export.export_for_inference,请使用:

torch.export.export_for_training(...).run_decompositions(...)
  • torch.export.exportexport_for_training默认strict=False(旧版默认是True)。
    如需旧行为,请显式传入strict=True

ONNX
  • torch.onnx.export默认 opset 从17升级到18
    如果需要旧行为,请显式指定opset_version=17

  • • 移除了JitTraceConvertStrategy支持,当dynamo=True时,不再支持 JIT traced/scripted 模块导出到 ONNX。

  • onnxscript>=0.3.1dynamo=True的必需版本。

构建前端(Build Frontend)
  • • 从Dispatcher.h中移除了torch/types.h引入
    如果 C++ 代码依赖此隐式包含,请升级 torchvision 版本。

  • DLPack 升级到 1.0,部分枚举值被重命名:

    • kDLGPUkDLCUDA

    • kDLCPUPinnedkDLCUDAHost

  • • NVTX3 相关 CMake 配置位置变更,使用USE_SYSTEM_NVTX=1时需显式配置。

弃用功能(Deprecations) 1. MacOS Ventura 的 MPS 支持将在 2.9 中移除
  • PyTorch 2.8 是最后一个支持在 MacOS Ventura 上使用 GPU 加速的版本

  • • 从下一个版本(2.9)开始,需要 MacOS Sonoma(2023 年 9 月发布)或更高版本才能使用MPS 后端

2.torch.ao.quantization已弃用,将在 2.10 中移除

迁移方式如下:

Eager 模式量化

torch.ao.quantization.quantize,torch.ao.quantization.quantize_dynamic

  • 权重-only 和动态量化:使用torchaoEager 模式的quantize_

  • 静态量化:使用torchaoPT2E 量化

FX 图模式量化

torch.ao.quantization.quantize_fx.prepare_fx,torch.ao.quantization.quantize_fx.convert_fx

  • • 使用torchaoPT2E 量化torchao.quantization.quantize_pt2e.prepare_pt2e,torchao.quantization.quantize_pt2e.convert_pt2e)。

注意: • PT2E 量化已经迁移到 torchao 仓库: torchao.quantization.pt2e • 详细信息请参考: • 相关 issue: pytorch/ao • 快速上手文档:https://docs.pytorch.org/ao/main/quick_start.html-2-export-quantization
3.torch.onnx.exportdynamo=False(当前默认)选项已弃用
  • • 从PyTorch 2.9开始,默认值将改为dynamo=True

  • • 建议迁移到dynamo=True选项,这将使torch.export.export成为默认导出路径,取代 TorchScript。

如果需要保留旧行为:

  • • 显式设置dynamo=False

  • • 建议同时尝试fallback=True选项,这样当dynamo=True出错时,导出器会自动回退到dynamo=False路径。

新功能(New Features) CUDA
  • 在 CUDAGraphs 中支持捕获事件记录与等待(event record & wait)以用于计时。

torch.compile Dynamo
  • • 新增对**分层编译(hierarchical compilation)**的支持,通过nested_compile_region实现。

  • • 允许使用自定义过滤函数guard_filter_fn来丢弃 guard。

  • • 新增dont_skip_tracing装饰器,可绕过大多数 Dynamo skipfiles 规则。

Inductor
  • • 支持将一个 Dynamo 计算图映射到多个不同的 Inductor 计算图,这些计算图可被独立优化。

torch.export
  • • 新增draft-export:一种新的导出变体,旨在稳定生成计算图,并生成追踪过程中的调试报告。

Ahead-Of-Time Inductor(AOTI,提前编译版 Inductor)
  • • 支持TorchBind 对象

  • • 新增配置变量aot_inductor.model_name_for_generated_files,用于指定生成文件的模型名称。

MPS(Apple GPU 后端)
  • MPSInductor:支持在 Apple GPU 上运行torch.compile

ONNX
  • • 新增draft_export策略,在使用torch.onnx.export获取ExportedProgram时,如果出现数据相关或约束错误,可提供调试信息。

  • • 在dynamo=True导出路径中,新增对**符号算子(symbolic operators)**的支持。

    • • 新增两个算子:torch.onnx.ops.symbolictorch.onnx.ops.symbolic_multi_out,可直接在 PyTorch 模型中创建 ONNX 符号算子。

示例

def forward(self, x: torch.Tensor) -> torch.Tensor:     # 可以选用 is_in_onnx_export 来控制 ONNX 导出时期的行为     if torch.onnx.is_in_onnx_export():         # 在 "custom_domain" 域中创建名为 "CustomOp" 的 ONNX 符号算子         # 输出张量将具有给定的 dtype 和 shape         return torch.onnx.ops.symbolic(             "custom_domain::CustomOp",             (x,),             dict(attr_key="attr_value"),             dtype=x.dtype,             shape=x.shape,             version=1,         )     else:         return x
Python 前端
  • • 新增广义帕累托分布(Generalized Pareto Distribution, GPD)

量化(Quantization)
  • • 新增数据类型torch.float4_e2m1fn_x2

XPU(Intel GPU/加速器)
  • • 支持 Intel 分布式后端XCCL

  • • 支持通过C++ 扩展运行 SYCL 内核。

改进内容 构建前端(Build Frontend)
  • • 移除了TORCH_CUDA_ARCH_LIST的过时警告

  • • 将Eigen改为可选构建依赖

  • • 将 CUTLASS 更新到 3.9.2

可组合性(Composability)
  • • 为自定义算子增强了支持,包括可序列化的算子配置文件虚拟注册覆盖

C++ 前端(C++ Frontend)
  • • 为torch::nn::functional::grid_sample添加了 Bicubic 模式

CUDA
  • • 为自定义 CUDA 扩展的load_inline()引入no_implicit_headers模式

  • • 在 SDPA 内存高效注意力后端中支持大批量(large batch)计算

  • • 修复了 SDPA 内存高效注意力反向传播中的非法索引问题

  • • 在 sm121(DGX Spark)架构上支持 SDPA 注意力后端

  • • 为 sm12x(GeForce Blackwell)添加 FP8 行级缩放矩阵乘(row-wise scaled-mm)支持

cuDNN
  • • 将 cuDNN 前端版本更新至 1.12

分布式(Distributed) c10d
  • • 为 TCPStore 增强了克隆和队列功能

  • • 为 NCCL 通信添加了集合操作(collective)时间估算器

  • • 提升 getDefaultBackend 的容错性,不再依赖异常

  • • 指定 MPS(Apple GPU)的默认 PyTorch 分布式后端

  • • 在 TCPStoreLibUvBackend 中支持 masterListenFd

  • • 在 gloo 中使用共享 store

  • • 提升故障恢复(FR)转储的健壮性,改进广播等待、降低转储超时并缩小锁范围

  • • 记录每个被合并的 collective

  • • 实现更安全的 NCCL 通信器(communicator)资源管理

  • • 明确TORCH_NCCL_USE_TENSOR_REGISTER_ALLOCATOR_HOOK的行为

  • • 允许在 mempool 中注册未来的 NCCL 分配

  • • 当使用 group_rank 时跳过 global_rank 计算

  • • 通过不安全 API 从 ProcessGroupNCCL 暴露 NCCL 通信器

  • • 为不均匀 all2all 带宽计算添加 split size 信息转储

  • • 让 FR 成为与厂商无关的实现,使其他后端(如 gloo)也能使用

  • • 在 functional collective 中添加needs_contiguous_strides标签

  • • 让split_group支持非 NCCL 后端

  • • 使用new_subgroups_by_enumeration()简化new_subgroups()

  • • 在 ProcessGroupNCCL 中仅让当前线程分配池内资源

  • • 让 gloo 支持c10::Half

  • • 在 PG 析构函数中释放 GIL

  • • 让get_process_group_ranks()支持group=None

  • • 若已注册,跳过更新默认设备分布式后端

  • • 启用查询构建与运行时的 NCCL 版本

  • • 在确定性模式下禁用 NCCL NVLS

  • • 让init_process_group支持仅索引的设备 ID

  • • 支持按 ProcessGroup 启用/禁用 NaN 检测

  • • 在 ProcessGroupGloo 中增加reduce_scatterReduceOp::AVG支持

  • • 在 ProcessGroupNCCL 中添加 FP8 支持

  • • 在 gloo 中添加 ibverbs 后端,并在支持 GPUDirect 的后端下启用 gloo CUDA

DeviceMesh
  • • 改进了设备选择逻辑

DDP(DistributedDataParallel)
  • • 增加选项允许跳过对未使用参数的 all reduce 操作

  • • 增加接收数据检查,以避免 DDP reducer 中的段错误

  • • 将use_python_reducer从 Python 传递到 C++ reducer

DSD(DistributedStateDict)
  • • 支持write_size中的非张量数据

  • • 在 meta 设备张量时跳过弹出

DTensor
  • • 让 StridedShard 支持非均匀切分

  • • 为torch.cumsum增加支持

  • • 增加 DTensor 重分布前/后数据类型转换,以支持 SimpleFSDP 混合精度训练

  • • 为torch.distributed.tensor.debug.visualize_sharding增加详细支持

FSDP2(Fully Sharded Data Parallel 2)
  • • 在 FSDP collective 中添加PrivateUse1后端支持,并将设备类型传递给 pre forward hook

  • • 添加set_reshard_after_forward

  • • 允许无梯度的模型参数使用不同的数据类型

  • • 当reshard_after_forward=True且为根模型时,保留根未分片

  • • 增加选项强制 FSDP2 始终使用 SUM 规约

  • • 仅在非 CPU 设备时断言 all_reduce_event

  • • 为 FSDP2 启用 NCCL 零拷贝(用户缓冲注册)

管道并行(Pipeline Parallelism)
  • • 添加调度可视化工具

  • • 允许在 ZeroBubble 路径中传递未使用的 kwargs

  • • 添加get_pipeline_order()支持 Gpipe 和 1F1B

分片张量(ShardedTensor)
  • • 支持 0 尺寸 ShardedTensor,并通过 all_gather 重新计算元数据

张量并行(TensorParallel)
  • • 添加ParallelStyle PrepareModuleInputOutput

torchelastic
  • • 当 worker 离开时,不关闭 rendezvous

torch.compile

Dynamo

  • • 改进了对 Pythonset、实现了__torch_function__的张量子类,以及namedtuple子类的追踪支持

  • • 消除了Compiled Autograd 在动态形状下的所有重新编译,从而减少编译时间

  • • 为torch.compiler.disable添加了reason字段

  • • 移除了顶层torch命名空间函数中 lru_cache 的警告

Inductor
  • • 为CPU 上的 FlexAttention添加了块稀疏(block sparse)支持

  • • 引入了新的配置选项:

    • aot_inductor.custom_ops_to_c_shimsaot_inductor.custom_op_libs:允许指定自定义算子的 C shim

    • max_fusion_buffer_group_pairwise_attempts:限制融合的最大节点距离

    • cuda.cutlass_enabled_ops:控制 CUTLASS 算子的选择

    • triton.cudagraph_capture_sizes:指定在哪些形状下捕获 CUDAGraph,并跳过其他形状的捕获

    • use_static_cuda_launcher:启用对编译后 triton 的静态启动以提升冷启动性能

    • assume_unaligned_fallback_output:允许 inductor 跟踪未对齐的输出

    • cuda.cutlass_tma_only:控制是否只使用 TMA 兼容的 CUTLASS 内核

    • static_launch_user_defined_triton_kernels:启用静态启动用户自定义 triton 内核

    • precompilation_timeout_seconds:控制预编译的超时时间

    • disable_decompose_k:禁用新的 DecomposeK GEMM 内核

    • min_num_split:设置分块归约(split reduction)的最小分块数

    • max_autotune_flex_search_space:指定 flex attention 自动调优的搜索空间大小

  • • 引入了LOG_AUTOTUNE_RESULTS环境变量,用于自动调优日志记录

  • • 提高了CPU Welford 归约在归一化操作中的数值稳定性

torch.export
  • • 改进了对内置算子(minmaxmath.pow)的处理

  • • 为dim hints添加了min/max范围

  • • 允许通过pytree.register_dataclass注册普通类

  • • 允许将整型输入指定为动态输入

  • • 内联(inline)jit.scripted函数到 export 结果中

  • • 改进graph signature的美化打印

Ahead-Of-Time Inductor (AOTI)
  • • 支持设备端 TMA

  • • 在AOTIModelPackageLoader中添加了num_runners参数

FX
  • • 更新了代码生成中的比较运算符为==

  • • 在常量折叠子模块时,将名称映射到操作数索引

  • • 改进了追踪时的堆栈追踪信息

  • • 在normalize_function中支持边缘方言(edge dialect)算子

  • • 修复了minifier中路径命名问题

  • • 添加了graph_code_verbose_log用于 FX passes

  • • 提升缓存键图打印的性能

  • • 在fx.passes.split_module中添加参数以规范化输入名称

线性代数前端
  • • 为cross添加了张量重叠检查

MPS (Apple Metal 加速)
  • • 为大量torch.special操作(以及index_copyhardshrinkrsubcol2imisin)添加了支持

  • • 扩展了以下操作的数据类型支持:

    • index_put支持半精度浮点

    • ConvTranspose3D支持 FP32 和复数

    • log1psigmoid支持 int64

  • • 以浮点精度计算激活内核

嵌套张量(Nested Tensor, NJT)
  • • 修复了嵌套张量字符串表示的连续性问题

torch.nn
  • • 当模块的完整反向钩子(full backward hook)无输入需要梯度时添加警告

  • • 为 CPU 添加weight_norm的 FP16 支持

ONNX
  • • 升级 ONNX 到 1.18

  • • 在dynamo=True时支持 opset 18-23

  • • 添加 float4 支持

  • • 支持 ONNX 原生算子 Attention-23 和 RotaryEmbedding-23

  • • 支持torch.scan

  • • 在动态维度下支持 0/1 大小的样例输入

  • • 从 opset 21 添加 group_norm 支持

  • • 为VerificationInfo类添加asdict方法

  • • 支持在 ONNX Runtime 中运行 bfloat16 模型

  • • 改进 ONNX 文档格式和鲁棒性

  • • 更新 dynamic_shapes 行为以使用torch.export.dim.DYNAMIC

  • • 在节点生产时设置值的名称

  • • 改进符号操作符(sym_float,sym_not,sym_min,sym_max)支持

优化器
  • • 为 CPU 上的融合 Adagrad 添加TensorLR版本

  • • 在优化器正常工作时自动将张量 lr 转换为 0 维

  • • 在 MultiplicativeLR 中增加lr_lambda类型检查

性能分析(Profiler)
  • • 支持按需内存快照

  • • 在可视化器中添加 PT2 编译上下文

  • • 将 PT2 纳入内存快照

  • • 添加切换全局/本地注解回调的开关

  • • 将重载名称传递给 Kineto

  • • 对未完成的 CPU 事件将持续时间设置为 -1

  • • 从事件最多的索引开始显示

Python 前端
  • • 引入torch.AcceleratorError

  • • 实现Size.__radd__()

  • • 更新get_default_device()以支持torch.device上下文管理器

量化(Quantization)
  • • 改进 x86 PT2E 量化支持,新增 uint8 操作(逐点乘/加/add_relu 和 batch_norm2d)、qconv1d-relu融合,以及 lowering pass

  • • 支持 CUDA 上torch.fused_moving_avg_obs_fake_quant的布尔张量

发布工程
  • • 在 manylinux 镜像中将 gcc11 升级到 gcc13

  • • 升级到 cmake 3.27.2

ROCm
  • • 允许用户覆盖cpp_extension的默认编译标志

  • • 启用了对稀疏压缩的mm/bmm/addmm操作的支持

Sparse 前端
  • • 为PrivateUse1 扩展启用了稀疏压缩张量的不变性检查

torch.func
  • • 添加了以下算子的批处理规则(batching rules):

    • torch.Tensor.scatter_add_

    • torch.matrix_exp

XPU(Intel GPU 支持)
  • • 在 Intel GPU 上支持:

    • • 安全 softmax

    • • GQA(Grouped Query Attention)

    • fp32因果掩码(causal mask)用于 SDP(Scaled Dot-Product Attention)

    • • 将最大 head dim 从 256 提升到 576

  • • 在内存分析器(Memory Profiler)中为 Intel GPU 添加内存报告功能

  • • 支持切换 Intel GPU 性能分析器的功能

  • • 支持在 Intel GPU 上集成分布式内存跟踪器

  • • 改进 Intel GPU CMake 文件中的错误处理和报告

  • • 在 AOTI 中支持embed_cubinmulti_arch_kernel_binary选项,用于 Intel GPU

  • • 在UserDefineClass中添加通用及 Intel GPU 专用的StreamEvent接口

  • • 在 Intel GPU 上支持int4WOQ GEMM(权重量化 GEMM)

Bug 修复 构建前端(Build Frontend)
  • • 支持使用 CMake-4.x 进行构建)

  • • 修复在 gcc-12+ 下 fbgemm 的构建问题

  • • 在 Windows 上添加/permissive-标志以强制构建符合 C++ 标准

组合性(Composability)
  • • 修复自定义算子返回 1 元素 tuple 时的支持问题

  • • 避免在标量输入的torch.norm中发生溢出

CPU (x86)
  • • 修复log_softmax降精度 FP 内核中明显的复制粘贴错误

CUDA
  • • 修复广播情况下确定性索引的问题

  • • 修复在使用 cuBLASLt 时torch.backends.cuda.matmul.allow_fp16_accumulation崩溃问题

  • • 在 Blackwell 上启用 AsyncMM

  • • 修复torch.cuda.MemPool在多线程用例中的问题

  • • 修复在layer_norm中对默认构造的 gamma / beta 调用sum()的问题

  • • 为分组 GEMM 负偏移量或 K=0 情况报错,避免挂起

  • • 在 mempool 上下文中empty_cache不再报错

分布式(Distributed)

c10d

  • • 修复barrier产生额外 CUDA 上下文的问题

  • • 修复在可能情况下优先使用组内 rank 而不是全局 rank 的逻辑

  • • 修复all_to_all的 ET trace 收集问题

  • • 禁用合并 col 时的开始事件记录并改进性能分析标题

  • • 修复 TCP store 中的连接重置问题

  • • 修复new_subgroups()中未使用的 group 输入参数问题

  • • 修复使用端口 0 时的 TCP 初始化问题

  • • 使用向量暂时保存 future 对象引用,以避免在 Flight Recorder 内部阻塞

分布式检查点(DCP)

  • • 修复broadcast_object工具函数中使用全局协调器 rank 的问题

分布式数据并行(DDP)

  • • 修复 DDPOptimizer 在静态张量索引下的问题

DTensor

  • • 修复多线程下的local_map

  • • 修复redistributenew_local_tensor为 None 的情况

  • • 修复用 rich 可视化 1D 张量的错误

流水线并行(Pipeline Parallelism)

  • • 通过提前释放输出内存优化内存使用

RPC

  • • 在无 TensorPipe 编译时仍允许 import torch

分片张量(ShardedTensor)

  • • 修复在某些 rank 的本地张量为空时分片张量的聚合问题

张量并行(TensorParallel)

  • • 将异步 TP 适用性断言改回静默跳过

torch.compile

Dynamo

  • • 修复了编译自动求导(Compiled Autograd)初始 trace 中的静默错误

  • • 修复包括 einops、dict(mapping_proxy)、FlexAttention HOP 在内的多种 tracing 错误

  • • 修复检查点与卸载中节省内存的 unpack hook 语义

  • • 修复 dataclass 默认值和lru_cache方法的来源问题

  • • 修复传入无效 TORCH_LOGS 参数时的刷屏错误

Inductor

  • • 支持 AMD Triton 配置中的特殊 kwargs

  • • 修复在多个 Python 运行时时的 minifier

  • • 修复 int8 GEMM 补偿 epilogue

torch.export

  • • 修复以下算子的追踪:aten.is_nonzerotorch.bincount()aten.div、切片()、attn_maskaten.to、标量张量构造

  • • 修复dynamic_shapes在 kwargs 下的规范问题

  • • 修复 unflattener 中的输入错误

  • • 修复functools.partial和高阶算子的非严格跟踪

  • • 修复None输入、math 模块、call_torchbind、枚举类型的序列化/反序列化问题

  • • 修复run_decompositionsstate_dict被修改的问题

  • • 修复子类访问自定义算子错误

Ahead-Of-Time Inductor (AOTI)

  • • 修复 AOTI 的update_constant_buffer问题

  • • 修复model_package_loader中的内存泄漏

  • • 当权重不存在时不在 AOTIModel 中分配

  • • 修复常量折叠(ConstantFolding)的状态

  • • 修复可选张量返回值的索引偏移问题

  • • 修复 float8 min/max 打印问题

线性代数前端(Linear Algebra Frontend)
  • • 修复 LAPACK 返回工作区大小为浮点数的兼容问题

  • • 修复dotgemv的累积类型

  • • 修复torch.lobpcg计算结果与scipynumpy.linalg.eig一致性问题

  • • 修复 ReducedPrecisionGemV 中 32 位索引溢出

MPS
  • • 修复多种算子支持问题,包括:

    • • 输入元素 > 2**32 的一元/二元算子

    • • 不同 dtype 的二元算子

    • • 复数标量输入

    • • Cholesky 分解

    • floor_divide类型提升

    • • 大输入的 index_kernel

    • • 复数输入下的lerp

    • logit对半精度/bfloat16 输入

    • • SDPA 内存泄漏

    • torch.special.entr

    • tri[ul]

    • • N>1024 时的矩阵求逆

    • • 非连续条件下的where

torch.nn
  • • 修复nn.LazyLinearload_state_dict行为

ONNX
  • • 修复 ONNX 程序可调用对象中的 bfloat16 支持

  • • 在 IR TorchTensor 中产生正确的 bf16/f8 dtype

  • • 在回退时保留所有旧版导出器参数

  • • 修复 SDPA 的 4D 张量转换

优化器(Optimizer)
  • • 修复当last_epoch > -1lr_scheduler意外调用step()的问题

  • • 修复CosineAnnealingWarmRestartsT_cur重置问题

性能分析器(Profiler)
  • • 修复 Python tracer 中空 C 调用队列

  • • 删除 Python tracer 中 Python 上下文的decref

  • • 在 CUPTI Range Profiler 模式下启用所有已配置的活动

Python 前端(Python Frontend)
  • • 修复在将 Numpy 字符串张量转换时出现的段错误

  • • 为空张量列表添加检查

  • • 修复MixtureSameFamily分布的采样验证

  • • 修复多次创建WishartUniform分布会修改第一个分布约束的错误

  • • 正确导出torch::utils::tensor_to_numpy符号

  • • 修复torch.[con]cat[enate]在空输入时的崩溃

  • • 统一torch.tensortorch.ops.aten.scalar_tensor的行为

版本发布工程(Release Engineering)
  • • 发布源码包时检出可选子模块

  • • 修复 macOS 在 Python 3.12+ 中的多进程挂起问题

  • • 修复在 MSVC 中使用模块的静态函数问题

  • • 修复由 VS2022 导致的 AVX512 非法指令问题

ROCm
  • • 修复在新编译器下启用 opportunistic fastatomics 的构建错误

可调算子(TunableOp)
  • • 增加更多 TF32 支持

  • • 修复 ScaledGEMM 的离线调优问题

  • • 修复按行的 ScaledGEMM

  • • 支持 ROCm 的离线调优中使用子矩阵

Vulkan
  • • 修复 Mac 上torch.is_vulkan_available()的检测

XPU
  • • 修复当 offset > 0 时 matmul 的精度问题

  • • 修复torch.xpu.is_bf16_supported正确报告 Intel GPU 支持情况

  • • 修复 SYCL C++ 扩展中的 AOT 编译问题

性能优化 Autograd(自动求导)
  • • 改进了 autograd 流的同步性能

CPU(AArch64)
  • • 使用更高效的定义计算 ELU(0)

CUDA
  • • 提升了catindex_select的性能

Dataloader 前端
  • • 在SubsetRandomSampler中通过迭代列表而不是张量来减少内存使用

torch.compile Inductor
  • • 提高了 GEMM 的性能

  • • 增加了配置选项cpp.use_small_dequant_buffer,以便在 WOQ int4 GEMM 中使用较小的反量化缓冲区

  • • 支持对自定义算子进行图分区

  • • 优化了 CPU 上并行归约的启发式策略

torch.export
  • • 缓存未展开的图模块

JIT(即时编译)
  • • 改进了大型计算图的无用代码消除(DCE)编译时间

线性代数前端
  • • 为torch.dot在 float16/bfloat16 类型下引入了快速路径

MPS(Metal Performance Shaders)
  • • 提升了 LayerNorm、mm / bmm、sum / prod 归约、算术运算、二元内核、SDPA、linear 以及cumsum/cumprod的性能

Python 前端
  • • 优化了 SVE 嵌入的性能

  • • 提升了torch.tensordot在缩约为标量时的性能

ROCm
  • • 提升了 softmax、NLLLoss、就地加法求和、最大池化反向 / 归约(NHWC 格式输入)、最大池化、多维归约以及非向量化逐元素内核的性能

  • • 提升 MI250X 上 scatter add 的性能

  • • 将向量化逐元素内核扩展到更多异构张量类型

  • • 使用 HipSparseLT 进一步加速半结构化(如 2:4)稀疏计算

稀疏前端
  • • 当从外部存储加载稀疏张量时,跳过稀疏张量的不变性验证

XPU(Intel GPU)
  • • 为 oneDNN 卷积启用后处理融合

  • • 通过消除无意义 API 调用减少 Intel GPU 的主机端开销

  • • 为 Intel GPU 优化 INT4 WOQ GEMM,引入缓存机制进一步减少 oneDNN 集成开销

  • • 改进在addmmbaddmm中标量张量的处理,降低 Intel GPU 上 oneDNN 集成的额外开销

文档(Documentation) Autograd
  • • 在关于扩展 autograd 的说明中,增加了更多细节,解释了ctx.save_for_backward为什么重要

  • • 更新了torch.autograd.graph.saved_tensors_hooks的文档,避免引用循环(refcycle)

  • • 更新了torch.amintorch.amax的梯度行为说明

CUDA
  • • 修复了文档中已弃用的 AMP API

  • • 在正确的模块中记录了设备内存 API

  • • 添加了关于非 PyTorch CUDA 内存分配及如何查询的方法文档

分布式(Distributed) c10d
  • • 记录了对象集合(object collectives)的限制

  • • 更新了NCCLConfig文档,增加了QOS变量

  • • 记录了get_default_backend_for_device

FullyShardedDataParallel2 (FSDP2)
  • • 更新了ignored_params的文档字符串并增加了单元测试

  • • 添加了指向torchtitan的参考

  • • 在world size = 1时添加了关于梯度结果不正确的警告

torch.export
  • • 添加了溯源(provenance)跟踪的迷你教程

  • • 更新了DimsExportGraphSignature的文档

线性代数前端(Linear Algebra Frontend)
  • • 解决了文档中关于torch.linalg.norm()ord参数值为+2-2的歧义

torch.nn
  • • 改进了关于Transformer 相关层、nn.RNN、nn.functional 损失函数、interpolate饱和类型转换行为、ConvTranspose2d 的stride/output_size参数以及register_full_backward_hook的文档

  • • 修正了nn.Sequentialnn.LazyModuleMixin的示例

  • • 在nn.modules.paddingAvgPoolND中记录了padding 大小的限制

ONNX
  • • 将.rst文档文件转换为Markdown

  • • 改进了ONNX 符号操作(symbolic ops)的文档字符串

  • • 为注意力(attention)操作的符号函数添加了注释

  • • 添加了ONNX Dynamo 元数据文档

优化器(Optimizer)
  • • 添加了用于生成学习率调度器(LRScheduler)曲线的脚本

  • • 在优化器的capturable参数文档中加入了其他加速器的信息

  • • 更新了SGD的文档,使其与实现一致,并说明 SGD 第一步会跳过dampening

  • • 修正了CosineAnnealingLR文档,使其准确反映递归学习率调度

  • • 修正了Adafactor文档中作者引用错误

  • • 添加了关于在lr_scheduler中使用load_state_dict时调用顺序的提示

Python 前端(Python Frontend)
  • • 使torch.Librarykind无默认值,以与代码保持一致

  • • 添加了 32 位复数类型(complex)的dtype说明

  • • 明确了当整数 dtype 与requires_grad=True一起使用tensor.to()中的行为

  • • 优化了cdist参数描述

  • • 更新了序列化(serialization)文档

  • • 修复示例中的Example:显示为Example::错误

  • • 在文档中指出将 inf 转换为 int 是未定义行为

  • • 更新了as_strided()的文档

  • • 修复keepdim参数的可选性描述

  • • 明确torch.trapezoidxdx参数互斥

  • • 记录了GEMM 运算的 out_dtype 参数

  • • 修正了torch.min()torch.max()torch.all()torch.any()的基本说明

  • • 添加了torch.triu_indicestorch.tril_indices的 dtype 描述

  • • 优化了torch.equal的描述

量化(Quantization)
  • • 修正了prepare_qat_fx文档中get_default_qat_qconfig错误

发布工程(Release Engineering)
  • • 迁移到新主题

XPU
  • • 改进了Intel GPU 入门文档中的硬件要求与注意事项

Developers(开发者更新) Distributed(分布式)
  • • 为uniqueID的广播和全收集(allgather)添加了参数记录功能

  • • 为PGNCCL增加了日志配置和更多日志内容,例如nccl_version以及线程名称/ID,以便飞行记录(flight record)

  • • 在为DumpPipe解除链接并创建命名管道时,暴露错误类型

  • • 改进了tcpstore远程关闭时的日志

  • • 在new_subgroups()中,当世界大小不可整除时增强错误日志记录

  • • 为所有 NCCL 集合(collectives)添加了完成时的耗时日志记录器

  • • 更新了get_backend()错误信息,增加更多细节

FullyShardedDataParallel (FSDP1)
  • • 调试FlatParamHandle时打印完整限定名称(FQN)

FullyShardedDataParallel2 (FSDP2)
  • • 添加 FSDP2 日志记录

RPC
  • • 正确地将rpc_init中抛出的异常传递给 CPython

torchelastic
  • • 添加 torch elastic workers 启动的日志记录

  • • 将事件日志处理器传递给函数调用记录器

  • • 为torch.distributed.run添加选项,用于提供事件日志的存储位置

torch.export
  • • 添加TracingContext

  • • Monkeypatch 模拟模式(fake mode),在自定义无效操作时报错

  • • 修复torch.export文档中的preserve_module_call_signature描述

  • • 改进反序列化自定义 triton 运算符时的错误信息

  • • 改进lift_constants_pass的类型注解

  • • 修复detect_attr_assignment中的 bug

Ahead-Of-Time Inductor (AOTI)
  • • 为 Intel GPU 重构 AOTInductor 运行时 API

  • • 改进稳定库 API

  • • 添加基础 shim 和stable::Tensor is_contiguousAPI

FX
  • • 当块模式(block mode)中没有差异时,优雅地退出 minimizer

Optimizer
  • • 改进优化器子类的装饰器类型

  • • 优化lr_scheduler.py中的类型注解

  • • 修复step()默认值的类型提示

Release Engineering(发布工程)
  • • 在 CI/CD 中添加对CUDA 12.9的支持

  • • 在 CI/CD 中添加对ROCm 6.4的支持

  • • 将 CI 从 Ubuntu 20.04 镜像迁移至 Ubuntu 22.04 和 24.04

  • • 将 CI 迁移至CUDA 12.8

  • • 在 CI 中启用MI300测试

  • • 在 CI 中启用H100测试

  • • 启用 Windows Arm64 的 CD(持续交付)

  • • 在 CI/CD 中启用二进制 Docker 构建测试

  • • 添加冒烟测试(smoke test)以验证 PyPI 包中的 NCCL 和 cuDNN 版本

  • • 改进 macOS 上的基准测试与性能测试

  • • 在 Mac 测试中使用setup-python

  • • 在 CI/CD 中移除对CUDA 11.812.4的支持

  • • 在 CI/CD 中移除对 Anaconda 的支持

总结

PyTorch 2.8.0 在推理性能、编译优化和分布式训练等方面带来了多项重要更新。开发者需注意部分向后不兼容的变更,并及时调整代码逻辑。建议在升级前充分测试现有代码,确保兼容性和稳定性。

我们相信人工智能为普通人提供了一种“增强工具”,并致力于分享全方位的AI知识。在这里,您可以找到最新的AI科普文章、工具评测、提升效率的秘籍以及行业洞察。 欢迎关注“福大大架构师每日一题”,发消息可获得面试资料,让AI助力您的未来发展。