Add DeepSeek-V4-Pro, Qwen3.5, and MiniMax-M3 inference recipes (scripts/)#173
Open
raviguptaamd wants to merge 8 commits into
Open
Add DeepSeek-V4-Pro, Qwen3.5, and MiniMax-M3 inference recipes (scripts/)#173raviguptaamd wants to merge 8 commits into
raviguptaamd wants to merge 8 commits into
Conversation
…eekV4) Multi-node prefill/decode disaggregated serving/benchmark harness for DeepSeek-V4-Pro (ATOM+mooncake primary; SGLang+MoRI experimental), ported from InferenceX. Adds a Blueprints row to the top-level README.
Single-node aggregated serving/benchmark harness for Qwen3.5-35B-A3B (3B-active hybrid-GDN MoE) on AMD Instinct MI350 (gfx950), engines SGLang + vLLM. Recommended default: SGLang + MXFP4 + TP1 (8 single-GPU instances/node) — a 3B-active MoE fits one GPU, so fill the node with independent instances rather than tensor-parallel. Findings: TP1 > TP2 > TP4; SGLang > vLLM; MXFP4 > FP8 (and ~half the HBM). Both engines serve MXFP4 correctly (no garbling). ATOM excluded — crashes at ISL>=8192. Code/scripts + README only (no result data). Engine flags baked into model.yaml per AMD Day-0 recipe (SGLang --disable-radix-cache required for the hybrid-GDN arch; vLLM --enable-expert-parallel --reasoning-parser qwen3). cluster.yaml uses placeholders. Co-Authored-By: Claude <noreply@anthropic.com>
raviguptaamd
requested review from
Rohan138,
coketaste and
ppalaniappan-amd
as code owners
July 8, 2026 23:44
The repo .gitignore has `lib/` (Python build-dir convention), which silently excluded scripts/Qwen3.5/lib/* from the prior commit. Force-add the 8 harness lib files — run_engine.sh (core launcher), replica_entry.sh, cfg.py, clean_node.sh, placement.py, check_accuracy.py, lib_inferencex.sh, prompts.json. Without these the recipe cannot run. Co-Authored-By: Claude <noreply@anthropic.com>
Makes the recommended SGLang+MXFP4+TP1 default runnable cold: download weights -> edit cluster.yaml -> one run_sglang.sh command -> query. Spells out the prerequisites (weights path, cluster.yaml placeholders, Slurm alloc) that were previously implicit. Co-Authored-By: Claude <noreply@anthropic.com>
…Max-M3) Multi-node prefill/decode disaggregated serving/benchmark harness for MiniMax-M3 (MXFP4) on AMD MI355X (gfx950) via ATOM (atomesh + mooncake RDMA), ported from the InferenceX minimaxm3-fp4-mi355x-atom-disagg config (top-throughput MiniMax-M3 disagg config on MI355X: ~10,829 tok/s/GPU at 8k/1k, 2P1D+DPA). All workers TP4 (no EP; TP4 beats TP8/TP4-EP on gfx950); STP only (DECODE_MTP_SIZE=0). Topologies 1p1d (2 nodes) and 2p1d_dpa (3 nodes). Mirrors the DeepSeekV4 harness structure (model.yaml/cluster.yaml/lib/atom_disagg/utils). Scaffolded from InferenceX; needs a live gfx950 dry-run once amd/MiniMax-M3-MXFP4 weights are staged. Also adds the MiniMax-M3 row to the root README models table. Co-Authored-By: Claude <noreply@anthropic.com>
Replace the hand-adapted MiniMax-M3 harness with the actual InferenceX ATOM MXFP4 disaggregated benchmark, copied unmodified from SemiAnalysisAI/InferenceX @ a174f20 (benchmarks/multi_node/amd_utils + utils/bench_serving). Config key minimaxm3-fp4-mi355x-atom-disagg (atomesh + mooncake, all-TP4). Includes models_atom.yaml (authoritative MiniMax-M3-MXFP4 flags), server_atom.sh, env_atom.sh, bench.sh, setup_deps.sh, job.slurm/submit.sh/sync.py, the bench_serving client, and the extracted config block under configs/. Co-Authored-By: Claude <noreply@anthropic.com>
Keep the InferenceX engine code verbatim (benchmarks/multi_node/amd_utils/, benchmarks/benchmark_lib.sh, utils/bench_serving/ @ a174f20 — byte-identical, models_atom.yaml drives all model flags) but preserve InferenceX's relative path layout so bench.sh's ../../benchmark_lib.sh and REPO_ROOT/utils/bench_serving resolve. Add a thin MAD wrapper (run.sh + cluster.yaml) that supplies the per-node env contract + container mounts InferenceX's job.slurm/submit.sh normally provide, mounting the recipe root as /workspace and ATOM_WS_PATH at amd_utils/. README documents prerequisites (amdgpu_peermem for GPUDirect RDMA, weight staging, RDMA fabric), usage (TOPO=1p1d|2p1d_dpa, ACTION=dry), and topologies. Wrapper is syntax-checked; not yet dry-run on live MI355X. Co-Authored-By: Claude <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds three inference blueprints/recipes, linked from the top-level README Blueprints table:
scripts/DeepSeekV4/. Covers two transport backends:scripts/Qwen3.5/. Recommended default is SGLang + MXFP4 + TP1 (8 single-GPU instances/node) — a 3B-active MoE fits one GPU, so filling the node with independent instances beats tensor-parallel. README includes a 4-step quickstart for the default.scripts/MiniMax-M3/. ATOM MXFP4 config (minimaxm3-fp4-mi355x-atom-disagg, atomesh router + Mooncake RDMA) — the top-throughput MiniMax-M3 disagg config on InferenceX (~10,829 tok/s/GPU at 8k/1k, 2P1D+DPA). Engine code is copied verbatim from SemiAnalysisAI/InferenceX with a thin MAD wrapper (run.sh+cluster.yaml) so it runs standalone.What's included
DeepSeekV4 (
scripts/DeepSeekV4/)README.md— usage and overviewcluster.yaml/model.yaml— cluster + model configurationlib/— launcher and helpers (run_disagg.sh,cfg.py,topo.py,check_accuracy.py,clean_node.sh,prompts.json,lib_inferencex.sh)atom_disagg/— ATOM+Mooncake env/server/launch/bench scriptsutils/bench_serving/— serving benchmark client (throughput/latency)docs/proxy_and_disagg.md— proxy + disaggregation notesrun_atom_disagg.sh/run_sglang_disagg.sh— entrypointsQwen3.5 (
scripts/Qwen3.5/)README.md— quickstart + recommended default (SGLang·MXFP4·TP1)cluster.yaml/model.yaml— cluster + model config (MXFP4 + FP8), engine flags presetlib/— launcher and helpers (run_engine.sh,replica_entry.sh,placement.py,cfg.py,clean_node.sh,check_accuracy.py,prompts.json,lib_inferencex.sh)run_sglang.sh/run_vllm.sh/run_atom.sh— entrypointsutils/bench_serving/— serving benchmark clientMiniMax-M3 (
scripts/MiniMax-M3/)README.md— nodes required, prerequisites (incl.amdgpu_peermemfor GPUDirect RDMA), usage, topologiesrun.sh/cluster.yaml— MAD launcher wrapper (supplies the per-node env + mounts InferenceX'sjob.slurmnormally provides)benchmarks/multi_node/amd_utils/+benchmarks/benchmark_lib.sh— verbatim InferenceX ATOM code (server_atom.sh,models_atom.yaml,env_atom.sh,bench.sh,setup_deps.sh,server.sh,job.slurm,submit.sh,sync.py);models_atom.yamldrives all model flagsutils/bench_serving/— serving benchmark clientconfigs/minimaxm3-fp4-mi355x-atom-disagg.yaml— config entry (all-TP4, STP; topologies 1p1d / 2p1d_dpa)Topologies:
1p1d(2 nodes: 1 prefill + 1 decode) and2p1d_dpa(3 nodes: 2 prefill + 1 decode + DP-attn).