torch.distributed.init_process_group("nccl")
model = torch.nn.parallel.DistributedDataParallel(model, device_ids=[local_rank])| 场景 | 推荐方式 |
|---|---|
| 单卡能放下模型 | DDP |
| 模型很大 | FSDP / ZeRO |
| 模型宽但不深 | 模型并行(Pipeline / Tensor) |
| 超大模型 | FSDP + TP + PP |
from torch.distributed.fsdp import FullyShardedDataParallel as FSDPnvidia-smi topo -mDDP(
model,
gradient_as_bucket_view=True,
static_graph=True
)bucket 机制:反向时按层分桶通信.item()DataLoader(
dataset,
batch_size=...,
num_workers=8,
pin_memory=True,
prefetch_factor=4,
persistent_workers=True
)num_workers ≈ GPU 数 × 2~4scaler = torch.cuda.amp.GradScaler()
with torch.cuda.amp.autocast():
output = model(input)torch.compile(model)(PyTorch 2.x)loss = loss / accum_steps
loss.backward()
if step % accum_steps == 0:
optimizer.step()torch.cuda.synchronize()printif rank == 0:
logger.info(...)32 机需仔细调通信
export NCCL_ASYNC_ERROR_HANDLING=1
export TORCH_NCCL_AVOID_RECORD_STREAMS=1
export NCCL_IB_DISABLE=0✅ DDP + AMP + torch.compile + NCCL + 大 batch
✅ FSDP + ZeRO-3 + FlashAttention + StreamingDataset
| 现象 | 可能原因 |
|---|---|
| GPU 利用率低 | DataLoader 慢 |
| 多卡越训越慢 | 频繁同步 |
| 多机加速差 | 网络带宽不足 |
| 显存爆 | 未用 FSDP / 没开 AMP |
如果你愿意,可以告诉我:
我可以直接给你一套定制加速方案 + 示例代码。