Skip to content

[Klaud Cold] minimaxm3-fp4-mi355x-atom-agentic-mtp: MiniMax-M3 MXFP4 ATOM AgentX on MI355X with the Inferact EAGLE3 drafter / MI355X 上采用 Inferact EAGLE3 草稿模型的 MiniMax-M3 MXFP4 ATOM AgentX 配方 - #2734

Open
functionstackx wants to merge 3 commits into
mainfrom
feat/minimaxm3-fp4-mi355x-atom-agentic-mtp-atom-recipe
Open

Conversation

@functionstackx

@functionstackx functionstackx commented Aug 26, 2026

Copy link
Copy Markdown
Collaborator

Summary / 摘要

Day-zero MiniMax-M3 MXFP4 AgentX recipe on MI355X served by ATOM, with EAGLE3 speculative decoding against the Inferact drafter. The server flags are a port of the retired single-turn 8k1k MI355X ATOM recipe; the serve shape follows the upstream ROCm/ATOM Qwen3.5 recipe — TP4, FP8 KV cache, three draft tokens, ATOM defaults for everything it does not name.

在 MI355X 上新增由 ATOM 服务的 MiniMax-M3 MXFP4 AgentX 配方,采用 EAGLE3 投机解码,草稿模型为 Inferact 版本。服务参数移植自已退役的单轮 8k1k MI355X ATOM 配方;服务形态遵循上游 ROCm/ATOM Qwen3.5 recipe:TP4、FP8 KV 缓存、3 个草稿 token,其余未指明的参数保持 ATOM 默认。

Config key / 配置项

minimaxm3-fp4-mi355x-atom-agentic-mtpamd/MiniMax-M3-MXFP4, rocm/atom-dev:nightly_202608251555 (latest ATOM nightly, verified on Docker Hub), cluster:mi355x-amds, TP4, conc [1, 4, 8, 12, 16], no KV offloading.

Speculative decoding / 投机解码

--method eagle3 --draft-model Inferact/MiniMax-M3-EAGLE3 --num-speculative-tokens 3 — the drafter and draft length the retired 8k1k MI355X ATOM recipe used, and MiniMax-M3's plan-of-record draft per MODELS.md. The checkpoint's native MTP modules are not used. Throughput runs pin --spec-decode-acceptance-length 2.83 from golden_al_distribution/minimaxm3_eagle3.yaml (thinking_on[3]); eval-only runs drop the pin and use real target verification.

--method eagle3 --draft-model Inferact/MiniMax-M3-EAGLE3 --num-speculative-tokens 3,即已退役 8k1k MI355X ATOM 配方所用的草稿模型与草稿长度,也是 MODELS.md 中 MiniMax-M3 的 PoR 草稿方案;不使用 checkpoint 自带的原生 MTP 模块。吞吐运行按 golden_al_distribution/minimaxm3_eagle3.yamlthinking_on[3] 锁定 --spec-decode-acceptance-length 2.83,仅评测运行取消锁定并使用真实目标验证。

Ported from the retired 8k1k MI355X ATOM recipe / 移植自已退役的 8k1k MI355X ATOM 配方

ptpc_fp8 online_quant_config with the MiniMax-M3 exclusion list, ATOM_FORCE_ATTN_TRITON=1, AITER_QUICK_REDUCE_QUANTIZATION=INT4, --block-size 128, --gpu-memory-utilization 0.8, --max-num-batched-tokens 32768, --kv_cache_dtype fp8, --trust-remote-code.

Two deliberate departures / 两处刻意不同:

  • Prefix caching stays ON. --no-enable_prefix_caching is not carried over — trace replay is exactly the workload prefix caching pays for.

  • --max-model-len left at the model default, so agentic long-context traces are not clipped to the 8k1k scenario's 32768.

  • No --hf-overrides index-cache block (the vLLM MI355X arm sets one; this recipe deliberately does not).

  • 保持前缀缓存启用:不沿用 --no-enable_prefix_caching——轨迹回放正是前缀缓存最有价值的负载。

  • --max-model-len 使用模型默认值,避免长上下文智能体轨迹被裁剪到 8k1k 场景的 32768。

  • 不添加 --hf-overrides 索引缓存参数(vLLM MI355X 分支有设置,本配方刻意不设)。

TP4 is both what the upstream recipe prescribes and what this model wants: MiniMax-M3 has four KV heads, so one KV head per rank keeps the AITER sparse-attention fast path. No launcher change needed — runners/launch_mi355x-amds.sh already resolves the agentic/ ATOM _mtp script name and routes amd/MiniMax-M3* weights to the NFS HF cache.

Files / 改动文件

  • benchmarks/single_node/agentic/minimaxm3_fp4_mi355x_atom_mtp.sh (new)
  • configs/amd-master.yaml — new entry after the vLLM MI355X sibling
  • perf-changelog.yaml — appended entry

Note / 说明

Sibling PR #2733 builds the same config key from the current InferenceX ATOM AgentX siblings instead (explicit cudagraph capture sizes, --max-num-batched-tokens 16384, no ATOM_FORCE_ATTN_TRITON). The two are mutually exclusive candidates — merge whichever sweeps green, not both.

同类 PR #2733 以当前 InferenceX 的 ATOM AgentX 配方为蓝本实现同一配置项(显式 cudagraph 尺寸、--max-num-batched-tokens 16384、不设 ATOM_FORCE_ATTN_TRITON)。两者互斥,只应合并全量 sweep 通过的那一个。

🤖 Generated with Claude Code


Note

Low Risk
Changes are limited to benchmark scripts, cluster config, and changelog; no production inference or auth paths are modified.

Overview
Adds a day-zero AgentX recipe for amd/MiniMax-M3-MXFP4 on MI355X served by ATOM (minimaxm3-fp4-mi355x-atom-agentic-mtp), with a new launcher script that runs agentic trace replay against an ATOM OpenAI server.

The server setup ports the retired single-turn 8k1k MI355X ATOM recipe: Inferact EAGLE3 drafter (Inferact/MiniMax-M3-EAGLE3), three speculative tokens, ptpc_fp8 online quant exclusions, Triton attention env, block size 128, and 0.8 GPU memory fraction. It also follows the upstream ATOM serve shape (TP4, FP8 KV cache, three draft tokens). Prefix caching stays enabled and max sequence length is not clipped to the 8k1k 32768 cap.

Throughput runs pin synthetic spec-decode acceptance length 2.83; eval-only runs drop the pin. The config registers TP4 / EP1 / no KV offload with concurrency 1, 4, 8, 12, 16 on cluster:mi355x-amds, and perf-changelog.yaml documents the entry.

Reviewed by Cursor Bugbot for commit b2eb156. Bugbot is set up for automated code reviews on this repo. Configure here.

…M AgentX on MI355X

Add the MiniMax-M3 MXFP4 agentic-coding recipe on MI355X served by ATOM,
following the upstream ATOM recipe serve shape
(https://github.com/ROCm/ATOM/blob/main/recipes/Qwen3.5.md): TP4, FP8 KV
cache, native MTP with three draft tokens, and ATOM defaults everywhere
else. MiniMax-M3 ships native MTP modules, so no external drafter is
loaded. Throughput runs pin acceptance to the committed golden curve
(AL 2.83); eval-only runs keep real target verification. Image is the
latest rocm/atom-dev nightly.

新增 MI355X 上由 ATOM 服务的 MiniMax-M3 MXFP4 智能体编码配方,服务参数遵循
上游 ATOM recipe(https://github.com/ROCm/ATOM/blob/main/recipes/Qwen3.5.md)
的形态:TP4、FP8 KV 缓存、原生 MTP 3 个草稿 token,其余参数一律保持 ATOM
默认值。MiniMax-M3 自带原生 MTP 模块,因此不加载外部草稿模型。吞吐运行将接受
长度锁定到已提交的黄金曲线(AL 2.83),仅评测运行仍使用真实目标验证。镜像使用
最新的 rocm/atom-dev nightly。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…link

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@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 关于重新运行失败任务的文档

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit caf7a90. Configure here.

Comment thread benchmarks/single_node/agentic/minimaxm3_fp4_mi355x_atom_mtp.sh
Comment thread perf-changelog.yaml Outdated
- "Add a day-zero MiniMax-M3 MXFP4 AgentX recipe on MI355X with ATOM native MTP at TP4 and concurrency 1/4/8/12/16."
- "Follow the upstream ATOM recipe serve shape: FP8 KV cache, three MTP draft tokens, and ATOM defaults for every other server knob."
- "Pin throughput runs to the committed golden acceptance length of 2.83 at three draft tokens; eval-only runs keep real target verification."
pr-link: TBD

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.

🔴 New entry's pr-link is 'TBD', which is not in the canonical placeholder set PR_LINK_PLACEHOLDERS = {"XXX", ".../pull/XXX"} checked by utils/validate_perf_changelog.py's validate_added_pr_link/compare_entries (used by utils/prepare_perf_changelog_merge.py at merge time). docs/configuration-procedures.md line 254 explicitly requires replacing 'TBD' with the real PR URL 'immediately after creating the PR'; this PR is already open (per the PR metadata) yet still carries the stale 'TBD'.

Extended reasoning...

When a maintainer runs the merge-preparation flow (prepare_perf_changelog_merge.py -> canonicalize_appended_links -> compare_entries -> validate_added_pr_link), the link 'TBD' matches neither the expected 'https://github.com/.../pull/' nor any entry in PR_LINK_PLACEHOLDERS, so it raises ChangelogValidationError("new PR entry must use ... or an XXX placeholder; found 'TBD'"), blocking automated merge/canonicalization until someone manually edits the changelog line. Fix: use the documented 'XXX' placeholder (or the real PR URL) instead of 'TBD'.

Verification: normal — the appended perf-changelog entry ends with pr-link: TBD, which the merge-preparation tooling rejects. PR_LINK_PLACEHOLDERS (utils/validate_perf_changelog.py:24-27) = {"XXX", ".../pull/XXX"} does not contain "TBD". At merge time utils/merge_with_reuse.sh:174,187 runs prepare_perf_changelog_merge.py --pr-number <PR>, which calls canonicalize_appended_links; at utils/prepare_p

Comment on lines +46 to +50
NUM_SPEC_TOKENS=3
# golden_al_distribution/minimaxm3_eagle3.yaml: minimax-m3.thinking_on[3].
# AgentX pins every submission for a model to one golden acceptance curve, so
# the native-MTP arm targets the same acceptance length as the EAGLE3 arm.
SPEC_DECODE_AL=2.83

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.

🔴 New ATOM native-MTP recipe pins SPEC_DECODE_AL=2.83 from golden_al_distribution/minimaxm3_eagle3.yaml (the non-GQA curve), but every other MiniMax-M3 EAGLE3/MTP sibling script (minimaxm3_fp4_b300_mtp.sh, minimaxm3_fp4_b200_mtp.sh, minimaxm3_fp4_b200_trt_mtp.sh, minimaxm3_fp4_b300_trt_mtp.sh, minimaxm3_fp8_h100_mtp.sh, minimaxm3_fp8_h200_mtp.sh, minimaxm3_fp4_mi355x_mtp.sh) explicitly uses golden_al_distribution/minimaxm3_eagle3_gqa.yaml (2.78) and calls out 2.83 by name as belonging to a different draft head ('that head is not what this script runs').

Extended reasoning...

Because AgentX's stated methodology requires every submission for a given model to be pinned to the same golden acceptance-length curve for cross-engine comparability, this recipe's throughput numbers are pinned to a different (higher) synthetic acceptance length than every other MiniMax-M3 recipe in the repo, making its reported throughput non-comparable/inflated relative to siblings and violating the very consistency rule the script's own comment cites. The fix is to pin SPEC_DECODE_AL=2.78 from minimaxm3_eagle3_gqa.yaml, matching the established convention for this model.

Verification: normal. The new script pins throughput to a different golden acceptance-length curve than every other MiniMax-M3 sibling, breaking the cross-submission comparability its own comment invokes and inflating reported throughput. benchmarks/single_node/agentic/minimaxm3_fp4_mi355x_atom_mtp.sh:47-50: # golden_al_distribution/minimaxm3_eagle3.yaml: minimax-m3.thinking_on[3]. # AgentX pins every submi

@github-actions

Copy link
Copy Markdown
Contributor

Swap --method mtp for the retired single-turn 8k1k MI355X ATOM recipe's
speculative setup: --method eagle3 with Inferact/MiniMax-M3-EAGLE3 and three
draft tokens. Port that recipe's remaining server flags too (ptpc_fp8 online
quant exclusions, ATOM_FORCE_ATTN_TRITON, AITER_QUICK_REDUCE_QUANTIZATION,
block size 128, memory fraction 0.8, max-num-batched-tokens 32768), keeping
prefix caching enabled and leaving max-model-len at the model default so
agentic traces are not clipped to the 8k1k scenario value.

将投机解码从原生 MTP 换成已退役的单轮 8k1k MI355X ATOM 配方所用方案:
--method eagle3,草稿模型 Inferact/MiniMax-M3-EAGLE3,3 个草稿 token。同时移植
该配方的其余服务参数(ptpc_fp8 在线量化排除项、ATOM_FORCE_ATTN_TRITON、
AITER_QUICK_REDUCE_QUANTIZATION、block size 128、显存占用 0.8、
max-num-batched-tokens 32768),并保持前缀缓存启用、max-model-len 使用模型默认值,
以免智能体长上下文轨迹被裁剪到 8k1k 场景的长度。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@functionstackx functionstackx changed the title [Klaud Cold] minimaxm3-fp4-mi355x-atom-agentic-mtp: MiniMax-M3 MXFP4 ATOM AgentX on MI355X, upstream ATOM recipe shape / 按上游 ATOM recipe 形态实现 MI355X MiniMax-M3 MXFP4 ATOM AgentX [Klaud Cold] minimaxm3-fp4-mi355x-atom-agentic-mtp: MiniMax-M3 MXFP4 ATOM AgentX on MI355X with the Inferact EAGLE3 drafter / MI355X 上采用 Inferact EAGLE3 草稿模型的 MiniMax-M3 MXFP4 ATOM AgentX 配方 Aug 26, 2026
@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.

1 participant