Skip to content

Bump SGLang image for dsv4-fp4-gb300-dynamo-sglang 8k1k - #2099

Merged
adibarra merged 18 commits into
mainfrom
dsv4-fp4-gb300-1k1k-stp-disagg
Aug 7, 2026
Merged

Bump SGLang image for dsv4-fp4-gb300-dynamo-sglang 8k1k#2099
adibarra merged 18 commits into
mainfrom
dsv4-fp4-gb300-1k1k-stp-disagg

Conversation

@hshrivastava-droid

@hshrivastava-droid hshrivastava-droid commented Jul 6, 2026

Copy link
Copy Markdown
Collaborator

No description provided.

Appends 7 new fixed-seq-len entries (isl=1024, osl=1024) to the existing
dsv4-fp4-gb300-dynamo-sglang key: 1P1D DEP8/DEP16, 1P4D and 1P6D TP4,
2P1D DEP12/DEP16/DEP48. Recipes under
benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/1k1k/, container
aligned with the existing GB300 8k1k image
(lmsysorg/sglang:nightly-dev-cu13-20260520-425dffbd).

launch_gb300-nv.sh gains a dynamo-sglang + dsv4 overlay branch (srt-slurm
sa-submission-q2-2026 base, in-tree recipes overlaid on top).
@github-actions

github-actions Bot commented Jul 6, 2026

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 关于重新运行失败任务的文档

1 similar comment
@github-actions

github-actions Bot commented Jul 6, 2026

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 关于重新运行失败任务的文档

@@ -0,0 +1,201 @@
# 1k1k 1P1D / DEP8 / total 3 nodes
# conc sweep: 2048, 4096, 8192 (c/4, c/2, c where c = X * 8192)
# stack: lmsysorg/sglang nightly-dev-cu13-20260520-425dffbd (megamoe) + dynamo dd37acac04

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.

🟡 Header comment on line 3 in 5 new 1k1k recipes says dynamo dd37acac04 but the actual pinned dynamo.hash in the same file is 81d0555ee23519cea80a42b4fe824e30368b7300 — two different commits. Pinned hash is what gets built, so this is documentation-only staleness, but a reader debugging a dynamo issue could grep for the wrong short hash. Affects disagg-1p1d-dep8-conc8192.yaml, disagg-1p1d-dep16-conc8192.yaml, disagg-2p1d-dep12-conc18432.yaml, disagg-2p1d-dep16-conc16384.yaml, disagg-2p1d-dep48-conc16384.yaml. Trivial fix: update the comment to 81d0555e or drop the hash from it.

Extended reasoning...

What the bug is

Each of the five new fixed-seq-len 1k1k recipes carries a header comment on line 3 of the form:

# stack: lmsysorg/sglang nightly-dev-cu13-20260520-425dffbd (megamoe) + dynamo dd37acac04

But the same file, a few lines below, has:

dynamo:
  hash: "81d0555ee23519cea80a42b4fe824e30368b7300"
  install: true

The short hash dd37acac is unambiguously not a prefix of 81d0555e... — these are two different dynamo commits.

Why the pinned hash is what actually matters

Only the dynamo.hash field is consumed by srtctl to install dynamo (install: true triggers the source build against that ref). The header comment is purely human-facing documentation. So the benchmark itself runs against 81d0555e...; the comment is stale from an earlier iteration of the recipe template.

Impact

Zero runtime impact — the benchmark builds and runs against the pinned hash regardless of what the comment says. The concrete failure mode is human: someone debugging a dynamo-related issue reads the header, greps upstream dynamo history for dd37acac04, and either finds the wrong commit or nothing at all, wasting a small amount of triage time.

Step-by-step proof

  1. Open benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/1k1k/disagg-1p1d-dep8-conc8192.yaml.
  2. Line 3: # stack: lmsysorg/sglang nightly-dev-cu13-20260520-425dffbd (megamoe) + dynamo dd37acac04
  3. Around line 29: dynamo: / hash: "81d0555ee23519cea80a42b4fe824e30368b7300".
  4. Compare short hash dd37acac to the first 8 chars of the pinned full hash: 81d0555e. They are not equal, and one is not a prefix of the other, so they refer to different commits.
  5. Repeat for the other four affected files — same mismatch verbatim.

Cross-check against the existing 8k1k recipes on the same master-config key (dsv4-fp4-gb300-dynamo-sglang): they consistently pin 81d0555ee23519cea80a42b4fe824e30368b7300, so the pinned hash is the intended one and the header comment is what's stale.

How to fix

Two equally acceptable fixes; either takes one line per file:

  • Update the comment: # stack: lmsysorg/sglang nightly-dev-cu13-20260520-425dffbd (megamoe) + dynamo 81d0555e
  • Or drop the short hash from the header entirely, letting the pinned dynamo.hash field be the single source of truth.

Severity

Nit. This is stale docs with no runtime effect, so it does not block merge. Worth fixing in a follow-up (or squashed into this PR before merge if convenient) to keep the header honest for future readers.

set -e
ulimit -n 1048576
REPO=/configs/upstream-sa-bench/InferenceX
[ -d "$REPO" ] || git clone https://github.com/fzyzcjy/InferenceX.git "$REPO"

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 5 new custom-command 1k1k recipes (disagg-1p1d-dep8, -dep16, disagg-2p1d-dep12, -dep16, -dep48) clone bench_serving from https://github.com/fzyzcjy/InferenceX.git — a personal user fork rather than SemiAnalysisAI/InferenceX. Since no commit is pinned and the clone is only performed on first use per-worker, a fork rename/deletion/force-push would break these sweeps on any fresh runner node where /configs/upstream-sa-bench/InferenceX doesn't yet exist. Suggest cloning from SemiAnalysisAI/InferenceX (or better, using the checked-out $GITHUB_WORKSPACE) — the flags used (--num-warmups, --random-num-workers) all exist in the official repo's utils/bench_serving.

Extended reasoning...

What the bug is. Each of the 5 new custom-command recipes contains this block in benchmark.command:

REPO=/configs/upstream-sa-bench/InferenceX
[ -d "$REPO" ] || git clone https://github.com/fzyzcjy/InferenceX.git "$REPO"
cd "$REPO/utils/bench_serving"

The URL points at a personal user fork (fzyzcjy/InferenceX), not the official SemiAnalysisAI/InferenceX org repo. No branch or commit SHA is pinned — the clone takes whatever HEAD the fork owner has today.

Why this is a real concern. A grep of the repo confirms these 5 files are the only occurrences of fzyzcjy/InferenceX anywhere in the tree. The rest of the codebase (e.g. utils/runner_setup/RUNNER_SETUP.md:81) consistently uses SemiAnalysisAI/InferenceX, and the sibling 8k1k sglang/deepseek-v4 recipes don't clone bench_serving at all — they use benchmark.type: sa-bench. So this is a novel one-off pattern introduced by this PR, not an existing convention.

Failure mode — step-by-step. Consider a fresh GB300 compute node that has never run one of these recipes before:

  1. benchmark.command runs; $REPO=/configs/upstream-sa-bench/InferenceX doesn't exist yet.
  2. The [ -d "$REPO" ] || guard triggers git clone https://github.com/fzyzcjy/InferenceX.git.
  3. If the fork has been deleted, renamed, made private, or the org has revoked the user's access, git clone exits non-zero.
  4. Because the block starts with set -e, the whole custom command aborts and every concurrency shard fails to produce a result JSON.
  5. All 5 recipes hit the same failure — the DEP8/DEP16/DEP12/DEP16/DEP48 sweeps in this family all break together.

Additionally, since no SHA is pinned, if the fork owner force-pushes different benchmark_serving.py code (intentionally or by accident) between two sweep runs on different runners, the two sweeps could produce inconsistent numbers with no obvious cause.

Why existing code doesn't prevent it. The [ -d "$REPO" ] check only shields cached workers; any first-run worker (new node, cleared /configs, new SLURM allocation cache) is fully exposed. There is no fallback, no retry, no alternate URL. The clone's stderr also isn't logged separately — it will surface in the benchmark output but only as the trailing set -e abort, not as a labeled cause.

Impact. This is a fragility/reproducibility issue, not a correctness one — a broken clone produces a loud failure, not silent bad numbers (unless the fork force-pushes bad code). Today, as long as the fork exists and matches upstream, the sweeps run fine, so this doesn't block correct behavior on the current merge. But it introduces long-term breakage risk on a hot path.

How to fix. All flags used (--num-warmups, --random-num-workers, etc.) already exist in utils/bench_serving/benchmark_serving.py in this repo — the fork is not offering a unique payload. So the fix is one of:

  • Change the URL to https://github.com/SemiAnalysisAI/InferenceX.git (and optionally pin a SHA via git -C "$REPO" checkout <sha>).
  • Or better, copy from the already-checked-out workspace mounted into the container (e.g. cp -r $GITHUB_WORKSPACE/utils/bench_serving …) — no clone required.

The change is a one-line replacement in each of the 5 files.

Comment thread perf-changelog.yaml
- "Topologies: 1P1D DEP8 and DEP16 (custom conc sweep), 1P4D and 1P6D TP4 (sa-bench conc sweep), 2P1D DEP12/DEP16/DEP48 (custom conc sweep)."
- "Recipes live under benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/1k1k/, container aligned with the existing 8k1k image (lmsysorg/sglang:nightly-dev-cu13-20260520-425dffbd)."
- "launch_gb300-nv.sh gains a dynamo-sglang + dsv4 overlay branch (srt-slurm sa-submission-q2-2026 base, in-tree recipes overlaid on top)."
pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2099

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 perf-changelog.yaml entry has pr-link: XXX — a placeholder that wasn't replaced before opening the PR. All other entries in this file use https://github.com/SemiAnalysisAI/InferenceX/pull/<number>; this one should be updated to https://github.com/SemiAnalysisAI/InferenceX/pull/2099 before merge.

Extended reasoning...

What the bug is. The last entry appended to perf-changelog.yaml (line 4585) has pr-link: XXX. Every other pr-link in this file — including the immediately preceding entries at lines 4556, 4563, 4570, and 4576 — points to a real GitHub PR URL of the form https://github.com/SemiAnalysisAI/InferenceX/pull/<number>. A grep across the file shows 575 total pr-link occurrences, and this is the only one that is a bare XXX string. The template documented in AGENTS.md → Updating Docker images also shows the expected shape: a real PR URL.\n\nHow it manifests. The changelog is data — it is not consumed by the benchmark sweep or the recipe loaders, so the sweep will run fine and CI will not flag this. The consequence is purely at the traceability layer: anyone looking back through the changelog to find which PR triggered the dsv4-fp4-gb300-dynamo-sglang 1k1k STP additions will land on the literal string XXX instead of a clickable link back to this PR.\n\nWhy existing checks don't catch it. There is no linter for the pr-link field format — the schema (implicit) accepts any string. Reviewers rely on the convention.\n\nStep-by-step proof.\n1. Open perf-changelog.yaml at line 4574 (the diff hunk).\n2. The new entry (lines 4578–4585) has description bullets and ends with pr-link: XXX.\n3. Compare to the immediately preceding entry (lines 4568–4576, unchanged): pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/1994.\n4. Same for every other entry in the file — grep -c '^ pr-link: https' perf-changelog.yaml returns 574, and grep -c '^ pr-link: XXX' perf-changelog.yaml returns 1.\n\nHow to fix. Replace pr-link: XXX on the last line of perf-changelog.yaml with pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2099 before merging.\n\nSeverity rationale. Marking as nit rather than normal: this is data-hygiene in an append-only metadata file; the sweep and recipes are unaffected by the string value, and there is no runtime failure. It is, however, trivially fixed before merge and worth catching as part of the author checklist.

@github-actions

github-actions Bot commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

hshrivastava-droid and others added 2 commits July 7, 2026 09:52
Previous tag nightly-dev-cu13-20260520-425dffbd was GC'd from Docker Hub;
every multi-node dyn-sgl job 404'd at enroot import. Also refresh dynamo
commit ref in stack comment and fix repo URL in dep8 config.

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

github-actions Bot commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

@hshrivastava-droid hshrivastava-droid changed the title Add DeepSeek-V4-Pro NVFP4 GB300 1k1k STP dynamo-sglang scenarios [NV]Add DeepSeek-V4-Pro NVFP4 GB300 1k1k STP dynamo-sglang scenarios Jul 7, 2026
…7-b4155233

The earlier bump (3c9ee2e) only updated the 1k1k recipes, leaving the
dsv4-fp4-gb300-dynamo-sglang master image: and all 8k1k recipes on the
missing 20260520-425dffbd tag. The launcher's enroot import 404s on the
master image tag and every matrix job dies before srt-slurm runs. This
pulls the whole entry (master + 14 referenced recipes) onto the same tag.
@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

…26) for dsv4+dynamo-sglang

The new 1k/1k STP recipes use benchmark: {type: custom, command: ...},
a schema feature that only exists on NVIDIA/srt-slurm main. Pinning
sa-submission-q2-2026 caused srtctl to reject the recipe with
"Invalid config ... {'benchmark': {'command': ['Unknown field.']}}"
before any benchmark could run (see failing sweep run 28977862941).

Same launcher fix PR #1697 already carries; applying it here so the
dynamo-sglang + dsv4 elif clones NVIDIA/srt-slurm@main.
Replace `git checkout main` with a pinned tag `git checkout v1.0.17`.
v1.0.17 already carries the BenchmarkType.CUSTOM enum + benchmark.command
schema field that the new 1k/1k STP recipes need, and pinning avoids
drift as NVIDIA/srt-slurm main moves forward.
Resolve the perf-changelog.yaml conflict by keeping origin/main as the base and appending this branch's PR #2099 entry at the end.

中文:将 origin/main 合并到 dsv4-fp4-gb300-1k1k-stp-disagg 分支,并按规范解决 perf-changelog.yaml 冲突:保留 origin/main 作为基准,只在末尾追加本分支 PR #2099 的条目。
@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

2 similar comments
@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

中文:更新配方中的结果路径
中文:将 origin/main 合并到 dsv4-fp4-gb300-1k1k-stp-disagg
@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

@Ankur-singh Ankur-singh changed the title [NV]Add DeepSeek-V4-Pro NVFP4 GB300 1k1k STP dynamo-sglang scenarios [NV] Add DeepSeek-V4-Pro NVFP4 GB300 1k1k STP Dynamo-SGLang scenarios / [NV] 添加 DeepSeek-V4-Pro NVFP4 GB300 1k1k STP Dynamo-SGLang 场景 Jul 27, 2026
@hshrivastava-droid hshrivastava-droid changed the title [NV] Add DeepSeek-V4-Pro NVFP4 GB300 1k1k STP Dynamo-SGLang scenarios / [NV] 添加 DeepSeek-V4-Pro NVFP4 GB300 1k1k STP Dynamo-SGLang 场景 Bump SGLang image for dsv4-fp4-gb300-dynamo-sglang 8k1k Jul 31, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Restore the fixed-length DeepSeek-V4 recipe overlay before srtctl launch and remove recipe-level Slurm limits so the workflow timeout governs the jobs.

中文:恢复固定序列长度 DeepSeek-V4 配方在 srtctl 启动前的覆盖步骤,并移除配方级 Slurm 时限,统一由工作流超时控制任务。
@github-actions

github-actions Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Use srt-slurm v1.0.25 for hash-pinned Dynamo source builds so cargo and maturin are installed before compilation.

使用 srt-slurm v1.0.25 处理固定提交的 Dynamo 源码构建,确保编译前安装 cargo 和 maturin。
@github-actions

github-actions Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

1 similar comment
@github-actions

github-actions Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

@Ankur-singh

Copy link
Copy Markdown
Collaborator

/reuse-sweep-run 31024844958

@Ankur-singh

Copy link
Copy Markdown
Collaborator

As a PR reviewer and CODEOWNER, I have reviewed this and have:

  • Verified that as of the moment of typing this, this is the latest version of PR_REVIEW_CHECKLIST.md
  • Verified that the general code quality meets the InferenceX standard and does not make the code quality any worse.
  • Verified that this PR has passed PR validation. Please link to GitHub Action workflow that shows this. — https://github.com/SemiAnalysisAI/InferenceX/actions/runs/31024844958
  • Verified that this PR passes evals. Please link to GitHub Action workflow that shows this. — https://github.com/SemiAnalysisAI/InferenceX/actions/runs/31024844958
  • Verified that speculative decoding PRs uses chat templates to align the AL distribution to real world
  • For agentic workloads: verified that speculative-decoding configs (EAGLE / MTP / draft models) run with simulated synthetic acceptance, with the acceptance-length value taken from the committed golden AL curve in golden_al_distribution/ for that model, thinking mode, and draft length. A submission may choose any supported draft length, but it may not substitute a different acceptance target.
  • Verified against the current MODELS.md that this PR does not submit a deprecated model, scenario, or model-scenario combination.
  • Verified that the model architecture isn't changed with benchmark hacks like using --hf-overrides to skipping indexer for every x layers on models that don't natively support this. As a general rule, we won't accept optimizations that reduces the number of model architecture FLOPs. Anything that makes that same computation run faster is fair game; FLOPs at lower precisions is fine, given that the config passes private evals. As an general north star princple, we should only use optimizations which is used in production by customers that care about accuracy
  • If an company claims that they support vLLM/SGLang as first class LLM inference engines on their hardware, I have verified that the respective vLLM submission made using upstream https://hub.docker.com/u/vllm docker repo, upstream SGLang https://hub.docker.com/u/lmsysorg docker repo. The only exceptions are for new hardware, such as MI455X UALoE72, Vera Rubin NVL72, Rubin NVL8, etc., and for new model architectures where there is an actual reason why vLLM/SGLang does not fundamentally support them yet as supported by vLLM/SGLang community maintainers
  • If an company claims that they support vLLM/SGLang as first class upstream in-tree LLM inference engines on their hardware, I have have verified that the respective vLLM/SGLang submission has been made before additional frameworks (TRT-LLM, ATOM, etc.). The only exceptions are for new hardware, such as MI455X UALoE72, Vera Rubin NVL72, Rubin NVL8, etc., and for new model architectures where there is an actual reason why vLLM/SGLang does not fundamentally support them yet.
  • Verified that every single-node vLLM/SGLang recipe in this PR is documented in the official vLLM recipes and/or the SGLang cookbook:
    • I linked the corresponding upstream PR in the vLLM recipe repo or SGLang repo and verified that it is MERGED before this InferenceX PR merges. An opened, draft, or closed-without-merge upstream PR does not satisfy this requirement. If the matching recipe was already published, I linked the published recipe/cookbook page in the additional detail section below.
  • Verified that this PR does not patch the inference engine or serving stack — the pinned image must run as shipped. This covers .patch files / git apply / patch, inline patches embedded in benchmark scripts (e.g. a python3/sed heredoc that rewrites installed engine sources before serving), in-place edits of site-packages, monkey-patching, overwriting container files, and installing forked/rebuilt engine wheels on top of the pinned image. The only exception is a patch covered by a filled-out waiver at docs/waiver/<PR_NUMBER>.md — named after the PR that introduces the patch and filed in that same PR, stating what is patched, why the unmodified upstream image cannot run this benchmark, the upstream PR/issue link, and the removal plan — which I have linked below in the additional detail section.
  • If any of the above criteria cannot reasonably be satisfied, I have provided additional reasoning below.

Additional detail section:

  • Scope. Bumps dsv4-fp4-gb300-dynamo-sglang from lmsysorg/sglang:nightly-dev-cu13-20260520-425dffbd to nightly-dev-cu13-20260707-b4155233, applied atomically to the master entry and all seven GB300 8k1k disagg recipes. Also drops slurm.time_limit: "03:00:00" from those seven recipes and adds a dynamo-sglang + dsv4 branch to runners/launch_gb300-nv.sh. Reviewed at head ca276ccabb008c49ff4ab3cf4e8165856f4ec85b.
  • Validation and evals. Run Sweep 31024844958 ran on the exact current head and is a real run, not a reuse-gated no-op: setup = success and the benchmark lanes executed. Non-skipped successes: 7/7 multi-node 8k1k and 6/6 multi-node eval (the c1 point has no eval lane), plus collect-results, collect-evals, compare-results, calc-success-rate and check-changelog all green. Zero failures. Every benchmark and eval job is stamped with the new nightly-dev-cu13-20260707-b4155233 image, so the evidence covers the image this PR actually pins. Single-node, agentic, and 1k1k lanes are skipped because this entry is multinode: true / disagg: true and declares only 8k1k.
  • Master ↔ recipe parity (DISAGG). Re-derived independently rather than taken on trust, because published artifacts come from the nvidia-master.yaml entry rather than the parameters the run used. All seven CONFIG_FILE recipes were compared field-by-field against the master entry and agree on every MAJOR field: container image (all seven identical to master's image:), Dynamo pin 81d0555e… = master's router.version, kv-p2p-transfer: mooncake = disaggregation-transfer-backend: mooncake on both prefill and decode, the full TP/EP/DP-attention layout per point, node arithmetic (prefill_nodes + decode_nodes = 5/2/18/18/18/18/18), and each recipe's benchmark.concurrencies matching its master conc-list value (1024, 1, 12000, 8192, 3000, 2500, 2048) at isl: 8192 / osl: 1024. There is no KV-offload setting to reconcile — neither side declares one, and the recipes contain no hicache/offload keys. The infx-submission-preflight creator lane reports MASTER_RECIPE_PARITY: BLOCK, but that verdict is repo-wide pre-existing drift, not this PR: of its ~90 parity findings, not one names dsv4-fp4-gb300-dynamo-sglang. Every finding is against a different config key (dsr1-*, minimaxm3-*, kimik2.5-*, qwen3.5-*, and the sibling -mtp / -agentic-agg / -agentic-disagg dsv4 keys), none of which this PR touches.
  • MODELS.md. DeepSeek-V4-Pro is active for Single-turn 8k1k. This entry declares exactly one fixed-seq-len scenario, isl: 8192 / osl: 1024, with seven search-space points and no 1k1k — which is why the multi-node 1k1k lane skipped. Note the branch is named dsv4-fp4-gb300-1k1k-stp-disagg, but the 1k1k scenarios added early in the branch (6ba3fea8) were reverted (fa21da2a); the net diff contains no 1k1k recipe and no 1k1k scenario, so the deprecated Single-turn 1k1k combination is not submitted. The branch name is a stale leftover, not a description of the diff.
  • Recipe documentation (unchecked). Not applicable. This is a disaggregated multi-node submission — every recipe lives under benchmarks/multi_node/srt-slurm-recipes/, and the master entry is multinode: true + disagg: true. The checklist item is scoped to single-node vLLM/SGLang recipes, and this PR adds none. This matches how the same scope was resolved on the equivalent GB200 DISAGG submission (Refresh DeepSeek-V4-Pro GB200 Dynamo vLLM stack / 更新 DeepSeek-V4-Pro GB200 Dynamo vLLM 推理栈 #2139).
  • Chat template (unchecked). Not applicable. dsv4-fp4-gb300-dynamo-sglang is the non-MTP arm: there are no speculative-decoding flags in any of the seven recipes, so there is no acceptance-length distribution to align. (The recipes do set use_chat_template: false in their sa-bench block, which is unchanged by this PR and is the correct setting for a fixed-seq-len single-turn benchmark with a custom_tokenizer.)
  • Agentic golden AL (unchecked). Not applicable. These are multi-node fixed-seq-len 8k1k benchmarks with no agentic scenario and no speculative decoding.
  • Model architecture. No --hf-overrides, no layer skipping, and no FLOPs-reducing knobs anywhere in the diff. The only functional change to the serving configuration is the container tag; every sglang_config block is untouched.
  • Upstream image — provenance verified, availability flagged. The image comes from the official https://hub.docker.com/u/lmsysorg org — no fork, no vendor rebuild, no locally rebuilt engine wheel — so the provenance requirement is met. Recording one finding honestly: as of this comment, neither the new tag nightly-dev-cu13-20260707-b4155233 nor the tag it replaces (nightly-dev-cu13-20260520-425dffbd, currently on main) resolves on Docker Hub. Both return 404 from the Docker registry manifest API, while a control tag one day later (nightly-dev-cu13-20260708-b3632494) returns 200; lmsysorg/sglang currently lists 27 nightly-dev-cu13-* tags and neither of these two is among them. The sweep nevertheless pulled and ran the new image on 2026-08-05, so it is staged on the cluster. The reviewer judgment recorded here is that this PR does not regress reproducibility — the tag it replaces is equally unresolvable today — and that the upstream-org requirement in this checklist item is about provenance rather than Docker Hub retention. Flagging it because a community member cannot currently docker pull either tag, and a nightly one day newer is available if a pullable pin is preferred.
  • Framework ordering. SGLang is the serving engine here (Dynamo is the disagg frontend), so the engine-first requirement is satisfied by construction. No new non-vLLM/SGLang config entry is added.
  • No engine patching. No .patch files, git apply, sed -i, site-packages edits, monkey-patching, forked wheels, or setup_script in any of the seven recipes — the pinned image runs as shipped, and docs/waiver/ needs no entry for this PR. Two recipes carry a comment explaining that a previously-used extra_mount: yangminl/sglang-patched/sglang was deliberately not inlined, which is the right outcome: the patched tree is not mounted. The one build-from-source element is dynamo.install: true at pinned hash 81d0555e…, i.e. a pinned upstream Dynamo build (the disagg frontend), not a modification of the SGLang engine — the same shape accepted on Refresh DeepSeek-V4-Pro GB200 Dynamo vLLM stack / 更新 DeepSeek-V4-Pro GB200 Dynamo vLLM 推理栈 #2139.
  • Code quality — three notes, none blocking.
    1. slurm.time_limit: "03:00:00" is removed from all seven recipes, which is a behaviour change (these jobs now inherit the partition default) that is not mentioned in the PR title, the empty PR description, or the changelog entry. It ran clean at head, and for 18-node jobs a longer wall clock is the plausible intent, but it is riding along with an "image bump" PR undeclared. Worth a one-line changelog mention.
    2. disagg-gb300-1p1d-tp4-tp4-2-c1.yaml carries a stale topology comment describing "7 prefill … + 1 decode … 9 nodes total" while its resources: block is 1P/1D on 2 nodes. Comment only, no functional impact.
    3. The same file hardcodes model-path: "/model/" in both sglang_config blocks while the other six rely on the top-level model.path. Redundant rather than wrong — all seven resolved correctly.
    4. The PR has an empty body and an English-only title, so the repository's bilingual PR template is unfilled (the creator preflight flags this as BILINGUAL_METADATA). Not a review-checklist requirement, but worth filling in before merge — the changelog entry is currently the only prose description of what this PR does.
  • Mergeability (separate from this review). The PR is currently CONFLICTING. The conflict is the usual perf-changelog.yaml append race — this branch's entry lands at the old end-of-file while main has grown past it. Resolution is main's full list with this entry re-appended at the very end, preserving whitespace.

Signed: Ankur-singh

@Klaud-Cold

Copy link
Copy Markdown
Collaborator

✅✅✅ Verdict: PASS ✅✅✅

✅ Check 0 (CODEOWNER): PASS — @ankur-singh is a named owner of configs/nvidia-master.yaml; all other changed paths fall under the catch-all, which a recognized CODEOWNER satisfies.
✅ Check 1 (passing sweep on in-PR commit): PASS — head ca276cc carries run 31024844958 with 7/7 multi-node 8k1k / and 6/6 multi-node eval / check-runs executed success (not skipped); single-node/1k1k/agentic lanes skipped as expected for this multinode: true 8k1k-only entry.
✅ Check 2 (evals pass): PASS — downloaded eval_results_all from that run: 6/6 GSM8K, em_strict 0.962–0.971, all stamped dynamo-sglang/GB300 and every job pinned the PR's image nightly-dev-cu13-20260707-b4155233.
➖ Check 3 (recipe linked & merged): N/A — disaggregated/multi-node submission (multinode: true, disagg: true, all recipes under benchmarks/multi_node/srt-slurm-recipes/); the recipe-link requirement applies to single-node recipes only.
✅ Check 4 (reuse command): PASS — /reuse-sweep-run 31024844958 posted by Ankur-singh (COLLABORATOR).
✅ Check 5 (latest checklist template): PASS — all current-template items present; the three unchecked items (spec-decode chat template, agentic golden AL, single-node recipe link) are each explained as N/A in the additional detail section.
✅ Check 6 (upstream image & ordering): PASS — image remains upstream lmsysorg/sglang:<tag>; SGLang is the serving engine (Dynamo is the disagg frontend) and no new config entry is added. Informational: verified both the new tag and the one it replaces currently return 404 on Docker Hub, as the sign-off honestly flags — provenance is upstream and reproducibility does not regress, but a pullable nightly pin would be preferable.
✅ Check 7 (deprecated models/scenarios): PASS — DeepSeek-V4-Pro Single-turn 8k1k is active in MODELS.md; the net diff contains no 1k1k (the deprecated combination) despite the stale branch name.
✅ Check 8 (no architecture hacks): PASS — image-tag bump plus slurm.time_limit removal only; no --hf-overrides or FLOPs-reducing knobs, every sglang_config untouched.
➖ Check 9 (spec-decode chat template): N/A — no speculative-decoding changes (all seven recipes are the non-MTP arm, spec_decoding: none).
✅ Check 10 (no engine patches): PASS — no .patch/sed -i/heredoc/site-packages edits; the launcher change overlays version-controlled recipes onto upstream NVIDIA/srt-slurm v1.0.25 (harness plumbing), and the pinned Dynamo hash is the pre-existing disagg frontend build, not an engine modification.
➖ Check 11 (agentic golden AL): N/A — no agentic speculative-decoding changes in this PR.

@adibarra
adibarra merged commit 7667f21 into main Aug 7, 2026
28 checks passed
@adibarra
adibarra deleted the dsv4-fp4-gb300-1k1k-stp-disagg branch August 7, 2026 01:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Development

Successfully merging this pull request may close these issues.

5 participants