Skip to content

Add GB300 DeepSeek-V4.1-Flash Dynamo + vLLM disaggregated AgentX recipes / 新增 GB300 DeepSeek-V4.1-Flash Dynamo + vLLM 分离式 AgentX 配方 - #3941

Open
Juntian777 wants to merge 9 commits into
mainfrom
dsv41flash-gb300-dynamo-vllm-disagg
Open

Juntian777 wants to merge 9 commits into
mainfrom
dsv41flash-gb300-dynamo-vllm-disagg

Conversation

@Juntian777

@Juntian777 Juntian777 commented Oct 12, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Add GB300 DeepSeek-V4.1-Flash AgentX on Dynamo + vLLM: dsv41flash-fp4-gb300-dynamo-vllm-agentic-dspark-agg (TP4, conc 1 and 8) and dsv41flash-fp4-gb300-dynamo-vllm-agentic-dspark-disagg (10P1D, 8P1D, 6P1D, 5P1D; DEP2 prefill, DEP16 decode). Image vllm/vllm-openai:nightly-aarch64-dev-20261012-59e75f4, Dynamo 1.6.0.dev20261010 with native vLLM sidecars and the KV router.

Draft: full sweep and evals pending.

AI model disclosure
  • Model/version: Claude Opus 5.5 (claude-opus-5-5) in Claude Code, including one delegated research agent on the same model.
  • Role: drafted the recipe, master-config entry, changelog entry and PR text, and reviewed existing AgentX P/D submissions for conventions; the author reviewed and validated the changes.
PR checklist and change type

Type of Change

  • Bug fix
  • New feature
  • Configuration change
  • Documentation update
  • Other (please describe)

Checklist

  • I have completed the AI model disclosure and kept it current
  • I have tested my changes locally
  • I have updated documentation if necessary
  • For every change that can affect benchmark performance and every recipe addition or modification, I have appended a new entry to the physical end of inferencex-e2e/perf-changelog.yaml and have not edited historical entries
  • If this PR can affect benchmark performance or adds or modifies a recipe, it carries exactly one primary sweep label (a maintainer applies it on fork PRs): full-sweep-fail-fast (recommended), full-sweep-enabled, or non-canary-full-sweep-enabled. Optional modifiers all-evals, evals-only, and agentx-fast require a primary label; the last two block reuse while applied.
  • Before merging via reuse, an authorized maintainer (OWNER/MEMBER/COLLABORATOR) has commented /use <run_id> (or the legacy /reuse-sweep-run) on this PR. Do this only once there is a final full sweep that is all green with evals passing, since after this comment the primary sweep label will no longer automatically kick off new sweeps. Remove and re-add the primary sweep label to force a new sweep.
中文

新增 GB300 上 DeepSeek-V4.1-Flash 的 Dynamo + vLLM AgentX 配方:dsv41flash-fp4-gb300-dynamo-vllm-agentic-dspark-agg(TP4,conc 1 和 8)与 dsv41flash-fp4-gb300-dynamo-vllm-agentic-dspark-disagg(10P1D、8P1D、6P1D、5P1D;DEP2 prefill,DEP16 decode)。镜像 vllm/vllm-openai:nightly-aarch64-dev-20261012-59e75f4(vLLM fe4df3df),Dynamo 1.6.0.dev20261010,使用原生 vLLM sidecar 与 KV 路由。

草稿:完整 sweep 与评测待运行。

AI 模型使用说明:Claude Code 中的 Claude Opus 5.5(claude-opus-5-5),含一个同模型的委派调研 agent;负责起草配方、master 配置项、changelog 条目和 PR 文本,并调研已有 AgentX P/D 提交的惯例;作者审阅并验证改动。改动类型:新功能。

🤖 Generated with Claude Code

Add 8P1D, 6P1D and 5P1D points (DEP2 prefill, DEP16 decode) behind the Dynamo KV router with native vLLM sidecars.

新增 GB300 DeepSeek-V4.1-Flash Dynamo + vLLM 分离式 AgentX 配方:8P1D、6P1D、5P1D 三个点(DEP2 prefill、DEP16 decode),使用 Dynamo KV 路由与原生 vLLM sidecar。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

Thanks for the contribution!

  • Review: If this PR changes files owned by someone other than a repository admin or @SemiAnalysisAI/core, ask one eligible CODEOWNER to complete the latest PR_REVIEW_CHECKLIST.md before contacting a core maintainer on Slack. Follow the template exactly, including As a PR reviewer and CODEOWNER, I have reviewed this and have, so sign-off verification triggers.
  • PR verification: Sweeps run only when the PR appends an inferencex-e2e/perf-changelog.yaml entry and carries exactly one primary label: full-sweep-fail-fast (strongly recommended; canary plus per-matrix fail-fast), full-sweep-enabled (canary; matrix jobs continue after a failure), or non-canary-full-sweep-enabled (no canary or fail-fast). The modifiers all-evals, evals-only, and agentx-fast require a primary label. On fork PRs, a maintainer applies the label. See sweep labels and reuse.
  • After merging: PR authors must ensure all GitHub Actions jobs pass. Transient failures often pass on rerun; see how to rerun failed jobs.
中文

感谢你的贡献!

  • **审阅:**如果 PR 修改的文件归属于仓库管理员及 @SemiAnalysisAI/core 之外的 CODEOWNER,请先联系一位有资格的 CODEOWNER 填写最新的 PR_REVIEW_CHECKLIST.md,再通过 Slack 联系核心维护者。必须严格遵循模板,并保留 As a PR reviewer and CODEOWNER, I have reviewed this and have,才能触发签核验证。
  • **PR 验证:**只有当 PR 在 inferencex-e2e/perf-changelog.yaml 末尾追加了条目,并且恰好带有一个主标签时,才会运行扫描:full-sweep-fail-fast(强烈推荐;canary 加逐矩阵 fail-fast)、full-sweep-enabled(有 canary;矩阵任务在失败后继续运行)或 non-canary-full-sweep-enabled(无 canary,也无 fail-fast)。修饰标签 all-evals、evals-only 和 agentx-fast 必须与主标签一起使用。fork PR 的标签由维护者添加。参见扫描标签与复用。
  • **合并后:**PR 作者必须确保所有 GitHub Actions 任务通过。临时性失败通常可以通过重新运行恢复;参见重新运行失败任务的说明。

- deepseek_v41
environment:
PYTHONHASHSEED: "0"
setup_script: vllm-container-deps.sh

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

can u delete this? what is the need for this

isnt the numa conflict fix already commited ages ago?

https://github.com/NVIDIA/srt-slurm/blob/main/configs/patches/vllm-container-deps.sh

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Thanks for the comments! I've addressed them

Juntian777 and others added 3 commits October 13, 2026 00:11
…gle-node arm on the new image

Drop the vllm-container-deps.sh setup script (the image already has numactl and msgpack), enable FlashInfer autotune on prefill, move the GB300 single-node arm to vllm/vllm-openai:nightly-aarch64-dev-20261012-59e75f4 with its TP4 points at conc 1 and 8, and restore a historical changelog pr-link that the previous commit changed by mistake.

处理评审意见:删除 vllm-container-deps.sh 安装脚本(镜像已自带 numactl 和 msgpack),prefill 开启 FlashInfer autotune;GB300 单节点配置改用 vllm/vllm-openai:nightly-aarch64-dev-20261012-59e75f4,TP4 只跑 conc 1 和 8;并恢复上一个提交误改的一条历史 changelog pr-link。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… vLLM arm unchanged

Add dsv41flash-fp4-gb300-dynamo-vllm-agentic-dspark-agg (one TP4 worker with a native Dynamo sidecar, conc 1 and 8) and restore the GB300 single-node vLLM key and recipe to main.

将 TP4 点移到新的 Dynamo 聚合配置项,单节点 vLLM 配置保持不变:新增 dsv41flash-fp4-gb300-dynamo-vllm-agentic-dspark-agg(单个 TP4 worker + 原生 Dynamo sidecar,conc 1 和 8),并将 GB300 单节点 vLLM 配置项和配方恢复为 main 的版本。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Ten DEP2 prefill instances feed the DEP16 decode at max-num-seqs 132.

在 Dynamo 分离式配置项中新增 10P1D 点(conc 6656):10 个 DEP2 prefill 实例配 DEP16 decode,max-num-seqs 132。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@peilii

peilii commented Oct 13, 2026 •

Copy link
Copy Markdown

Opened #3950 against this branch with the Dynamo frontend/runtime settings we used on the GB300 Dynamo + vLLM P/D line: conditional disaggregation off, router temperature/queue threshold pinned, tcp request plane + zmq event plane (no NATS), vLLM --reasoning-parser None with the parsers kept on the Dynamo frontend, DYN_LOG=warn. Dry-run validated on oci-jhb.

Two things I did not change but would check before the sweep: (1) decode kv_load_failure_policy: "fail" + kv_lease_duration: 120 can time out requests that wait in the router queue behind the small decode max-num-seqs; (2) prefill numa-bind: true has no numa-bind-nodes, which failed auto-detection on our GB300 nodes.

Also: the 10P1D override is c6656 while the shared table says c7168; and could you add TTFT p50/p90 next to each point? With 18 to 132 decode slots per rank most users queue in front of decode, so TTFT is where the cap shows up.

@Juntian777

Copy link
Copy Markdown
Collaborator Author

the 10P1D override is c6656 while the shared table says c7168;

Although I tried c7168 locally, it seemed a bit workload overwhelming, I think c6656 performed at least as well. So I switched to c6656 in my commit

…ntX recipes (#3950)

* Dynamo frontend settings for the GB300 DSV4.1-Flash Dynamo + vLLM AgentX recipes

Carry the Dynamo runtime and router settings that held up on the GB300 Dynamo + vLLM
P/D frontier (c1 to c640, full-hour AgentX replays) into the disaggregated and
aggregated recipes:

- Conditional disaggregation off: active-decode-blocks-threshold,
  active-prefill-tokens-threshold and active-prefill-tokens-threshold-frac set to
  None, so every request is prefilled on a prefill rank and never on one of the 16
  lockstep MegaMoE decode ranks.
- Router defaults pinned: DYN_ROUTER_TEMPERATURE=0 and DYN_ROUTER_QUEUE_THRESHOLD
  None (temperature 1 measured as noise, +1 to 4%).
- Dynamo request plane tcp and event plane zmq; the NATS service is dropped (no
  broker hop; the frontier ran this way at c640).
- Disaggregated recipe: etcd on a dedicated infra node and the frontend placed
  beside it, so the single Rust frontend does not share a node with two DEP2
  prefill ranks running Engram CPU offload and 70 GiB host KV each. Adds one
  CPU-only node to the job; the GPU count of the measurement is unchanged.
- vLLM engines run with --reasoning-parser None on every role: the deepseek_v41 tool-call and
  reasoning parsers are applied once, by the Dynamo frontend (published through the sidecar
  --dyn-*-parser flags), not a second time inside vllm-rs.
- DYN_LOG=warn for measured runs.

Validated with srtctl dry-run (5P1D c2560 and TP4 c1) on oci-jhb.

* Keep the Dynamo frontend on the head node; etcd stays on infra

srtctl's orchestrator accepts only head|first_decode|last_decode for
frontend.placement.node (src/srtctl/core/topology.py), even though the schema and
`srtctl dry-run` accept `infra`; a 10P1D job with the previous commit's placement
failed at launch with "frontend.placement.node='infra' is invalid". Drop the
frontend placement and the dedicated infra node for etcd; the frontend runs on the
head node as before. Verified: the same 10P1D job launches with this change.
@Juntian777
Juntian777 marked this pull request as ready for review October 13, 2026 03:20
@Juntian777
Juntian777 requested a review from a team October 13, 2026 03:20
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Juntian777 Juntian777 added full-sweep-fail-fast Full sweep with canary gate; first failure cancels the rest of that matrix (recommended) agentx AgentX benchmarks, recipes, and infrastructure labels Oct 13, 2026

@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.

I reviewed this PR and didn't find any bugs. Because it's a large multi-node benchmark recipe addition with many interdependent parallelism/offloading settings, and the touched paths (nvidia-master.yaml, gb300-* recipes) are CODEOWNER-protected, a human look is still worthwhile.

What was reviewed:

  • New agg (TP4, conc 1/8) and disagg (DEP2 prefill / DEP16 decode, 10P1D-5P1D) vLLM recipes for dsv41flash on GB300-FP4, their nvidia-master.yaml entries, and the perf-changelog append.
  • Image/container consistency between recipe container/identity.container.image and master-config image - matches in both new entries.
  • Disagg topology node math (prefill nodes x 2 workers/node, decode 16 GPUs over 4 nodes) against gpus_per_node: 4 - consistent.
  • The disagg recipe's speculative-config omitting rejection_sample_method (unlike agg's explicit "block") - already investigated and ruled out as a discrepancy by the bug hunting system.
Extended reasoning...

Pure benchmark-config addition (no source/doc changes): two new srt-slurm recipe override files and matching nvidia-master.yaml entries plus a perf-changelog append for a GB300/FP4 DeepSeek-V4.1-Flash Dynamo+vLLM AgentX family. No auth/crypto/permissions surface is touched; the risk is purely in dense numeric correctness (parallelism degrees, cudagraph capture sizes, KV-offload ratios, node counts) that is easy to get subtly wrong and hard to fully verify without running the pending sweep. All four changed files fall under CODEOWNERS (nvidia-master.yaml and gb300-* recipes explicitly, perf-changelog.yaml via the default rule), and the PR itself is marked draft with sweep/evals pending and the sweep-label/maintainer-reuse checklist items still unchecked, so human review is expected before merge regardless.

This review covers commit 5deca12, which is no longer the latest commit on this pull request; later commits are not covered by it.

@github-actions

github-actions Bot commented Oct 13, 2026 •

Copy link
Copy Markdown
Contributor

@xinli-sw xinli-sw added full-sweep-fail-fast Full sweep with canary gate; first failure cancels the rest of that matrix (recommended) and removed full-sweep-fail-fast Full sweep with canary gate; first failure cancels the rest of that matrix (recommended) labels Oct 13, 2026
…auto-detect

With cpus-per-task 72 every worker step was pinned to CPUs 0-71 (NUMA 0), including the DEP2 prefill worker on
GPUs 2-3, and vLLM refuses automatic GPU-to-NUMA detection under a constrained affinity, so the prefill engines
exited. With 144 each step (one task, --overlap) gets CPUs 0-143 and vLLM binds each DEP2 prefill worker to its
GPUs' NUMA node (GPUs 0-1 -> node 0, GPUs 2-3 -> node 1).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Juntian777
Juntian777 force-pushed the dsv41flash-gb300-dynamo-vllm-disagg branch from 1955dcc to 8ce65c4 Compare October 13, 2026 04:19
@Juntian777 Juntian777 added full-sweep-enabled Full sweep with canary gate; matrix jobs run to completion despite failures and removed full-sweep-fail-fast Full sweep with canary gate; first failure cancels the rest of that matrix (recommended) labels Oct 13, 2026
Juntian777 and others added 2 commits October 13, 2026 05:30
Picks up NVIDIA/srt-slurm#602: on the Python sidecar launcher (multi-node hybrid-DP decode) srtctl drops
`reasoning-parser: none`, which Python vLLM rejects as an unknown parser name, while single-node `vllm-rs serve`
endpoints keep it as Dynamo sidecars require.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Juntian777 Juntian777 removed the full-sweep-enabled Full sweep with canary gate; matrix jobs run to completion despite failures label Oct 13, 2026
@Juntian777 Juntian777 added the full-sweep-fail-fast Full sweep with canary gate; first failure cancels the rest of that matrix (recommended) label Oct 13, 2026

This branch has not been deployed

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

Labels

agentx AgentX benchmarks, recipes, and infrastructure full-sweep-fail-fast Full sweep with canary gate; first failure cancels the rest of that matrix (recommended)

Projects

Status: No status

Development

Successfully merging this pull request may close these issues.

4 participants