Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
4a91df9
add b300 vllm agentX single-node minimaxm3 fp4 EAGLE-GQA MTP
hshrivastava-droid Jul 24, 2026
6ad6ee9
update eval logic
hshrivastava-droid Jul 28, 2026
3e84e61
feat: add tool-call-parser + enable-auto-tool-choice; drop synthetic …
xinli-sw Jul 28, 2026
3f57bd6
perf-changelog: add trailing newline / 末尾添加空行
xinli-sw Jul 28, 2026
31ec006
perf-changelog: append minimaxm3-fp4-b300-vllm-agentic-mtp entry / 追加…
xinli-sw Jul 28, 2026
df08354
update config
hshrivastava-droid Jul 29, 2026
d0f4fc9
Merge remote-tracking branch 'origin/main' into minimaxm3-fp4-b300-vl…
hshrivastava-droid Jul 29, 2026
b7556cc
fix(minimaxm3): pin synthetic AL to the GQA golden curve (2.83 -> 2.7…
Ankur-singh Jul 29, 2026
f98ab15
Merge origin/main and resolve perf changelog / 合并 origin/main 并解决 per…
Ankur-singh Jul 29, 2026
c2dd90d
chore: merge origin/main and resolve perf changelog
Ankur-singh Jul 30, 2026
a52dada
fix(changelog): correct synthetic acceptance length 2.83 -> 2.78 / 修复…
Ankur-singh Jul 30, 2026
9031f23
Merge origin/main and resolve perf changelog / 合并 origin/main 并解决 per…
Ankur-singh Jul 30, 2026
220fd05
Merge origin/main and preserve append-only changelog / 合并 origin/main…
xinli-sw Jul 30, 2026
9d0be34
update config
hshrivastava-droid Jul 30, 2026
8398df0
Merge branch 'main' into minimaxm3-fp4-b300-vllm-agentic-mtp
hshrivastava-droid Jul 30, 2026
5e785d0
chore(agentx): pin MiniMax-M3 sweep to AIPerf PR 31
RohitNagraj Jul 31, 2026
01dc27e
chore(agentx): pin MiniMax-M3 sweep to AIPerf ed05782 (globally ancho…
xinli-sw Jul 31, 2026
2af3fbc
chore(agentx): pin MiniMax-M3 sweep to AIPerf abf55f9 (keep idle watc…
xinli-sw Aug 2, 2026
6161fb0
feat(minimaxm3-b300-mtp): expand AgentX search space for TP4/TP2/TP4-…
xinli-sw Aug 2, 2026
9b46824
feat(minimaxm3-b300-mtp): prune search space — trim TP2, extend DRAM …
xinli-sw Aug 2, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
122 changes: 122 additions & 0 deletions benchmarks/single_node/agentic/minimaxm3_fp4_b300_mtp.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
#!/usr/bin/env bash
Comment thread
Ankur-singh marked this conversation as resolved.
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 TOTAL_CPU_DRAM_GB RESULT_DIR DURATION

DRAFT_MODEL="Inferact/MiniMax-M3-EAGLE3-GQA"
NUM_SPEC_TOKENS=3
# 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}"
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

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
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

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=(
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
--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

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

wont all2all backend of flashinfer one sided nvlink help for most workloads? can u add to vllm recipes?

Image

--max-cudagraph-capture-size 512
--max-num-batched-tokens 16384
--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"
"${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"
if [ "${EVAL_ONLY}" = "true" ]; then
run_eval --port "$PORT"
else
build_replay_cmd "$RESULT_DIR"
run_agentic_replay_and_write_outputs "$RESULT_DIR"
fi
18 changes: 18 additions & 0 deletions configs/nvidia-master.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8586,6 +8586,24 @@ 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:
# 0.683 maps the B300 TP4 SimpleCPU point to a 1,024 GB
# 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, 2, 5, 10, 15, 20] }
- { 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
model: deepseek-ai/DeepSeek-V4-Pro
Expand Down
10 changes: 10 additions & 0 deletions perf-changelog.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5355,3 +5355,13 @@
- "Apply the accuracy-gated Kimi-K2.5 MXFP4 settings: tuned AITER MXFP4 MoE, fused shared experts, FP8 KV cache, block size 16, 16384 batched tokens, 512 sequences, async scheduling, gpu-memory-utilization 0.85 (headroom for CUDA-graph capture on MI355X), and the AITER BF16 GEMM path"
- "Extend the TP4 and TP8 8k1k concurrency sweep from 64 to 128 (1k1k deprecated per #2263)"
pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2213

- config-keys:
- minimaxm3-fp4-b300-vllm-agentic-mtp
scenario-type:
- agentic-coding
description:
- "Run five MiniMax-M3 NVFP4 B300 vLLM AgentX points on vllm/vllm-openai:nightly-387189c42997b27e2c04b5d97ef8190ffa2bf909: TP4 concurrency 1 and 5; TP2 concurrency 2 and 6; and TP4 concurrency 40 with lazy SimpleCPUOffloadConnector KV offload and a 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.78; enable prefix caching, FlashInfer TRT-LLM attention with FP8 indexer KV, and the EAGLE3 drafter on FLASH_ATTN."
- "Pin the AgentX client to SemiAnalysisAI/aiperf PR #31 commit deb5421c7ff3cd39f78228f469e23e25233ac6c6 for the revised trace timing, warmup handoff, and spawn/join replay behavior."
pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2328
2 changes: 1 addition & 1 deletion utils/aiperf
Submodule aiperf updated 64 files
+1 −1 docs/benchmark-modes/dag.md
+17 −9 docs/benchmark-modes/semianalysis-agentx-faq.md
+4 −4 docs/cli-options.md
+33 −14 docs/tutorials/agentx-mvp.md
+1 −1 docs/tutorials/weka-trace.md
+2 −0 src/aiperf/common/enums/__init__.py
+13 −0 src/aiperf/common/enums/enums.py
+117 −16 src/aiperf/common/loop_scheduler.py
+10 −0 src/aiperf/common/messages/command_messages.py
+0 −1 src/aiperf/common/scenario/inferencex_agentx_mvp.py
+12 −14 src/aiperf/config/dataset/config.py
+5 −5 src/aiperf/config/flags/_converter_dataset.py
+5 −0 src/aiperf/config/flags/_converter_profiling.py
+16 −20 src/aiperf/config/flags/cli_config.py
+8 −0 src/aiperf/config/flags/resolver.py
+8 −11 src/aiperf/config/phases.py
+28 −28 src/aiperf/config/schema/aiperf-config.schema.json
+34 −0 src/aiperf/controller/system_controller.py
+44 −0 src/aiperf/credit/dispatch.py
+29 −23 src/aiperf/credit/issuer.py
+23 −49 src/aiperf/dataset/loader/weka_parallel_convert.py
+45 −413 src/aiperf/dataset/loader/weka_trace.py
+8 −2 src/aiperf/endpoints/openai_completions.py
+30 −10 src/aiperf/records/records_manager.py
+23 −6 src/aiperf/records/records_tracker.py
+243 −98 src/aiperf/timing/branch_orchestrator.py
+9 −2 src/aiperf/timing/phase/publisher.py
+32 −2 src/aiperf/timing/phase/runner.py
+127 −20 src/aiperf/timing/replay_dependencies.py
+274 −203 src/aiperf/timing/strategies/agentic_replay.py
+7 −3 src/aiperf/timing/strategies/request_rate.py
+24 −1 src/aiperf/workers/worker.py
+1 −1 tests/component_integration/test_agentic_replay_e2e.py
+142 −0 tests/integration/test_agentx_trace_idle_gap_cap.py
+44 −0 tests/integration/test_failed_request_threshold_abort.py
+313 −1 tests/integration/test_weka_flat_split_e2e.py
+30 −6 tests/unit/cli_runner/test_request_count_override.py
+1 −1 tests/unit/common/scenario/test_scenario_registry.py
+5 −4 tests/unit/common/scenario/test_scenario_validator.py
+6 −7 tests/unit/common/scenario/test_scenario_validator_advanced_adversarial.py
+89 −0 tests/unit/common/test_loop_scheduler.py
+53 −0 tests/unit/controller/test_system_controller.py
+27 −1 tests/unit/credit/test_issuer.py
+0 −28 tests/unit/dataset/loader/test_weka_flat_split_parallel_adv.py
+14 −77 tests/unit/dataset/loader/test_weka_flat_split_serial_adv.py
+0 −87 tests/unit/dataset/loader/test_weka_pathological.py
+0 −1 tests/unit/dataset/loader/test_weka_tool_shaped_messages.py
+0 −1 tests/unit/dataset/loader/test_weka_tool_turn_detection.py
+0 −198 tests/unit/dataset/loader/test_weka_trace.py
+0 −3 tests/unit/dataset/loader/test_weka_trace_parallel.py
+3 −1 tests/unit/endpoints/conftest.py
+48 −1 tests/unit/endpoints/test_completions_endpoint.py
+115 −2 tests/unit/records/test_records_manager.py
+1 −90 tests/unit/regression/test_agentic_hotpath_invariants.py
+6 −0 tests/unit/timing/phase/test_publisher.py
+518 −92 tests/unit/timing/strategies/test_agentic_replay.py
+244 −0 tests/unit/timing/test_branch_orchestrator_delayed.py
+41 −1 tests/unit/timing/test_branch_orchestrator_dispatch_offset.py
+94 −1 tests/unit/timing/test_branch_orchestrator_warmup_intercept.py
+1 −1 tests/unit/timing/test_factories.py
+152 −0 tests/unit/timing/test_replay_barrier_coordinator.py
+21 −0 tests/unit/timing/test_timing_config.py
+59 −1 tests/unit/workers/test_worker.py
+5 −0 tools/ruff_baseline.json
Loading