| 扩容类型 | 说明 |
|---|---|
| Scale Up | 单机多卡(1 台机器 8×GPU) |
| Scale Out | 多机多卡(多台机器 × 多 GPU) |
| 数据扩容 | 更大 batch / 更多数据 |
| 模型扩容 | 更大模型(需模型并行) |
model = nn.DataParallel(model)❌ 缺点:
torch.nn.parallel.DistributedDataParallel✅ 支持:
torch.distributed.fsdp.FullyShardedDataParallel✅ 特点:
✅ 适合:
import torch.distributed as dist
dist.init_process_group(
backend="nccl", # GPU 用 nccl
init_method="env://"
)torchrun --nproc_per_node=8 train.py# 节点 0
torchrun --nnodes=2 --node_rank=0 \
--nproc_per_node=8 --master_addr=192.168.1.1 \
--master_port=29500 train.py
# 节点 1
torchrun --nnodes=2 --node_rank=1 \
--nproc_per_node=8 --master_addr=192.168.1.1 \
--master_port=29500 train.pymodel = model.to(local_rank)
model = DDP(model, device_ids=[local_rank])sampler = DistributedSampler(dataset)
loader = DataLoader(dataset, sampler=sampler)backend="nccl"gradient_as_bucket_view=Truestatic_graph=True(可选)loss = loss / accum_steps
loss.backward()
if step % accum_steps == 0:
optimizer.step()rank == 0 写torch.save(model.module.state_dict())✅ 网络互通(SSH / 防火墙)
✅ NCCL 环境变量
export NCCL_SOCKET_IFNAME=eth0
export NCCL_IB_DISABLE=0✅ 共享存储(NFS / S3 / HDFS)
| 场景 | 建议 |
|---|---|
| 模型 < 单卡显存 | DDP |
| 模型 > 单卡显存 | FSDP |
| 超大规模 LLM | FSDP / 3D Parallel |
PyTorch 扩容 = DDP/FSDP + torchrun + DistributedSampler + 网络与显存优化
如果你愿意,可以告诉我:
我可以直接给你可运行的模板代码。