首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >PyTorch v2.8.0 正式发布:量化推理、编译优化与分布式检查点等多项重大更新

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

作者头像
福大大架构师每日一题
发布2025-12-18 11:32:55
发布2025-12-18 11:32:55
560
举报

近日,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:

代码语言:javascript
复制
try:
    torch.nn.Hardshrink()(torch.randint(0, 5, (10,)))
except RuntimeError:
    ...

在 2.8.0:

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

示例:

代码语言:javascript
复制
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 版本 报错:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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:

代码语言:javascript
复制
# 会报 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,请使用:
代码语言:javascript
复制
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 符号算子。

示例

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-09-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 福大大架构师每日一题 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 亮点功能
  • 向后不兼容的变更(Backwards Incompatible Changes)
    • CUDA 支持
    • Python 前端
    • torch.compile
    • torch.export
    • ONNX
    • 构建前端(Build Frontend)
  • 弃用功能(Deprecations)
    • 1. MacOS Ventura 的 MPS 支持将在 2.9 中移除
    • 2. torch.ao.quantization 已弃用,将在 2.10 中移除
      • Eager 模式量化
      • FX 图模式量化
    • 3. torch.onnx.export 的 dynamo=False(当前默认)选项已弃用
  • 新功能(New Features)
    • CUDA
    • torch.compile
      • Dynamo
      • Inductor
    • torch.export
    • Ahead-Of-Time Inductor(AOTI,提前编译版 Inductor)
    • MPS(Apple GPU 后端)
    • ONNX
    • Python 前端
    • 量化(Quantization)
    • XPU(Intel GPU/加速器)
  • 改进内容
    • 构建前端(Build Frontend)
    • 可组合性(Composability)
    • C++ 前端(C++ Frontend)
    • CUDA
    • cuDNN
    • 分布式(Distributed)
      • c10d
      • DeviceMesh
      • DDP(DistributedDataParallel)
      • DSD(DistributedStateDict)
      • DTensor
      • FSDP2(Fully Sharded Data Parallel 2)
      • 管道并行(Pipeline Parallelism)
      • 分片张量(ShardedTensor)
      • 张量并行(TensorParallel)
      • torchelastic
    • torch.compile
      • Inductor
      • torch.export
      • Ahead-Of-Time Inductor (AOTI)
      • FX
      • 线性代数前端
      • MPS (Apple Metal 加速)
      • 嵌套张量(Nested Tensor, NJT)
      • torch.nn
      • ONNX
      • 优化器
      • 性能分析(Profiler)
      • Python 前端
      • 量化(Quantization)
      • 发布工程
      • ROCm
      • Sparse 前端
      • torch.func
      • XPU(Intel GPU 支持)
  • Bug 修复
    • 构建前端(Build Frontend)
    • 组合性(Composability)
    • CPU (x86)
    • CUDA
    • 分布式(Distributed)
    • torch.compile
    • 线性代数前端(Linear Algebra Frontend)
    • MPS
    • torch.nn
    • ONNX
    • 优化器(Optimizer)
    • 性能分析器(Profiler)
    • Python 前端(Python Frontend)
    • 版本发布工程(Release Engineering)
    • ROCm
    • 可调算子(TunableOp)
    • Vulkan
    • XPU
  • 性能优化
    • Autograd(自动求导)
    • CPU(AArch64)
    • CUDA
    • Dataloader 前端
    • torch.compile
      • Inductor
    • torch.export
    • JIT(即时编译)
    • 线性代数前端
    • MPS(Metal Performance Shaders)
    • Python 前端
    • ROCm
    • 稀疏前端
    • XPU(Intel GPU)
  • 文档(Documentation)
    • Autograd
    • CUDA
    • 分布式(Distributed)
      • c10d
      • FullyShardedDataParallel2 (FSDP2)
    • torch.export
    • 线性代数前端(Linear Algebra Frontend)
    • torch.nn
    • ONNX
    • 优化器(Optimizer)
    • Python 前端(Python Frontend)
    • 量化(Quantization)
    • 发布工程(Release Engineering)
    • XPU
  • Developers(开发者更新)
    • Distributed(分布式)
    • FullyShardedDataParallel (FSDP1)
    • FullyShardedDataParallel2 (FSDP2)
    • RPC
    • torchelastic
    • torch.export
    • Ahead-Of-Time Inductor (AOTI)
    • FX
    • Optimizer
    • Release Engineering(发布工程)
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档