From 4a91df90fd9d6606d03774f085f7e7ca2dee9732 Mon Sep 17 00:00:00 2001 From: hshrivastava-droid Date: Fri, 24 Jul 2026 12:01:05 -0700 Subject: [PATCH 01/13] add b300 vllm agentX single-node minimaxm3 fp4 EAGLE-GQA MTP --- .../agentic/minimaxm3_fp4_b300_mtp.sh | 100 ++++++++++++++++++ configs/nvidia-master.yaml | 16 +++ perf-changelog.yaml | 19 +++- 3 files changed, 130 insertions(+), 5 deletions(-) create mode 100755 benchmarks/single_node/agentic/minimaxm3_fp4_b300_mtp.sh diff --git a/benchmarks/single_node/agentic/minimaxm3_fp4_b300_mtp.sh b/benchmarks/single_node/agentic/minimaxm3_fp4_b300_mtp.sh new file mode 100755 index 0000000000..ff43eebc14 --- /dev/null +++ b/benchmarks/single_node/agentic/minimaxm3_fp4_b300_mtp.sh @@ -0,0 +1,100 @@ +#!/usr/bin/env bash +set -euo pipefail +set -x + +# MiniMax-M3 NVFP4 B300 AgentX with EAGLE3-GQA and synthetic acceptance. + +source "$(dirname "$0")/../../benchmark_lib.sh" + +export EVAL_FRAMEWORK="lm-eval" + +check_env_vars MODEL TP CONC KV_OFFLOADING RESULT_DIR DURATION + +DRAFT_MODEL="Inferact/MiniMax-M3-EAGLE3-GQA" +NUM_SPEC_TOKENS=3 +SYNTHETIC_ACCEPT_LEN=2.78 + +if [[ -n "${SLURM_JOB_ID:-}" ]]; then + echo "JOB $SLURM_JOB_ID running on ${SLURMD_NODENAME:-unknown}" +fi + +if [[ -n "${MODEL_PATH:-}" ]]; then + if [[ ! -d "$MODEL_PATH" || -z "$(ls -A "$MODEL_PATH" 2>/dev/null)" ]]; then + hf download "$MODEL" --local-dir "$MODEL_PATH" + fi + DRAFT_MODEL_PATH="/data/models/${DRAFT_MODEL##*/}" + if [[ ! -d "$DRAFT_MODEL_PATH" || -z "$(ls -A "$DRAFT_MODEL_PATH" 2>/dev/null)" ]]; then + hf download "$DRAFT_MODEL" --local-dir "$DRAFT_MODEL_PATH" + fi +else + hf download "$MODEL" + export MODEL_PATH="$MODEL" + hf download "$DRAFT_MODEL" + DRAFT_MODEL_PATH="$DRAFT_MODEL" +fi + +nvidia-smi +resolve_trace_source +install_agentic_deps + +if agentic_kv_offload_enabled; then + echo "Error: this submission contains GPU-resident KV points only" >&2 + exit 1 +fi + +export PYTHONNOUSERSITE=1 +export VLLM_ENGINE_READY_TIMEOUT_S=3600 +export VLLM_FLOAT32_MATMUL_PRECISION=high +export VLLM_FLASHINFER_ALLREDUCE_BACKEND=trtllm + +SERVER_LOG="$RESULT_DIR/server.log" +mkdir -p "$RESULT_DIR" + +SERVER_PID="" +cleanup_agentic_services() { + local exit_code=$? + trap - EXIT INT TERM + set +e + stop_background_process_tree "$SERVER_PID" "vLLM server" 60 + exit "$exit_code" +} +trap cleanup_agentic_services EXIT +trap 'exit 130' INT +trap 'exit 143' TERM + +SPEC_CONFIG=$(printf \ + '{"method":"eagle3","model":"%s","num_speculative_tokens":%d,"attention_backend":"FLASH_ATTN","rejection_sample_method":"synthetic","synthetic_acceptance_length":%.2f}' \ + "$DRAFT_MODEL_PATH" "$NUM_SPEC_TOKENS" "$SYNTHETIC_ACCEPT_LEN") + +{ set +x; } 2>/dev/null +VLLM_CMD=( + vllm serve "$MODEL_PATH" + --served-model-name "$MODEL" + --host 0.0.0.0 + --port "$PORT" + --tensor-parallel-size "$TP" + --gpu-memory-utilization 0.9 + --block-size 128 + --language-model-only + --enable-prefix-caching + --no-enable-flashinfer-autotune + --reasoning-parser minimax_m3 + --default-chat-template-kwargs '{"thinking_mode":"enabled"}' + --attention-config '{"backend":"FLASHINFER","use_trtllm_attention":true,"indexer_kv_dtype":"fp8"}' + --all2all-backend flashinfer_nvlink_one_sided + --max-cudagraph-capture-size 512 + --max-num-batched-tokens 16384 + --stream-interval 20 + --trust-remote-code + --speculative-config "$SPEC_CONFIG" +) +printf '%q ' "${VLLM_CMD[@]}" | tee "$RESULT_DIR/vllm_command.txt" +printf '\n' | tee -a "$RESULT_DIR/vllm_command.txt" +"${VLLM_CMD[@]}" > "$SERVER_LOG" 2>&1 & +SERVER_PID=$! +echo "Server PID: $SERVER_PID" +set -x + +wait_for_server_ready --port "$PORT" --server-log "$SERVER_LOG" --server-pid "$SERVER_PID" +build_replay_cmd "$RESULT_DIR" +run_agentic_replay_and_write_outputs "$RESULT_DIR" diff --git a/configs/nvidia-master.yaml b/configs/nvidia-master.yaml index 8cc99a8a0b..09a42d9901 100644 --- a/configs/nvidia-master.yaml +++ b/configs/nvidia-master.yaml @@ -7800,6 +7800,22 @@ minimaxm3-fp8-h200-vllm-agentic: - { tp: 8, ep: 8, kv-offloading: none, conc-list: [2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 18, 20] } - { tp: 8, ep: 8, kv-offloading: dram, kv-offload-backend: { name: mooncake, version: "0.3.11.post1" }, conc-list: [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 18, 20] } +minimaxm3-fp4-b300-vllm-agentic-mtp: + image: vllm/vllm-openai:nightly-387189c42997b27e2c04b5d97ef8190ffa2bf909 + model: nvidia/MiniMax-M3-NVFP4 + model-prefix: minimaxm3 + runner: cluster:b300-nv + precision: fp4 + framework: vllm + multinode: false + scenarios: + agentic-coding: + - dram-utilization: 0.80 + search-space: + - { tp: 8, spec-decoding: mtp, kv-offloading: none, conc-list: [1] } + - { tp: 4, spec-decoding: mtp, kv-offloading: none, conc-list: [1, 2, 16] } + - { tp: 2, spec-decoding: mtp, kv-offloading: none, conc-list: [2] } + dsv4-fp4-b200-sglang-agentic-hicache: image: lmsysorg/sglang:nightly-dev-cu13-20260707-b4155233 model: deepseek-ai/DeepSeek-V4-Pro diff --git a/perf-changelog.yaml b/perf-changelog.yaml index 0381848924..ae7443f368 100644 --- a/perf-changelog.yaml +++ b/perf-changelog.yaml @@ -5061,7 +5061,6 @@ - "Exclude known-bad nodes mia1-p01-g09,g14 from the disagg node pool" pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2301 -- config-keys: - minimaxm3-fp4-mi355x-vllm-agentic description: - "Add Minimax-M3 FP4 vLLM Single Node Agentic Support" @@ -5121,7 +5120,7 @@ description: - "Add GB300 Dynamo-vLLM AgentX MTP3 points: aggregate TP8 c1, aggregate TP4 c4, P/D DEP4/DEP8 c128, and P/D DEP8/DEP8 c384; use upstream vLLM 426e59f, srt-slurm v1.0.36, and random session-affinity routing for P/D." pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2341 - + - config-keys: - qwen3.5-fp8-mi355x-sglang @@ -5129,13 +5128,13 @@ description: - "Bump image from lmsysorg/sglang:v0.5.14-rocm720-mi35x to lmsysorg/sglang-rocm:v0.5.16-rocm720-mi35x-20260726" pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2349 - + - config-keys: - dsv4-fp4-mi355x-atom-mtp description: - "Re-sweep dsv4-fp4-mi355x-atom-mtp on latest atom-dev nightly (nightly_202607231538, was atom0.1.3 release). Align ATOM official MTP config (models.json): MTP3 dp-off conc 4-256 + DPA MTP3 (dp-attn) conc 32-1024 (added c32 dp-on; tp4 tried but removed — tp4+MTP+dp-on OOMs, KV budget negative). prefill-only TBO (--enable-tbo, argparse const=prefill so enable_tbo_decode=False) on dp-attn cells at conc>=256 (measured crossover run 30257759947 vs non-TBO 30238071409: TBO -10~14% output tput at c64/c128 but +8~14% at c256+; MTP removes low-conc latency so TBO overlap there is pure overhead); MTP-safe because only decode-TBO (--enable-tbo all) drops spec_decode_metadata. max_num_seqs=conc on dp-on cells and conc>=64 to avoid OOM. bench keeps --dsv4 (InferenceX bench uses encoding_dsv4.py; DSv4-Pro has no jinja chat_template). Fixed benchmark_lib source path (../ -> ../../)." pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2345 - + - config-keys: - minimaxm3-fp4-b300-dynamo-vllm-8k1k-tp1 - minimaxm3-fp4-b300-dynamo-vllm-8k1k-tp1-tep4 @@ -5144,7 +5143,7 @@ - "Remove VLLM_FLASHINFER_ALLREDUCE_BACKEND=trtllm from the 1P1D TP1-prefill/TP8-decode recipe; retain the existing FP8 indexer KV cache configuration" - "Add a one-node 4P1D TP1-prefill/TEP4-decode concurrency-4096 point on the refreshed image while preserving the legacy 4P2D DEP2-prefill/TEP4-decode point unchanged" pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2310 - + - config-keys: - kimik3-fp4-b300-vllm-agentic @@ -5173,3 +5172,13 @@ - "Bring-up validated in run 30326393603: all 12 configs green, zero ServerDisconnectedError after the keep-alive fix. GPU KV resolves to 42.23 GiB / 3,249,215 tokens, i.e. ~3.1 max-length requests, against MAX_NUM_SEQS = 2*CONC." - "Measured behaviour: below conc 8 the GPU-resident and DRAM arms are within run-to-run noise (1-5%). At conc 16 and 24 the GPU-resident arm thrashes -- prefix cache hit rate 2.7%, TTFT p50 86s and 191s, 49.6 and 54.9 output tok/s -- because the working set exceeds GPU KV and prefixes are recomputed. The DRAM arm holds TTFT p50 0.85s and 6.2s for 245.0 and 260.6 output tok/s (4-5x), with the CPU tier serving a 62% external prefix cache hit rate at conc 24. The high-conc GPU-resident points are retained deliberately as the honest baseline that makes the offload gain legible." pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2386 + +- config-keys: + - minimaxm3-fp4-b300-vllm-agentic-mtp + scenario-type: + - agentic-coding + description: + - "Add five MiniMax-M3 NVFP4 B300 single-node aggregate vLLM AgentX points: TP8 concurrency 1; TP4 concurrency 1, 2, and 16; TP2 concurrency 2." + - "Use the Inferact/MiniMax-M3-EAGLE3-GQA draft model with three speculative tokens and synthetic rejection sampling; thinking-on synthetic acceptance length is 2.83 from the canonical MiniMax-M3 EAGLE3 distribution generated by SemiAnalysisAI/InferenceX action 28061204145." + - "Use vllm/vllm-openai:nightly-387189c42997b27e2c04b5d97ef8190ffa2bf909 with prefix caching enabled, default KV-cache dtype, FlashInfer TRT-LLM attention with FP8 indexer KV, and the EAGLE3 drafter on FLASH_ATTN." + pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2328 From 6ad6ee9c91ca344a34a1348f4c9a640de627f2b2 Mon Sep 17 00:00:00 2001 From: hshrivastava-droid Date: Mon, 27 Jul 2026 20:28:23 -0700 Subject: [PATCH 02/13] update eval logic --- benchmarks/single_node/agentic/minimaxm3_fp4_b300_mtp.sh | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/benchmarks/single_node/agentic/minimaxm3_fp4_b300_mtp.sh b/benchmarks/single_node/agentic/minimaxm3_fp4_b300_mtp.sh index ff43eebc14..aa3215f5db 100755 --- a/benchmarks/single_node/agentic/minimaxm3_fp4_b300_mtp.sh +++ b/benchmarks/single_node/agentic/minimaxm3_fp4_b300_mtp.sh @@ -96,5 +96,9 @@ echo "Server PID: $SERVER_PID" set -x wait_for_server_ready --port "$PORT" --server-log "$SERVER_LOG" --server-pid "$SERVER_PID" -build_replay_cmd "$RESULT_DIR" -run_agentic_replay_and_write_outputs "$RESULT_DIR" +if [ "${EVAL_ONLY}" = "true" ]; then + run_eval --port "$PORT" +else + build_replay_cmd "$RESULT_DIR" + run_agentic_replay_and_write_outputs "$RESULT_DIR" +fi From 3e84e611f0d95d7ddd8fbcebffa6c02b97884030 Mon Sep 17 00:00:00 2001 From: Xin Li Date: Tue, 28 Jul 2026 11:48:30 -0400 Subject: [PATCH 03/13] feat: add tool-call-parser + enable-auto-tool-choice; drop synthetic AL for eval Co-Authored-By: Claude Sonnet 4.6 (1M context) --- .../single_node/agentic/minimaxm3_fp4_b300_mtp.sh | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/benchmarks/single_node/agentic/minimaxm3_fp4_b300_mtp.sh b/benchmarks/single_node/agentic/minimaxm3_fp4_b300_mtp.sh index aa3215f5db..0f40fdf4e3 100755 --- a/benchmarks/single_node/agentic/minimaxm3_fp4_b300_mtp.sh +++ b/benchmarks/single_node/agentic/minimaxm3_fp4_b300_mtp.sh @@ -62,9 +62,15 @@ trap cleanup_agentic_services EXIT trap 'exit 130' INT trap 'exit 143' TERM -SPEC_CONFIG=$(printf \ - '{"method":"eagle3","model":"%s","num_speculative_tokens":%d,"attention_backend":"FLASH_ATTN","rejection_sample_method":"synthetic","synthetic_acceptance_length":%.2f}' \ - "$DRAFT_MODEL_PATH" "$NUM_SPEC_TOKENS" "$SYNTHETIC_ACCEPT_LEN") +if [ "${EVAL_ONLY:-}" = "true" ]; then + SPEC_CONFIG=$(printf \ + '{"method":"eagle3","model":"%s","num_speculative_tokens":%d,"attention_backend":"FLASH_ATTN"}' \ + "$DRAFT_MODEL_PATH" "$NUM_SPEC_TOKENS") +else + SPEC_CONFIG=$(printf \ + '{"method":"eagle3","model":"%s","num_speculative_tokens":%d,"attention_backend":"FLASH_ATTN","rejection_sample_method":"synthetic","synthetic_acceptance_length":%.2f}' \ + "$DRAFT_MODEL_PATH" "$NUM_SPEC_TOKENS" "$SYNTHETIC_ACCEPT_LEN") +fi { set +x; } 2>/dev/null VLLM_CMD=( @@ -79,6 +85,8 @@ VLLM_CMD=( --enable-prefix-caching --no-enable-flashinfer-autotune --reasoning-parser minimax_m3 + --tool-call-parser minimax_m3 + --enable-auto-tool-choice --default-chat-template-kwargs '{"thinking_mode":"enabled"}' --attention-config '{"backend":"FLASHINFER","use_trtllm_attention":true,"indexer_kv_dtype":"fp8"}' --all2all-backend flashinfer_nvlink_one_sided From 3f57bd6646ffcdba377077b5f049ceadaf4e8130 Mon Sep 17 00:00:00 2001 From: Xin Li Date: Tue, 28 Jul 2026 16:02:51 -0400 Subject: [PATCH 04/13] =?UTF-8?q?perf-changelog:=20add=20trailing=20newlin?= =?UTF-8?q?e=20/=20=E6=9C=AB=E5=B0=BE=E6=B7=BB=E5=8A=A0=E7=A9=BA=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 (1M context) --- perf-changelog.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/perf-changelog.yaml b/perf-changelog.yaml index ae7443f368..ce1d32318c 100644 --- a/perf-changelog.yaml +++ b/perf-changelog.yaml @@ -5182,3 +5182,4 @@ - "Use the Inferact/MiniMax-M3-EAGLE3-GQA draft model with three speculative tokens and synthetic rejection sampling; thinking-on synthetic acceptance length is 2.83 from the canonical MiniMax-M3 EAGLE3 distribution generated by SemiAnalysisAI/InferenceX action 28061204145." - "Use vllm/vllm-openai:nightly-387189c42997b27e2c04b5d97ef8190ffa2bf909 with prefix caching enabled, default KV-cache dtype, FlashInfer TRT-LLM attention with FP8 indexer KV, and the EAGLE3 drafter on FLASH_ATTN." pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2328 + From 31ec0067b00d8e05aa3f852b144d903782d09f6e Mon Sep 17 00:00:00 2001 From: Xin Li Date: Tue, 28 Jul 2026 16:05:24 -0400 Subject: [PATCH 05/13] =?UTF-8?q?perf-changelog:=20append=20minimaxm3-fp4-?= =?UTF-8?q?b300-vllm-agentic-mtp=20entry=20/=20=E8=BF=BD=E5=8A=A0=20minima?= =?UTF-8?q?xm3-fp4-b300-vllm-agentic-mtp=20=E6=9D=A1=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 (1M context) --- perf-changelog.yaml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/perf-changelog.yaml b/perf-changelog.yaml index ce1d32318c..9d69f024e0 100644 --- a/perf-changelog.yaml +++ b/perf-changelog.yaml @@ -5061,6 +5061,7 @@ - "Exclude known-bad nodes mia1-p01-g09,g14 from the disagg node pool" pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2301 +- config-keys: - minimaxm3-fp4-mi355x-vllm-agentic description: - "Add Minimax-M3 FP4 vLLM Single Node Agentic Support" @@ -5120,7 +5121,7 @@ description: - "Add GB300 Dynamo-vLLM AgentX MTP3 points: aggregate TP8 c1, aggregate TP4 c4, P/D DEP4/DEP8 c128, and P/D DEP8/DEP8 c384; use upstream vLLM 426e59f, srt-slurm v1.0.36, and random session-affinity routing for P/D." pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2341 - + - config-keys: - qwen3.5-fp8-mi355x-sglang @@ -5128,13 +5129,13 @@ description: - "Bump image from lmsysorg/sglang:v0.5.14-rocm720-mi35x to lmsysorg/sglang-rocm:v0.5.16-rocm720-mi35x-20260726" pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2349 - + - config-keys: - dsv4-fp4-mi355x-atom-mtp description: - "Re-sweep dsv4-fp4-mi355x-atom-mtp on latest atom-dev nightly (nightly_202607231538, was atom0.1.3 release). Align ATOM official MTP config (models.json): MTP3 dp-off conc 4-256 + DPA MTP3 (dp-attn) conc 32-1024 (added c32 dp-on; tp4 tried but removed — tp4+MTP+dp-on OOMs, KV budget negative). prefill-only TBO (--enable-tbo, argparse const=prefill so enable_tbo_decode=False) on dp-attn cells at conc>=256 (measured crossover run 30257759947 vs non-TBO 30238071409: TBO -10~14% output tput at c64/c128 but +8~14% at c256+; MTP removes low-conc latency so TBO overlap there is pure overhead); MTP-safe because only decode-TBO (--enable-tbo all) drops spec_decode_metadata. max_num_seqs=conc on dp-on cells and conc>=64 to avoid OOM. bench keeps --dsv4 (InferenceX bench uses encoding_dsv4.py; DSv4-Pro has no jinja chat_template). Fixed benchmark_lib source path (../ -> ../../)." pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2345 - + - config-keys: - minimaxm3-fp4-b300-dynamo-vllm-8k1k-tp1 - minimaxm3-fp4-b300-dynamo-vllm-8k1k-tp1-tep4 @@ -5143,7 +5144,7 @@ - "Remove VLLM_FLASHINFER_ALLREDUCE_BACKEND=trtllm from the 1P1D TP1-prefill/TP8-decode recipe; retain the existing FP8 indexer KV cache configuration" - "Add a one-node 4P1D TP1-prefill/TEP4-decode concurrency-4096 point on the refreshed image while preserving the legacy 4P2D DEP2-prefill/TEP4-decode point unchanged" pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2310 - + - config-keys: - kimik3-fp4-b300-vllm-agentic @@ -5182,4 +5183,3 @@ - "Use the Inferact/MiniMax-M3-EAGLE3-GQA draft model with three speculative tokens and synthetic rejection sampling; thinking-on synthetic acceptance length is 2.83 from the canonical MiniMax-M3 EAGLE3 distribution generated by SemiAnalysisAI/InferenceX action 28061204145." - "Use vllm/vllm-openai:nightly-387189c42997b27e2c04b5d97ef8190ffa2bf909 with prefix caching enabled, default KV-cache dtype, FlashInfer TRT-LLM attention with FP8 indexer KV, and the EAGLE3 drafter on FLASH_ATTN." pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2328 - From df08354c0dd17baef9fc51bd1546f1f8f418e2f9 Mon Sep 17 00:00:00 2001 From: hshrivastava-droid Date: Wed, 29 Jul 2026 11:26:34 -0700 Subject: [PATCH 06/13] update config --- .../agentic/minimaxm3_fp4_b300_mtp.sh | 17 ++++++++++++----- configs/nvidia-master.yaml | 13 ++++++++----- perf-changelog.yaml | 5 ++--- 3 files changed, 22 insertions(+), 13 deletions(-) diff --git a/benchmarks/single_node/agentic/minimaxm3_fp4_b300_mtp.sh b/benchmarks/single_node/agentic/minimaxm3_fp4_b300_mtp.sh index 0f40fdf4e3..18901924d4 100755 --- a/benchmarks/single_node/agentic/minimaxm3_fp4_b300_mtp.sh +++ b/benchmarks/single_node/agentic/minimaxm3_fp4_b300_mtp.sh @@ -3,16 +3,17 @@ set -euo pipefail set -x # MiniMax-M3 NVFP4 B300 AgentX with EAGLE3-GQA and synthetic acceptance. +# DRAM KV offload uses vLLM's SimpleCPUOffloadConnector in lazy mode. source "$(dirname "$0")/../../benchmark_lib.sh" export EVAL_FRAMEWORK="lm-eval" -check_env_vars MODEL TP CONC KV_OFFLOADING RESULT_DIR DURATION +check_env_vars MODEL TP CONC KV_OFFLOADING TOTAL_CPU_DRAM_GB RESULT_DIR DURATION DRAFT_MODEL="Inferact/MiniMax-M3-EAGLE3-GQA" NUM_SPEC_TOKENS=3 -SYNTHETIC_ACCEPT_LEN=2.78 +SYNTHETIC_ACCEPT_LEN=2.83 if [[ -n "${SLURM_JOB_ID:-}" ]]; then echo "JOB $SLURM_JOB_ID running on ${SLURMD_NODENAME:-unknown}" @@ -37,9 +38,14 @@ nvidia-smi resolve_trace_source install_agentic_deps -if agentic_kv_offload_enabled; then - echo "Error: this submission contains GPU-resident KV points only" >&2 - exit 1 +OFFLOAD_ARGS=() +if require_agentic_kv_offload_backend vllm-simple; then + CPU_OFFLOAD_BYTES=$((TOTAL_CPU_DRAM_GB * 1024 * 1024 * 1024)) + export VLLM_USE_SIMPLE_KV_OFFLOAD=1 + OFFLOAD_CONFIG=$(printf \ + '{"kv_connector":"SimpleCPUOffloadConnector","kv_role":"kv_both","kv_connector_extra_config":{"cpu_bytes_to_use":%d,"lazy_offload":true}}' \ + "$CPU_OFFLOAD_BYTES") + OFFLOAD_ARGS=(--kv-transfer-config "$OFFLOAD_CONFIG") fi export PYTHONNOUSERSITE=1 @@ -95,6 +101,7 @@ VLLM_CMD=( --stream-interval 20 --trust-remote-code --speculative-config "$SPEC_CONFIG" + "${OFFLOAD_ARGS[@]}" ) printf '%q ' "${VLLM_CMD[@]}" | tee "$RESULT_DIR/vllm_command.txt" printf '\n' | tee -a "$RESULT_DIR/vllm_command.txt" diff --git a/configs/nvidia-master.yaml b/configs/nvidia-master.yaml index 09a42d9901..fca59d082a 100644 --- a/configs/nvidia-master.yaml +++ b/configs/nvidia-master.yaml @@ -7810,11 +7810,14 @@ minimaxm3-fp4-b300-vllm-agentic-mtp: multinode: false scenarios: agentic-coding: - - dram-utilization: 0.80 - search-space: - - { tp: 8, spec-decoding: mtp, kv-offloading: none, conc-list: [1] } - - { tp: 4, spec-decoding: mtp, kv-offloading: none, conc-list: [1, 2, 16] } - - { tp: 2, spec-decoding: mtp, kv-offloading: none, conc-list: [2] } + # 0.683 maps the B300 TP4 SimpleCPU point to the measured 1,024 GB + # engine-level CPU KV budget. GPU-resident points receive a zero budget. + - dram-utilization: 0.683 + search-space: + - { tp: 8, spec-decoding: mtp, kv-offloading: none, conc-list: [2] } + - { tp: 4, spec-decoding: mtp, kv-offloading: none, conc-list: [2] } + - { tp: 2, spec-decoding: mtp, kv-offloading: none, conc-list: [2, 6] } + - { tp: 4, spec-decoding: mtp, kv-offloading: dram, kv-offload-backend: { name: vllm-simple }, conc-list: [40] } dsv4-fp4-b200-sglang-agentic-hicache: image: lmsysorg/sglang:nightly-dev-cu13-20260707-b4155233 diff --git a/perf-changelog.yaml b/perf-changelog.yaml index 9d69f024e0..23329f0cc9 100644 --- a/perf-changelog.yaml +++ b/perf-changelog.yaml @@ -5179,7 +5179,6 @@ scenario-type: - agentic-coding description: - - "Add five MiniMax-M3 NVFP4 B300 single-node aggregate vLLM AgentX points: TP8 concurrency 1; TP4 concurrency 1, 2, and 16; TP2 concurrency 2." - - "Use the Inferact/MiniMax-M3-EAGLE3-GQA draft model with three speculative tokens and synthetic rejection sampling; thinking-on synthetic acceptance length is 2.83 from the canonical MiniMax-M3 EAGLE3 distribution generated by SemiAnalysisAI/InferenceX action 28061204145." - - "Use vllm/vllm-openai:nightly-387189c42997b27e2c04b5d97ef8190ffa2bf909 with prefix caching enabled, default KV-cache dtype, FlashInfer TRT-LLM attention with FP8 indexer KV, and the EAGLE3 drafter on FLASH_ATTN." + - "Sample five MiniMax-M3 NVFP4 B300 vLLM AgentX Pareto points on vllm/vllm-openai:nightly-387189c42997b27e2c04b5d97ef8190ffa2bf909: TP8 c2; TP4 c2; TP2 c2 and 6; and TP4 c40 with lazy SimpleCPUOffloadConnector KV offload (1,024 GB engine-level CPU KV budget)." + - "Use the Inferact/MiniMax-M3-EAGLE3-GQA drafter with three speculative tokens and synthetic acceptance length 2.83; enable prefix caching, FlashInfer TRT-LLM attention with FP8 indexer KV, and the EAGLE3 drafter on FLASH_ATTN." pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2328 From b7556ccd639fe72e4c00603c22a8f34ffc47976c Mon Sep 17 00:00:00 2001 From: Ankur-singh Date: Wed, 29 Jul 2026 16:15:48 -0700 Subject: [PATCH 07/13] =?UTF-8?q?fix(minimaxm3):=20pin=20synthetic=20AL=20?= =?UTF-8?q?to=20the=20GQA=20golden=20curve=20(2.83=20->=202.78)=20/=20?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=9A=E5=B0=86=E5=90=88=E6=88=90=E6=8E=A5?= =?UTF-8?q?=E5=8F=97=E9=95=BF=E5=BA=A6=E5=AF=B9=E9=BD=90=E5=88=B0=20GQA=20?= =?UTF-8?q?=E9=BB=84=E9=87=91=E6=9B=B2=E7=BA=BF=EF=BC=882.83=20=E2=86=92?= =?UTF-8?q?=202.78=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This script runs the GQA draft head (Inferact/MiniMax-M3-EAGLE3-GQA) but injected 2.83, which is minimaxm3_eagle3.yaml thinking_on[3] -- the curve measured on the NON-GQA head. #2413 committed golden_al_distribution/minimaxm3_eagle3_gqa.yaml, whose thinking_on[3] is 2.78 for the head this script actually loads. Since 2.83 is the higher of the two, the benchmark was injecting a more generous acceptance than its own golden curve allows, which inflates spec-decode throughput. Per the AgentX fairness rule a submission may choose any supported draft length but may not substitute a different acceptance target, so pin 2.78 and note which curve it comes from -- two curves now exist for this model and the filenames differ by one suffix. Note: this changes the benchmarked numbers, so the existing sweep at d0f4fc92 no longer characterises this config; a fresh sweep is required rather than reusing that run. 中文:本脚本使用 GQA 草稿头,却注入了非 GQA 曲线的 2.83。#2413 已提交 minimaxm3_eagle3_gqa.yaml,其 thinking_on[3] 为 2.78。2.83 更高,会高估投机解码 吞吐,违反 AgentX 不得替换接受率目标的规定。改为 2.78 并注明来源曲线。 该改动会影响基准数值,需要重新跑 sweep,不能复用原有运行。 --- benchmarks/single_node/agentic/minimaxm3_fp4_b300_mtp.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/benchmarks/single_node/agentic/minimaxm3_fp4_b300_mtp.sh b/benchmarks/single_node/agentic/minimaxm3_fp4_b300_mtp.sh index 18901924d4..d69f479c94 100755 --- a/benchmarks/single_node/agentic/minimaxm3_fp4_b300_mtp.sh +++ b/benchmarks/single_node/agentic/minimaxm3_fp4_b300_mtp.sh @@ -13,7 +13,10 @@ check_env_vars MODEL TP CONC KV_OFFLOADING TOTAL_CPU_DRAM_GB RESULT_DIR DURATION DRAFT_MODEL="Inferact/MiniMax-M3-EAGLE3-GQA" NUM_SPEC_TOKENS=3 -SYNTHETIC_ACCEPT_LEN=2.83 +# Golden AL for the GQA draft head: golden_al_distribution/minimaxm3_eagle3_gqa.yaml +# minimax-m3.thinking_on[3]. The non-GQA curve (minimaxm3_eagle3.yaml) reads 2.83 +# at the same level -- that head is not what this script runs. +SYNTHETIC_ACCEPT_LEN=2.78 if [[ -n "${SLURM_JOB_ID:-}" ]]; then echo "JOB $SLURM_JOB_ID running on ${SLURMD_NODENAME:-unknown}" From a52dada798c67263f22c8401f31477f9f4e81cbf Mon Sep 17 00:00:00 2001 From: Ankur-singh Date: Wed, 29 Jul 2026 18:40:17 -0700 Subject: [PATCH 08/13] =?UTF-8?q?fix(changelog):=20correct=20synthetic=20a?= =?UTF-8?q?cceptance=20length=202.83=20->=202.78=20/=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=EF=BC=9A=E6=9B=B4=E6=AD=A3=E5=90=88=E6=88=90=E6=8E=A5=E5=8F=97?= =?UTF-8?q?=E9=95=BF=E5=BA=A6=202.83=20=E2=86=92=202.78?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The changelog entry still claimed 2.83 while the script was corrected to 2.78 in b7556ccd. 2.78 is the golden value for the GQA drafter this script loads (golden_al_distribution/minimaxm3_eagle3_gqa.yaml thinking_on[3]); 2.83 is the non-GQA curve. Prose-only; the executable value was already correct. 中文:changelog 仍写 2.83,而脚本已在 b7556ccd 更正为 2.78。2.78 对应本脚本实际 加载的 GQA 草稿头的黄金值;2.83 为非 GQA 曲线。仅文案更正。 --- perf-changelog.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/perf-changelog.yaml b/perf-changelog.yaml index e9649175af..ca7c1305f0 100644 --- a/perf-changelog.yaml +++ b/perf-changelog.yaml @@ -5280,5 +5280,5 @@ - agentic-coding description: - "Sample five MiniMax-M3 NVFP4 B300 vLLM AgentX Pareto points on vllm/vllm-openai:nightly-387189c42997b27e2c04b5d97ef8190ffa2bf909: TP8 c2; TP4 c2; TP2 c2 and 6; and TP4 c40 with lazy SimpleCPUOffloadConnector KV offload (1,024 GB engine-level CPU KV budget)." - - "Use the Inferact/MiniMax-M3-EAGLE3-GQA drafter with three speculative tokens and synthetic acceptance length 2.83; enable prefix caching, FlashInfer TRT-LLM attention with FP8 indexer KV, and the EAGLE3 drafter on FLASH_ATTN." + - "Use the Inferact/MiniMax-M3-EAGLE3-GQA drafter with three speculative tokens and synthetic acceptance length 2.78; enable prefix caching, FlashInfer TRT-LLM attention with FP8 indexer KV, and the EAGLE3 drafter on FLASH_ATTN." pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2328 From 9d0be340f7b1193d1fcbbf5cb238d083c028b91d Mon Sep 17 00:00:00 2001 From: hshrivastava-droid Date: Thu, 30 Jul 2026 10:27:41 -0700 Subject: [PATCH 09/13] update config --- configs/nvidia-master.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/configs/nvidia-master.yaml b/configs/nvidia-master.yaml index ff1fb832fa..7c536eec40 100644 --- a/configs/nvidia-master.yaml +++ b/configs/nvidia-master.yaml @@ -8456,8 +8456,7 @@ minimaxm3-fp4-b300-vllm-agentic-mtp: # engine-level CPU KV budget. GPU-resident points receive a zero budget. - dram-utilization: 0.683 search-space: - - { tp: 8, spec-decoding: mtp, kv-offloading: none, conc-list: [2] } - - { tp: 4, spec-decoding: mtp, kv-offloading: none, conc-list: [2] } + - { tp: 4, spec-decoding: mtp, kv-offloading: none, conc-list: [1, 5] } - { tp: 2, spec-decoding: mtp, kv-offloading: none, conc-list: [2, 6] } - { tp: 4, spec-decoding: mtp, kv-offloading: dram, kv-offload-backend: { name: vllm-simple }, conc-list: [40] } From 01dc27e902f4fbf6bf1dea612c478251406fc43c Mon Sep 17 00:00:00 2001 From: Xin Li Date: Fri, 31 Jul 2026 17:22:17 -0400 Subject: [PATCH 10/13] chore(agentx): pin MiniMax-M3 sweep to AIPerf ed05782 (globally anchor profiling handoff) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 中文:将 MiniMax-M3 AgentX 扫描固定到 AIPerf ed05782(全局锚定性能分析切换点) Co-Authored-By: Claude Sonnet 4.6 (1M context) --- utils/aiperf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/aiperf b/utils/aiperf index deb5421c7f..ed057829b7 160000 --- a/utils/aiperf +++ b/utils/aiperf @@ -1 +1 @@ -Subproject commit deb5421c7ff3cd39f78228f469e23e25233ac6c6 +Subproject commit ed057829b78d25d79ce6f3b87763d48fe50363f5 From 2af3fbcd1b2289dafe70d7842d77fe81a8f40a61 Mon Sep 17 00:00:00 2001 From: Xin Li Date: Sat, 1 Aug 2026 23:06:07 -0400 Subject: [PATCH 11/13] chore(agentx): pin MiniMax-M3 sweep to AIPerf abf55f9 (keep idle watchdogs active across barriers) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 中文:将 MiniMax-M3 AgentX 扫描固定到 AIPerf abf55f9(跨 barrier 保持空闲看门狗活跃) Co-Authored-By: Claude Sonnet 4.6 (1M context) --- utils/aiperf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/aiperf b/utils/aiperf index ed057829b7..abf55f902c 160000 --- a/utils/aiperf +++ b/utils/aiperf @@ -1 +1 @@ -Subproject commit ed057829b78d25d79ce6f3b87763d48fe50363f5 +Subproject commit abf55f902cde0a3e8389c452a83ecbf5ba15dea9 From 6161fb059d379a560e31e84864d3d52ea86e84a0 Mon Sep 17 00:00:00 2001 From: Xin Li Date: Sun, 2 Aug 2026 00:52:05 -0400 Subject: [PATCH 12/13] feat(minimaxm3-b300-mtp): expand AgentX search space for TP4/TP2/TP4-DRAM arms MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit TP4 GPU-resident: [1,2,5,10,15,20]; TP2 GPU-resident: [1,2,5,10,15,20]; TP4 DRAM offload: [20,30,40,50,60] 中文:扩展 MiniMax-M3 B300 MTP AgentX 扫描空间:TP4 GPU 驻留 [1,2,5,10,15,20];TP2 GPU 驻留 [1,2,5,10,15,20];TP4 DRAM 卸载 [20,30,40,50,60] Co-Authored-By: Claude Sonnet 4.6 (1M context) --- configs/nvidia-master.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/configs/nvidia-master.yaml b/configs/nvidia-master.yaml index 05076c2d85..1ba1fed987 100644 --- a/configs/nvidia-master.yaml +++ b/configs/nvidia-master.yaml @@ -8600,9 +8600,9 @@ minimaxm3-fp4-b300-vllm-agentic-mtp: # engine-level CPU KV budget. GPU-resident points receive a zero budget. - dram-utilization: 0.683 search-space: - - { tp: 4, spec-decoding: mtp, kv-offloading: none, conc-list: [1, 5] } - - { tp: 2, spec-decoding: mtp, kv-offloading: none, conc-list: [2, 6] } - - { tp: 4, spec-decoding: mtp, kv-offloading: dram, kv-offload-backend: { name: vllm-simple }, conc-list: [40] } + - { tp: 4, spec-decoding: mtp, kv-offloading: none, conc-list: [1, 2, 5, 10, 15, 20] } + - { tp: 2, spec-decoding: mtp, kv-offloading: none, conc-list: [1, 2, 5, 10, 15, 20] } + - { tp: 4, spec-decoding: mtp, kv-offloading: dram, kv-offload-backend: { name: vllm-simple }, conc-list: [20, 30, 40, 50, 60] } dsv4-fp4-b200-sglang-agentic-hicache: image: lmsysorg/sglang:nightly-dev-cu13-20260707-b4155233 From 9b468247449cc37e2579aaec9fcc8ab286750a28 Mon Sep 17 00:00:00 2001 From: Xin Li Date: Sun, 2 Aug 2026 10:23:14 -0400 Subject: [PATCH 13/13] =?UTF-8?q?feat(minimaxm3-b300-mtp):=20prune=20searc?= =?UTF-8?q?h=20space=20=E2=80=94=20trim=20TP2,=20extend=20DRAM=20offload?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit TP2: [1,2,5] (drop c10,c15,c20); TP4 DRAM: [30,40,50,60,80,90,100] (drop c20, add c80/90/100) 中文:精简扫描空间——TP2 缩减至 [1,2,5],TP4 DRAM 卸载调整为 [30,40,50,60,80,90,100] Co-Authored-By: Claude Sonnet 4.6 (1M context) --- configs/nvidia-master.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/configs/nvidia-master.yaml b/configs/nvidia-master.yaml index 1ba1fed987..baaf8e4f73 100644 --- a/configs/nvidia-master.yaml +++ b/configs/nvidia-master.yaml @@ -8601,8 +8601,8 @@ minimaxm3-fp4-b300-vllm-agentic-mtp: - dram-utilization: 0.683 search-space: - { tp: 4, spec-decoding: mtp, kv-offloading: none, conc-list: [1, 2, 5, 10, 15, 20] } - - { tp: 2, spec-decoding: mtp, kv-offloading: none, conc-list: [1, 2, 5, 10, 15, 20] } - - { tp: 4, spec-decoding: mtp, kv-offloading: dram, kv-offload-backend: { name: vllm-simple }, conc-list: [20, 30, 40, 50, 60] } + - { tp: 2, spec-decoding: mtp, kv-offloading: none, conc-list: [1, 2, 5] } + - { tp: 4, spec-decoding: mtp, kv-offloading: dram, kv-offload-backend: { name: vllm-simple }, conc-list: [30, 40, 50, 60, 80, 90, 100] } dsv4-fp4-b200-sglang-agentic-hicache: image: lmsysorg/sglang:nightly-dev-cu13-20260707-b4155233