Skip to content

[WIP] Add GB300 DeepSeek-V4 dynamo-sglang agentic recipes#2157

Open
csahithi wants to merge 2 commits into
mainfrom
nv-sglang-dsv4-agentx-gb300
Open

[WIP] Add GB300 DeepSeek-V4 dynamo-sglang agentic recipes#2157
csahithi wants to merge 2 commits into
mainfrom
nv-sglang-dsv4-agentx-gb300

Conversation

@csahithi

Copy link
Copy Markdown
Collaborator

Add aggregated (TP4) and disaggregated (DEP8 pareto) GB300 DeepSeek-V4 agentic-coding recipes with prefill-side MTP to match decode, along with the master-config sweep entries, GB300 launcher support.

Add aggregated (TP4) and disaggregated (DEP8 pareto) GB300 DeepSeek-V4
agentic-coding recipes with prefill-side MTP to match decode, along with
the master-config sweep entries, GB300 launcher support, and the
sgl-deep-gemm downgrade helper.
@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 关于重新运行失败任务的文档

2 similar comments
@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

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

@csahithi csahithi added NVIDIA full-sweep-enabled agentx AgentX benchmarks, recipes, and infrastructure labels Jul 10, 2026
@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.

Additional findings (outside current diff — PR may have been updated during review):

  • 🔴 runners/launch_gb300-nv.sh:7-8 — The launcher's SLURM_PARTITION/SLURM_ACCOUNT exports at lines 7-8 are unconditional — they flip every gb300-nv job (glm5, dsr1, dsv4-trt/vllm, minimaxm3, kimik2.5, and ~11 others in configs/nvidia-master.yaml) from (batch_1, benchmark) to (batch_2, restricted), not just the new DSv4 sglang agentic recipes. If this cluster-wide migration is intentional it should be called out in the PR description; otherwise please gate it inside the same $IS_AGENTIC == 1 && $FRAMEWORK == dynamo-sglang && $MODEL_PREFIX == dsv4 branch used later in the file.

    Extended reasoning...

    What changes and where

    At runners/launch_gb300-nv.sh lines 7-8, the launcher unconditionally exports:

    export SLURM_PARTITION="batch_2"     # was batch_1
    export SLURM_ACCOUNT="restricted"    # was benchmark

    These are at the top of the file, before any framework/model branching. Every job whose GHA runner name starts with gb300-nv_ invokes this launcher (via bash ./runners/launch_${RUNNER_NAME%%_*}.sh in the benchmark templates), so these values are inherited by all gb300-nv jobs.

    Blast radius

    Grepping configs/nvidia-master.yaml for runner: (cluster:)?gb300-nv returns ~15 pre-existing config keys that will silently switch to the new partition/account after this PR merges:

    • glm5-fp4-gb300-dynamo-trt (and MTP variants)
    • glm5-fp4/fp8-gb300-dynamo-sglang (and MTP variants)
    • glm5.1-fp4/fp8-gb300-dynamo-sglang
    • dsr1-fp8-gb300-dynamo-trt
    • dsv4-fp4-gb300-dynamo-vllm, -trt, -trt-mtp, -vllm-agentic
    • minimaxm3-fp8-gb300-dynamo-vllm
    • kimik2.5-fp4-gb300-dynamo-vllm

    Sibling launchers (launch_b300-nv.sh still uses batch_1/benchmark, launch_gb200-nv.sh uses batch/benchmark) were not touched, so this isn't a repo-wide cluster migration.

    Inconsistency with the rest of the diff

    The same PR gates its srt-slurm repo checkout with if [[ "$IS_AGENTIC" == "1" && $FRAMEWORK == "dynamo-sglang" && $MODEL_PREFIX == "dsv4" ]] (line ~136), acknowledging the new stack is DSv4-agentic-specific. The partition/account exports ignore that pattern.

    Failure modes

    1. Submission fails. If the restricted account has no scheduling permission on batch_2 for the pre-existing non-DSv4 recipes, they all fail submission with a SLURM ACCOUNT_LIMIT/QOS_JobLimit error on their next sweep run.
    2. Silent baseline shift. Even if submission succeeds, if batch_2 differs from batch_1 in QoS/time-limit/node-count/interconnect topology, the ingested benchmark numbers for those 12 pre-existing configs will diverge from the pre-PR baseline already in the DB — attributed to this PR but caused by an unrelated infra change.

    Step-by-step proof of scope leak

    1. Merge this PR to main.
    2. A push-to-main sweep triggers because perf-changelog.yaml changed.
    3. The unchanged config glm5-fp4-gb300-dynamo-trt (routes to cluster:gb300-nv) is in the matrix.
    4. GHA schedules it on a gb300-nv_* runner; the runner invokes bash ./runners/launch_gb300-nv.sh.
    5. Line 7 exports SLURM_PARTITION=batch_2; line 8 exports SLURM_ACCOUNT=restricted.
    6. srtctl apply reads these via default_partition/default_account in the generated srtslurm.yaml and submits to (batch_2, restricted) — even though nothing about the glm5 recipe changed and the PR description never mentions this partition move.

    How to fix

    If the change is intentionally cluster-wide — please call it out in the PR description (why the migration, and confirmation that all pre-existing recipes have permission on batch_2/restricted).

    If it is DSv4-agentic-only, guard it with the same predicate the srt-slurm checkout already uses:

    if [[ "$IS_AGENTIC" == "1" && $FRAMEWORK == "dynamo-sglang" && $MODEL_PREFIX == "dsv4" ]]; then
        export SLURM_PARTITION="batch_2"
        export SLURM_ACCOUNT="restricted"
    else
        export SLURM_PARTITION="batch_1"
        export SLURM_ACCOUNT="benchmark"
    fi

    The full-sweep-enabled label on this PR will catch scenario (1) if it fires, but (2) is silent — the CI can't distinguish "the recipe got slower" from "a different partition served it".

Comment on lines +11 to +27
# Runs via `setup_script: pin-sgl-deep-gemm.sh` (before dynamo install + worker
# startup, inside each worker's container). Prints before/after so the run log
# shows what the container shipped vs what we pinned.
set -euo pipefail
export PIP_BREAK_SYSTEM_PACKAGES=1

TARGET="${SGL_DEEP_GEMM_VERSION:-0.1.3}"

echo "[pin-sgl-deep-gemm] before:"
pip show sgl-deep-gemm 2>/dev/null | grep -iE '^(Name|Version):' || echo " (not installed)"

echo "[pin-sgl-deep-gemm] installing sgl-deep-gemm==${TARGET} ..."
pip install --force-reinstall --no-deps \
--extra-index-url https://www.piwheels.org/simple \
"sgl-deep-gemm==${TARGET}"

echo "[pin-sgl-deep-gemm] after:"

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 downgrade-sgl-deep-gemm.sh script has stale pin-sgl-deep-gemm references left over from a rename that missed the file's internals: the header comment on line 11 still says Runs via setup_script: pin-sgl-deep-gemm.sh`` and the log prefixes on lines 19, 22, and 27 print [pin-sgl-deep-gemm]. No functional impact — the script runs correctly — but anyone grepping sweep logs for `downgrade-sgl-deep-gemm` will miss the actual before/after markers. Renaming those four occurrences to `downgrade-sgl-deep-gemm` restores log discoverability.

Extended reasoning...

What the bug is

The new script at benchmarks/multi_node/srt-slurm-recipes/configs/downgrade-sgl-deep-gemm.sh contains stale references to a previous name (pin-sgl-deep-gemm.sh) inside its own body. Specifically:

  • Line 11 header comment: # Runs via setup_script: pin-sgl-deep-gemm.sh (before dynamo install + worker
  • Line 19: echo "[pin-sgl-deep-gemm] before:"
  • Line 22: echo "[pin-sgl-deep-gemm] installing sgl-deep-gemm==${TARGET} ..."
  • Line 27: echo "[pin-sgl-deep-gemm] after:"

Everywhere else in the PR, the script is referenced by its actual filename downgrade-sgl-deep-gemm.sh:

  • All 6 new recipe YAMLs (agg-gb300-tp4-…, disagg-gb300-2p1d-…, 2p4d-…, 4p4d-…, 6p4d-…, 12p4d-…) set setup_script: downgrade-sgl-deep-gemm.sh
  • runners/launch_gb300-nv.sh:147 sets SRTCTL_SETUP_SCRIPT="downgrade-sgl-deep-gemm.sh" and copies the file under that name

Grepping the repo for pin-sgl-deep-gemm returns matches only inside this script itself — no file named pin-sgl-deep-gemm.sh exists anywhere. This is a clear stale-rename artifact: the file was renamed from pin-… to downgrade-… but the internal comment and log prefixes were not updated.

Impact

Purely cosmetic — the script still executes correctly because setup_script: wiring in srtctl and SRTCTL_SETUP_SCRIPT in the launcher both go by filename, and echo prefixes are only read by humans. The one real cost is log-grep discoverability: someone tailing a sweep log and searching for the string downgrade-sgl-deep-gemm (the recipe-declared script name) will miss the before/after installation markers, which are the whole reason the echos exist.

Step-by-step proof

  1. In the PR diff, the new file appears as new file mode 100644 at benchmarks/multi_node/srt-slurm-recipes/configs/downgrade-sgl-deep-gemm.sh — that is its final name on disk.
  2. Line 11 of that same file, still in the diff: # Runs via setup_script: pin-sgl-deep-gemm.sh (before dynamo install + worker — refers to a filename that does not exist in the tree.
  3. Lines 19, 22, 27 emit log lines prefixed [pin-sgl-deep-gemm].
  4. Every recipe YAML in this PR sets setup_script: downgrade-sgl-deep-gemm.sh — a user who reads the recipe, then greps the sweep log for that string, matches nothing except a possible copy step in the launcher output.

Fix

Mechanical rename inside the script only — no callers change:

  • Line 11: pin-sgl-deep-gemm.shdowngrade-sgl-deep-gemm.sh
  • Lines 19, 22, 27: [pin-sgl-deep-gemm][downgrade-sgl-deep-gemm]

Severity

Nit — a doc/logging inconsistency with no runtime effect. Does not warrant blocking the PR.

@@ -0,0 +1,28 @@
#!/bin/bash

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.

is there an lmsysorg container where we don't need to patch downgrade deepgemm?

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.

When this SGL PR sgl-project/sglang#30697 is merged, we can then switch to the nightly container with the fix.

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-enabled NVIDIA

Projects

Status: No status

Development

Successfully merging this pull request may close these issues.

3 participants