From 7cbda30a90e59d6a941a52fd8f4305699578dabb Mon Sep 17 00:00:00 2001 From: Xin Li Date: Mon, 28 Sep 2026 15:12:32 -0400 Subject: [PATCH] perf: tune MiniMax-M3 AgentX on B200 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 更新 B200 MiniMax-M3 AgentX 的 vLLM 镜像,并为 EAGLE3 草稿启用本地 argmax 归约。 --- .../minimaxm3/vllm/b200-fp4-mtp/agentic.yaml | 57 ++++++++++++++----- inferencex-e2e/configs/nvidia-master.yaml | 2 +- inferencex-e2e/perf-changelog.yaml | 8 +++ 3 files changed, 53 insertions(+), 14 deletions(-) diff --git a/inferencex-e2e/benchmarks/single_node/srt-slurm-recipes/minimaxm3/vllm/b200-fp4-mtp/agentic.yaml b/inferencex-e2e/benchmarks/single_node/srt-slurm-recipes/minimaxm3/vllm/b200-fp4-mtp/agentic.yaml index 901ea87ea6..c176e47fd5 100644 --- a/inferencex-e2e/benchmarks/single_node/srt-slurm-recipes/minimaxm3/vllm/b200-fp4-mtp/agentic.yaml +++ b/inferencex-e2e/benchmarks/single_node/srt-slurm-recipes/minimaxm3/vllm/b200-fp4-mtp/agentic.yaml @@ -5,7 +5,7 @@ base: name: minimaxm3-fp4-b200-vllm-agentic model: path: hf:nvidia/MiniMax-M3-NVFP4 - container: vllm/vllm-openai:nightly-1dc464d42681d22f38caf1fdc1eb632dc4421c45 + container: vllm/vllm-openai:nightly-af7f9488c2210d67e1033ecdc845b087ee7fe92b precision: fp4 resources: gpu_type: b200 @@ -30,10 +30,11 @@ base: workers: 1 args: served-model-name: nvidia/MiniMax-M3-NVFP4 - gpu-memory-utilization: 0.9 + gpu-memory-utilization: 0.95 block-size: 128 language-model-only: true enable-prefix-caching: true + enable-chunked-prefill: true no-enable-flashinfer-autotune: true reasoning-parser: minimax_m3 tool-call-parser: minimax_m3 @@ -47,7 +48,7 @@ base: trust-remote-code: true # Three-token EAGLE3 with the GQA draft head. Throughput runs switch to # synthetic rejection at the golden acceptance length. - speculative-config: '{"method":"eagle3","model":"Inferact/MiniMax-M3-EAGLE3-GQA","num_speculative_tokens":3,"attention_backend":"FLASH_ATTN"}' + speculative-config: '{"method":"eagle3","model":"Inferact/MiniMax-M3-EAGLE3-GQA","num_speculative_tokens":3,"attention_backend":"FLASHINFER","use_local_argmax_reduction":true}' env: PYTHONNOUSERSITE: '1' VLLM_ENGINE_READY_TIMEOUT_S: '3600' @@ -61,13 +62,15 @@ base: AIPERF_REQUIRED_SERVER_METRIC_PREFIX: 'vllm:' # One variant per point. DRAM points give SimpleCPUOffload the whole host budget -# (TOTAL_CPU_DRAM_GB GiB) with lazy offload. +# (TOTAL_CPU_DRAM_GB decimal GB) with lazy offload. override_tp8_c1: roles: agg: gpus: 8 args: tensor-parallel-size: 8 + max-num-seqs: 2 + max-cudagraph-capture-size: 8 benchmark: env: CONC: '1' @@ -79,6 +82,8 @@ override_tp4_c1: gpus: 4 args: tensor-parallel-size: 4 + max-num-seqs: 2 + max-cudagraph-capture-size: 8 benchmark: env: CONC: '1' @@ -90,6 +95,8 @@ override_tp4_c5: gpus: 4 args: tensor-parallel-size: 4 + max-num-seqs: 10 + max-cudagraph-capture-size: 40 benchmark: env: CONC: '5' @@ -101,6 +108,8 @@ override_tp4_c10: gpus: 4 args: tensor-parallel-size: 4 + max-num-seqs: 20 + max-cudagraph-capture-size: 80 benchmark: env: CONC: '10' @@ -112,6 +121,8 @@ override_tp4_c15: gpus: 4 args: tensor-parallel-size: 4 + max-num-seqs: 30 + max-cudagraph-capture-size: 120 benchmark: env: CONC: '15' @@ -123,6 +134,8 @@ override_tp4_c20: gpus: 4 args: tensor-parallel-size: 4 + max-num-seqs: 40 + max-cudagraph-capture-size: 160 benchmark: env: CONC: '20' @@ -134,7 +147,9 @@ override_tp4_c15_dram: gpus: 4 args: tensor-parallel-size: 4 - kv-transfer-config: '{"kv_connector":"SimpleCPUOffloadConnector","kv_role":"kv_both","kv_connector_extra_config":{"cpu_bytes_to_use":1161788653568,"lazy_offload":true}}' + max-num-seqs: 30 + max-cudagraph-capture-size: 120 + kv-transfer-config: '{"kv_connector":"SimpleCPUOffloadConnector","kv_role":"kv_both","kv_connector_extra_config":{"cpu_bytes_to_use":1082000000000,"lazy_offload":true}}' env: VLLM_USE_SIMPLE_KV_OFFLOAD: '1' benchmark: @@ -149,7 +164,9 @@ override_tp4_c20_dram: gpus: 4 args: tensor-parallel-size: 4 - kv-transfer-config: '{"kv_connector":"SimpleCPUOffloadConnector","kv_role":"kv_both","kv_connector_extra_config":{"cpu_bytes_to_use":1161788653568,"lazy_offload":true}}' + max-num-seqs: 40 + max-cudagraph-capture-size: 160 + kv-transfer-config: '{"kv_connector":"SimpleCPUOffloadConnector","kv_role":"kv_both","kv_connector_extra_config":{"cpu_bytes_to_use":1082000000000,"lazy_offload":true}}' env: VLLM_USE_SIMPLE_KV_OFFLOAD: '1' benchmark: @@ -164,7 +181,9 @@ override_tp4_c25_dram: gpus: 4 args: tensor-parallel-size: 4 - kv-transfer-config: '{"kv_connector":"SimpleCPUOffloadConnector","kv_role":"kv_both","kv_connector_extra_config":{"cpu_bytes_to_use":1161788653568,"lazy_offload":true}}' + max-num-seqs: 50 + max-cudagraph-capture-size: 200 + kv-transfer-config: '{"kv_connector":"SimpleCPUOffloadConnector","kv_role":"kv_both","kv_connector_extra_config":{"cpu_bytes_to_use":1082000000000,"lazy_offload":true}}' env: VLLM_USE_SIMPLE_KV_OFFLOAD: '1' benchmark: @@ -179,7 +198,9 @@ override_tp4_c30_dram: gpus: 4 args: tensor-parallel-size: 4 - kv-transfer-config: '{"kv_connector":"SimpleCPUOffloadConnector","kv_role":"kv_both","kv_connector_extra_config":{"cpu_bytes_to_use":1161788653568,"lazy_offload":true}}' + max-num-seqs: 60 + max-cudagraph-capture-size: 240 + kv-transfer-config: '{"kv_connector":"SimpleCPUOffloadConnector","kv_role":"kv_both","kv_connector_extra_config":{"cpu_bytes_to_use":1082000000000,"lazy_offload":true}}' env: VLLM_USE_SIMPLE_KV_OFFLOAD: '1' benchmark: @@ -194,7 +215,9 @@ override_tp4_c32_dram: gpus: 4 args: tensor-parallel-size: 4 - kv-transfer-config: '{"kv_connector":"SimpleCPUOffloadConnector","kv_role":"kv_both","kv_connector_extra_config":{"cpu_bytes_to_use":1161788653568,"lazy_offload":true}}' + max-num-seqs: 64 + max-cudagraph-capture-size: 256 + kv-transfer-config: '{"kv_connector":"SimpleCPUOffloadConnector","kv_role":"kv_both","kv_connector_extra_config":{"cpu_bytes_to_use":1082000000000,"lazy_offload":true}}' env: VLLM_USE_SIMPLE_KV_OFFLOAD: '1' benchmark: @@ -209,7 +232,9 @@ override_tp4_c34_dram: gpus: 4 args: tensor-parallel-size: 4 - kv-transfer-config: '{"kv_connector":"SimpleCPUOffloadConnector","kv_role":"kv_both","kv_connector_extra_config":{"cpu_bytes_to_use":1161788653568,"lazy_offload":true}}' + max-num-seqs: 68 + max-cudagraph-capture-size: 272 + kv-transfer-config: '{"kv_connector":"SimpleCPUOffloadConnector","kv_role":"kv_both","kv_connector_extra_config":{"cpu_bytes_to_use":1082000000000,"lazy_offload":true}}' env: VLLM_USE_SIMPLE_KV_OFFLOAD: '1' benchmark: @@ -224,7 +249,9 @@ override_tp4_c36_dram: gpus: 4 args: tensor-parallel-size: 4 - kv-transfer-config: '{"kv_connector":"SimpleCPUOffloadConnector","kv_role":"kv_both","kv_connector_extra_config":{"cpu_bytes_to_use":1161788653568,"lazy_offload":true}}' + max-num-seqs: 72 + max-cudagraph-capture-size: 288 + kv-transfer-config: '{"kv_connector":"SimpleCPUOffloadConnector","kv_role":"kv_both","kv_connector_extra_config":{"cpu_bytes_to_use":1082000000000,"lazy_offload":true}}' env: VLLM_USE_SIMPLE_KV_OFFLOAD: '1' benchmark: @@ -239,7 +266,9 @@ override_tp4_c38_dram: gpus: 4 args: tensor-parallel-size: 4 - kv-transfer-config: '{"kv_connector":"SimpleCPUOffloadConnector","kv_role":"kv_both","kv_connector_extra_config":{"cpu_bytes_to_use":1161788653568,"lazy_offload":true}}' + max-num-seqs: 76 + max-cudagraph-capture-size: 304 + kv-transfer-config: '{"kv_connector":"SimpleCPUOffloadConnector","kv_role":"kv_both","kv_connector_extra_config":{"cpu_bytes_to_use":1082000000000,"lazy_offload":true}}' env: VLLM_USE_SIMPLE_KV_OFFLOAD: '1' benchmark: @@ -254,7 +283,9 @@ override_tp4_c40_dram: gpus: 4 args: tensor-parallel-size: 4 - kv-transfer-config: '{"kv_connector":"SimpleCPUOffloadConnector","kv_role":"kv_both","kv_connector_extra_config":{"cpu_bytes_to_use":1161788653568,"lazy_offload":true}}' + max-num-seqs: 80 + max-cudagraph-capture-size: 320 + kv-transfer-config: '{"kv_connector":"SimpleCPUOffloadConnector","kv_role":"kv_both","kv_connector_extra_config":{"cpu_bytes_to_use":1082000000000,"lazy_offload":true}}' env: VLLM_USE_SIMPLE_KV_OFFLOAD: '1' benchmark: diff --git a/inferencex-e2e/configs/nvidia-master.yaml b/inferencex-e2e/configs/nvidia-master.yaml index 46976f0f0f..7115a21524 100644 --- a/inferencex-e2e/configs/nvidia-master.yaml +++ b/inferencex-e2e/configs/nvidia-master.yaml @@ -5658,7 +5658,7 @@ minimaxm3-fp4-b300-trtllm-agentic-mtp: # the same 3 TB AgentX ceiling before the proportional-GPU rule is applied. # GPU-resident points receive a zero budget. minimaxm3-fp4-b200-vllm-agentic-mtp: - image: vllm/vllm-openai:nightly-1dc464d42681d22f38caf1fdc1eb632dc4421c45 + image: vllm/vllm-openai:nightly-af7f9488c2210d67e1033ecdc845b087ee7fe92b model: nvidia/MiniMax-M3-NVFP4 model-prefix: minimaxm3 runner: cluster:b200-nscale diff --git a/inferencex-e2e/perf-changelog.yaml b/inferencex-e2e/perf-changelog.yaml index a0ecd2fc71..f9d3ad8dd7 100644 --- a/inferencex-e2e/perf-changelog.yaml +++ b/inferencex-e2e/perf-changelog.yaml @@ -9003,3 +9003,11 @@ description: - "Update B300 vLLM AgentX to DSpark6 on a new image with a sampled concurrency grid and per-mode --kv-cache-memory-bytes pins." pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/3477 + +- config-keys: + - minimaxm3-fp4-b200-vllm-agentic-mtp + scenario-type: + - agentic-coding + description: + - "Update B200 AgentX to vLLM nightly-af7f9488c2210d67e1033ecdc845b087ee7fe92b and enable local argmax reduction for the FlashInfer EAGLE3 draft." + pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/3435