Skip to content
Merged
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
base:
schema: 2
name: minimaxm31flash-fp4-b300-sglang-agentic-tp2-spf-extra
resources:
gpu_type: b300
gpus_per_node: 8
frontend:
type: sglang
enable_multiple_frontends: false
observability:
enabled: false
tachometer:
enabled: false
engine: sglang
# Cold loads of the 250 GB checkpoint plus JIT MSA kernel builds and graph capture outlast the default.
health_check:
max_attempts: 1440
interval_seconds: 5
roles:
agg:
nodes: 1
workers: 1
gpus: 2
# Serve flags follow the cookbook's B300 cells at
# https://docs.sglang.io/cookbook/autoregressive/MiniMax/MiniMax-M3.1.
args:
served-model-name: MiniMaxAI/MiniMax-M3.1-Flash
trust-remote-code: true
reasoning-parser: minimax-m3
tool-call-parser: minimax-m3
# Seven-token DSpark, the bundled draft's dspark_block_size. Throughput runs
# switch to synthetic acceptance at the golden acceptance length.
speculative-algorithm: DSPARK
speculative-dspark-block-size: 7
speculative-use-block-verification: true
# FP8 draft KV, as vLLM's DSpark drafter uses; bf16 costs ~10 GB of HBM per rank.
speculative-draft-kv-cache-dtype: fp8_e4m3
cuda-graph-backend-prefill: breakable
tokenizer-worker-num: 8
watchdog-timeout: 3600
enable-metrics: true
env:
PYTHONNOUSERSITE: '1'
PYTHONUNBUFFERED: '1'
SGLANG_TIMEOUT_KEEP_ALIVE: '1800'
FMHA_SM100_ALLOW_JIT: '1'
benchmark:
env:
# Warmup can leave bytes unacknowledged past AIPerf's 30 s default.
AIPERF_HTTP_TCP_USER_TIMEOUT: '900000'
AIPERF_REQUIRED_SERVER_METRIC_PREFIX: 'sglang:'

# 2x CONC (AgentX subagent fan-out); the decode graph batch matches it.
override_tp2_c44_spf_interval32:
roles:
agg:
args:
tensor-parallel-size: 2
moe-runner-backend: flashinfer_trtllm_routed
chunked-prefill-size: 8192
max-running-requests: 88
cuda-graph-max-bs-decode: 88
mem-fraction-static: 0.92
enable-hierarchical-cache: true
hicache-size: 370
hicache-write-policy: write_back
schedule-policy: shortest-prefill-first
prefill-decode-interval: 32
stream-interval: 20
benchmark:
env:
CONC: '44'
KV_OFFLOADING: dram

# A larger HBM KV pool keeps more of the reused prefixes on device, so fewer are
# reloaded from host DRAM.
override_tp2_c50_spf_interval20_mem093:
roles:
agg:
args:
tensor-parallel-size: 2
moe-runner-backend: flashinfer_trtllm_routed
chunked-prefill-size: 8192
max-running-requests: 100
cuda-graph-max-bs-decode: 100
mem-fraction-static: 0.93
enable-hierarchical-cache: true
hicache-size: 370
hicache-write-policy: write_back
schedule-policy: shortest-prefill-first
prefill-decode-interval: 20
stream-interval: 20
benchmark:
env:
CONC: '50'
KV_OFFLOADING: dram

override_tp2_c52_spf_interval20_mem093:
roles:
agg:
args:
tensor-parallel-size: 2
moe-runner-backend: flashinfer_trtllm_routed
chunked-prefill-size: 8192
max-running-requests: 104
cuda-graph-max-bs-decode: 104
mem-fraction-static: 0.93
enable-hierarchical-cache: true
hicache-size: 370
hicache-write-policy: write_back
schedule-policy: shortest-prefill-first
prefill-decode-interval: 20
stream-interval: 20
benchmark:
env:
CONC: '52'
KV_OFFLOADING: dram
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
base:
schema: 2
name: minimaxm31flash-fp4-b300-sglang-agentic-tp4-spf-extra
resources:
gpu_type: b300
gpus_per_node: 8
frontend:
type: sglang
enable_multiple_frontends: false
observability:
enabled: false
tachometer:
enabled: false
engine: sglang
# Cold loads of the 250 GB checkpoint plus JIT MSA kernel builds and graph capture outlast the default.
health_check:
max_attempts: 1440
interval_seconds: 5
roles:
agg:
nodes: 1
workers: 1
gpus: 4
# Serve flags follow the cookbook's B300 cells at
# https://docs.sglang.io/cookbook/autoregressive/MiniMax/MiniMax-M3.1.
args:
served-model-name: MiniMaxAI/MiniMax-M3.1-Flash
trust-remote-code: true
reasoning-parser: minimax-m3
tool-call-parser: minimax-m3
# Seven-token DSpark, the bundled draft's dspark_block_size. Throughput runs
# switch to synthetic acceptance at the golden acceptance length.
speculative-algorithm: DSPARK
speculative-dspark-block-size: 7
speculative-use-block-verification: true
# FP8 draft KV, as vLLM's DSpark drafter uses; bf16 costs ~10 GB of HBM per rank.
speculative-draft-kv-cache-dtype: fp8_e4m3
cuda-graph-backend-prefill: breakable
tokenizer-worker-num: 8
watchdog-timeout: 3600
enable-metrics: true
env:
PYTHONNOUSERSITE: '1'
PYTHONUNBUFFERED: '1'
SGLANG_TIMEOUT_KEEP_ALIVE: '1800'
FMHA_SM100_ALLOW_JIT: '1'
benchmark:
env:
# Warmup can leave bytes unacknowledged past AIPerf's 30 s default.
AIPERF_HTTP_TCP_USER_TIMEOUT: '900000'
AIPERF_REQUIRED_SERVER_METRIC_PREFIX: 'sglang:'

# Shortest-prefill-first with a decode interval of 32 on TP4 with DRAM KV offload,
# filling the curve between the TP2 and TP4 points.
Comment on lines +53 to +54

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 nit (optional): The new override header breaks the AGENTS.md comments rule. Its first sentence restates the override's own flags, and "filling the curve between the TP2 and TP4 points" gives a benchmarking motive, not a technical reason. Fix: delete both lines and keep only the technical comment "2x CONC (AgentX subagent fan-out); the decode graph batch matches it." above zip_override_tp4_dram_spf_interval32.

Why this was flagged

AGENTS.md:56 says "No header comments describing a file, topology, config, recipe, override, or section." AGENTS.md:58 allows only technical explanation and says "never restate the code". The new header at agentic-tp4-spf-extra.yaml:53-54 repeats the args just below it (shortest-prefill-first, prefill-decode-interval: 32, tensor-parallel-size: 4, KV_OFFLOADING: dram). It then adds a sweep-plan note about where these points sit on the curve. agentic-tp4-spf.yaml has the same first sentence, but that file is not part of this change and does not make the rule optional. Leaving this in brings a new rule violation into the repo. It does not affect runtime behavior.

Verification: In agentic-tp4-spf-extra.yaml, lines 53-54 sit above zip_override_tp4_dram_spf_interval32. The first line repeats the override's own args. The second line says where the points sit in the sweep plan. It gives no technical reason for any value. AGENTS.md:56 says "No header comments describing a file, topology, config, recipe, override, or section." Nothing breaks at runtime.

# 2x CONC (AgentX subagent fan-out); the decode graph batch matches it.
zip_override_tp4_dram_spf_interval32:
roles:
agg:
args:
tensor-parallel-size: 4
moe-runner-backend: flashinfer_trtllm_routed
chunked-prefill-size: 8192
max-running-requests: [40, 88, 104, 120]
cuda-graph-max-bs-decode: [40, 88, 104, 120]
mem-fraction-static: 0.90
enable-hierarchical-cache: true
hicache-size: 290
hicache-write-policy: write_back
schedule-policy: shortest-prefill-first
prefill-decode-interval: 32
stream-interval: 20
benchmark:
env:
CONC: ['20', '44', '52', '60']
KV_OFFLOADING: dram
TOTAL_CPU_DRAM_GB: '1199'

# At conc 16 the working set fits in HBM; host offload only adds overhead.
override_tp4_c16_spf_interval32:
roles:
agg:
args:
tensor-parallel-size: 4
moe-runner-backend: flashinfer_trtllm_routed
chunked-prefill-size: 8192
max-running-requests: 32
cuda-graph-max-bs-decode: 32
mem-fraction-static: 0.90
schedule-policy: shortest-prefill-first
prefill-decode-interval: 32
stream-interval: 20
benchmark:
env:
CONC: '16'
KV_OFFLOADING: none
8 changes: 8 additions & 0 deletions inferencex-e2e/configs/nvidia-master.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6827,6 +6827,7 @@ minimaxm31flash-fp4-b300-sglang-agentic-dspark:
- search-space:
# Balanced: TP4.
- { tp: 4, spec-decoding: mtp, kv-offloading: none, conc-list: [1, 4, 8, 16, 32], srt-recipe: agentic.yaml }
- { tp: 4, spec-decoding: mtp, kv-offloading: none, conc-list: [16], srt-recipe: 'agentic-tp4-spf-extra.yaml:override_tp4_c16_spf_interval32' }
# Low-Latency: MSA-V1 MonoKernel at batch size 1.
- { tp: 4, spec-decoding: mtp, kv-offloading: none, conc-list: [1], srt-recipe: agentic-low-latency.yaml }
- dram-utilization: 0.80
Expand All @@ -6837,6 +6838,10 @@ minimaxm31flash-fp4-b300-sglang-agentic-dspark:
- { tp: 4, spec-decoding: mtp, kv-offloading: dram, kv-offload-backend: { name: hicache }, conc-list: [40], srt-recipe: 'agentic-tp4-spf.yaml:zip_override_tp4_dram_spf_interval32[2]' }
- { tp: 4, spec-decoding: mtp, kv-offloading: dram, kv-offload-backend: { name: hicache }, conc-list: [8], srt-recipe: 'agentic-tp4-spf.yaml:zip_override_tp4_dram_spf_interval32[3]' }
- { tp: 4, spec-decoding: mtp, kv-offloading: dram, kv-offload-backend: { name: hicache }, conc-list: [16], srt-recipe: 'agentic-tp4-spf.yaml:zip_override_tp4_dram_spf_interval32[4]' }
- { tp: 4, spec-decoding: mtp, kv-offloading: dram, kv-offload-backend: { name: hicache }, conc-list: [20], srt-recipe: 'agentic-tp4-spf-extra.yaml:zip_override_tp4_dram_spf_interval32[0]' }
- { tp: 4, spec-decoding: mtp, kv-offloading: dram, kv-offload-backend: { name: hicache }, conc-list: [44], srt-recipe: 'agentic-tp4-spf-extra.yaml:zip_override_tp4_dram_spf_interval32[1]' }
- { tp: 4, spec-decoding: mtp, kv-offloading: dram, kv-offload-backend: { name: hicache }, conc-list: [52], srt-recipe: 'agentic-tp4-spf-extra.yaml:zip_override_tp4_dram_spf_interval32[2]' }
- { tp: 4, spec-decoding: mtp, kv-offloading: dram, kv-offload-backend: { name: hicache }, conc-list: [60], srt-recipe: 'agentic-tp4-spf-extra.yaml:zip_override_tp4_dram_spf_interval32[3]' }
- dram-utilization: 1.0
search-space:
- { tp: 2, spec-decoding: mtp, kv-offloading: dram, kv-offload-backend: { name: hicache }, conc-list: [32, 36, 40, 44, 46, 48], srt-recipe: agentic-tp2.yaml }
Expand All @@ -6854,6 +6859,9 @@ minimaxm31flash-fp4-b300-sglang-agentic-dspark:
- { tp: 2, spec-decoding: mtp, kv-offloading: dram, kv-offload-backend: { name: hicache }, conc-list: [40], srt-recipe: 'agentic-tp2-spf-interval.yaml:zip_override_tp2_spf_interval32[5]' }
- { tp: 2, spec-decoding: mtp, kv-offloading: dram, kv-offload-backend: { name: hicache }, conc-list: [48], srt-recipe: 'agentic-tp2-spf-interval.yaml:override_tp2_c48_spf_interval24' }
- { tp: 2, spec-decoding: mtp, kv-offloading: dram, kv-offload-backend: { name: hicache }, conc-list: [50], srt-recipe: 'agentic-tp2-spf-interval.yaml:override_tp2_c50_spf_interval20' }
- { tp: 2, spec-decoding: mtp, kv-offloading: dram, kv-offload-backend: { name: hicache }, conc-list: [44], srt-recipe: 'agentic-tp2-spf-extra.yaml:override_tp2_c44_spf_interval32' }
- { tp: 2, spec-decoding: mtp, kv-offloading: dram, kv-offload-backend: { name: hicache }, conc-list: [50], srt-recipe: 'agentic-tp2-spf-extra.yaml:override_tp2_c50_spf_interval20_mem093' }
- { tp: 2, spec-decoding: mtp, kv-offloading: dram, kv-offload-backend: { name: hicache }, conc-list: [52], srt-recipe: 'agentic-tp2-spf-extra.yaml:override_tp2_c52_spf_interval20_mem093' }

# Official SGLang nightly; every point uses the host-DRAM Engram table.
dsv41flash-fp4-gb300-sglang-agentic-dspark:
Expand Down
10 changes: 10 additions & 0 deletions inferencex-e2e/perf-changelog.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11944,3 +11944,13 @@
- "TP4 c1/c4/c16 and TP2/EP2 c16/c32 pin dsv4-attn-backend flashmla; auto resolves to MegaAttention, which zero-pads per-rank attention heads to 64. DP-attention points are unchanged."
pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/4603
scenario-type: [agentic-coding]

- config-keys:
- minimaxm31flash-fp4-b300-sglang-agentic-dspark
description:
- "Add TP4 points with DRAM KV offload at conc 20, 44, 52 and 60, and a TP4 point without offload at conc 16, using shortest-prefill-first with a prefill-decode interval of 32."
- "Add a TP2 point with DRAM KV offload at conc 44 using shortest-prefill-first with a prefill-decode interval of 32."
- "Add TP2 points with DRAM KV offload and a larger HBM KV pool (mem-fraction-static 0.93) at conc 50 and 52 using shortest-prefill-first with a prefill-decode interval of 20."
pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/4726
scenario-type: [agentic-coding]
append-only: true
Loading