RuntimeError: Address already in use原因:MASTER_PORT 被占用
✅ 解决:
export MASTER_PORT=29501或
dist.init_process_group(
backend="nccl",
init_method="tcp://localhost:29501",
rank=rank,
world_size=world_size
)ValueError: Error initializing torch.distributed原因:
init_process_group 调用了两次backend 不支持(CPU 用 gloo,GPU 用 nccl)✅ 解决:
backend = "nccl" if torch.cuda.is_available() else "gloo"NCCL Error: unhandled system error常见原因:
✅ 排查:
nvidia-smi
nvidia-smi topo -m✅ 解决:
export NCCL_DEBUG=INFO
export NCCL_P2P_DISABLE=1CUDA error: invalid device ordinal原因:
local_rank 没正确传入✅ 正确写法:
torch.cuda.set_device(local_rank)
model = model.to(local_rank)ValueError: too many values to unpack原因:launch 参数没传 local_rank
✅ 正确启动:
torchrun --nproc_per_node=4 train.py或:
python -m torch.distributed.launch --nproc_per_node=4 train.py✅ 代码中:
local_rank = int(os.environ["LOCAL_RANK"])RuntimeError: Expected to have finished reduction in the prior iteration原因:
loss.backward() 前模型不是 DDP✅ 解决:
model = DistributedDataParallel(model, device_ids=[local_rank])并确认:
loss = loss.mean()
loss.backward()DataLoader worker error原因:
num_workers > 0 + fork✅ 解决:
DataLoader(..., num_workers=4, persistent_workers=True)if __name__ == "__main__": 中启动KeyError: MASTER_ADDR / MASTER_PORT原因:手动启动没设环境变量
✅ 设置:
export MASTER_ADDR=127.0.0.1
export MASTER_PORT=29500训练前请确认:
torchrun 或 launchinit_process_group 只调用一次nccl,CPU 用 gloolocal_rank 来自环境变量DDP 包裹你可以贴出:
我可以直接告诉你是哪一行导致的,以及怎么改。