PyTorch 分布式训练主要用:
import torch.distributed as dist
dist.init_process_group(
backend="nccl",
init_method="tcp://MASTER_IP:29500",
rank=rank,
world_size=world_size
)MASTER_IP:主节点 IPworld_size = 机器数 × 每机GPU数rank 全局唯一# 节点0
torchrun --nnodes=2 --nproc_per_node=8 \
--node_rank=0 --master_addr=192.168.1.1 --master_port=29500 train.py
# 节点1
torchrun --nnodes=2 --nproc_per_node=8 \
--node_rank=1 --master_addr=192.168.1.1 --master_port=29500 train.py--nnodes 和 --node_ranksampler = DistributedSampler(dataset)
loader = DataLoader(dataset, sampler=sampler, batch_size=...)⚠️ 注意:
batch_size 是每卡 batchbatch_size × world_sizefrom torch.distributed.fsdp import FSDP
model = FSDP(model)✅ 扩容 GPU 数 → 显存线性下降
export NCCL_ASYNC_ERROR_HANDLING=1torchrun --nnodes=1:4 --nproc_per_node=8 train.py支持 1~4 节点动态加入
⚠️ 需要:
restart 逻辑| 问题 | 解决 |
|---|---|
| rank 冲突 | 保证全局唯一 |
| 数据重复 | 用 DistributedSampler |
| 显存爆 | 换 FSDP |
| 网络慢 | IB + NCCL |
| 精度掉 | 调整 LR(线性缩放) |
如果你愿意,可以告诉我:
我可以给你一套直接可跑的扩容模板。