verl Megatron 引擎如何启用 Dynamic Context Parallelism 并配置 per-rank 序列上限?

发布时间:2026/9/14 3:31:29
verl Megatron 引擎如何启用 Dynamic Context Parallelism 并配置 per-rank 序列上限? verl Megatron 引擎如何启用 Dynamic Context Parallelism 并配置 per-rank 序列上限【免费下载链接】verlverl/HybridFlow: A Flexible and Efficient RL Post-Training Framework项目地址: https://gitcode.com/GitHub_Trending/ve/verl在 verl 的 Megatron 引擎上做长序列 RL 训练时固定 CPcontext parallel拓扑会为整个 mini-batch 使用同一个 CP size短样本也要被切分到相同的组里。Dynamic Context ParallelismDCP让 Megatron 引擎为每个 packed micro-batch 选择 CP size底层走 Megatron-Core 的 sequence-length-aware 调度器DefaultDynamicCPScheduler替换掉 verl 此前一个 mini-batch 一个 CP size的固定路径。本文的任务是在已有静态 CP 训练任务上开启 DCP并按文档规则配置 per-rank 序列上限max_seqlen_per_dp_cp_rank最后用文档给出的对照方法确认两种模式处理的是相同工作量。先确认环境满足 DCP 的前置条件DCP 的适用条件在 docs/advance/dynamic_context_parallel.rst 中明确列出逐项核对后再动手Megatron-Core 构建必须包含 NVIDIA/Megatron-LM PR #5154commitd2e7ec5b。这是硬性版本要求旧版 Megatron-Core 不具备该调度器。仅支持纯文本语言模型且输入为 remove-padding/THD 格式。DPxCP world sizeDP * CP必须是不少于 2 的偶数。Megatron-Core 会按需创建 2 的幂子组和完整 DPxCP 组因此非 2 的幂布局也能跑不会留下空闲 rank。融合 linear cross entropy 要求 temperature 为标量或在 micro-batch 内一致如果存在非均匀的 per-sample temperature需要设置use_fused_kernelsFalse。Router replay 的 R2、R3 模式要求moe_router_fusionFalse。fused router 路径会绕过 Megatron-Core 的 replay hook其余融合 kernel包括 fused linear cross entropy不受影响。文档同时列出了当前不支持的组合命中任意一项就先换方案FP8 训练多模态模型或 value 模型蒸馏distillation虚拟流水线并行virtual pipeline parallelism。开启 DCP只改引擎配置保留静态 CP 拓扑启用方式是保留原有静态 CP 拓扑并在 Megatron 引擎配置上打开开关。文档给出的配置示例静态 CP4、packed-sequence 预算 16,384 tokenactor_rollout_ref.actor.megatron.context_parallel_size4 \ actor_rollout_ref.actor.megatron.dynamic_context_parallelTrue \ actor_rollout_ref.actor.megatron.max_seqlen_per_dp_cp_rank4096这三行参数对应 verl/trainer/config/engine/megatron.yaml 中的字段dynamic_context_parallel默认值为Falsemax_seqlen_per_dp_cp_rank默认值为null注释写明dynamic_context_parallelTrue 时必须为正整数。配置校验代码见 verl/workers/config/engine.py开启 DCP 但max_seqlen_per_dp_cp_rank不是正整数时会直接报错max_seqlen_per_dp_cp_rank must be a positive integer when dynamic_context_parallel is enabled。如果任务配置里漏配了这个上限启动阶段就能看到这个错误而不是训练中途才暴露。如果 reference model 也走 Megatron 引擎需要对它应用同样的设置verl/trainer/config/ref/megatron_ref.yaml 中这两项通过oc.select读取 actor 侧的同名配置保持 actor 与 reference 的 DCP 状态和上限一致。如何计算 per-rank 序列上限max_seqlen_per_dp_cp_rank是调度器的 per-rank packing 上限。文档给出的推导规则从静态跑的 packed-sequence 预算除以该静态跑的 CP size 得到上限不要把它设成静态跑的总 packed-sequence 预算。文档示例CP4 16,384 token 预算上限为16384 / 4 4096。在使用 verl dynamic-batch 配置时静态 packed-sequence 预算是data.max_token_len_per_gpu * context_parallel_size因此 DCP 上限通常与data.max_token_len_per_gpu数值相同。两条规则共同意味着切换 DCP 时data.max_token_len_per_gpu和输入样本在静态 CP 跑与 DCP 跑之间保持不变这样两种模式处理的是同一份工作量后续的性能对比才有意义。用对照基准验证 DCP 是否按预期工作文档给出的验证方式是对照基准让静态 CP 跑与 DCP 跑在以下条件上完全一致——同一 checkpoint、同一批 tokenized samples、global batch size、TP/PP/EP/CP 拓扑、per-rank 序列上限、优化器和 recompute 设置唯一变化是dynamic_context_parallel这一个开关。报告指标上排除 warm-up 步同时记录 step time 和 processed tokens 两项让吞吐对比对应相同的工作量。这是文档明确给出的核对口径如果 processed tokens 与静态跑对不上先检查前面的配置项上限推导、输入样本、拓扑是否真的保持一致再谈性能差异。不支持项清单再次核对任务是否命中以下组合命中则 DCP 不可用需要回退到静态 CP 路径FP8 训练多模态或 value 模型蒸馏虚拟流水线并行。另外两个需要显式处理的开关非均匀 per-sample temperature 下设置use_fused_kernelsFalserouter replay R2/R3 下设置moe_router_fusionFalse。其余细节调度器如何分样本、THD forward 输出如何按动态 CP 组 gather、loss 仍走 verl 原生 loss 函数与 Megatron-Core per-token loss callback见 docs/advance/dynamic_context_parallel.rst 的 Implementation 一节。【免费下载链接】verlverl/HybridFlow: A Flexible and Efficient RL Post-Training Framework项目地址: https://gitcode.com/GitHub_Trending/ve/verl创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考