[AMD] Add MiniMax-M3-FP8 MI355X ATOMMESH#1865
Conversation
- Replace individual echo lines with cat <<INFO heredoc showing EP/DP flags, KV cache settings alongside TP/port info - Minor cleanup in parallel args setup Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…disagg - Export DECODE_MTP_SIZE and SPEC_DECODING in dsv4_fp4_mi355x_atom-disagg.sh so they reach server_atom.sh via submit.sh → job.slurm - Add DECODE_MTP_SIZE to check_env_vars in dsv4_fp4_mi355x_atom-disagg.sh - Pass BENCH_REQUEST_RATE into Docker container in job.slurm DOCKER_ENV_COMMON Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
DECODE_MTP_SIZE comes from additional-settings and has a default of 0, so it should not be required. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…h.sh Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Remove spaces from JSON value so it doesn't get word-split when expanded inside the eval'd command string. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
OPT_ARGS array expansion inside eval'd string caused bash word-splitting, breaking the --hf-overrides JSON argument. Inline the flag directly in all three server commands and remove the now-unused OPT_ARGS definition. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Define once near SPEC_ARGS and reference in all three server commands (prefill node 0, additional prefill nodes, decode nodes). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
"${ARRAY[@]}" inside a double-quoted assignment breaks bash -n's quote
parser. Since all three CMD strings are passed to eval, ${ARRAY[*]}
is equivalent — eval handles word splitting.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- benchmarks/multi_node/minimaxm3_fp4_mi355x_atom-disagg.sh: new CI entry point for MiniMax-M3-MXFP4, mirroring dsv4_fp4_mi355x_atom-disagg.sh. No MTP (SPEC_DECODING=none), KV_CACHE_DTYPE=auto (no fp8), MAX_MODEL_LEN/MAX_NUM_BATCHED_TOKENS=32768. - server_atom.sh: make --kv_cache_dtype conditional (skipped when KV_CACHE_DTYPE is empty or "auto"); add MAX_MODEL_LEN, MAX_NUM_BATCHED_TOKENS, CUDAGRAPH_OPT support (prefill+decode for model-len args; decode-only for cudagraph). - job.slurm: pass MAX_MODEL_LEN, MAX_NUM_BATCHED_TOKENS, CUDAGRAPH_OPT through Docker env for atom-disagg engine. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…UCE_QUANTIZATION=INT4 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Also remove CUDAGRAPH_OPT from job.slurm (linter cleanup). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…isagg.sh Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…r default) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…e --enable-tbo for non-DSv4 models Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…YPE default to empty for minimaxm3 disagg Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
Thanks for the contribution! For vLLM & SGLang, please ensure that your recipes is similar to the official vLLM recipes and/or the SGLang cookbook If it is not, please create a PR first before we can merge your single node PR into the master branch. Let's ensure that the documentation is first class such that the entire ML community can benefit from your hard work! Thank you 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. If re-running failed jobs is attempted, PR authors are responsible for ensuring it passes. See GitHub's docs on re-running failed jobs: https://docs.github.com/en/actions/how-tos/manage-workflow-runs/re-run-workflows-and-jobs#re-running-failed-jobs-in-a-workflow As a rule of thumb, generally, PR authors should request a review & get a PR approval from the respective companies' CODEOWNERS before requesting a review from core maintainers. If additional help is needed, PR authors can reach out to core maintainers over Slack. 感谢你的贡献!对于 vLLM 与 SGLang,请确保你的 recipe 与官方 vLLM recipes 和/或 SGLang cookbook 保持一致 如果不一致,请先创建一个 PR,之后我们才能将你的单节点 PR 合并到 master 分支。让我们确保文档保持一流水准,使整个 ML 社区都能从你的辛勤工作中受益!谢谢 PR 作者有责任确保合并后所有 GitHub Action 任务完全通过。 很多时候失败只是偶发抖动(flake),重新运行失败的任务即可解决。如果选择重新运行失败的任务,PR 作者有责任确保其最终通过。参见 GitHub 关于重新运行失败任务的文档:https://docs.github.com/en/actions/how-tos/manage-workflow-runs/re-run-workflows-and-jobs#re-running-failed-jobs-in-a-workflow 一般而言,PR 作者应先向相应公司的 CODEOWNERS 请求审阅并获得 PR 批准,然后再请求核心维护者审阅。 如需更多帮助,PR 作者可通过 Slack 联系核心维护者。 |
3 similar comments
|
Thanks for the contribution! For vLLM & SGLang, please ensure that your recipes is similar to the official vLLM recipes and/or the SGLang cookbook If it is not, please create a PR first before we can merge your single node PR into the master branch. Let's ensure that the documentation is first class such that the entire ML community can benefit from your hard work! Thank you 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. If re-running failed jobs is attempted, PR authors are responsible for ensuring it passes. See GitHub's docs on re-running failed jobs: https://docs.github.com/en/actions/how-tos/manage-workflow-runs/re-run-workflows-and-jobs#re-running-failed-jobs-in-a-workflow As a rule of thumb, generally, PR authors should request a review & get a PR approval from the respective companies' CODEOWNERS before requesting a review from core maintainers. If additional help is needed, PR authors can reach out to core maintainers over Slack. 感谢你的贡献!对于 vLLM 与 SGLang,请确保你的 recipe 与官方 vLLM recipes 和/或 SGLang cookbook 保持一致 如果不一致,请先创建一个 PR,之后我们才能将你的单节点 PR 合并到 master 分支。让我们确保文档保持一流水准,使整个 ML 社区都能从你的辛勤工作中受益!谢谢 PR 作者有责任确保合并后所有 GitHub Action 任务完全通过。 很多时候失败只是偶发抖动(flake),重新运行失败的任务即可解决。如果选择重新运行失败的任务,PR 作者有责任确保其最终通过。参见 GitHub 关于重新运行失败任务的文档:https://docs.github.com/en/actions/how-tos/manage-workflow-runs/re-run-workflows-and-jobs#re-running-failed-jobs-in-a-workflow 一般而言,PR 作者应先向相应公司的 CODEOWNERS 请求审阅并获得 PR 批准,然后再请求核心维护者审阅。 如需更多帮助,PR 作者可通过 Slack 联系核心维护者。 |
|
Thanks for the contribution! For vLLM & SGLang, please ensure that your recipes is similar to the official vLLM recipes and/or the SGLang cookbook If it is not, please create a PR first before we can merge your single node PR into the master branch. Let's ensure that the documentation is first class such that the entire ML community can benefit from your hard work! Thank you 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. If re-running failed jobs is attempted, PR authors are responsible for ensuring it passes. See GitHub's docs on re-running failed jobs: https://docs.github.com/en/actions/how-tos/manage-workflow-runs/re-run-workflows-and-jobs#re-running-failed-jobs-in-a-workflow As a rule of thumb, generally, PR authors should request a review & get a PR approval from the respective companies' CODEOWNERS before requesting a review from core maintainers. If additional help is needed, PR authors can reach out to core maintainers over Slack. 感谢你的贡献!对于 vLLM 与 SGLang,请确保你的 recipe 与官方 vLLM recipes 和/或 SGLang cookbook 保持一致 如果不一致,请先创建一个 PR,之后我们才能将你的单节点 PR 合并到 master 分支。让我们确保文档保持一流水准,使整个 ML 社区都能从你的辛勤工作中受益!谢谢 PR 作者有责任确保合并后所有 GitHub Action 任务完全通过。 很多时候失败只是偶发抖动(flake),重新运行失败的任务即可解决。如果选择重新运行失败的任务,PR 作者有责任确保其最终通过。参见 GitHub 关于重新运行失败任务的文档:https://docs.github.com/en/actions/how-tos/manage-workflow-runs/re-run-workflows-and-jobs#re-running-failed-jobs-in-a-workflow 一般而言,PR 作者应先向相应公司的 CODEOWNERS 请求审阅并获得 PR 批准,然后再请求核心维护者审阅。 如需更多帮助,PR 作者可通过 Slack 联系核心维护者。 |
|
Thanks for the contribution! For vLLM & SGLang, please ensure that your recipes is similar to the official vLLM recipes and/or the SGLang cookbook If it is not, please create a PR first before we can merge your single node PR into the master branch. Let's ensure that the documentation is first class such that the entire ML community can benefit from your hard work! Thank you 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. If re-running failed jobs is attempted, PR authors are responsible for ensuring it passes. See GitHub's docs on re-running failed jobs: https://docs.github.com/en/actions/how-tos/manage-workflow-runs/re-run-workflows-and-jobs#re-running-failed-jobs-in-a-workflow As a rule of thumb, generally, PR authors should request a review & get a PR approval from the respective companies' CODEOWNERS before requesting a review from core maintainers. If additional help is needed, PR authors can reach out to core maintainers over Slack. 感谢你的贡献!对于 vLLM 与 SGLang,请确保你的 recipe 与官方 vLLM recipes 和/或 SGLang cookbook 保持一致 如果不一致,请先创建一个 PR,之后我们才能将你的单节点 PR 合并到 master 分支。让我们确保文档保持一流水准,使整个 ML 社区都能从你的辛勤工作中受益!谢谢 PR 作者有责任确保合并后所有 GitHub Action 任务完全通过。 很多时候失败只是偶发抖动(flake),重新运行失败的任务即可解决。如果选择重新运行失败的任务,PR 作者有责任确保其最终通过。参见 GitHub 关于重新运行失败任务的文档:https://docs.github.com/en/actions/how-tos/manage-workflow-runs/re-run-workflows-and-jobs#re-running-failed-jobs-in-a-workflow 一般而言,PR 作者应先向相应公司的 CODEOWNERS 请求审阅并获得 PR 批准,然后再请求核心维护者审阅。 如需更多帮助,PR 作者可通过 Slack 联系核心维护者。 |
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
see unofficial run visualizer at https://inferencex.semianalysis.com/inference?unofficialRun=27859909769 |
| prefill: | ||
| num-worker: 1 | ||
| tp: 4 | ||
| ep: 1 | ||
| dp-attn: false | ||
| additional-settings: | ||
| - "PREFILL_NODES=1" | ||
| decode: | ||
| num-worker: 1 | ||
| tp: 4 | ||
| ep: 1 | ||
| dp-attn: false | ||
| additional-settings: |
There was a problem hiding this comment.
@seungrokj quick question out of curiousity: for TP4+TP4 is this over XGMI or RDMA?
There was a problem hiding this comment.
@functionstackx this is over RDMA across 2 nodes.
There was a problem hiding this comment.
@seungrokj thanks for your insight! this is with the mooncake kvcache transfer engine right?
|
see unofficial run visualizer at https://inferencex.semianalysis.com/inference?unofficialRun=27861799455 |
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
see unofficial run visualizer at https://inferencex.semianalysis.com/inference?unofficialRun=27862212112 |
1 similar comment
|
see unofficial run visualizer at https://inferencex.semianalysis.com/inference?unofficialRun=27862212112 |
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit cb168e4. Configure here.
|
see unofficial run visualizer at https://inferencex.semianalysis.com/inference?unofficialRun=27874092441 |
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
see unofficial run visualizer at https://inferencex.semianalysis.com/inference?unofficialRun=27874309402 |
There was a problem hiding this comment.
@seungrokj why r u changing dsv4 fp4 file in this minimax fp8 PR
|
see unofficial run visualizer at https://inferencex.semianalysis.com/inference?unofficialRun=27874309402 |


Summary
minimaxm3-fp8-mi355x-atom-disaggCI recipe: multi-node disaggregated prefill-decode on MI355X via ATOM for MiniMax-M3-MXFP8MEM_FRAC_STATIC=0.8,MAX_NUM_SEQS=128,BLOCK_SIZE=128,MAX_MODEL_LEN=32768,KV_CACHE_DTYPE=autoserver_atom.sh: fix_MAX_CONCassignment before cudagraph size check; gateATOM_MOE_GU_ITLVandAITER_BF16_FP8_MOE_BOUNDon DeepSeek-V4-Pro only; use${KV_CACHE_DTYPE:-fp8}defaultTest plan
mi355x-disaggrunner triggers correctly--kv-cache-dtypeis not passed whenKV_CACHE_DTYPE=auto🤖 Generated with Claude Code
Note
Low Risk
Benchmark/CI wiring and ATOM launcher defaults only; no auth or production serving paths. Model-gated env changes reduce risk of breaking non-DSv4 atom-disagg runs.
Overview
Adds
minimaxm3-fp8-mi355x-atom-disaggfor multi-node prefill–decode on MI355X with ATOM/atomesh and mooncake KV transfer: 1P1D TP4, ISL 1024 and 8192 (OSL 1024), concurrency 1–512, pinnedrocm/atom-dev:MiniMax-M3-20260619.New launch script
minimaxm3_fp8_mi355x_atom-disagg.shmirrors the FP4 disagg wrapper (no MTP, block size 128,MEM_FRAC_STATIC=0.8,KV_CACHE_DTYPE=auto,MAX_MODEL_LEN/ batched-token caps).models_atom.yamlregisters MiniMax-M3 MXFP4/MXFP8; the FP4 launcher drops the unusedSPEC_DECODINGenv check.server_atom.shrenamesMEM_FRACTION→MEM_FRAC_STATIC, threads optionalMAX_MODEL_LEN/MAX_NUM_BATCHED_TOKENS, skips--kv_cache_dtypewhen dtype isauto, adds MTP/spec and model-specific parallel flags (DSv4 TBO/HF overrides vsAITER_QUICK_REDUCE_QUANTIZATION=INT4for other models), and setsIS_MTPfor benchmarking.env_atom.shappliesATOM_MOE_GU_ITLV/AITER_BF16_FP8_MOE_BOUNDonly for DeepSeek-V4-Pro.job.slurmpassesBENCH_REQUEST_RATEand the new atom-disagg tuning env vars.bench.shuses--dsv4for MTP on DSv4 instead of chat template.Reviewed by Cursor Bugbot for commit 0c219ab. Bugbot is set up for automated code reviews on this repo. Configure here.