Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
Original file line number Diff line number Diff line change
@@ -0,0 +1,195 @@
schema: 2

base:
name: minimaxm31flash-fp4-gb300-dynamo-sglang-agentx-agg
identity:
model: {}
frameworks:
dynamo: "1.7.0.dev20261030"
sglang: "0.0.0.dev1+ge3718813e"
dynamo:
install: false
request_plane: tcp
event_plane: zmq
environment:
HF_HUB_CACHE: /hf_hub_cache
observability:
tachometer:
enabled: false
slurm:
time_limit: "4:00:00"
health_check:
max_attempts: 1440
interval_seconds: 10
resources:
gpu_type: gb300
gpus_per_node: 4
services:
- name: etcd
type: etcd
placement:
node: infra
- name: otel-collector
type: otel-collector
enabled: false
frontend:
type: dynamo
enable_multiple_frontends: false
env:
DYN_ROUTER_TEMPERATURE: "0"
DYN_ROUTER_QUEUE_THRESHOLD: None
DYN_ROUTER_ACTIVE_REQUEST_EXPIRY_SECS: "3600"
DYN_TCP_CONNECT_TIMEOUT: "120"
DYN_TOKENIZER: "fastokens"
DYN_TOKENIZER_CACHE: "1"
DYN_TOKENIZER_CACHE_BYTES: "8000000000"
args:
router-mode: kv
router-session-affinity-ttl-secs: "14400"
active-decode-blocks-threshold: "None"
active-prefill-tokens-threshold: "None"
active-prefill-tokens-threshold-frac: "None"
engine: sglang
roles:
agg:
nodes: 1
workers: 1
gpus: 4
env:
PYTHONUNBUFFERED: "1"
PYTHONNOUSERSITE: "1"
FMHA_SM100_ALLOW_JIT: "1"
SGLANG_TIMEOUT_KEEP_ALIVE: "1800"
DYN_BACKEND_ADMISSION_ENGINE_REQUEST_LIMIT: "10000"
DYN_BACKEND_ADMISSION_ENGINE_REQUEST_WAITING_LIMIT: "10000"
DYN_BACKEND_ADMISSION_REQUEST_QUEUE_LIMIT: "10000"
args:
served-model-name: MiniMaxAI/MiniMax-M3.1-Flash
trust-remote-code: true
reasoning-parser: minimax-m3
tool-call-parser: minimax-m3
moe-runner-backend: flashinfer_trtllm_routed
speculative-algorithm: DSPARK
speculative-dspark-block-size: 7
speculative-use-block-verification: true
speculative-draft-kv-cache-dtype: fp8_e4m3
cuda-graph-backend-prefill: breakable
router-mode: kv
router-session-affinity-ttl-secs: "14400"
watchdog-timeout: 3600
enable-metrics: true
kv_events: true
benchmark:
env:
AIPERF_HTTP_X_DYNAMO_SESSION_ID_FROM_CORRELATION_ID: "true"
AIPERF_USE_DYNAMO_CONV_AWARE_ROUTING: "0"
AIPERF_REQUIRED_SERVER_METRIC_PREFIX: "sglang:"

override_tp4_c1:
name: minimaxm31flash-fp4-gb300-dynamo-sglang-agentx-agg-tp4-c1
roles:
agg:
args:
tensor-parallel-size: 4
chunked-prefill-size: 32768
max-running-requests: 2
cuda-graph-max-bs-decode: 2
mem-fraction-static: 0.8

override_tp4_c4:
name: minimaxm31flash-fp4-gb300-dynamo-sglang-agentx-agg-tp4-c4
roles:
agg:
args:
tensor-parallel-size: 4
chunked-prefill-size: 32768
max-running-requests: 8
cuda-graph-max-bs-decode: 8
mem-fraction-static: 0.8

override_tp4_c8:
name: minimaxm31flash-fp4-gb300-dynamo-sglang-agentx-agg-tp4-c8
roles:
agg:
args:
tensor-parallel-size: 4
chunked-prefill-size: 32768
max-running-requests: 16
cuda-graph-max-bs-decode: 16
mem-fraction-static: 0.8

override_tp4_c16:
name: minimaxm31flash-fp4-gb300-dynamo-sglang-agentx-agg-tp4-c16
roles:
agg:
args:
tensor-parallel-size: 4
chunked-prefill-size: 32768
max-running-requests: 32
cuda-graph-max-bs-decode: 32
mem-fraction-static: 0.8

override_tp4_hicache_spf_c24:
name: minimaxm31flash-fp4-gb300-dynamo-sglang-agentx-agg-tp4-hicache-spf-c24
roles:
agg:
args:
tensor-parallel-size: 4
chunked-prefill-size: 8192
max-running-requests: 48
cuda-graph-max-bs-decode: 48
mem-fraction-static: 0.87
enable-hierarchical-cache: true
hicache-size: 180
hicache-write-policy: write_back
schedule-policy: shortest-prefill-first
prefill-decode-interval: 32
stream-interval: 20

override_tp2_hicache_spf_c40:
name: minimaxm31flash-fp4-gb300-dynamo-sglang-agentx-agg-tp2-hicache-spf-c40
roles:
agg:
gpus: 2
args:
tensor-parallel-size: 2
chunked-prefill-size: 8192
max-running-requests: 80
cuda-graph-max-bs-decode: 80
mem-fraction-static: 0.87
enable-hierarchical-cache: true
hicache-size: 180
hicache-write-policy: write_back
schedule-policy: shortest-prefill-first
prefill-decode-interval: 32
stream-interval: 20

override_tp2_hicache_c40:
name: minimaxm31flash-fp4-gb300-dynamo-sglang-agentx-agg-tp2-hicache-c40
roles:
agg:
gpus: 2
args:
tensor-parallel-size: 2
chunked-prefill-size: 32768
max-running-requests: 80
cuda-graph-max-bs-decode: 80
mem-fraction-static: 0.87
enable-hierarchical-cache: true
hicache-size: 180
hicache-write-policy: write_back

override_tp2_hicache_c44:
name: minimaxm31flash-fp4-gb300-dynamo-sglang-agentx-agg-tp2-hicache-c44
roles:
agg:
gpus: 2
args:
tensor-parallel-size: 2
chunked-prefill-size: 32768
max-running-requests: 88
cuda-graph-max-bs-decode: 88
mem-fraction-static: 0.87
enable-hierarchical-cache: true
hicache-size: 180
hicache-write-policy: write_back
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ base:
# flashinfer_trtllm_routed needs attention TP to match EP, which attention DP breaks.
moe-a2a-backend: megamoe
disaggregation-transfer-backend: mooncake
chunked-prefill-size: 8192
chunked-prefill-size: 16384
# Shortest uncached prefill first: short cached turns stop queueing
# behind long uncached prompts, which cuts the TTFT tail.
schedule-policy: shortest-prefill-first
Expand Down Expand Up @@ -186,6 +186,20 @@ base:
AIPERF_USE_DYNAMO_CONV_AWARE_ROUTING: "0"
AIPERF_REQUIRED_SERVER_METRIC_PREFIX: "sglang:"

override_4p_dep2_dep8:
name: minimaxm31flash-fp4-gb300-dynamo-sglang-agentx-disagg-4p-dep2-dep8
roles:
prefill:
nodes: 2
workers: 4

override_8p_dep2_dep8:
name: minimaxm31flash-fp4-gb300-dynamo-sglang-agentx-disagg-8p-dep2-dep8
roles:
prefill:
nodes: 4
workers: 8

override_6p_dep2_dep8:
name: minimaxm31flash-fp4-gb300-dynamo-sglang-agentx-disagg-6p-dep2-dep8

Expand Down
87 changes: 85 additions & 2 deletions inferencex-e2e/configs/nvidia-master.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7586,6 +7586,75 @@ minimaxm31flash-fp4-gb300-sglang-agentic-dspark:
- { tp: 2, spec-decoding: mtp, kv-offloading: dram, kv-offload-backend: { name: hicache }, conc-list: [36], srt-recipe: 'agentic-spf.yaml:zip_override_tp2_hicache_spf_interval32[4]' }
- { tp: 2, spec-decoding: mtp, kv-offloading: dram, kv-offload-backend: { name: hicache }, conc-list: [40], srt-recipe: 'agentic-spf.yaml:zip_override_tp2_hicache_spf_interval32[5]' }

minimaxm31flash-fp4-gb300-dynamo-sglang-agentic-dspark-agg:
image: lmsysorg/sglang:nightly-cu134-20261030-e371881@sha256:a82fff791d7dc1e5cfdfde9022487c60c079286fd54684950d55b787eb2e673a
model: MiniMaxAI/MiniMax-M3.1-Flash
model-prefix: minimaxm31flash
runner: cluster:gb300-nv
precision: fp4
framework: dynamo-sglang
router: { name: dynamo-router, version: "1.7.0.dev20261030" }
multinode: true
disagg: false
srt-recipe-dir: minimaxm31flash/sglang/gb300-fp4/agentx
scenarios:
agentic-coding:
- search-space:
- spec-decoding: mtp
kv-offloading: none
conc-list: [1]
num-nodes: 1
srt-recipe: agg-variants.yaml:override_tp4_c1
worker: { num-worker: 1, tp: 4, ep: 1, dp-attn: false }
- spec-decoding: mtp
kv-offloading: none
conc-list: [4]
num-nodes: 1
srt-recipe: agg-variants.yaml:override_tp4_c4
worker: { num-worker: 1, tp: 4, ep: 1, dp-attn: false }
- spec-decoding: mtp
kv-offloading: none
conc-list: [8]
num-nodes: 1
srt-recipe: agg-variants.yaml:override_tp4_c8
worker: { num-worker: 1, tp: 4, ep: 1, dp-attn: false }
- spec-decoding: mtp
kv-offloading: none
conc-list: [16]
num-nodes: 1
srt-recipe: agg-variants.yaml:override_tp4_c16
worker: { num-worker: 1, tp: 4, ep: 1, dp-attn: false }
- dram-utilization: 0.80
search-space:
- spec-decoding: mtp
kv-offloading: dram
kv-offload-backend: { name: hicache }
conc-list: [24]
num-nodes: 1
srt-recipe: agg-variants.yaml:override_tp4_hicache_spf_c24
worker: { num-worker: 1, tp: 4, ep: 1, dp-attn: false }
- spec-decoding: mtp
kv-offloading: dram
kv-offload-backend: { name: hicache }
conc-list: [40]
num-nodes: 1
srt-recipe: agg-variants.yaml:override_tp2_hicache_spf_c40
worker: { num-worker: 1, tp: 2, ep: 1, dp-attn: false }
- spec-decoding: mtp
kv-offloading: dram
kv-offload-backend: { name: hicache }
conc-list: [40]
num-nodes: 1
srt-recipe: agg-variants.yaml:override_tp2_hicache_c40
worker: { num-worker: 1, tp: 2, ep: 1, dp-attn: false }
- spec-decoding: mtp
kv-offloading: dram
kv-offload-backend: { name: hicache }
conc-list: [44]
num-nodes: 1
srt-recipe: agg-variants.yaml:override_tp2_hicache_c44
worker: { num-worker: 1, tp: 2, ep: 1, dp-attn: false }

minimaxm31flash-fp4-gb300-dynamo-sglang-agentic-dspark-disagg:
image: lmsysorg/sglang:nightly-cu134-20261030-e371881@sha256:a82fff791d7dc1e5cfdfde9022487c60c079286fd54684950d55b787eb2e673a
model: MiniMaxAI/MiniMax-M3.1-Flash
Expand All @@ -7605,14 +7674,28 @@ minimaxm31flash-fp4-gb300-dynamo-sglang-agentic-dspark-disagg:
- spec-decoding: mtp
kv-offloading: dram
kv-offload-backend: { name: hicache }
conc-list: [280, 320, 360, 400]
conc-list: [280, 320, 340, 360, 400]
srt-recipe: disagg-variants.yaml:override_6p_dep2_dep8
prefill: { num-worker: 6, tp: 2, ep: 2, dp-attn: true }
decode: { num-worker: 1, tp: 8, ep: 8, dp-attn: true }
- spec-decoding: mtp
kv-offloading: dram
kv-offload-backend: { name: hicache }
conc-list: [300]
conc-list: [224, 256]
srt-recipe: disagg-variants.yaml:override_4p_dep2_dep8
prefill: { num-worker: 4, tp: 2, ep: 2, dp-attn: true }
decode: { num-worker: 1, tp: 8, ep: 8, dp-attn: true }
- spec-decoding: mtp
kv-offloading: dram
kv-offload-backend: { name: hicache }
conc-list: [440, 480]
srt-recipe: disagg-variants.yaml:override_8p_dep2_dep8
prefill: { num-worker: 8, tp: 2, ep: 2, dp-attn: true }
decode: { num-worker: 1, tp: 8, ep: 8, dp-attn: true }
- spec-decoding: mtp
kv-offloading: dram
kv-offload-backend: { name: hicache }
conc-list: [300, 360, 400]
srt-recipe: disagg-variants.yaml:override_6p_dep2_dep16
prefill: { num-worker: 6, tp: 2, ep: 2, dp-attn: true }
decode: { num-worker: 1, tp: 16, ep: 16, dp-attn: true }
Expand Down
9 changes: 9 additions & 0 deletions inferencex-e2e/perf-changelog.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11791,3 +11791,12 @@
- "C64 also sets PYTHONHASHSEED=42 and VLLM_ROCM_MINIMAX_M3_SP_PREFILL=1. Sequence-parallel prefill stays off on this checkpoint: at 8d0f05a0c it needs an MXFP8 kernel on layer.quant_method.kernel, which the Quark linear method does not expose, and every rank logs it as off."
- "Draft data types unchanged: the dspark/ draft loads with its own MXFP8 config (FP8 E4M3 attention and FFN projections with 1x32 UE8M0 scales; BF16 fc, Markov and confidence heads, norms) and an FP8 draft KV cache. Only its length changes, at C16/C32."
pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/4671

- config-keys:
- minimaxm31flash-fp4-gb300-dynamo-sglang-agentic-dspark-agg
- minimaxm31flash-fp4-gb300-dynamo-sglang-agentic-dspark-disagg
scenario-type: [agentic-coding]
description:
- "Add aggregated SGLang behind Dynamo for MiniMax-M3.1-Flash AgentX on GB300 with lmsysorg/sglang:nightly-cu134-20261030-e371881: TP4 at conc 1-16; TP4 with HiCache 180 GB per rank, shortest-prefill-first and prefill-decode interval 32 at conc 24; TP2 with HiCache 180 GB per rank at conc 40 (with and without shortest-prefill-first) and 44."
- "Disagg prefill chunk 16384 (8192 per DP rank); add 4 DEP2 prefill workers with a DEP8 decode at conc 224 and 256, 8 DEP2 prefill workers with a DEP8 decode at conc 440 and 480, conc 340 on the 6 DEP2 + DEP8 shape, and conc 360 and 400 on the 6 DEP2 + DEP16 shape."
pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/4698
Loading