diff --git a/inferencex-e2e/benchmarks/single_node/srt-slurm-recipes/minimaxm31flash/sglang/b300-fp4-mtp/agentic-tp2-spf-extra.yaml b/inferencex-e2e/benchmarks/single_node/srt-slurm-recipes/minimaxm31flash/sglang/b300-fp4-mtp/agentic-tp2-spf-extra.yaml new file mode 100644 index 0000000000..9169dfb96b --- /dev/null +++ b/inferencex-e2e/benchmarks/single_node/srt-slurm-recipes/minimaxm31flash/sglang/b300-fp4-mtp/agentic-tp2-spf-extra.yaml @@ -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 diff --git a/inferencex-e2e/benchmarks/single_node/srt-slurm-recipes/minimaxm31flash/sglang/b300-fp4-mtp/agentic-tp4-spf-extra.yaml b/inferencex-e2e/benchmarks/single_node/srt-slurm-recipes/minimaxm31flash/sglang/b300-fp4-mtp/agentic-tp4-spf-extra.yaml new file mode 100644 index 0000000000..9ce5df5a62 --- /dev/null +++ b/inferencex-e2e/benchmarks/single_node/srt-slurm-recipes/minimaxm31flash/sglang/b300-fp4-mtp/agentic-tp4-spf-extra.yaml @@ -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. +# 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 diff --git a/inferencex-e2e/configs/nvidia-master.yaml b/inferencex-e2e/configs/nvidia-master.yaml index 02a3bf1143..6d3baa233f 100644 --- a/inferencex-e2e/configs/nvidia-master.yaml +++ b/inferencex-e2e/configs/nvidia-master.yaml @@ -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 @@ -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 } @@ -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: diff --git a/inferencex-e2e/perf-changelog.yaml b/inferencex-e2e/perf-changelog.yaml index c862bec17f..26fe1d45d1 100644 --- a/inferencex-e2e/perf-changelog.yaml +++ b/inferencex-e2e/perf-changelog.yaml @@ -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