用途:在 Megatron Bridge 中验证并使用 CUDA graph,通过一次性捕获 GPU 操作并重放来降低主机端驱动开销。Bridge 支持两种实现:cuda_graph_impl 为 "local" 时用 MCore FullCudaGraphWrapper 包裹整个前向+反向,作用域为 full_iteration;为 "transformer_engine" 时用 TE make_graphed_callables() 逐层捕获,作用域支持 attn、mlp、moe、moe_router、moe_preprocess、mamba。
选择建议:多数训练负载从 TE 分作用域图开始,再在与 eager 相同的 dispatcher、布局和容器上验证重放耗时。密集模型用 attn,可选加 mlp;dropless MoE 用 attn、moe_router、moe_preprocess;VLM 在真实数据路径稳定后再用同样范围。仅当需要全迭代捕获且能满足更严约束时用 local + full_iteration。重计算密集负载中,TE 分作用域图适合与选择性重计算搭配,全量重计算通常需转向 local 全迭代图或不用图。
启用方式:配置 cfg.model.cuda_graph_impl、cuda_graph_scope、cuda_graph_warmup_steps=3,并设置 use_te_rng_tracker 与 rng.te_rng_tracker 为 True。性能测试可运行 scripts/performance/run_script.py,使用 --cuda_graph_impl 与逗号分隔的 --cuda_graph_scope,取值为 none/local/transformer_engine,scope 取 full_iteration、attn、mlp、moe、moe_router、moe_preprocess、mamba;impl 非 none 时自动启用两个 te_rng_tracker 选项。
必需约束:use_te_rng_tracker 必须为 True;full_iteration 仅与 local 搭配,且要求 check_for_nan_in_loss=False;moe 与 moe_router 作用域不可同时使用;张量形状须静态(固定 seq_length、固定 micro_batch_size);token-dropless MoE 只能图化密集模块;使用 expandable_segments:True 时需设 NCCL_GRAPH_REGISTER=0;CPU offloading 不兼容;moe_preprocess 需同时设 moe_router;层级重计算需 full_iteration。
验证:运行相关单元测试与功能测试,确保配置校验通过、两种实现均能完成训练步、日志无 NCCL 错误或非法内存访问。注意捕获成功不等于加速,具体收益依工作负载而定。