Validate official vLLM Router with srt-slurm - #2543
Conversation
|
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 For PR verification, add the 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 模板,包括保留英文语句 如需进行 PR 验证,请为此 PR 添加 PR 作者有责任确保合并后所有 GitHub Action 任务完全通过。 很多时候失败只是偶发抖动(flake),重新运行失败的任务即可解决。参见 GitHub 关于重新运行失败任务的文档 |
|
Claude finished @cquil11's task in 7m 29s —— View job Review of PR #2543
SummaryOne 🟡 warning posted inline on Everything else checked out clean:
One note (not a code issue): the PR body says pass 3 uses the |
There was a problem hiding this comment.
Beyond the inline findings, I also checked whether native-sgl-router-deps.sh's pip install (no --break-system-packages) would fail on an externally-managed image — the sgl-router recipes set PIP_BREAK_SYSTEM_PACKAGES: "1" in both frontend.env and backend.aggregated_environment, which pip honors via env var, so this isn't a real issue.
Extended reasoning...
This PR is explicitly marked WIP/draft by the author, pending on-hardware validation of router traffic, P/D transfer, and metrics reachability. The bug hunting system already found a real terminal-status-verification gap in the B200 launcher plus several nits (CI priority ordering, an idle-drain metric gap, and duplicated launcher logic), so this needs human review regardless. I independently checked one additional candidate concern — a missing --break-system-packages pip flag in the new sgl-router deps script — and confirmed it's a non-issue because the recipe's env already sets PIP_BREAK_SYSTEM_PACKAGES=1 for the containers that run the setup script.
| if [[ -n "${SRT_SLURM_REPOSITORY:-}" || -n "${SRT_SLURM_REF:-}" ]]; then | ||
| if [[ -z "${SRT_SLURM_REPOSITORY:-}" || -z "${SRT_SLURM_REF:-}" ]]; then | ||
| echo "SRT_SLURM_REPOSITORY and SRT_SLURM_REF must be set together" >&2 | ||
| exit 1 | ||
| fi | ||
| git clone "$SRT_SLURM_REPOSITORY" "$SRT_REPO_DIR" || exit 1 | ||
| cd "$SRT_REPO_DIR" || exit 1 | ||
| git checkout --detach "$SRT_SLURM_REF" || exit 1 | ||
| if [[ "$(git rev-parse HEAD)" != "$SRT_SLURM_REF" ]]; then | ||
| echo "srt-slurm checkout does not match requested exact commit: $SRT_SLURM_REF" >&2 | ||
| exit 1 | ||
| fi | ||
| mkdir -p recipes/vllm/deepseek-v4 recipes/sglang/deepseek-v4 configs || exit 1 | ||
| cp -rT "$GITHUB_WORKSPACE/benchmarks/multi_node/srt-slurm-recipes/vllm/deepseek-v4" \ |
There was a problem hiding this comment.
🟡 The exact-commit clone/checkout/verify block for SRT_SLURM_REPOSITORY/SRT_SLURM_REF (both-vars guard, git clone, checkout --detach, rev-parse HEAD verification, identical error strings) is copy-pasted near-verbatim into both runners/launch_b200-dgxc.sh (~159-172) and runners/launch_h200-dgxc-slurm.sh (~67-76). This is pre-existing duplication that this PR extends to a second launcher rather than introducing; consider factoring it into a shared clone_srt_slurm_exact_commit() function in runners/slurm_utils.sh, which the H200 launcher already sources for other shared helpers like wait_for_slurm_job_success.
Extended reasoning...
This PR adds the exact-commit clone/checkout/verify block to both runners/launch_b200-dgxc.sh (lines ~159-172) and runners/launch_h200-dgxc-slurm.sh (lines ~67-76) as near-identical copies. Both blocks share: the [[ -n "${SRT_SLURM_REPOSITORY:-}" || -n "${SRT_SLURM_REF:-}" ]] outer guard, the must-be-set-together check with the identical error string "SRT_SLURM_REPOSITORY and SRT_SLURM_REF must be set together", git clone "$SRT_SLURM_REPOSITORY" "$SRT_REPO_DIR", cd "$SRT_REPO_DIR", git checkout --detach "$SRT_SLURM_REF", and the git rev-parse HEAD mismatch check with the identical error string "srt-slurm checkout does not match requested exact commit".
The two copies have already begun to drift: the B200 script runs under set -x without set -e, so its copy appends || exit 1 after every command, while the H200 script runs under set -eo pipefail and omits those suffixes. This is exactly the kind of divergence a shared helper would prevent going forward — today it's cosmetic, but the next edit to one copy (e.g. adding a retry, changing the clone depth, or tightening the ref-format validation) is easy to forget to port to the other.
runners/slurm_utils.sh is already sourced by the H200 launcher and is the established home for shared launcher logic — it already holds wait_for_slurm_job_success and stream_slurm_job_log. Extracting the clone+checkout+verify core into a clone_srt_slurm_exact_commit() function there (returning non-zero on failure, with callers handling || exit 1 vs relying on set -e as they already do for other sourced helpers) would let both launchers call one implementation. The B200 launcher would need one added source "$(dirname "${BASH_SOURCE[0]}")/slurm_utils.sh" line (it doesn't currently source that file), matching the pattern the H200 launcher already uses.
Concretely, a maintainer fixing a bug in this exact-commit-pin logic (e.g., handling a ref that's a branch name vs a full SHA, or adding a shallow-clone optimization) would today need to find and edit it in two separate files, and could easily miss one — as evidenced by the || exit 1 divergence already present between the two copies added in this very PR.
This is a code-quality/DRY observation, not a correctness bug: the duplicated logic itself is correct and functionally equivalent in both places, so it does not block merge. Recommend nit severity.
|
see unofficial run visualizer at https://inferencex.semianalysis.com/inference?unofficialRun=31357681380 |
|
Claude finished @cquil11's task in 3m 6s —— View job Re-review of PR #2543 (marked ready for review)
Re-review: no new blocking issues found. The only substantive changes since the last review are commit
Other changes in the commit check out: the sglang pd-fix pin was moved to Two previously flagged non-blocking items remain open and are still applicable (not repeating details): the unreachable Note: this PR is still WIP-gated on its own exact-head validation run per the description — the |
There was a problem hiding this comment.
Beyond the inline nit, I checked three other candidates and ruled them out: the vLLM disagg recipe reusing one YAML anchor for prefill and decode is fine since NixlConnector with kv_role: kv_both makes vLLM workers role-symmetric (unlike SGLang, which needs separate disaggregation-mode: prefill/decode); native-vllm-router-deps.sh lacking PIP_BREAK_SYSTEM_PACKAGES matches native-sgl-router-deps.sh, which also lacks it, so there is no inconsistency; and AGENTS.md's framework list already omits dynamo-vllm pre-existing this PR, so the missing sgl-router/vllm-router entries are pre-existing doc staleness, not a gap this PR introduces.
Extended reasoning...
This run found one new nit (the CI-priority classifier enum gap, posted inline) on top of the still-unresolved concerns from prior review passes (notably the missing sacct success-gate on the B200 launcher). Beyond the inline findings, I spent time verifying three additional candidates the bug-hunting system had flagged and refuted, confirmed above by reading the actual recipe YAML, deps scripts, and AGENTS.md — none of them are real gaps introduced by this PR. Given the PR is explicitly marked WIP, touches CI scheduling and multi-cluster Slurm launch scripts, and still has an open red-severity finding from a prior pass, this remains a case for human review rather than approval.
|
Claude finished @cquil11's task in 5m 24s —— View job Re-review of PR #2543 (ready_for_review)
Re-review: one 🟡 warning posted inline; both previously open nits are now resolved. The changes since the last review are five commits ( Previously flagged items — resolved
New finding
Other changes checked — clean
|
|
see unofficial run visualizer at https://inferencex.semianalysis.com/inference?unofficialRun=31361949473 |
| pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2520 | ||
|
|
||
| - config-keys: | ||
| - dsv4-fp4-b200-vllm-router-agentic-agg |
There was a problem hiding this comment.
🟡 WARNING: Commit 95cc2cc8f removed dsv4-fp4-b200-sgl-router-agentic-agg and glm5.2-fp8-h200-sgl-router-agentic-mtp-2p2d from this entry's config-keys (and deleted every SGL Router description bullet), but both config keys are still added by this PR in configs/nvidia-master.yaml (lines 1030 and 7774), still carry framework: sgl-router, and will run in labeled sweeps.
Why it matters: New master-config keys must be documented in perf-changelog.yaml. After this commit the two SGL Router configs this PR introduces have zero changelog coverage — including the sglang-router==0.3.2 pin, the sglang: metric-family requirement, and the H200 Mooncake topology rationale that earlier revisions of this entry documented. The entry's remaining text now describes only the vLLM Router arms while the diff ships four configs.
Fix: Either re-add the two sgl-router keys (with their description bullets) to this entry, or remove the sgl-router config entries and recipes from the PR if they're intentionally descoped from the "official vLLM Router" validation.
There was a problem hiding this comment.
This automated review ran again and found no new bugs. The two previously-flagged nits are now resolved: vllm-router/sgl-router are correctly ordered ahead of vllm/sglang in configs/ci-priority.yaml, and the priority-classifier's JSON-schema enum in run-sweep.yml now includes both router criteria. This PR is still a draft pending the final H200 SGL Router 2P2D validation run, and it touches multi-node Slurm launch/accounting logic and CI scheduling, so a human look is still worthwhile before merge.
Extended reasoning...
Verified directly against the current repo state that both previously-flagged nits are fixed: configs/ci-priority.yaml:22-23 now places sgl-router/vllm-router before the broader sglang/vllm prefixes, and .github/workflows/run-sweep.yml:252,267 now includes both router strings in the classifier's enum and prompt bullet list. No new bugs were found by the bug hunting system this run. This PR remains large in scope (multi-node Slurm launchers, sacct-based success verification, CI priority scheduling, new native-router recipes) and is still marked draft per its own description, so deferring rather than approving.
|
see unofficial run visualizer at https://inferencex.semianalysis.com/inference?unofficialRun=31418542762 |
Summary
sgl-routeridentity; SGL Router functionality already existed through the legacysglangfrontend typeCurrent test matrix
Validation
sglang:prefix validated0:0on two nodes; router registered exactly 1P+1D; fixed-sequence c1/c2/c8 completed 10/10, 20/20, and 80/80 requestsThe terminal P/D failure isolated by earlier H200 runs was an upstream SGLang Model Gateway correctness bug, not an AgentX threshold or workload issue. The exact fix is under review in sgl-project/sglang#34216 and is pinned here at
9072e0dc5aaf1962b4e2c6f1a51094356b5d3324.Related srt-slurm PR: SemiAnalysisAI/srt-slurm#2
This remains a draft until the current official H200 SGL Router 2P2D job and the final exact-head integration run complete.