PyTorch v2.8.0 正式发布:量化推理、编译优化与分布式检查点等多项重大更新

#VibeCoding·九月创作之星挑战赛#

在这里插入图片描述

近日,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
    def forward(ctx, inp):
        inp.add_(1)
        ctx.mark_dirty(inp)
        return inp

    @staticmethod
    def backward(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 和动态量化:使用 torchao Eager 模式的 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#2259
    • 快速上手文档:https://docs.pytorch.org/ao/main/quick_start.html#pytorch-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

  • 改进了对 Python set、实现了 __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 上支持 int4 WOQ 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、切片(#150104)、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_contiguous API

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

福大大架构师每日一题

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值