-
Notifications
You must be signed in to change notification settings - Fork 229
fix(agentx): rerun DeepSeek-V4 B300 SGLang with OOM headroom / 修复 AgentX:为 DeepSeek-V4 B300 SGLang 重跑预留 OOM 余量 #2226
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -14264,11 +14264,11 @@ dsv4-fp4-b300-sglang-agentic-hicache: | |
| agentic-coding: | ||
| - dram-utilization: 0.80 | ||
| search-space: | ||
| - { tp: 4, kv-offloading: none, conc-list: [1, 4, 8, 16, 20, 24, 32] } | ||
| - { tp: 8, kv-offloading: none, conc-list: [1, 4, 8, 16, 32, 40, 48, 52, 56, 60, 64, 72] } | ||
| - { tp: 4, ep: 4, dp-attn: true, kv-offloading: none, conc-list: [8, 16, 24, 32, 40, 64], router: { name: sglang-router, version: "0.3.2" } } | ||
| - { tp: 4, ep: 4, dp-attn: true, kv-offloading: dram, kv-offload-backend: { name: hicache }, conc-list: [32, 40, 48, 56, 64, 72, 80, 88, 96, 128], router: { name: sglang-router, version: "0.3.2" } } | ||
| - { tp: 8, ep: 8, dp-attn: true, kv-offloading: none, conc-list: [52, 72, 100, 128, 144, 196, 512], router: { name: sglang-router, version: "0.3.2" } } | ||
| - { tp: 4, kv-offloading: none, conc-list: [1, 2, 4, 8, 16] } | ||
| - { tp: 8, kv-offloading: none, conc-list: [1, 2, 4, 8, 16, 32, 40] } | ||
| - { tp: 4, ep: 4, dp-attn: true, kv-offloading: none, conc-list: [8, 16, 24, 32, 40], router: { name: sglang-router, version: "0.3.2" } } | ||
|
Comment on lines
14264
to
+14269
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🔴 This PR changes the B300 benchmark recipe (mem-fraction-static, MegaMoE DEP path, new low-latency TP path, several SGLANG_* env vars) and the corresponding search-space in configs/nvidia-master.yaml, but appends no entry to perf-changelog.yaml. Since run-sweep.yml is path-filtered on perf-changelog.yaml and process_changelog.py derives the entire sweep matrix from newly-appended changelog lines, merging as-is means the B300 rerun this PR exists to produce will never execute. Please append a perf-changelog.yaml entry keyed to dsv4-fp4-b300-sglang-agentic-hicache (config-key, description, PR link) at the end of the file. Extended reasoning...What the bug is: The PR's stated purpose is to "rerun only the B300 configuration" for The code path that triggers it: Why existing code doesn't prevent it: There is no other trigger path. Labels like Impact: Concretely, merging this PR as-is makes it a functional no-op for its own stated purpose. The mem-fraction-static OOM fix, the MegaMoE DEP path, the new low-latency TP-only path, and the revised concurrency search-space all land on Step-by-step proof:
How to fix: Append a |
||
| - { tp: 4, ep: 4, dp-attn: true, kv-offloading: dram, kv-offload-backend: { name: hicache }, conc-list: [32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 128], router: { name: sglang-router, version: "0.3.2" } } | ||
| - { tp: 8, ep: 8, dp-attn: true, kv-offloading: none, conc-list: [52, 72, 100, 128, 136, 144, 152, 196], router: { name: sglang-router, version: "0.3.2" } } | ||
|
|
||
| # DEP8 prefill uses an 8K batch because 16K OOMs in the FP4 MoE intermediate; | ||
| # decode uses FULL_DECODE_ONLY after the controlled graph test restored decode | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🔴 The DP-attention branch launches
sglang.launch_serverwith--cuda-graph-max-bs-decode(lines 153/163), a flag name that appears nowhere else in this repo — every other launcher, including the sibling MegaMoE DEP8 recipe sizing the identical 544 decode-graph batch (fixed_seq_len/dsv4_fp4_b300_sglang.sh:113), uses the plain--cuda-graph-max-bs. If SGLang's argparse rejects the-decodesuffix, the server will fail to start for everydp-attn: trueconfig (3 of the 5 search-space rows), which is exactly the MegaMoE DEP configuration this PR exists to rerun. Please confirm against the pinned SGLang image's server_args that this flag is real before merging; separately, the comment above it ("DEP8 ... serves conc up to 512") is now stale since this PR's own nvidia-master.yaml diff drops 512 from the DEP8 conc-list, leaving 196 as the new max.Extended reasoning...
The flag.
CUDA_GRAPH_ARGS=(--cuda-graph-max-bs-decode 544)(TP8, line 153) and(--cuda-graph-max-bs-decode 128)(TP4, line 163) are only reachable whenDP_ATTENTION=true, which covers 3 of the 5 search-space rows indsv4-fp4-b300-sglang-agentic-hicache(DEP4-none, DEP4-hicache, DEP8-none). A repo-wide search shows--cuda-graph-max-bs-decodeexists nowhere else in InferenceX — not in any other SGLang launcher, and agit log -Spickaxe search shows this commit is the very first time the string has ever appeared in this repository's history. The strongest counter-evidence sits right next to it:benchmarks/single_node/fixed_seq_len/dsv4_fp4_b300_sglang.shruns the same DeepSeek-V4 FP4 B300 MegaMoE DEP8 configuration (same--moe-a2a-backend megamoe, sameSGLANG_OPT_DEEPGEMM_MEGA_MOE_NUM_MAX_TOKENS_PER_RANK) and sizes the decode graph to the identical value, 544, but with the plain--cuda-graph-max-bs(line 113). This script's own non-DP fallback (line 191) also falls back to the plain flag. That is about as close to an apples-to-apples control as you get, and it points at a typo/transcription slip rather than an intentional, SGLang-supported decode-specific flag.\n\nWhy it matters.sglang.launch_serverparses its CLI viaargparse, which aborts the process withSystemExit(2)("unrecognized arguments") on any unknown flag, before CUDA context creation or model load. If--cuda-graph-max-bs-decodeisn't recognized by the pinned image (lmsysorg/sglang:nightly-dev-cu13-20260707-b4155233), every DP-attention job in this sweep — the exact B300 MegaMoE DEP recipe this PR is explicitly trying to preserve and rerun — fails immediately at startup. The PR's stated validation (bash -n, YAML parsing,load_config_files) only checks shell/YAML syntax; none of it constructs or exercises the actualsglang.launch_serverargv, so this would slip through and only be caught once the GPU jobs actually run.\n\nAddressing the refutation. One verifier argued this is refuted by the PR's own evidence: the OOM analysis in the description says jobs from run 29367944489 reached CUDA warmup and died insidedeep_gemm.fp8_paged_mqa_logits— which is downstream of argument parsing, so if the flag were invalid, those jobs would have died at parse time instead, before ever touching CUDA. That's a real observation, but it rests on an unverifiable assumption: that predecessor PR #2145's script used the exact same-decodespelling and that this PR's DEP4 lines are a byte-for-byte carryover. I could not find #2145 in this repository's git history (no remote is configured, and no prior commit ever contains "cuda-graph-max-bs-decode" pergit log -S), and the PR description itself calls this a rebuild "on the latest main" of a PR whose diff had to be manually reconstructed (excluding B200 and changelog changes). A manual reconstruction is exactly the kind of step where a flag name could be mistyped even if the original #2145 script used the correct plain flag — we simply cannot confirm from what's in front of us that the run 29367944489 logs correspond to a config using the-decodespelling rather than the correct one. Given that ambiguity, and given that the one piece of concrete, in-repo, apples-to-apples evidence (the sibling fixed_seq_len recipe) uses the plain flag for the identical 544 value, I still think this needs the author to explicitly confirm the flag against the pinned SGLang image before merge rather than relying on an inference about an unrelated historical run.\n\nStep-by-step proof of the failure mode (if the flag is indeed invalid):\n1. A search-space entry withdp-attn: true, e.g.tp: 8, ep: 8, is scheduled — one of the 3 affected rows.\n2. The script enters theDP_ATTENTION=truebranch (line ~119) and, sinceTP=8, setsCUDA_GRAPH_ARGS=(--cuda-graph-max-bs-decode 544)(line 153).\n3.SGLANG_CMDis assembled including""(line ~229) and executed via"" >> "" 2>&1 &.\n4.sglang.launch_server'sargparse.ArgumentParser.parse_args()encounters--cuda-graph-max-bs-decode, finds no matchingadd_argument, and callsparser.error(...), which prints "unrecognized arguments: --cuda-graph-max-bs-decode 544" and exits with status 2 — before any CUDA/model initialization.\n5.wait_for_server_readypolls the health port, never gets a response (the process already exited), and the job fails/hangs on the timeout instead of ever reaching the benchmark — for all 3 dp-attn rows, defeating the PR's stated purpose of rerunning exactly this B300 MegaMoE DEP configuration.\n\nFix. Confirm--cuda-graph-max-bs-decodeis a recognized argument in the pinned SGLang nightly'sserver_args.py/launch_serverbefore merge (e.g. viapython -m sglang.launch_server --helpagainst the actual image, or grepping the vendored SGLang source in the container). If it isn't, change both occurrences (lines 153, 163) to the plain--cuda-graph-max-bs, consistent with the sibling MegaMoE recipe and this script's own non-DP fallback. While touching this block, the comment directly above ("DEP8 (dp 8) serves conc up to 512") is also worth updating since this PR's ownconfigs/nvidia-master.yamldiff removes 512 from the DEP8 conc-list, leaving 196 as the new max — a cosmetic follow-up, not a blocker on its own.