Skip to content

[AgentX] MiniMax-M3.1-Flash GB300 SGLang: update config / [AgentX] MiniMax-M3.1-Flash GB300 SGLang:更新配置 - #4686

Merged
edwingao28 merged 9 commits into
mainfrom
minimaxm31flash-gb300-sglang-pd
Nov 1, 2026
Merged

edwingao28 merged 9 commits into
mainfrom
minimaxm31flash-gb300-sglang-pd

Conversation

@zijiexia

Copy link
Copy Markdown
Collaborator

Update config.

中文

更新配置。

AI model disclosure

Prepared with Claude Opus 5.5 (claude-opus-5-5).

🤖 Generated with Claude Code

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 任务通过。临时性失败通常可以通过重新运行恢复;参见重新运行失败任务的说明。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@zijiexia zijiexia added the full-sweep-fail-fast Full sweep with canary gate; first failure cancels the rest of that matrix (recommended) label Oct 30, 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.

Findings marked 🟡 are optional suggestions and need no follow-up push.

speculative-algorithm: DSPARK
speculative-dspark-block-size: 7
speculative-use-block-verification: true
speculative-draft-kv-cache-dtype: fp8_e4m3

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.

🔴 This new config runs the DSpark draft with an FP8 KV cache while the target keeps its default bf16 KV, which CONTRIBUTING.md forbids. Both roles set speculative-draft-kv-cache-dtype: fp8_e4m3 and set no target kv-cache-dtype. FP8 draft KV is allowed only when it is the framework default or applies to target and draft alike. Fix: drop the draft-only override in both roles so the draft keeps the framework default, or set one upstream-supported KV dtype for target and draft. Same pattern at 2 sites (disagg.yaml:119, disagg.yaml:169).

Why this was flagged

CONTRIBUTING.md:64-66 allows only the framework's default draft KV dtype, or an upstream-supported dtype applied to both target and draft. CONTRIBUTING.md:90 forbids draft-only dtype overrides that lower precision below the default. The prefill (disagg.yaml:119) and decode (disagg.yaml:169) args set speculative-draft-kv-cache-dtype: fp8_e4m3 but leave the target kv-cache-dtype unset. The repo's own changelog (perf-changelog.yaml:11515) describes this flag as storing draft KV in FP8 "instead of the bf16 default". So the new config key publishes a lowered-precision draft that the precision checks (codeowner verify Check 13) should FAIL. The single-node minimaxm31flash recipes already use this override, but this PR extends it to a new multi-node config and its results. Matching vLLM's drafter is not an exemption under CONTRIBUTING.md:102-106.

Verification: The prefill args (disagg.yaml:116-119) and the decode args (disagg.yaml:166-169) both set speculative-draft-kv-cache-dtype: fp8_e4m3. Neither role sets a target kv-cache-dtype, so the override is aimed at the draft alone. perf-changelog.yaml:11515 says this flag replaces "the bf16 default", and CONTRIBUTING.md:90 forbids such draft-only dtype overrides.

Comment on lines +76 to +91
PYTHONUNBUFFERED: "1"
PYTHONNOUSERSITE: "1"
FMHA_SM100_ALLOW_JIT: "1"
SGLANG_TIMEOUT_KEEP_ALIVE: "1800"
SGLANG_DISAGGREGATION_BOOTSTRAP_TIMEOUT: "3600"
SGLANG_DISAGGREGATION_WAITING_TIMEOUT: "3600"
SGLANG_MOONCAKE_CUSTOM_MEM_POOL: "True"
SGLANG_OPT_DEEPGEMM_MEGA_MOE_NUM_MAX_TOKENS_PER_RANK: "32768"
NCCL_MNNVL_ENABLE: "1"
NCCL_CUMEM_ENABLE: "1"
MC_FORCE_MNNVL: "1"
MC_ENABLE_DEST_DEVICE_AFFINITY: "1"
# Some GB300 nodes list a BMC interface with the same address on every node first.
MC_TCP_BIND_ADDRESS: "{node}"
WITH_NVIDIA_PEERMEM: "0"
args:

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.

🔴 Turns can get 529 rejections under load if Dynamo 1.7's default backend admission limits apply. That happens when one DP rank fills before the engine queue. The prefill and decode env blocks never raise the DYN_BACKEND_ADMISSION_* limits. Every other Dynamo 1.7 SGLang AgentX recipe raises them. Fix: add DYN_BACKEND_ADMISSION_ENGINE_REQUEST_LIMIT, DYN_BACKEND_ADMISSION_ENGINE_REQUEST_WAITING_LIMIT and DYN_BACKEND_ADMISSION_REQUEST_QUEUE_LIMIT to both role envs so the SGLang scheduler queues work instead of Dynamo rejecting it.

Why this was flagged

This applies if Dynamo 1.7.0.dev20261030 (identity.frameworks.dynamo, disagg.yaml:13) keeps the admission behaviour that dsv41flash/sglang/gb300-fp4/agentx/disagg-dep16-hicache-variants.yaml:87-91 describes: "Dynamo 1.7 backend admission rejects turns with 529 once a DP rank is full". dsv41flash agg-variants.yaml:69-73 says the same. Both recipes set the three limits to "10000", and the minimaxm31flash vLLM gb300 recipes raise them too. The new recipe sets none of them in the prefill env (disagg.yaml:76-91) or the decode env (disagg.yaml:133-148). Decode at conc 360 runs 48 slots per DP rank (max-running-requests 384 over 8 ranks), with load-balance-method total_tokens. That is not request-count balancing, so a single rank can fill while others still have room. The AgentX client would then see failed turns, which can fail the sweep or skew its results.

Verification: The new recipe pins dynamo: "1.7.0.dev20261030" (disagg.yaml:13). Neither the prefill env (disagg.yaml:74-89) nor the decode env (disagg.yaml:131-146) sets any DYN_BACKEND_ADMISSION_* variable. The dsv41flash disagg-dep16-hicache-variants.yaml:87-91 raises all three and notes 529s once a DP rank is full. Decode allows 48 per DP rank (disagg.yaml:162-163) against conc up to 360, about 45 per rank.

Comment thread inferencex-e2e/perf-changelog.yaml Outdated
- "Add disaggregated SGLang behind Dynamo for MiniMax-M3.1-Flash AgentX on GB300 with lmsysorg/sglang:nightly-cu134-20261030-e371881 (Dynamo 1.7.0.dev20261030, Mooncake transfer, minimax-msa kernels)."
- "6 DEP2 prefill workers with a DEP8 decode at conc 280-360 or a DEP16 decode at conc 300; MegaMoE, DSpark block 7 with fp8 draft KV, Dynamo KV router with fastokens."
- "Prefill: shortest-prefill-first, chunk 8192, mem-fraction-static 0.90, HiCache 200 GB per rank write_back."
pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/XXXX

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.

🟡 (optional) The new changelog block links to a placeholder PR (pull/XXXX), so ingested results for this config key point to a nonexistent PR. The changelog is append-only and byte-sensitive, so fixing it after merge goes against the append-only rule. Fix: set pr-link to this PR's real number before merge.

Why this was flagged

perf-changelog.yaml:11714 sets pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/XXXX. Every other entry in the file uses a real PR number, and this is the only XXXX in the file. The tooling treats the placeholder as defective: infx/workflows/recover_failed_ingest.py:243-245 emits "entry {index} has an XXX pr-link". If merged as-is, results collected for minimaxm31flash-fp4-gb300-dynamo-sglang-agentic-dspark-disagg are tied to a link that resolves nowhere. AGENTS.md:88 makes the changelog append-only and byte-sensitive, so a later fix means editing bytes that are already merged.

Verification: perf-changelog.yaml:11714 adds pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/XXXX. validate_perf_changelog.py:21-24 accepts only "XXX" and ".../pull/XXX" (PR_LINK_PLACEHOLDERS). As a result the merge helper fails on this PR. PR CI does not catch this: run-sweep.yml:105 runs validate_perf_changelog main(), which only calls infx.matrix.plan and never compare_entries.

@@ -0,0 +1,202 @@
schema: 2

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.

🟡 nit (optional): a two-row bundle is named disagg.yaml, but the recipe guide requires <agg|disagg>[-<axis>]-variants.yaml for multi-row entries. Every sibling sglang AgentX disagg bundle follows that rule. Fix: rename to disagg-variants.yaml and update both srt-recipe: selectors in nvidia-master.yaml.

Why this was flagged

RECIPES.md:23 says an entry with two or more rows of one design keeps them in one <agg|disagg>[-<axis>]-variants.yaml. AGENTS.md:90 repeats that rows of one design share a *-variants.yaml. The master entry selects two rows from this file: disagg.yaml:override_6p_dep2_dep8 and disagg.yaml:override_6p_dep2_dep16. Sibling sglang AgentX bundles, for example dsv41flash/sglang/gb300-fp4/agentx/disagg-dep16-hicache-variants.yaml and glm5.2/sglang/gb300-fp4/agentx/disagg-variants.yaml, use the -variants suffix. The plain name is reserved for single-row recipes, so this bundle breaks the convention that tells the two apart.

Verification: nit. The new master entry takes two rows of one design from the bundle, srt-recipe: disagg.yaml:override_6p_dep2_dep8 and srt-recipe: disagg.yaml:override_6p_dep2_dep16. AGENTS.md:90 says: "Rows of one design share a *-variants.yaml". The sibling glm5.2 has disagg-variants.yaml. No code in the repo checks the filename, so nothing fails at runtime.

Comment on lines +3 to +6
# MiniMax-M3.1-Flash AgentX on GB300: SGLang prefill and decode behind Dynamo.
# Six DEP2 prefill workers feed a DEP8 decode (conc 280-360) or a DEP16 decode
# (conc 300). The cu134 nightly at e371881 carries sgl-project/sglang#46851
# (DSpark decode under attention DP) and the minimax-msa kernels.

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.

🟡 (optional) Maintainers get header, topology and history comments that the repo's mandatory comment rule (AGENTS.md:56-57) forbids in every file. These describe the file, topology or overrides, or cite where the image fix came from (sgl-project/sglang#46851). Fix: delete every header, section and provenance comment and keep only one-line why-comments on specific values, which covers the 6 sites listed. Same pattern at 6 sites (disagg.yaml:3-6, disagg.yaml:68, disagg.yaml:127, disagg.yaml:187, disagg.yaml:191, nvidia-master.yaml:7580-7583).

Why this was flagged

AGENTS.md:54-58 makes comments mandatory-style in every file: no header comments describing a file, topology, config, recipe, override or section, and no history or provenance. The new recipe opens with a four-line header at disagg.yaml:3-6 that describes topology and upstream PR provenance. Topology section comments sit at disagg.yaml:68 ("# DEP2 prefill: attention DP2 + MoE EP2.") and disagg.yaml:127 ("# DEP8 decode across two trays."). The second one is also wrong for override_6p_dep2_dep16, which uses 4 nodes. Override section comments sit at disagg.yaml:187 and :191. The master entry repeats the header at nvidia-master.yaml:7580-7583. No sibling entry or tooling enforces this, so the comments would merge against the stated repo rule.

Verification: nit. The trigger is that the PR merges as written. AGENTS.md, which CLAUDE.md hands all guidance to, reads at lines 54-57: "No header comments describing a file, topology, config, recipe, override, or section." Lines 3-6 of the new disagg.yaml are a file and topology header with upstream provenance. Nothing breaks at runtime: comments do not change what the benchmark runs.

… trim comments

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

github-actions Bot commented Oct 30, 2026 •

Copy link
Copy Markdown
Contributor

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

Copy link
Copy Markdown
Collaborator Author

/use 41154407006

@github-actions

github-actions Bot commented Oct 31, 2026 •

Copy link
Copy Markdown
Contributor

@zijiexia staged run 41154407006.

This run remains available across future /stage-results requests. Staging the same run ID again updates its staged data. Staging workflow

…-sglang-pd

# Conflicts:
#	inferencex-e2e/perf-changelog.yaml
@zijiexia

Copy link
Copy Markdown
Collaborator Author

/reuse-sweep-run 41154407006

zijiexia and others added 2 commits October 30, 2026 22:49
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@zijiexia zijiexia 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 31, 2026
@zijiexia

Copy link
Copy Markdown
Collaborator Author

/use 41185040680

@github-actions

github-actions Bot commented Oct 31, 2026 •

Copy link
Copy Markdown
Contributor

@zijiexia staged run 41185040680.

This run remains available across future /stage-results requests. Staging the same run ID again updates its staged data. Staging workflow

…-sglang-pd

# Conflicts:
#	inferencex-e2e/perf-changelog.yaml
@edwingao28

Copy link
Copy Markdown
Collaborator

/reuse-sweep-run 41185040680

@edwingao28 edwingao28 left a comment

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.

Reviewed: the reused sweep run 41185040680 matches the final recipe, all 5 points completed with no request errors, GSM8K is 0.958/0.959, and the changelog conflict is resolved.

@edwingao28
edwingao28 merged commit 7c7013e into main Nov 1, 2026
27 checks passed
@edwingao28
edwingao28 deleted the minimaxm31flash-gb300-sglang-pd branch November 1, 2026 02:20
@github-actions

github-actions Bot commented Nov 1, 2026

Copy link
Copy Markdown
Contributor

Ingest report — ✅ Results ingested into the production database.

Ingest workflow · Merge Ingest run · Benchmark source run

Category new duplicate skipped unmapped failed
benchmark 5 0 0 0 0
eval 2 2 0 0 0
trace 5 0 0 0 0
power 0 0 5 0 0

benchmarkFiles 5, rawBenchmarkRows 5, coveredByPerJobFiles 0, purgedPoints 0, failedRunRows 0, runStatsNew 0, runStatsDuplicate 0, evalSamplesNew 2638, gpuMetricSamplesNew 0, powerPublicationPoints 5, changelogEntriesWritten 1

Counts cover only this run. Rows: benchmark_results, eval_results, agentic rows linked to a trace, gpu_metrics series. This comment updates if the ingest is rerun.

中文

Ingest 报告 — ✅ 结果已写入 production 数据库。

上表仅统计本次运行写入的数据,各行单位依次为 benchmark_results 行、eval_results 行、已关联 trace 的 agentic 行和 gpu_metrics 序列。重新运行 ingest 时本评论会原地更新。

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

Labels

full-sweep-fail-fast Full sweep with canary gate; first failure cancels the rest of that matrix (recommended)

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

2 participants