开源pytorch Releases·原文 2026年10月29日

PyTorch 2.15.0发布:重写的NCCL后端成为默认,旧后端仅保留一个版本

PyTorch 2.15.0发布说明列出多项向后不兼容变更,包括重写后的NCCL后端设为默认、FSDP2梯度归约精度行为改变、分布式检查点新增strides导致旧版本无法加载,以及嵌套张量不再默认列入weights_only白名单。

AI解读:最需要先判断的是分布式训练代码能否直接升级。发布说明称,backend="nccl" 现在创建重写后的实现,旧实现只能通过backend="nccl-legacy" 或设置TORCH_DIST_USE_NCCL2=0 临时回退,而这两种回退路径都将在下一个版本移除。

新NCCL后端与旧实现的行为差异不止于名称:通信器在init_process_group()/new_group() 时立即创建并占用GPU显存,每个组绑定一块CUDA设备,张量放在其他GPU上会报错;一个进程使用多块GPU需要改用nccl-legacy。发布说明还称,异步all_gather的work.get_future() 返回值从含单个堆叠张量的列表变为各rank输出列表。

FSDP2用户需要检查MixedPrecisionPolicy的reduce_dtype设置。发布说明称,当reduce_dtype=None时,梯度累积和归约会改用参数自身的grad_dtype(默认原始精度),不再跟随param_dtype;常见情形是fp32参数配bf16计算时,归约从bf16变为fp32,reduce-scatter字节数翻倍。

分布式检查点存在单向兼容限制。发布说明称,2.15 保存的检查点元数据新增strides字段,2.14 及更早版本加载时会抛出CheckpointException,且没有写旧格式的开关;2.15 可以加载 2.14 和 2.15 的检查点。

使用torch.load默认weights_only=True加载嵌套张量的代码会失败。发布说明称,嵌套张量已从默认白名单移除,需要用torch.serialization.safe_globals显式允许,或对可信文件设置weights_only=False。

发布说明列出的功能亮点包括:NCCL后端带挂起时转储的flight recorder;torch.distributed增加NIXL单边传输后端;苹果芯片获得FP8支持和grouped_mm解码快速路径,发布说明称MoE解码达到 1.32–1.34 倍tokens/s;默认wheel使用CUDA 13.2并同时提供CUDA 13.4版本。

PyTorch 2.15.0的发布说明已公布,由GitHub上的pytorch Releases发布、署名soulitzer。说明将重写后的NCCL后端列为默认实现,并把多项向后不兼容变更集中列出。

发布说明称,backend="nccl"(也是init_process_group() 的默认CUDA后端)现在创建新实现;旧实现本次以backend="nccl-legacy" 提供,同时可用TORCH_DIST_USE_NCCL2=0 回退,但两者都将在下一个版本移除。

NCCL新默认后端的行为变化

发布说明列出新旧NCCL后端的多处差异。新实现会在init_process_group()/new_group() 中立即创建通信器,即使某个组未被使用也会分配GPU显存;每个组绑定一块CUDA设备,设备选择取device_id,否则取LOCAL_RANK % torch.cuda.device_count(),并不使用torch.cuda.set_device()。

发布说明称,若张量位于另一块GPU,会报Expected tensor on cuda:X but found tensor on cuda:Y或ProcessGroupNCCL is bound to device cuda:X but an operation was issued on cuda:Y;一个进程使用多块GPU需要nccl-legacy。此外,dist.get_backend_impl(...) 返回新后端类,因此对ProcessGroupNCCL的isinstance检查结果为False,comm_split_count() 等旧方法不再存在。

需要独立点对点通信器时,发布说明建议使用nccl-lazy:集合通信走一个立即创建的通信器,每个send/recv对等端各自拥有延迟创建的通信器和流,从而让发往不同对等端的并发P2P重叠。

  • 异步all_gather的work.get_future() 值现在是各rank输出列表,不再是含一个堆叠张量的列表;发布说明建议直接读取传给all_gather的输出列表。
  • 新实现带有flight recorder,在挂起时转储信息。
  • 旧后端通过backend="nccl-legacy" 或每个rank在创建进程组前设置TORCH_DIST_USE_NCCL2=0 临时恢复。

FSDP2梯度归约精度与检查点兼容

发布说明称,在MixedPrecisionPolicy(reduce_dtype=None) 下,fully_shard现在按参数的grad_dtype(默认是原始dtype)累积和归约梯度,而不是按param_dtype。发布说明把fp32参数配param_dtype=bf16列为常见情形:此前梯度累积和归约在bf16中进行,现在在fp32中进行,reduce-scatter字节数变为 2 倍;bf16参数配param_dtype=fp32的少见情形则相反。

发布说明称,要保留 2.14 行为需显式设置mp_policy.reduce_dtype;在梯度累积(无reduce-scatter)时,未分片参数的 .grad始终保存累积值,可通过model.parameters() 看到,而此前当reduce_dtype与param_dtype不同时 .grad为None。

分布式检查点方面,发布说明称TensorProperties在 .metadata中新增可选strides字段;2.15 保存的检查点无法被 2.14 或更早版本加载,旧版本会抛出CheckpointException并报告too many values to unpack (expected 5),且没有写旧格式的选项。

  • 2.14 可加载 2.15 检查点这一方向不成立;2.15 可加载 2.14 和 2.15 的检查点。
  • 嵌套锯齿张量和跨步嵌套张量不再默认列入torch.load(..., weights_only=True) 白名单,加载会报Unsupported global。
  • 发布说明给出的迁移方式是用torch.serialization.safe_globals显式允许,或对可信文件使用weights_only=False。

其他不兼容变更与平台支持

发布说明称,import torch现在无法在同一进程中重复执行,importlib.reload(torch)、删除sys.modules["torch"] 后重新导入、以及import torch失败后重试都会抛出ImportError;正常导入不受影响,后端扩展在自动加载期间的重入导入仍会命中sys.modules而短路。

通过torch.ops.* 和torch._C._dispatch_call_boxed调用的算子改用PyTorch自己的警告和异常转换,不再使用pybind11的转换,用户自定义的pybind异常转换因此丢失;这些算子的TORCH_WARN警告现在会进入Python warnings模块,在 -W error下会报错。

其他不兼容项包括:选择性激活检查点对带有序副作用的算子默认改为保存输出而非重算(除非策略返回MUST_RECOMPUTE);pipeline_per_direction_p2p更名为pipeline_per_edge_p2p且无别名;C++堆栈符号化默认改用dladdr;CUDA内存快照的mallocWithAddress标记移入新的internal_metadata字段;FunctionEvent.metadata_json被移除;CUPTI监视器后端更名为Cuspy;Dynamo高阶算子默认拒绝输入变异和别名;nested_compile_region的Inductor配置补丁只接受fallback_by_default和max_autotune;torch.compiler.precompile改为模块并需用capture(...) 与load(...)。

  • 发布说明称,在functionalization下,split、split_with_sizes或unbind重新生成的输出改为对基张量的单个slice或select,grad_fn变为SliceBackward0/SelectBackward0,原地操作错误文本随之改变;说明举例称,修改大量split视图的代码编译时间从 32 秒降到 15 秒(128 个视图)。
  • 苹果芯片新增float8_e4m3fn和 _scaled_mm支持,并新增带解码快速路径的grouped_mm,发布说明称MoE解码达到 1.32–1.34 倍tokens/s,同时公开torch.mps.Stream API。
  • 平台支持包括AMD gfx950上的FlyDSL内核、gfx1250(MI450)的Tensor Data Mover支持、ROCm 10.0 wheel、英特尔GPU的SYCL内核编写与多GPU性能分析,以及Python 3.15上的torch.compile;默认wheel为CUDA 13.2,同时提供CUDA 13.4版本。
  • 发布说明称,NVIDIA Blackwell GPU上通过NVGEMM减少并更好地重叠内核启动,4 位(NVFP4)LLM解码更快;FSDP2与流水线获得更细的显存和通信控制,包括对精度敏感参数使用fp32、CUDA图捕获的梯度累积,以及与计算重叠的梯度归约。

信息来源

pytorch Releases原始来源

更多

新闻专题
外观