近日,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。
• 在CUDA 12.8 和 12.9构建中,移除了对Maxwell和Pascal架构的支持。
由于二进制体积限制,在 PyTorch 2.8.0 中,已移除对sm50 - sm60 架构的支持(仅限 CUDA 12.8 和 12.9 版本)。
如果需要支持这些架构,请改用CUDA 12.6。
• 当调用算子(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• 对
tensordot的out 版本现在会在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:
# 会报 RuntimeErrortorch.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_configs和rocm.ck_tile_max_profiling_configs•
autotune_fallback_to_aten弃用 → ATen 回退需显式配置•
use_mixed_mm和mixed_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_x与definitely_x接口合并
删除了definitely_true/definitely_false,请改用guard_or_true/guard_or_false。
• 移除了
torch.export.export_for_inference,请使用:
torch.export.export_for_training(...).run_decompositions(...)•
torch.export.export和export_for_training默认strict=False(旧版默认是True)。
如需旧行为,请显式传入strict=True。
•
torch.onnx.export默认 opset 从17升级到18。
如果需要旧行为,请显式指定opset_version=17。• 移除了
JitTraceConvertStrategy支持,当dynamo=True时,不再支持 JIT traced/scripted 模块导出到 ONNX。•
onnxscript>=0.3.1是dynamo=True的必需版本。
• 从
Dispatcher.h中移除了torch/types.h引入
如果 C++ 代码依赖此隐式包含,请升级 torchvision 版本。•DLPack 升级到 1.0,部分枚举值被重命名:
•
kDLGPU→kDLCUDA•
kDLCPUPinned→kDLCUDAHost
• NVTX3 相关 CMake 配置位置变更,使用
USE_SYSTEM_NVTX=1时需显式配置。
•PyTorch 2.8 是最后一个支持在 MacOS Ventura 上使用 GPU 加速的版本。
• 从下一个版本(2.9)开始,需要 MacOS Sonoma(2023 年 9 月发布)或更高版本才能使用MPS 后端。
torch.ao.quantization已弃用,将在 2.10 中移除迁移方式如下:
Eager 模式量化
(torch.ao.quantization.quantize,torch.ao.quantization.quantize_dynamic)
•权重-only 和动态量化:使用
torchaoEager 模式的quantize_。•静态量化:使用
torchao的PT2E 量化。
(torch.ao.quantization.quantize_fx.prepare_fx,torch.ao.quantization.quantize_fx.convert_fx)
• 使用
torchao的PT2E 量化(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-quantization3.
torch.onnx.exportdynamo=False(当前默认)选项已弃用• 从PyTorch 2.9开始,默认值将改为
dynamo=True。• 建议迁移到
dynamo=True选项,这将使torch.export.export成为默认导出路径,取代 TorchScript。
如果需要保留旧行为:
• 显式设置
dynamo=False。• 建议同时尝试
fallback=True选项,这样当dynamo=True出错时,导出器会自动回退到dynamo=False路径。
•在 CUDAGraphs 中支持捕获事件记录与等待(event record & wait)以用于计时。
• 新增对**分层编译(hierarchical compilation)**的支持,通过
nested_compile_region实现。• 允许使用自定义过滤函数
guard_filter_fn来丢弃 guard。• 新增
dont_skip_tracing装饰器,可绕过大多数 Dynamo skipfiles 规则。
• 支持将一个 Dynamo 计算图映射到多个不同的 Inductor 计算图,这些计算图可被独立优化。
• 新增
draft-export:一种新的导出变体,旨在稳定生成计算图,并生成追踪过程中的调试报告。
• 支持TorchBind 对象。
• 新增配置变量
aot_inductor.model_name_for_generated_files,用于指定生成文件的模型名称。
•MPSInductor:支持在 Apple GPU 上运行
torch.compile。
• 新增
draft_export策略,在使用torch.onnx.export获取ExportedProgram时,如果出现数据相关或约束错误,可提供调试信息。• 在
dynamo=True导出路径中,新增对**符号算子(symbolic operators)**的支持。• 新增两个算子:
torch.onnx.ops.symbolic和torch.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 xPython 前端• 新增广义帕累托分布(Generalized Pareto Distribution, GPD)。
• 新增数据类型
torch.float4_e2m1fn_x2。
• 支持 Intel 分布式后端XCCL。
• 支持通过C++ 扩展运行 SYCL 内核。
• 移除了
TORCH_CUDA_ARCH_LIST的过时警告• 将Eigen改为可选构建依赖
• 将 CUTLASS 更新到 3.9.2
• 为自定义算子增强了支持,包括可序列化的算子配置文件和虚拟注册覆盖
• 为
torch::nn::functional::grid_sample添加了 Bicubic 模式
• 为自定义 CUDA 扩展的
load_inline()引入no_implicit_headers模式• 在 SDPA 内存高效注意力后端中支持大批量(large batch)计算
• 修复了 SDPA 内存高效注意力反向传播中的非法索引问题
• 在 sm121(DGX Spark)架构上支持 SDPA 注意力后端
• 为 sm12x(GeForce Blackwell)添加 FP8 行级缩放矩阵乘(row-wise scaled-mm)支持
• 将 cuDNN 前端版本更新至 1.12
• 为 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_scatter和ReduceOp::AVG支持• 在 ProcessGroupNCCL 中添加 FP8 支持
• 在 gloo 中添加 ibverbs 后端,并在支持 GPUDirect 的后端下启用 gloo CUDA
• 改进了设备选择逻辑
• 增加选项允许跳过对未使用参数的 all reduce 操作
• 增加接收数据检查,以避免 DDP reducer 中的段错误
• 将
use_python_reducer从 Python 传递到 C++ reducer
• 支持
write_size中的非张量数据• 在 meta 设备张量时跳过弹出
• 让 StridedShard 支持非均匀切分
• 为
torch.cumsum增加支持• 增加 DTensor 重分布前/后数据类型转换,以支持 SimpleFSDP 混合精度训练
• 为
torch.distributed.tensor.debug.visualize_sharding增加详细支持
• 在 FSDP collective 中添加
PrivateUse1后端支持,并将设备类型传递给 pre forward hook• 添加
set_reshard_after_forward• 允许无梯度的模型参数使用不同的数据类型
• 当
reshard_after_forward=True且为根模型时,保留根未分片• 增加选项强制 FSDP2 始终使用 SUM 规约
• 仅在非 CPU 设备时断言 all_reduce_event
• 为 FSDP2 启用 NCCL 零拷贝(用户缓冲注册)
• 添加调度可视化工具
• 允许在 ZeroBubble 路径中传递未使用的 kwargs
• 添加
get_pipeline_order()支持 Gpipe 和 1F1B
• 支持 0 尺寸 ShardedTensor,并通过 all_gather 重新计算元数据
• 添加
ParallelStyle PrepareModuleInputOutput
• 当 worker 离开时,不关闭 rendezvous
Dynamo
• 改进了对 Python
set、实现了__torch_function__的张量子类,以及namedtuple子类的追踪支持• 消除了Compiled Autograd 在动态形状下的所有重新编译,从而减少编译时间
• 为
torch.compiler.disable添加了reason字段• 移除了顶层
torch命名空间函数中 lru_cache 的警告
• 为CPU 上的 FlexAttention添加了块稀疏(block sparse)支持
• 引入了新的配置选项:
•
aot_inductor.custom_ops_to_c_shims和aot_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 归约在归一化操作中的数值稳定性
• 改进了对内置算子(
min、max、math.pow)的处理• 为
dim hints添加了min/max范围• 允许通过
pytree.register_dataclass注册普通类• 允许将整型输入指定为动态输入
• 内联(inline)
jit.scripted函数到 export 结果中• 改进
graph signature的美化打印
• 支持设备端 TMA
• 在
AOTIModelPackageLoader中添加了num_runners参数
• 更新了代码生成中的比较运算符为
==• 在常量折叠子模块时,将名称映射到操作数索引
• 改进了追踪时的堆栈追踪信息
• 在
normalize_function中支持边缘方言(edge dialect)算子• 修复了
minifier中路径命名问题• 添加了
graph_code_verbose_log用于 FX passes• 提升缓存键图打印的性能
• 在
fx.passes.split_module中添加参数以规范化输入名称
• 为
cross添加了张量重叠检查
• 为大量
torch.special操作(以及index_copy、hardshrink、rsub、col2im、isin)添加了支持• 扩展了以下操作的数据类型支持:
•
index_put支持半精度浮点•
ConvTranspose3D支持 FP32 和复数•
log1p和sigmoid支持 int64
• 以浮点精度计算激活内核
• 修复了嵌套张量字符串表示的连续性问题
• 当模块的完整反向钩子(full backward hook)无输入需要梯度时添加警告
• 为 CPU 添加
weight_norm的 FP16 支持
• 升级 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类型检查
• 支持按需内存快照
• 在可视化器中添加 PT2 编译上下文
• 将 PT2 纳入内存快照
• 添加切换全局/本地注解回调的开关
• 将重载名称传递给 Kineto
• 对未完成的 CPU 事件将持续时间设置为 -1
• 从事件最多的索引开始显示
• 引入
torch.AcceleratorError• 实现
Size.__radd__()• 更新
get_default_device()以支持torch.device上下文管理器
• 改进 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
• 允许用户覆盖
cpp_extension的默认编译标志• 启用了对稀疏压缩的
mm/bmm/addmm操作的支持
• 为PrivateUse1 扩展启用了稀疏压缩张量的不变性检查
• 添加了以下算子的批处理规则(batching rules):
•
torch.Tensor.scatter_add_•
torch.matrix_exp
• 在 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_cubin和multi_arch_kernel_binary选项,用于 Intel GPU• 在
UserDefineClass中添加通用及 Intel GPU 专用的Stream和Event接口• 在 Intel GPU 上支持
int4WOQ GEMM(权重量化 GEMM)
• 支持使用 CMake-4.x 进行构建)
• 修复在 gcc-12+ 下 fbgemm 的构建问题
• 在 Windows 上添加
/permissive-标志以强制构建符合 C++ 标准
• 修复自定义算子返回 1 元素 tuple 时的支持问题
• 避免在标量输入的
torch.norm中发生溢出
• 修复
log_softmax降精度 FP 内核中明显的复制粘贴错误
• 修复广播情况下确定性索引的问题
• 修复在使用 cuBLASLt 时
torch.backends.cuda.matmul.allow_fp16_accumulation崩溃问题• 在 Blackwell 上启用 AsyncMM
• 修复
torch.cuda.MemPool在多线程用例中的问题• 修复在
layer_norm中对默认构造的 gamma / beta 调用sum()的问题• 为分组 GEMM 负偏移量或 K=0 情况报错,避免挂起
• 在 mempool 上下文中
empty_cache不再报错
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• 修复
redistribute中new_local_tensor为 None 的情况• 修复用 rich 可视化 1D 张量的错误
流水线并行(Pipeline Parallelism)
• 通过提前释放输出内存优化内存使用
RPC
• 在无 TensorPipe 编译时仍允许 import torch
分片张量(ShardedTensor)
• 修复在某些 rank 的本地张量为空时分片张量的聚合问题
张量并行(TensorParallel)
• 将异步 TP 适用性断言改回静默跳过
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_nonzero、torch.bincount()、aten.div、切片()、attn_mask、aten.to、标量张量构造• 修复
dynamic_shapes在 kwargs 下的规范问题• 修复 unflattener 中的输入错误
• 修复
functools.partial和高阶算子的非严格跟踪• 修复
None输入、math 模块、call_torchbind、枚举类型的序列化/反序列化问题• 修复
run_decompositions中state_dict被修改的问题• 修复子类访问自定义算子错误
Ahead-Of-Time Inductor (AOTI)
• 修复 AOTI 的
update_constant_buffer问题• 修复
model_package_loader中的内存泄漏• 当权重不存在时不在 AOTIModel 中分配
• 修复常量折叠(ConstantFolding)的状态
• 修复可选张量返回值的索引偏移问题
• 修复 float8 min/max 打印问题
• 修复 LAPACK 返回工作区大小为浮点数的兼容问题
• 修复
dot和gemv的累积类型• 修复
torch.lobpcg计算结果与scipy、numpy.linalg.eig一致性问题• 修复 ReducedPrecisionGemV 中 32 位索引溢出
• 修复多种算子支持问题,包括:
• 输入元素 > 2**32 的一元/二元算子
• 不同 dtype 的二元算子
• 复数标量输入
• Cholesky 分解
•
floor_divide类型提升• 大输入的 index_kernel
• 复数输入下的
lerp•
logit对半精度/bfloat16 输入• SDPA 内存泄漏
•
torch.special.entr•
tri[ul]• N>1024 时的矩阵求逆
• 非连续条件下的
where
• 修复
nn.LazyLinear的load_state_dict行为
• 修复 ONNX 程序可调用对象中的 bfloat16 支持
• 在 IR TorchTensor 中产生正确的 bf16/f8 dtype
• 在回退时保留所有旧版导出器参数
• 修复 SDPA 的 4D 张量转换
• 修复当
last_epoch > -1时lr_scheduler意外调用step()的问题• 修复
CosineAnnealingWarmRestarts中T_cur重置问题
• 修复 Python tracer 中空 C 调用队列
• 删除 Python tracer 中 Python 上下文的
decref• 在 CUPTI Range Profiler 模式下启用所有已配置的活动
• 修复在将 Numpy 字符串张量转换时出现的段错误
• 为空张量列表添加检查
• 修复
MixtureSameFamily分布的采样验证• 修复多次创建
Wishart或Uniform分布会修改第一个分布约束的错误• 正确导出
torch::utils::tensor_to_numpy符号• 修复
torch.[con]cat[enate]在空输入时的崩溃• 统一
torch.tensor和torch.ops.aten.scalar_tensor的行为
• 发布源码包时检出可选子模块
• 修复 macOS 在 Python 3.12+ 中的多进程挂起问题
• 修复在 MSVC 中使用模块的静态函数问题
• 修复由 VS2022 导致的 AVX512 非法指令问题
• 修复在新编译器下启用 opportunistic fastatomics 的构建错误
• 增加更多 TF32 支持
• 修复 ScaledGEMM 的离线调优问题
• 修复按行的 ScaledGEMM
• 支持 ROCm 的离线调优中使用子矩阵
• 修复 Mac 上
torch.is_vulkan_available()的检测
• 修复当 offset > 0 时 matmul 的精度问题
• 修复
torch.xpu.is_bf16_supported正确报告 Intel GPU 支持情况• 修复 SYCL C++ 扩展中的 AOT 编译问题
• 改进了 autograd 流的同步性能
• 使用更高效的定义计算 ELU(0)
• 提升了
cat和index_select的性能
• 在
SubsetRandomSampler中通过迭代列表而不是张量来减少内存使用
• 提高了 GEMM 的性能
• 增加了配置选项
cpp.use_small_dequant_buffer,以便在 WOQ int4 GEMM 中使用较小的反量化缓冲区• 支持对自定义算子进行图分区
• 优化了 CPU 上并行归约的启发式策略
• 缓存未展开的图模块
• 改进了大型计算图的无用代码消除(DCE)编译时间
• 为
torch.dot在 float16/bfloat16 类型下引入了快速路径
• 提升了 LayerNorm、mm / bmm、sum / prod 归约、算术运算、二元内核、SDPA、linear 以及
cumsum/cumprod的性能
• 优化了 SVE 嵌入的性能
• 提升了
torch.tensordot在缩约为标量时的性能
• 提升了 softmax、NLLLoss、就地加法求和、最大池化反向 / 归约(NHWC 格式输入)、最大池化、多维归约以及非向量化逐元素内核的性能
• 提升 MI250X 上 scatter add 的性能
• 将向量化逐元素内核扩展到更多异构张量类型
• 使用 HipSparseLT 进一步加速半结构化(如 2:4)稀疏计算
• 当从外部存储加载稀疏张量时,跳过稀疏张量的不变性验证
• 为 oneDNN 卷积启用后处理融合
• 通过消除无意义 API 调用减少 Intel GPU 的主机端开销
• 为 Intel GPU 优化 INT4 WOQ GEMM,引入缓存机制进一步减少 oneDNN 集成开销
• 改进在
addmm、baddmm中标量张量的处理,降低 Intel GPU 上 oneDNN 集成的额外开销
• 在关于扩展 autograd 的说明中,增加了更多细节,解释了
ctx.save_for_backward为什么重要• 更新了
torch.autograd.graph.saved_tensors_hooks的文档,避免引用循环(refcycle)• 更新了
torch.amin和torch.amax的梯度行为说明
• 修复了文档中已弃用的 AMP API
• 在正确的模块中记录了设备内存 API
• 添加了关于非 PyTorch CUDA 内存分配及如何查询的方法文档
• 记录了对象集合(object collectives)的限制
• 更新了
NCCLConfig文档,增加了QOS变量• 记录了
get_default_backend_for_device
• 更新了
ignored_params的文档字符串并增加了单元测试• 添加了指向torchtitan的参考
• 在world size = 1时添加了关于梯度结果不正确的警告
• 添加了溯源(provenance)跟踪的迷你教程
• 更新了
Dims和ExportGraphSignature的文档
• 解决了文档中关于
torch.linalg.norm()的ord参数值为+2和-2的歧义
• 改进了关于Transformer 相关层、nn.RNN、nn.functional 损失函数、
interpolate饱和类型转换行为、ConvTranspose2d 的stride/output_size参数以及register_full_backward_hook的文档• 修正了
nn.Sequential和nn.LazyModuleMixin的示例• 在
nn.modules.padding和AvgPoolND中记录了padding 大小的限制
• 将
.rst文档文件转换为Markdown• 改进了ONNX 符号操作(symbolic ops)的文档字符串
• 为注意力(attention)操作的符号函数添加了注释
• 添加了ONNX Dynamo 元数据文档
• 添加了用于生成学习率调度器(LRScheduler)曲线的脚本
• 在优化器的
capturable参数文档中加入了其他加速器的信息• 更新了SGD的文档,使其与实现一致,并说明 SGD 第一步会跳过
dampening• 修正了
CosineAnnealingLR文档,使其准确反映递归学习率调度• 修正了
Adafactor文档中作者引用错误• 添加了关于在
lr_scheduler中使用load_state_dict时调用顺序的提示
• 使
torch.Library的kind无默认值,以与代码保持一致• 添加了 32 位复数类型(complex)的
dtype说明• 明确了当整数 dtype 与
requires_grad=True一起使用在tensor.to()中的行为• 优化了
cdist参数描述• 更新了序列化(serialization)文档
• 修复示例中的
Example:显示为Example::错误• 在文档中指出将 inf 转换为 int 是未定义行为
• 更新了
as_strided()的文档• 修复
keepdim参数的可选性描述• 明确
torch.trapezoid中x和dx参数互斥• 记录了GEMM 运算的 out_dtype 参数
• 修正了
torch.min()、torch.max()、torch.all()、torch.any()的基本说明• 添加了
torch.triu_indices、torch.tril_indices的 dtype 描述• 优化了
torch.equal的描述
• 修正了
prepare_qat_fx文档中get_default_qat_qconfig错误
• 迁移到新主题
• 改进了Intel GPU 入门文档中的硬件要求与注意事项
• 为
uniqueID的广播和全收集(allgather)添加了参数记录功能• 为
PGNCCL增加了日志配置和更多日志内容,例如nccl_version以及线程名称/ID,以便飞行记录(flight record)• 在为
DumpPipe解除链接并创建命名管道时,暴露错误类型• 改进了
tcpstore远程关闭时的日志• 在
new_subgroups()中,当世界大小不可整除时增强错误日志记录• 为所有 NCCL 集合(collectives)添加了完成时的耗时日志记录器
• 更新了
get_backend()错误信息,增加更多细节
• 调试
FlatParamHandle时打印完整限定名称(FQN)
• 添加 FSDP2 日志记录
• 正确地将
rpc_init中抛出的异常传递给 CPython
• 添加 torch elastic workers 启动的日志记录
• 将事件日志处理器传递给函数调用记录器
• 为
torch.distributed.run添加选项,用于提供事件日志的存储位置
• 添加
TracingContext• Monkeypatch 模拟模式(fake mode),在自定义无效操作时报错
• 修复
torch.export文档中的preserve_module_call_signature描述• 改进反序列化自定义 triton 运算符时的错误信息
• 改进
lift_constants_pass的类型注解• 修复
detect_attr_assignment中的 bug
• 为 Intel GPU 重构 AOTInductor 运行时 API
• 改进稳定库 API
• 添加基础 shim 和
stable::Tensor is_contiguousAPI
• 当块模式(block mode)中没有差异时,优雅地退出 minimizer
• 改进优化器子类的装饰器类型
• 优化
lr_scheduler.py中的类型注解• 修复
step()默认值的类型提示
• 在 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.8和12.4的支持
• 在 CI/CD 中移除对 Anaconda 的支持
PyTorch 2.8.0 在推理性能、编译优化和分布式训练等方面带来了多项重要更新。开发者需注意部分向后不兼容的变更,并及时调整代码逻辑。建议在升级前充分测试现有代码,确保兼容性和稳定性。
我们相信人工智能为普通人提供了一种“增强工具”,并致力于分享全方位的AI知识。在这里,您可以找到最新的AI科普文章、工具评测、提升效率的秘籍以及行业洞察。 欢迎关注“福大大架构师每日一题”,发消息可获得面试资料,让AI助力您的未来发展。
热门跟贴