用途:解决 Megatron Bridge 训练中的 GPU OOM 与峰值显存过高问题,区分显存碎片与真实容量不足两类原因。
主要能力与用法:
- 首选设置环境变量 export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True,消除分配碎片,零吞吐代价,多数 Slurm 模板已含。
- 启动前用 estimate_training_memory(cfg, num_microbatches=...) 估算最重分片,但不含碎片、CUDA/NCCL 工作区、CUDA graph 缓冲等,需运行时验证。
- 并行度调整:增大 PP 会损失 DP 并约损 6% 吞吐;增大 TP 在 70B 上约损 28%,应作最后手段;分布式优化器约损 1-2%。
- 选择性激活重算(如 recompute_modules=[core_attn]);mlp 重算省约 3GB 但损约 16% 利用率。
- LoRA + 序列并行时设 LoRA(sequence_parallel_input_regather=True),实测省 1.6%-10% 峰值显存,吞吐损 0.34%-6.74%;SP 关闭时无效。
- CPU offload:cfg.model.cpu_offloading = True,仅 PP=1 可用。
限制:expandable_segments 与 --use-nccl-ub 不兼容;配 CUDA graph 需 NCCL_GRAPH_REGISTER=0;CPU offload 在 PP>1 报 ValueError;VPP 主要减气泡而非省显存;输入重收集不覆盖行并行与专家适配器。验证可断言环境变量,并运行 peft 相关 pytest 用例。