Skip to content

Add DSv4-Pro FP4 B200 disaggregated Dynamo vLLM MTP config - #2390

Open
hshrivastava-droid wants to merge 5 commits into
mainfrom
dsv4-fp4-b200-dynamo-vllm-mtp
Open

Add DSv4-Pro FP4 B200 disaggregated Dynamo vLLM MTP config#2390
hshrivastava-droid wants to merge 5 commits into
mainfrom
dsv4-fp4-b200-dynamo-vllm-mtp

Conversation

@hshrivastava-droid

Copy link
Copy Markdown
Collaborator

No description provided.

- New dsv4-fp4-b200-dynamo-vllm-mtp entry for 8k/1k MTP disagg on cluster:b200-dgxc
- Five srt-slurm recipes covering 1P1D through 3P1D topologies
- Pin the DSV4 Dynamo vLLM launch to the srt-slurm main branch
@github-actions

Copy link
Copy Markdown
Contributor

Thanks for the contribution! Please reach out to respective companies' CODEOWNER to fill in the latest PR_REVIEW_CHECKLIST.md before pinging core maintainer on Slack for review. In order for the signoff PR check bot to trigger, you must follow the PR_REVIEW_CHECKLIST.md template correctly, including the phrase As a PR reviewer and CODEOWNER, I have reviewed this and have.

For PR verification, add the full-sweep-fail-fast label (strongly recommended) to this PR — the benchmark sweep only runs on labeled PRs. Use full-sweep-enabled only if you need matrix jobs to keep running past a failure.

PR authors are responsible for ensuring that after merging, all GitHub Action jobs fully pass. A lot of the time, failures are just flakes and simply re-running the failed jobs will fix it. See GitHub's docs on re-running failed jobs


感谢你的贡献!请联系相应公司的 CODEOWNER 填写最新的 PR_REVIEW_CHECKLIST.md,然后再在 Slack 上联系核心维护者进行审阅。为了触发 signoff PR 检查机器人,你必须正确遵循 PR_REVIEW_CHECKLIST.md 模板,包括保留英文语句 As a PR reviewer and CODEOWNER, I have reviewed this and have

如需进行 PR 验证,请为此 PR 添加 full-sweep-fail-fast 标签(强烈推荐)— 基准测试 sweep 仅在带有标签的 PR 上运行。仅当需要矩阵任务在失败后继续运行时才使用 full-sweep-enabled

PR 作者有责任确保合并后所有 GitHub Action 任务完全通过。 很多时候失败只是偶发抖动(flake),重新运行失败的任务即可解决。参见 GitHub 关于重新运行失败任务的文档

@github-actions

Copy link
Copy Markdown
Contributor

@claude claude Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Beyond the inline finding (kv-p2p-transfer mislabeled as mooncake), two other candidates raised during this review were examined and ruled out: the srt-slurm clone for dsv4 dynamo-vllm moving from a pinned branch to --branch main in runners/launch_b200-dgxc.sh — this matches the intentional "pin the DSV4 Dynamo vLLM launch to the srt-slurm main branch" change noted in the perf-changelog entry, though it does affect all existing dsv4+dynamo-vllm configs, not just this one; and the prefill/decode max-model-len mismatch in disagg-b200-1p1d-dep8-tp8-mtp.yaml (9280 vs 16384), which is consistent with the differing prefill/decode roles in this disaggregated recipe.

Extended reasoning...

A real bug was found and is already posted inline (kv-p2p-transfer mislabeled mooncake vs. the actual NixlConnector used by all five recipes), so this PR needs human attention regardless. During this run, two additional candidate issues were raised by finder agents and investigated: (1) the srt-slurm launcher change from a pinned branch/commit checkout to floating on main for dsv4 dynamo-vllm — this turned out to be an intentional, changelog-documented decision ("Pin the DSV4 Dynamo vLLM launch to the srt-slurm main branch"), though worth noting it is a shared launcher change affecting all existing dsv4 dynamo-vllm configs, not scoped to just this new entry; and (2) a prefill (9280) vs decode (16384) max-model-len mismatch in the low-latency tp8 recipe, which is plausible given prefill/decode have different sequence-length responsibilities in a disaggregated setup and matches the pattern of the sibling dep8/dep8 recipes using a single max-model-len. Neither is being flagged as a defect. This note is informational, recording what was already examined so a human reviewer or a future pass doesn't need to re-derive it from scratch.

Comment thread configs/nvidia-master.yaml Outdated
image: vllm/vllm-openai:vllm-x86_64-cu13-0.25.1-7a33ba9
model: deepseek-ai/DeepSeek-V4-Pro
model-prefix: dsv4
runner: cluster:b200-dgxc

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔴 The new dsv4-fp4-b200-dynamo-vllm-mtp entry sets kv-p2p-transfer: mooncake, but all five referenced recipe YAMLs (disagg-b200-*-mtp.yaml) configure kv-transfer-config with kv_connector: NixlConnector for both prefill and decode — every sibling dsv4 dynamo-vllm entry correctly uses nixl. This value is propagated verbatim into the benchmark result JSON as kv_p2p_transfer (via the KV_P2P_TRANSFER env var in generate_sweep_configs.py / process_result.py), so every run from this config will be permanently mislabeled as using Mooncake KV transfer when it actually uses NIXL. Fix is a one-word change: mooncake -> nixl.

Extended reasoning...

The bug: In configs/nvidia-master.yaml, the new dsv4-fp4-b200-dynamo-vllm-mtp entry sets kv-p2p-transfer: mooncake. This is a copy-paste mistake — every one of the five recipe YAMLs it references (disagg-b200-1p1d-dep8-dep8-mtp.yaml, disagg-b200-1p1d-dep8-tp8-mtp.yaml, disagg-b200-1p2d-dep8-dep8-mtp.yaml, disagg-b200-2p1d-dep8-dep8-mtp.yaml, disagg-b200-3p1d-dep8-dep8-mtp.yaml) sets kv-transfer-config: '{"kv_connector": "NixlConnector", ...}' for both the prefill and decode roles, and none of them reference Mooncake anywhere. Every sibling dsv4 dynamo-vllm entry in the same file (e.g. dsv4-fp4-b300-dynamo-vllm, dsv4-fp4-gb300-dynamo-vllm) correctly uses kv-p2p-transfer: nixl to match their identical NixlConnector recipes; mooncake is used elsewhere in the file exclusively by dynamo-sglang entries, confirming this vLLM entry picked up the wrong label.

Why it isn't just cosmetic: kv-p2p-transfer is not inert descriptive text. generate_sweep_configs.py's component_metadata() reads this field and exports it as the KV_P2P_TRANSFER environment variable for the run. utils/process_result.py (and the agentic-path equivalent, process_agentic_result.py) then read that env var and write it verbatim into the benchmark result JSON as data['kv_p2p_transfer'] — this is asserted directly in utils/test_process_result.py. That result JSON is what feeds the perf dashboard/changelog, where cross-connector comparisons (NIXL vs. Mooncake) are made.

Why nothing else catches it: validation.py treats kv_p2p_transfer as a free-form string field (min_length=1) that is only required to be non-null when disagg: true — there is no enum constraint tying it to the actual connector configured in the recipe YAML. So mooncake is accepted as a perfectly valid value even though it doesn't match the recipe, and nothing in the pipeline cross-checks the metadata label against the recipe's real kv_connector.

Step-by-step proof of impact:

  1. This config entry sets kv-p2p-transfer: mooncake at the top level.
  2. generate_sweep_configs.py builds the sweep matrix and calls component_metadata(), which reads kv-p2p-transfer from the config and puts it in the matrix entry that becomes KV_P2P_TRANSFER for the job.
  3. The GitHub Actions workflow passes KV_P2P_TRANSFER=mooncake into the multinode benchmark job's environment.
  4. runners/launch_b200-dgxc.sh runs the recipe YAML unmodified — which sets kv_connector: NixlConnector for prefill and decode — so the run genuinely uses NIXL for KV transfer.
  5. After the run, utils/process_result.py reads KV_P2P_TRANSFER from the environment and writes data['kv_p2p_transfer'] = 'mooncake' into the result JSON.
  6. That JSON is ingested into the perf dashboard/changelog, permanently recording this NIXL-based run as a Mooncake run.

Impact and fix: The actual benchmark execution is unaffected — the connector really used is determined by the recipe YAML's kv-transfer-config, not this field — so the run itself won't fail or produce wrong throughput/latency numbers. But every result published from this config will carry incorrect KV-transfer-backend provenance in the dataset that is the product of this repo, corrupting any cross-connector (NIXL vs. Mooncake) comparison done downstream. The fix is trivial: change kv-p2p-transfer: mooncake to kv-p2p-transfer: nixl at configs/nvidia-master.yaml:5782 to match the recipes and the sibling dsv4 dynamo-vllm entries.

@functionstackx

Copy link
Copy Markdown
Collaborator

sorry @hshrivastava-droid gotta requeue this to pritotize k3

@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

中文:更新评估注入器。
@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Status: No status

Development

Successfully merging this pull request may close these issues.

2 participants