gloo:CPU / 开发调试用,慢nccl:GPU 分布式训练必须用✅ 检查:
dist.init_process_group(backend="nccl")✅ 表现:
all_reduce 时间占比高nvidia-smi dmon 显示 GPU 利用率低✅ 排查:
watch -n 1 nvidia-smi dmon -s uall_reduce✅ 优化:
no_sync()(某些场景)DataParallel ❌(单进程多线程,GIL + 复制模型慢)✅ 正确:
model = DistributedDataParallel(model, device_ids=[local_rank])model.to(local_rank)cuda() 或默认 GPU.item() / .cpu()❌ 错误:
loss = loss.item()✅ 正确:
num_workers=0pin_memory=False✅ 推荐:
DataLoader(
dataset,
batch_size=B,
num_workers=8,
pin_memory=True,
persistent_workers=True
)✅ 优化:
torchvision.transforms 移到 DatasetDALI✅ 经验:
✅ 绑定 CPU:
export OMP_NUM_THREADS=4powersave 模式✅ 检查:
nvidia-smi -q -d CLOCK✅ 使用:
with torch.cuda.amp.autocast():
...torch.log, argmax, index_select 回退print 阻塞✅ 建议:
[ ] backend=nccl
[ ] 使用 DDP 而非 DP
[ ] model.to(local_rank)
[ ] num_workers > 0
[ ] pin_memory=True
[ ] batch size 足够大
[ ] 无频繁 .item()/.cpu()
[ ] 使用 AMP
[ ] 网络是 IB / 高带宽如果你愿意,可以告诉我:
nvidia-smi 或 torch profiler 截图我可以直接帮你定位是哪一类瓶颈。