跳到主要内容
返回时间线
PyTorch来源发表:

PyTorch 2.15把重写的NCCL后端设为默认:集合通信卡住时,每个rank自动落盘现场

核心概要

PyTorch 2.15把2.14中作为可选nccl2预览的重写NCCL后端设为所有nccl进程组的默认,并保留TORCH_DIST_USE_NCCL2=0与nccl-legacy两条回退路径。此前集群规模下单个GPU停滞就可能拖停整个训练,定位原因往往要靠手工复现;新版本加入与后端无关的飞行记录器,集合通信挂起时向磁盘写出事后现场,任一rank超时都会触发所有rank转储。

Source-provided article image: PyTorch 2.15 Release Blog
PyTorch Blog

深度剖析

在NVIDIA硬件上跨多GPU训练时,GPU之间通过NCCL交换数据;PyTorch 2.15中每个使用nccl的作业默认跑在重写的后端上。 PyTorch 2.14只是把从torchcomms移植的重写NCCL后端作为可选的nccl2预览,2.15才让它成为每个nccl进程组的默认。 回退路径保留为TORCH_DIST_USE_NCCL2=0和nccl-legacy后端名;通信器随进程组一起立即创建,重配置可选择收缩/增长快路径(需NCCL 2.29或更新),存活的rank因此跳过完整引导。

为了让这个后端在生产中可调试,一个与后端无关的飞行记录器在集合通信挂起时把事后现场写到磁盘。 此前集群规模下单个停滞的GPU就能让整次训练停住,找原因常常意味着手工复现故障。 看门狗健康状态发布到调试服务器,任一rank超时都会触发每个rank的飞行记录器转储,记录挂起瞬间各rank正在做什么。

同一版本还改动了分布式训练的显存与通信控制:FSDP2允许对精度敏感的参数字段单独保留fp32,流水线并行改为在每次接收前才分配接收缓冲。 FSDP2此前没有这种按参数覆盖精度的入口,流水线并行则按每个微批提前分配接收缓冲。 MoE路由门和归一化权重这类参数可经MixedPrecisionPolicy(param_dtype_override_fn=...)留在fp32,其余部分以bf16训练,每个fully_shard仍只做一次all-gather;完整梯度累积步可被捕获进单个CUDA图。

启示与展望

已展示的范围是PyTorch 2.15发布说明所描述的默认后端切换、回退路径与飞行记录器行为,面向在NVIDIA或ROCm集群上运行分布式训练的工程师;说明未给出吞吐或故障定位时间的对照测量。

飞行记录器被标注为API Unstable,说明未报告它在真实集群故障上的命中率或对训练性能的影响;收缩/增长快路径需要NCCL 2.29或更新版本,ROCm上的重配置容错需要RCCL 2.30.7。