训练框架 = 并行策略 + 显存优化 + 可观测性的组合。PyTorch 原生两条路: DDP(数据并行,每卡持全量模型副本,反向后对梯度做一次 All-Reduce,等价 ZeRO-0——只解决算力扩展、无显存收益);FSDP(Fully Sharded Data Parallel,官方实现的 ZeRO-3 机制): 每个权重张量按 rank 分片,前向时 All-Gather 恢复本层完整参数、用后即弃,反向时对梯度 Reduce-Scatter 得到分片,优化器状态随分片天然分布——每卡显存
16Ψ/Nd,通信量约 DDP 的 1.5 倍(3Φ vs 2Φ);按层分片 + 参数预取把通信藏进计算,近线性扩展。DeepSpeed 提供 ZeRO-1/2/3 + CPU/NVMe Offload,机制与 FSDP 等价: 单机多卡、少写代码选 FSDP;跨机、超大规模、需要 Offload 或既有生态选 DeepSpeed。Profiling 瓶颈定位(torch.profiler + Chrome trace): 把单步时间拆成四块——① 计算(CUDA kernel 耗时与 SM 占用率,小 kernel 过多 → 算子融合/减少同步);② 通信(NCCL 时间占比,梯度 All-Reduce 是否与反向重叠,未重叠 → 调 bucket 大小/开异步);③ IO(DataLoader worker 是否打满、磁盘/网络是否拖后腿,调 worker 数与 prefetch_factor);④ 空闲(GPU 空转,同步点过多或单卡串行)。排查顺序: 先看 CUDA time 占比,再按 forward/backward/optimizer 拆,最后定位到具体 kernel 或通信原语。