Skip to content

[WIP] Update vllm B300 Minimax M3#2124

Open
jiahanc wants to merge 9 commits into
mainfrom
jiahanc/m3-b300-update
Open

[WIP] Update vllm B300 Minimax M3#2124
jiahanc wants to merge 9 commits into
mainfrom
jiahanc/m3-b300-update

Conversation

@jiahanc

@jiahanc jiahanc commented Jul 9, 2026

Copy link
Copy Markdown
Collaborator

No description provided.

@github-actions

github-actions Bot commented Jul 9, 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 9, 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 关于重新运行失败任务的文档

@jiahanc jiahanc added the NVIDIA label Jul 9, 2026
Comment on lines +6 to +10
# baked into the perf container image.
#
# At runtime the recipe swaps the image's FlashInfer for the pinned nightly
# release and applies the CuTeDSL split-K gemm patch on top, mirroring vLLM
# commits 82a00090a (nightly install) and 0a16bea6b (patch).

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 header comment (lines 6-10) says the recipe swaps in the pinned FlashInfer nightly and applies the CuTeDSL split-K gemm patch at runtime, but the entire block that would do this (lines 26-60) is prefixed with # # — nothing runs at benchmark time. The new 3115-line patches/flashinfer-cutedsl-splitk-gemm.patch is only referenced from inside that commented-out block, so it's currently dead weight in the tree. Before flipping this out of [WIP], either uncomment the install/patch block so the header matches actual behavior, or drop the misleading header lines and the patch file.

Extended reasoning...

What the mismatch is

The updated header comment at lines 7-10 explicitly asserts: "At runtime the recipe swaps the image's FlashInfer for the pinned nightly release and applies the CuTeDSL split-K gemm patch on top, mirroring vLLM commits 82a00090a (nightly install) and 0a16bea6b (patch)." That is the sole documentation a future reader has for what this recipe actually runs.

The block that would implement that behavior spans lines 26-60. Every non-blank line in it is prefixed with # (the outer # # visible in the diff is the two-level commenting — a block comment plus the original inline # shell comments). Because the shell simply sees #… on every line, none of these commands execute: no pip uninstall, no pip install of the nightly wheels, no patch -p1. The recipe runs against whatever FlashInfer the container image happens to ship.

Concrete proof, step-by-step

  1. source .../benchmark_lib.sh runs (line 12).
  2. check_env_vars ... runs (lines 14-23).
  3. Line 26 is # # --- FlashInfer nightly + CuTeDSL split-K gemm patch .... Bash treats # ... as a comment — the # # prefix is just two hash characters at column 0.
  4. Lines 27-60 all start with # (verified in the diff and in the modified-files view). Bash silently skips each one.
  5. Execution resumes at line 62 (if [[ -n "${MODEL_PATH:-}" ]]; then). FLASHINFER_VERSION, FLASHINFER_PATCH, SITE_PACKAGES, etc. are never set; pip uninstall/pip install/patch are never invoked.
  6. vllm serve at line 96 launches with the image's pre-baked FlashInfer — no nightly, no split-K patch.

Dead-file consequence

The only two references to patches/flashinfer-cutedsl-splitk-gemm.patch in the repo are inside that commented-out block (line 49: # FLASHINFER_PATCH="…/patches/flashinfer-cutedsl-splitk-gemm.patch", line 55: # patch -p1 -d "${SITE_PACKAGES}" < "$FLASHINFER_PATCH"). Since neither line executes, nothing in the codebase reads the file. A 3115-line committed artifact that no code path consumes is dead weight — it also implies to reviewers that the split-K path is being exercised, which it isn't.

Impact and fix

No runtime failure — the recipe still runs. This is a documentation-vs-code mismatch plus a large unused artifact, both of which will mislead future readers about which FlashInfer code path the benchmark actually measures. The right resolution depends on the author's intent:

  • If the intent is to run with the pinned nightly + patch, uncomment lines 26-60 (or at minimum reword the header to say the swap is temporarily disabled and why).
  • If the intent is to defer the swap, delete lines 7-10 of the header and remove patches/flashinfer-cutedsl-splitk-gemm.patch from the tree; re-add both in the follow-up PR that enables the swap.

Since the PR is [WIP], this should be resolved before flipping out of WIP.

Comment thread perf-changelog.yaml Outdated
Comment on lines +4647 to +4651
- config-keys:
- minimaxm3-fp4-b300-vllm
description:
- "update vllm image"
pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2119

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 perf-changelog entry added at line 4647-4651 has two convention issues: the pr-link points to pull/2119 but this PR is #2124 (copy-paste from an unrelated PR), and the description is just "update vllm image" without the source→target image tags shown in the AGENTS.md §Updating Docker images example ("Update vLLM image from vX to vY"). It also omits the new --attention_config.indexer_kv_dtype fp8 flag and VLLM_EXECUTE_MODEL_TIMEOUT_SECONDS=1800 env var added in the same diff, so the changelog can't be used to reconstruct what changed without cross-referencing git.

Extended reasoning...

What the bug is

The new entry in `perf-changelog.yaml` at lines 4647-4651:

```yaml

has two departures from the repo's changelog conventions:

  1. Wrong `pr-link`. The link points to #2119, but this is PR [WIP] Update vllm B300 Minimax M3 #2124. PR [WIP] Update vllm B300 Minimax M3 #2119 is unrelated (not in this branch's history), so this is a copy-paste from another PR/entry.
  2. Thin `description`. `"update vllm image"` omits both the source and target image tags. The diff in `configs/nvidia-master.yaml` shows a bump from `nightly-93d8f834dd8acf33eb0e2a75b2711b628cb6e226` → `nightly-2afa3f7e950264bb179d030c23a1ed1f46558fd9`, but the changelog records neither. The same diff also adds `--attention_config.indexer_kv_dtype fp8` and `VLLM_EXECUTE_MODEL_TIMEOUT_SECONDS=1800`, which aren't mentioned either.

Why the existing conventions matter

AGENTS.md §Updating Docker images gives the canonical example:

description: ["Update vLLM image from v0.11.2 to v0.13.0"]
pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/XXX # current PR

All recent entries in this file (#2113, #2114, #2115, #1799) follow this: their pr-link matches their own PR number, and their description names the tag/version being introduced. This one is the outlier.

Impact

This does not break the benchmark run or CI — pr-link and free-text description are audit metadata, not load-bearing for the sweep trigger (the load-bearing field is config-keys, which is correct here). Blast radius is limited to the changelog's auditability: a future reader trying to trace "which PR introduced this image bump" from the changelog alone will land on the wrong PR and won't see the tag delta or the new flags/env vars.

Step-by-step proof

  1. git log --oneline on this branch shows commit 0908dff add m3 config, which is the PR-2124 head; no reference to #2119 exists in the branch history.
  2. grep -n "pull/2119" perf-changelog.yaml returns only line 4651 — no other entry claims to come from PR [WIP] Update vllm B300 Minimax M3 #2119, ruling out "this belongs to a different logical entry".
  3. Comparing against the entry immediately above (line 4643-4645) and the AGENTS.md example: both include image tags in description, while this one does not.

How to fix

Update the entry to:

- config-keys:
    - minimaxm3-fp4-b300-vllm
  description:
    - "Update vLLM image from nightly-93d8f834dd to nightly-2afa3f7e95"
    - "Add --attention_config.indexer_kv_dtype fp8"
    - "Set VLLM_EXECUTE_MODEL_TIMEOUT_SECONDS=1800"
  pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2124

Noting the PR is still marked [WIP], so this is a natural cleanup before merge rather than a blocker.

Comment thread perf-changelog.yaml Outdated
- config-keys:
- minimaxm3-fp4-b300-vllm
description:
- "update vllm image"

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.

🟡 PR title and description don't satisfy the AGENTS.md bilingual requirement: title [WIP] add m3 config has no / 中文标题 suffix, and the body 中文:添加 MiniMax-M3 配置。 is Chinese-only. AGENTS.md line 7 mandates <English title> / <中文标题> and English content followed by its Chinese translation in the PR body. Worth fixing before flipping out of [WIP].

Extended reasoning...

AGENTS.md line 7 states: "PR and GitHub-issue titles & descriptions must be bilingual — include a Simplified Chinese version in addition to English. Title format: <English title> / <中文标题>. In the PR/issue body, follow the English content with its Chinese translation."

This PR violates both halves of that rule:

  1. Title[WIP] add m3 config is English-only. It needs a / <中文标题> suffix, e.g. [WIP] add m3 config / [WIP] 添加 m3 配置.

  2. Description body — the current body is 中文:添加 MiniMax-M3 配置。, which is Chinese-only. The 中文: prefix is telling — it labels what should be the trailing translation of a missing English original. Per the AGENTS.md ordering (English first, then Chinese), the body should read something like:

    Add the MiniMax-M3 NVFP4 B300 vLLM recipe and refresh the perf image.
    
    中文:添加 MiniMax-M3 NVFP4 B300 vLLM 配方并更新 perf 镜像。
    

Step-by-step check against the rule:

  • AGENTS.md line 7 title format requires <English> / <中文> — the current title contains no / separator and no CJK characters, so it fails the format.
  • AGENTS.md line 7 body rule requires both English and Chinese, with English preceding Chinese — the current body contains only Chinese, so it fails on both count and ordering.

Impact: No runtime consequence — this is a PR-metadata convention, not a code defect. But once [WIP] is removed and the PR heads for review, reviewers will bounce it on this rule (it has been enforced on other recent PRs). Fixing it now is a trivial edit to the PR title and description on GitHub and unblocks the eventual merge.

Severity: nit — it's a WIP PR and the author is expected to polish metadata before flipping it ready-for-review. Not blocking the code content of this change.

@jiahanc jiahanc changed the title [WIP] add m3 config [WIP] Update vllm B300 Minimax M3 Jul 9, 2026
@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

@jiahanc jiahanc force-pushed the jiahanc/m3-b300-update branch from 85deb99 to 0f90be4 Compare July 9, 2026 12:19
@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

Comment thread benchmarks/single_node/fixed_seq_len/minimaxm3_fp4_b300.sh Outdated
@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

@jiahanc jiahanc force-pushed the jiahanc/m3-b300-update branch from df94f89 to 0e761b1 Compare July 10, 2026 01:18
@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

@jiahanc jiahanc force-pushed the jiahanc/m3-b300-update branch from aba52c4 to 426be16 Compare July 10, 2026 16:34
jiahanc added 5 commits July 10, 2026 09:34
中文:添加 MiniMax-M3 配置。
中文:路由 GEMM 使用 BF16 权重。
中文:安装固定版本的 FlashInfer nightly,启用 CuTeDSL split-K 补丁,并移除 BF16 路由 GEMM 补丁。
中文:改用 FlashInfer 0.6.14 的 CUDA 13 extra,并删除单独的 CUTLASS DSL 安装步骤。
中文:改用 python3,并安装相互匹配的 FlashInfer 0.6.14 core、cubin 和 CUDA 13.0 JIT cache。
jiahanc added 4 commits July 10, 2026 09:34
中文:为 FlashInfer core、cubin 和 JIT cache 安装统一添加 --no-deps,避免重新解析镜像依赖。
Signed-off-by: jiahanc <173873397+jiahanc@users.noreply.github.com>
中文:升级到包含上游 SM100 low-M MXFP8 split-K 的 FlashInfer nightly,删除本地 split-K 补丁,并移除显式的 TRT-LLM all-reduce backend 配置。
中文:应用 AutoTuner non-Tensor 输入保护修复。
@jiahanc jiahanc force-pushed the jiahanc/m3-b300-update branch from 426be16 to 69dcebd Compare July 10, 2026 16:35
@github-actions

Copy link
Copy Markdown
Contributor

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

Projects

Status: No status

Development

Successfully merging this pull request may close these issues.

2 participants