From 8c634513d2f14cd654a5c387d28686a5ec1fa124 Mon Sep 17 00:00:00 2001 From: Cam Quilici Date: Sun, 9 Aug 2026 17:04:44 -0500 Subject: [PATCH 01/18] perf(agentx): tune DSv4 MTP frontier on MI355X --- .../agentic/dsv4_fp4_mi355x_vllm_mtp.sh | 8 ++++---- configs/amd-master.yaml | 17 +++++++++-------- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/benchmarks/single_node/agentic/dsv4_fp4_mi355x_vllm_mtp.sh b/benchmarks/single_node/agentic/dsv4_fp4_mi355x_vllm_mtp.sh index 1b9311eda..40f72f077 100644 --- a/benchmarks/single_node/agentic/dsv4_fp4_mi355x_vllm_mtp.sh +++ b/benchmarks/single_node/agentic/dsv4_fp4_mi355x_vllm_mtp.sh @@ -393,8 +393,6 @@ export VLLM_ROCM_USE_AITER=1 #export VLLM_ROCM_QUICK_REDUCE_QUANTIZATION=INT4 export VLLM_ROCM_USE_AITER_MOE=1 -sleep 180 - { set +x; } 2>/dev/null VLLM_CMD=( vllm serve "$MODEL_PATH" --served-model-name "$MODEL" @@ -406,9 +404,11 @@ VLLM_CMD=( --kv-cache-dtype fp8 "${PARALLEL_ARGS[@]}" "${EP_ARGS[@]}" - --gpu-memory-utilization 0.8 + --gpu-memory-utilization 0.9 + --block-size 256 + --max-num-batched-tokens 8192 --moe-backend aiter - --compilation-config '{"mode":3,"cudagraph_mode":"FULL_AND_PIECEWISE"}' + --compilation-config '{"mode":3,"cudagraph_mode":"FULL_DECODE_ONLY"}' --speculative-config "$SPEC_CONFIG" --tokenizer-mode deepseek_v4 --tool-call-parser deepseek_v4 diff --git a/configs/amd-master.yaml b/configs/amd-master.yaml index c6580af43..735f9a4ac 100644 --- a/configs/amd-master.yaml +++ b/configs/amd-master.yaml @@ -1227,13 +1227,13 @@ qwen3.5-fp8-mi355x-sglang-agentic-hicache: - { tp: 8, ep: 1, kv-offloading: none, conc-list: [1, 2, 4, 8, 16, 32] } - { tp: 8, ep: 1, kv-offloading: dram, kv-offload-backend: { name: hicache }, conc-list: [16, 32, 48, 64] } -# MTP twin of dsv4-fp4-mi355x-vllm-agentic. The topologies, KV-offload backends, -# and concurrency points are identical; speculative decoding is enabled on the -# current immutable ROCm nightly because the base config's retired nightly tag -# is no longer available from Docker Hub. Throughput uses the three-token golden -# synthetic acceptance length, while eval-only runs retain real verification. +# DeepSeek-V4-Pro FP4 MTP refresh for MI355X. Pure TP points densely sample the +# latency/throughput knee; TP8+EP8 tests expert-sharded MoE without changing the +# attention topology; DP8+EP8 is the intended high-throughput layout and avoids +# the old c64 row's full-model replication on every GPU. GPU-resident KV remains +# the only supported MTP path until vLLM's multi-KV-group recovery fix lands. dsv4-fp4-mi355x-vllm-agentic-mtp: - image: vllm/vllm-openai-rocm:nightly-821717118fc26667dd474b9b0ab81d29259dfc5c + image: vllm/vllm-openai-rocm:v0.26.0 model: deepseek-ai/DeepSeek-V4-Pro model-prefix: dsv4 runner: cluster:mi355x-amds @@ -1244,8 +1244,9 @@ dsv4-fp4-mi355x-vllm-agentic-mtp: agentic-coding: - dram-utilization: 0.60 search-space: - - { tp: 8, ep: 1, dp-attn: false, kv-offloading: none, spec-decoding: mtp, conc-list: [1, 4, 8, 16, 32, 40, 48] } - - { tp: 8, ep: 1, dp-attn: true, kv-offloading: none, spec-decoding: mtp, conc-list: [64], router: { name: vllm-router, version: "0.1.14" } } + - { tp: 8, ep: 1, dp-attn: false, kv-offloading: none, spec-decoding: mtp, conc-list: [1, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40] } + - { tp: 8, ep: 8, dp-attn: false, kv-offloading: none, spec-decoding: mtp, conc-list: [8, 16, 24, 32, 40, 48, 56] } + - { tp: 8, ep: 8, dp-attn: true, kv-offloading: none, spec-decoding: mtp, conc-list: [32, 48, 64, 80, 96, 112, 128], router: { name: vllm-router, version: "0.1.14" } } # LMCache invalid-block recovery currently assumes one KV-cache group, # while MTP creates two. Restore these points after the upstream hybrid # KV recovery fix lands: https://github.com/vllm-project/vllm/pull/45497 From 2d5d0c2087d4f5d346778de9c6fb51799a0220e7 Mon Sep 17 00:00:00 2001 From: Cam Quilici Date: Sun, 9 Aug 2026 17:05:26 -0500 Subject: [PATCH 02/18] docs(perf): register MI355X DSv4 tuning submission --- perf-changelog.yaml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/perf-changelog.yaml b/perf-changelog.yaml index 471981f60..7cfabeb3e 100644 --- a/perf-changelog.yaml +++ b/perf-changelog.yaml @@ -5709,3 +5709,14 @@ - "Enable SGLang metrics on every aggregate, prefill, and decode engine." - "Use supported header-based Dynamo session routing with the in-repo AIPerf build." pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2520 + +- config-keys: + - dsv4-fp4-mi355x-vllm-agentic-mtp + scenario-type: + - agentic-coding + description: + - "Refresh the MI355X DeepSeek-V4-Pro FP4 vLLM AgentX MTP frontier after the prior eight-point run peaked near 66k total tok/s and its only DP-attention point used EP1/full-model replication." + - "Use the latest stable ROCm vLLM v0.26.0 release, raise GPU-memory utilization from 0.8 to 0.9, make the official 256-token block and 8192-token scheduler budget explicit, and use FULL_DECODE_ONLY graph capture. Baseline logs showed roughly 44 GiB/GPU of unused fit-safe KV headroom at 0.8." + - "Replace the isolated DP8/EP1 c64 point with dense TP8, TP8+EP8 and DP8+EP8 bands through concurrency 128. DP8+EP8 is the intended throughput topology: attention remains data parallel while the FP4 experts are sharded across all eight GPUs." + - "Keep MTP and its committed three-token golden synthetic acceptance length of 2.49 on every throughput point; eval-only runs retain real target verification, and AIPerf continues to require a nonempty vllm: server-metrics export." + pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2540 From 323fc1594980b0484b4565cd511683e0275d157f Mon Sep 17 00:00:00 2001 From: Cam Quilici Date: Sun, 9 Aug 2026 17:26:23 -0500 Subject: [PATCH 03/18] bench: report vLLM prompt cache usage on MI355X --- benchmarks/single_node/agentic/dsv4_fp4_mi355x_vllm_mtp.sh | 1 + perf-changelog.yaml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/benchmarks/single_node/agentic/dsv4_fp4_mi355x_vllm_mtp.sh b/benchmarks/single_node/agentic/dsv4_fp4_mi355x_vllm_mtp.sh index 40f72f077..58d04df7a 100644 --- a/benchmarks/single_node/agentic/dsv4_fp4_mi355x_vllm_mtp.sh +++ b/benchmarks/single_node/agentic/dsv4_fp4_mi355x_vllm_mtp.sh @@ -415,6 +415,7 @@ VLLM_CMD=( --reasoning-parser deepseek_v4 --enable-auto-tool-choice --enable-prefix-caching + --enable-prompt-tokens-details --no-disable-hybrid-kv-cache-manager --max-num-seqs "$MAX_NUM_SEQS" "${OFFLOAD_ARGS[@]}" diff --git a/perf-changelog.yaml b/perf-changelog.yaml index 7cfabeb3e..a8026fe18 100644 --- a/perf-changelog.yaml +++ b/perf-changelog.yaml @@ -5718,5 +5718,5 @@ - "Refresh the MI355X DeepSeek-V4-Pro FP4 vLLM AgentX MTP frontier after the prior eight-point run peaked near 66k total tok/s and its only DP-attention point used EP1/full-model replication." - "Use the latest stable ROCm vLLM v0.26.0 release, raise GPU-memory utilization from 0.8 to 0.9, make the official 256-token block and 8192-token scheduler budget explicit, and use FULL_DECODE_ONLY graph capture. Baseline logs showed roughly 44 GiB/GPU of unused fit-safe KV headroom at 0.8." - "Replace the isolated DP8/EP1 c64 point with dense TP8, TP8+EP8 and DP8+EP8 bands through concurrency 128. DP8+EP8 is the intended throughput topology: attention remains data parallel while the FP4 experts are sharded across all eight GPUs." - - "Keep MTP and its committed three-token golden synthetic acceptance length of 2.49 on every throughput point; eval-only runs retain real target verification, and AIPerf continues to require a nonempty vllm: server-metrics export." + - "Keep MTP and its committed three-token golden synthetic acceptance length of 2.49 on every throughput point; eval-only runs retain real target verification. Enable prompt-token details for request-level cache accounting, and require a nonempty vllm: server-metrics export from AIPerf." pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2540 From 4d77e2875bfda653ffa061a1c4bd470a3c5500dc Mon Sep 17 00:00:00 2001 From: Cam Quilici Date: Sun, 9 Aug 2026 17:59:51 -0500 Subject: [PATCH 04/18] perf(mi355x): match DSV4 MTP search-space coverage --- configs/amd-master.yaml | 14 +++++++------- perf-changelog.yaml | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/configs/amd-master.yaml b/configs/amd-master.yaml index 735f9a4ac..7b91d893b 100644 --- a/configs/amd-master.yaml +++ b/configs/amd-master.yaml @@ -1227,11 +1227,11 @@ qwen3.5-fp8-mi355x-sglang-agentic-hicache: - { tp: 8, ep: 1, kv-offloading: none, conc-list: [1, 2, 4, 8, 16, 32] } - { tp: 8, ep: 1, kv-offloading: dram, kv-offload-backend: { name: hicache }, conc-list: [16, 32, 48, 64] } -# DeepSeek-V4-Pro FP4 MTP refresh for MI355X. Pure TP points densely sample the -# latency/throughput knee; TP8+EP8 tests expert-sharded MoE without changing the -# attention topology; DP8+EP8 is the intended high-throughput layout and avoids -# the old c64 row's full-model replication on every GPU. GPU-resident KV remains -# the only supported MTP path until vLLM's multi-KV-group recovery fix lands. +# DeepSeek-V4-Pro FP4 MTP refresh for MI355X. The low-concurrency TP8 cells and +# the DP8+EP8 band mirror the B200/B300 MTP grids, with extra intermediate cells +# to resolve the MI355X knee. TP8+EP8 isolates expert-sharding without changing +# the attention topology. GPU-resident KV remains the only supported MTP path +# until vLLM's multi-KV-group recovery fix lands. dsv4-fp4-mi355x-vllm-agentic-mtp: image: vllm/vllm-openai-rocm:v0.26.0 model: deepseek-ai/DeepSeek-V4-Pro @@ -1244,9 +1244,9 @@ dsv4-fp4-mi355x-vllm-agentic-mtp: agentic-coding: - dram-utilization: 0.60 search-space: - - { tp: 8, ep: 1, dp-attn: false, kv-offloading: none, spec-decoding: mtp, conc-list: [1, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40] } + - { tp: 8, ep: 1, dp-attn: false, kv-offloading: none, spec-decoding: mtp, conc-list: [1, 2, 4, 6, 8, 12, 16, 20, 24, 28, 32, 36, 40] } - { tp: 8, ep: 8, dp-attn: false, kv-offloading: none, spec-decoding: mtp, conc-list: [8, 16, 24, 32, 40, 48, 56] } - - { tp: 8, ep: 8, dp-attn: true, kv-offloading: none, spec-decoding: mtp, conc-list: [32, 48, 64, 80, 96, 112, 128], router: { name: vllm-router, version: "0.1.14" } } + - { tp: 8, ep: 8, dp-attn: true, kv-offloading: none, spec-decoding: mtp, conc-list: [32, 48, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224], router: { name: vllm-router, version: "0.1.14" } } # LMCache invalid-block recovery currently assumes one KV-cache group, # while MTP creates two. Restore these points after the upstream hybrid # KV recovery fix lands: https://github.com/vllm-project/vllm/pull/45497 diff --git a/perf-changelog.yaml b/perf-changelog.yaml index a8026fe18..0ade2b0a9 100644 --- a/perf-changelog.yaml +++ b/perf-changelog.yaml @@ -5717,6 +5717,6 @@ description: - "Refresh the MI355X DeepSeek-V4-Pro FP4 vLLM AgentX MTP frontier after the prior eight-point run peaked near 66k total tok/s and its only DP-attention point used EP1/full-model replication." - "Use the latest stable ROCm vLLM v0.26.0 release, raise GPU-memory utilization from 0.8 to 0.9, make the official 256-token block and 8192-token scheduler budget explicit, and use FULL_DECODE_ONLY graph capture. Baseline logs showed roughly 44 GiB/GPU of unused fit-safe KV headroom at 0.8." - - "Replace the isolated DP8/EP1 c64 point with dense TP8, TP8+EP8 and DP8+EP8 bands through concurrency 128. DP8+EP8 is the intended throughput topology: attention remains data parallel while the FP4 experts are sharded across all eight GPUs." + - "Replace the isolated DP8/EP1 c64 point with dense TP8, TP8+EP8 and DP8+EP8 bands. Mirror the B200/B300 MTP low-concurrency TP cells and extend DP8+EP8 through concurrency 224, with extra MI355X intermediates to resolve the local knee. DP8+EP8 is the intended throughput topology: attention remains data parallel while the FP4 experts are sharded across all eight GPUs." - "Keep MTP and its committed three-token golden synthetic acceptance length of 2.49 on every throughput point; eval-only runs retain real target verification. Enable prompt-token details for request-level cache accounting, and require a nonempty vllm: server-metrics export from AIPerf." pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2540 From 3c2131ee058f530d77e6051a73154d76bcd2677f Mon Sep 17 00:00:00 2001 From: Cam Quilici Date: Sun, 9 Aug 2026 18:17:32 -0500 Subject: [PATCH 05/18] perf(mi355x): add fit-validated TP4 MTP band --- configs/amd-master.yaml | 13 ++++++++----- perf-changelog.yaml | 3 ++- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/configs/amd-master.yaml b/configs/amd-master.yaml index 7b91d893b..ac89eab03 100644 --- a/configs/amd-master.yaml +++ b/configs/amd-master.yaml @@ -1227,11 +1227,11 @@ qwen3.5-fp8-mi355x-sglang-agentic-hicache: - { tp: 8, ep: 1, kv-offloading: none, conc-list: [1, 2, 4, 8, 16, 32] } - { tp: 8, ep: 1, kv-offloading: dram, kv-offload-backend: { name: hicache }, conc-list: [16, 32, 48, 64] } -# DeepSeek-V4-Pro FP4 MTP refresh for MI355X. The low-concurrency TP8 cells and -# the DP8+EP8 band mirror the B200/B300 MTP grids, with extra intermediate cells -# to resolve the MI355X knee. TP8+EP8 isolates expert-sharding without changing -# the attention topology. GPU-resident KV remains the only supported MTP path -# until vLLM's multi-KV-group recovery fix lands. +# DeepSeek-V4-Pro FP4 MTP refresh for MI355X. The TP8, fit-validated TP4, and +# DP8+EP8 bands mirror the B200/B300 MTP grids, with extra intermediate cells to +# resolve the MI355X knee. TP8+EP8 isolates expert-sharding without changing the +# attention topology. GPU-resident KV remains the only supported MTP path until +# vLLM's multi-KV-group recovery fix lands. dsv4-fp4-mi355x-vllm-agentic-mtp: image: vllm/vllm-openai-rocm:v0.26.0 model: deepseek-ai/DeepSeek-V4-Pro @@ -1245,8 +1245,11 @@ dsv4-fp4-mi355x-vllm-agentic-mtp: - dram-utilization: 0.60 search-space: - { tp: 8, ep: 1, dp-attn: false, kv-offloading: none, spec-decoding: mtp, conc-list: [1, 2, 4, 6, 8, 12, 16, 20, 24, 28, 32, 36, 40] } + - { tp: 4, ep: 1, dp-attn: false, kv-offloading: none, spec-decoding: mtp, conc-list: [1, 2, 4, 6, 8, 12, 16, 20] } - { tp: 8, ep: 8, dp-attn: false, kv-offloading: none, spec-decoding: mtp, conc-list: [8, 16, 24, 32, 40, 48, 56] } - { tp: 8, ep: 8, dp-attn: true, kv-offloading: none, spec-decoding: mtp, conc-list: [32, 48, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224], router: { name: vllm-router, version: "0.1.14" } } + # DP4+EP4 is not fit-safe at the required 1,048,576-token model length: + # a direct c56 probe left 12.09 GiB KV memory versus 14.88 GiB required. # LMCache invalid-block recovery currently assumes one KV-cache group, # while MTP creates two. Restore these points after the upstream hybrid # KV recovery fix lands: https://github.com/vllm-project/vllm/pull/45497 diff --git a/perf-changelog.yaml b/perf-changelog.yaml index 0ade2b0a9..972808ca4 100644 --- a/perf-changelog.yaml +++ b/perf-changelog.yaml @@ -5717,6 +5717,7 @@ description: - "Refresh the MI355X DeepSeek-V4-Pro FP4 vLLM AgentX MTP frontier after the prior eight-point run peaked near 66k total tok/s and its only DP-attention point used EP1/full-model replication." - "Use the latest stable ROCm vLLM v0.26.0 release, raise GPU-memory utilization from 0.8 to 0.9, make the official 256-token block and 8192-token scheduler budget explicit, and use FULL_DECODE_ONLY graph capture. Baseline logs showed roughly 44 GiB/GPU of unused fit-safe KV headroom at 0.8." - - "Replace the isolated DP8/EP1 c64 point with dense TP8, TP8+EP8 and DP8+EP8 bands. Mirror the B200/B300 MTP low-concurrency TP cells and extend DP8+EP8 through concurrency 224, with extra MI355X intermediates to resolve the local knee. DP8+EP8 is the intended throughput topology: attention remains data parallel while the FP4 experts are sharded across all eight GPUs." + - "Replace the isolated DP8/EP1 c64 point with 40 points spanning TP8, fit-validated TP4, TP8+EP8 and DP8+EP8. Mirror the B200/B300 MTP low-concurrency cells and extend DP8+EP8 through concurrency 224, with extra MI355X intermediates to resolve the local knee. DP8+EP8 is the intended throughput topology: attention remains data parallel while the FP4 experts are sharded across all eight GPUs." + - "Direct fit validation shows TP4 leaves 37.47 GiB/GPU for a 2.82M-token KV cache and serves normally. DP4+EP4 is excluded because it leaves only 12.09 GiB/GPU KV versus 14.88 GiB required for the committed 1,048,576-token model length; the workload is not weakened to force an invalid topology." - "Keep MTP and its committed three-token golden synthetic acceptance length of 2.49 on every throughput point; eval-only runs retain real target verification. Enable prompt-token details for request-level cache accounting, and require a nonempty vllm: server-metrics export from AIPerf." pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2540 From d813d647eeee56d97565459794ce7c1e4e9c5638 Mon Sep 17 00:00:00 2001 From: Cam Quilici Date: Sun, 9 Aug 2026 20:53:14 -0500 Subject: [PATCH 06/18] perf(mi355x): refine fast frontier probes --- configs/amd-master.yaml | 17 ++++++++--------- perf-changelog.yaml | 1 + 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/configs/amd-master.yaml b/configs/amd-master.yaml index ac89eab03..53990f569 100644 --- a/configs/amd-master.yaml +++ b/configs/amd-master.yaml @@ -1227,11 +1227,11 @@ qwen3.5-fp8-mi355x-sglang-agentic-hicache: - { tp: 8, ep: 1, kv-offloading: none, conc-list: [1, 2, 4, 8, 16, 32] } - { tp: 8, ep: 1, kv-offloading: dram, kv-offload-backend: { name: hicache }, conc-list: [16, 32, 48, 64] } -# DeepSeek-V4-Pro FP4 MTP refresh for MI355X. The TP8, fit-validated TP4, and -# DP8+EP8 bands mirror the B200/B300 MTP grids, with extra intermediate cells to -# resolve the MI355X knee. TP8+EP8 isolates expert-sharding without changing the -# attention topology. GPU-resident KV remains the only supported MTP path until -# vLLM's multi-KV-group recovery fix lands. +# DeepSeek-V4-Pro FP4 MTP refresh for MI355X. This second agentx-fast pass keeps +# only the six unresolved cells from the broad B200/B300-shaped discovery grid: +# low-concurrency TP guards and the high-end TP8+EP8 crossover. The first pass +# established that DP8+EP8 is dominated and TP4 collapses above c12, so those +# known-bad tails are intentionally excluded before the full-duration sweep. dsv4-fp4-mi355x-vllm-agentic-mtp: image: vllm/vllm-openai-rocm:v0.26.0 model: deepseek-ai/DeepSeek-V4-Pro @@ -1244,10 +1244,9 @@ dsv4-fp4-mi355x-vllm-agentic-mtp: agentic-coding: - dram-utilization: 0.60 search-space: - - { tp: 8, ep: 1, dp-attn: false, kv-offloading: none, spec-decoding: mtp, conc-list: [1, 2, 4, 6, 8, 12, 16, 20, 24, 28, 32, 36, 40] } - - { tp: 4, ep: 1, dp-attn: false, kv-offloading: none, spec-decoding: mtp, conc-list: [1, 2, 4, 6, 8, 12, 16, 20] } - - { tp: 8, ep: 8, dp-attn: false, kv-offloading: none, spec-decoding: mtp, conc-list: [8, 16, 24, 32, 40, 48, 56] } - - { tp: 8, ep: 8, dp-attn: true, kv-offloading: none, spec-decoding: mtp, conc-list: [32, 48, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224], router: { name: vllm-router, version: "0.1.14" } } + - { tp: 8, ep: 1, dp-attn: false, kv-offloading: none, spec-decoding: mtp, conc-list: [4, 6, 12] } + - { tp: 4, ep: 1, dp-attn: false, kv-offloading: none, spec-decoding: mtp, conc-list: [4, 6] } + - { tp: 8, ep: 8, dp-attn: false, kv-offloading: none, spec-decoding: mtp, conc-list: [56] } # DP4+EP4 is not fit-safe at the required 1,048,576-token model length: # a direct c56 probe left 12.09 GiB KV memory versus 14.88 GiB required. # LMCache invalid-block recovery currently assumes one KV-cache group, diff --git a/perf-changelog.yaml b/perf-changelog.yaml index 972808ca4..741b7006b 100644 --- a/perf-changelog.yaml +++ b/perf-changelog.yaml @@ -5720,4 +5720,5 @@ - "Replace the isolated DP8/EP1 c64 point with 40 points spanning TP8, fit-validated TP4, TP8+EP8 and DP8+EP8. Mirror the B200/B300 MTP low-concurrency cells and extend DP8+EP8 through concurrency 224, with extra MI355X intermediates to resolve the local knee. DP8+EP8 is the intended throughput topology: attention remains data parallel while the FP4 experts are sharded across all eight GPUs." - "Direct fit validation shows TP4 leaves 37.47 GiB/GPU for a 2.82M-token KV cache and serves normally. DP4+EP4 is excluded because it leaves only 12.09 GiB/GPU KV versus 14.88 GiB required for the committed 1,048,576-token model length; the workload is not weakened to force an invalid topology." - "Keep MTP and its committed three-token golden synthetic acceptance length of 2.49 on every throughput point; eval-only runs retain real target verification. Enable prompt-token details for request-level cache accounting, and require a nonempty vllm: server-metrics export from AIPerf." + - "Use agentx-fast discovery before the reusable sweep: 25 completed throughput points show DP8+EP8 is uniformly dominated by TP8+EP8, while TP4 collapses above concurrency 12. Narrow the second fast pass to the six unresolved TP8 c4/c6/c12, TP4 c4/c6, and TP8+EP8 c56 cells; the final full-duration grid will contain only measured frontier points and adjacent guards." pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2540 From 8e6d1b205873e34a2fbcfa197ec0ba8643643d73 Mon Sep 17 00:00:00 2001 From: Cam Quilici Date: Sun, 9 Aug 2026 21:43:58 -0500 Subject: [PATCH 07/18] perf(mi355x): probe upper DSV4 MTP frontier --- configs/amd-master.yaml | 15 +++++++-------- perf-changelog.yaml | 1 + 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/configs/amd-master.yaml b/configs/amd-master.yaml index 53990f569..4735a7049 100644 --- a/configs/amd-master.yaml +++ b/configs/amd-master.yaml @@ -1227,11 +1227,12 @@ qwen3.5-fp8-mi355x-sglang-agentic-hicache: - { tp: 8, ep: 1, kv-offloading: none, conc-list: [1, 2, 4, 8, 16, 32] } - { tp: 8, ep: 1, kv-offloading: dram, kv-offload-backend: { name: hicache }, conc-list: [16, 32, 48, 64] } -# DeepSeek-V4-Pro FP4 MTP refresh for MI355X. This second agentx-fast pass keeps -# only the six unresolved cells from the broad B200/B300-shaped discovery grid: -# low-concurrency TP guards and the high-end TP8+EP8 crossover. The first pass -# established that DP8+EP8 is dominated and TP4 collapses above c12, so those -# known-bad tails are intentionally excluded before the full-duration sweep. +# DeepSeek-V4-Pro FP4 MTP refresh for MI355X. The broad and guard passes show +# TP8+EP8 is the throughput topology: it beats DP8+EP8 throughout the overlap, +# while TP8 weakly dominates TP4 at matched low concurrency. This final fast +# pass samples the upper TP8+EP8 band every eight sessions. c48/c56 are still +# scaling, but c56 already has 13.3s p95 TTFT; c96 is the linear KV-capacity +# estimate and c104/c112 deliberately bracket the expected cache/latency cliff. dsv4-fp4-mi355x-vllm-agentic-mtp: image: vllm/vllm-openai-rocm:v0.26.0 model: deepseek-ai/DeepSeek-V4-Pro @@ -1244,9 +1245,7 @@ dsv4-fp4-mi355x-vllm-agentic-mtp: agentic-coding: - dram-utilization: 0.60 search-space: - - { tp: 8, ep: 1, dp-attn: false, kv-offloading: none, spec-decoding: mtp, conc-list: [4, 6, 12] } - - { tp: 4, ep: 1, dp-attn: false, kv-offloading: none, spec-decoding: mtp, conc-list: [4, 6] } - - { tp: 8, ep: 8, dp-attn: false, kv-offloading: none, spec-decoding: mtp, conc-list: [56] } + - { tp: 8, ep: 8, dp-attn: false, kv-offloading: none, spec-decoding: mtp, conc-list: [64, 72, 80, 88, 96, 104, 112] } # DP4+EP4 is not fit-safe at the required 1,048,576-token model length: # a direct c56 probe left 12.09 GiB KV memory versus 14.88 GiB required. # LMCache invalid-block recovery currently assumes one KV-cache group, diff --git a/perf-changelog.yaml b/perf-changelog.yaml index 741b7006b..3386faa6d 100644 --- a/perf-changelog.yaml +++ b/perf-changelog.yaml @@ -5721,4 +5721,5 @@ - "Direct fit validation shows TP4 leaves 37.47 GiB/GPU for a 2.82M-token KV cache and serves normally. DP4+EP4 is excluded because it leaves only 12.09 GiB/GPU KV versus 14.88 GiB required for the committed 1,048,576-token model length; the workload is not weakened to force an invalid topology." - "Keep MTP and its committed three-token golden synthetic acceptance length of 2.49 on every throughput point; eval-only runs retain real target verification. Enable prompt-token details for request-level cache accounting, and require a nonempty vllm: server-metrics export from AIPerf." - "Use agentx-fast discovery before the reusable sweep: 25 completed throughput points show DP8+EP8 is uniformly dominated by TP8+EP8, while TP4 collapses above concurrency 12. Narrow the second fast pass to the six unresolved TP8 c4/c6/c12, TP4 c4/c6, and TP8+EP8 c56 cells; the final full-duration grid will contain only measured frontier points and adjacent guards." + - "The second fast pass confirms TP8 weakly dominates TP4 at matched c4/c6. TP8+EP8 c56 reaches 89.22k input and 496.46 output tok/s with 52.9% KV use, but p95 TTFT has risen to 13.29s. Probe the remaining upper band at c64/c72/c80/c88/c96/c104/c112: c96 is the linear KV-capacity estimate from c48, while c104/c112 bracket the expected cache and latency cliff." pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2540 From cbbc4bb97d840cac5ef85b61a7cd210236ed275a Mon Sep 17 00:00:00 2001 From: Cam Quilici Date: Sun, 9 Aug 2026 23:00:30 -0500 Subject: [PATCH 08/18] perf(mi355x): isolate native DRAM offload at c64 --- configs/amd-master.yaml | 12 +++++------- perf-changelog.yaml | 2 ++ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/configs/amd-master.yaml b/configs/amd-master.yaml index 4735a7049..e77315344 100644 --- a/configs/amd-master.yaml +++ b/configs/amd-master.yaml @@ -1227,12 +1227,10 @@ qwen3.5-fp8-mi355x-sglang-agentic-hicache: - { tp: 8, ep: 1, kv-offloading: none, conc-list: [1, 2, 4, 8, 16, 32] } - { tp: 8, ep: 1, kv-offloading: dram, kv-offload-backend: { name: hicache }, conc-list: [16, 32, 48, 64] } -# DeepSeek-V4-Pro FP4 MTP refresh for MI355X. The broad and guard passes show -# TP8+EP8 is the throughput topology: it beats DP8+EP8 throughout the overlap, -# while TP8 weakly dominates TP4 at matched low concurrency. This final fast -# pass samples the upper TP8+EP8 band every eight sessions. c48/c56 are still -# scaling, but c56 already has 13.3s p95 TTFT; c96 is the linear KV-capacity -# estimate and c104/c112 deliberately bracket the expected cache/latency cliff. +# DeepSeek-V4-Pro FP4 MTP refresh for MI355X. GPU-only discovery places the +# throughput knee at TP8+EP8 c56 and shows a monotonic collapse from c64 onward. +# Isolate host KV as the next variable: compare native DRAM offload at c64 +# against the preserved GPU-only c64 result before expanding or publishing it. dsv4-fp4-mi355x-vllm-agentic-mtp: image: vllm/vllm-openai-rocm:v0.26.0 model: deepseek-ai/DeepSeek-V4-Pro @@ -1245,7 +1243,7 @@ dsv4-fp4-mi355x-vllm-agentic-mtp: agentic-coding: - dram-utilization: 0.60 search-space: - - { tp: 8, ep: 8, dp-attn: false, kv-offloading: none, spec-decoding: mtp, conc-list: [64, 72, 80, 88, 96, 104, 112] } + - { tp: 8, ep: 8, dp-attn: false, kv-offloading: dram, kv-offload-backend: { name: vllm-native }, spec-decoding: mtp, conc-list: [64] } # DP4+EP4 is not fit-safe at the required 1,048,576-token model length: # a direct c56 probe left 12.09 GiB KV memory versus 14.88 GiB required. # LMCache invalid-block recovery currently assumes one KV-cache group, diff --git a/perf-changelog.yaml b/perf-changelog.yaml index 3386faa6d..e6a18884b 100644 --- a/perf-changelog.yaml +++ b/perf-changelog.yaml @@ -5722,4 +5722,6 @@ - "Keep MTP and its committed three-token golden synthetic acceptance length of 2.49 on every throughput point; eval-only runs retain real target verification. Enable prompt-token details for request-level cache accounting, and require a nonempty vllm: server-metrics export from AIPerf." - "Use agentx-fast discovery before the reusable sweep: 25 completed throughput points show DP8+EP8 is uniformly dominated by TP8+EP8, while TP4 collapses above concurrency 12. Narrow the second fast pass to the six unresolved TP8 c4/c6/c12, TP4 c4/c6, and TP8+EP8 c56 cells; the final full-duration grid will contain only measured frontier points and adjacent guards." - "The second fast pass confirms TP8 weakly dominates TP4 at matched c4/c6. TP8+EP8 c56 reaches 89.22k input and 496.46 output tok/s with 52.9% KV use, but p95 TTFT has risen to 13.29s. Probe the remaining upper band at c64/c72/c80/c88/c96/c104/c112: c96 is the linear KV-capacity estimate from c48, while c104/c112 bracket the expected cache and latency cliff." + - "The GPU-only upper-band pass completes on all seven points and confirms a monotonic post-c56 collapse: c64/c72/c80 reach 79.34k/414.46, 72.17k/306.93, and 59.06k/284.48 input/output tok/s; c88/c96/c104/c112 fall to 34.33k/142.61, 24.39k/117.42, 15.24k/79.54, and 13.28k/70.73. All points have zero request errors; c88/c96/c112 miss only the fast-window completed-record TTFT coverage gate." + - "Test one isolated follow-up variable before finalizing: TP8+EP8 c64 with the script's supported vLLM-native DRAM offload, leaving vLLM v0.26.0, MTP3, golden AL 2.49, FP8 KV, topology, concurrency, memory utilization, and AgentX trace unchanged. Keep GPU-only c56/c64 as the preserved baseline and expand offload only if c64 improves." pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2540 From 96703c9d3c690df47127885084fdc9f1fa2b0673 Mon Sep 17 00:00:00 2001 From: Cam Quilici Date: Mon, 10 Aug 2026 00:11:12 -0500 Subject: [PATCH 09/18] perf(mi355x): publish measured DSV4 MTP frontier --- configs/amd-master.yaml | 13 ++++++++----- perf-changelog.yaml | 2 ++ 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/configs/amd-master.yaml b/configs/amd-master.yaml index e77315344..5055dd73b 100644 --- a/configs/amd-master.yaml +++ b/configs/amd-master.yaml @@ -1227,10 +1227,12 @@ qwen3.5-fp8-mi355x-sglang-agentic-hicache: - { tp: 8, ep: 1, kv-offloading: none, conc-list: [1, 2, 4, 8, 16, 32] } - { tp: 8, ep: 1, kv-offloading: dram, kv-offload-backend: { name: hicache }, conc-list: [16, 32, 48, 64] } -# DeepSeek-V4-Pro FP4 MTP refresh for MI355X. GPU-only discovery places the -# throughput knee at TP8+EP8 c56 and shows a monotonic collapse from c64 onward. -# Isolate host KV as the next variable: compare native DRAM offload at c64 -# against the preserved GPU-only c64 result before expanding or publishing it. +# DeepSeek-V4-Pro FP4 MTP refresh for MI355X. Fast discovery measured the full +# B200/B300-shaped topology space one variable at a time: TP8 weakly dominates +# TP4 at low concurrency, TP8+EP8 dominates DP8+EP8, and native DRAM offload at +# c64 regresses the GPU-only point without producing an external-cache hit. The +# reusable sweep therefore follows the measured GPU-resident frontier from TP8 +# c1-c12 into TP8+EP8 c16-c56, with c64 retained as the post-knee guard. dsv4-fp4-mi355x-vllm-agentic-mtp: image: vllm/vllm-openai-rocm:v0.26.0 model: deepseek-ai/DeepSeek-V4-Pro @@ -1243,7 +1245,8 @@ dsv4-fp4-mi355x-vllm-agentic-mtp: agentic-coding: - dram-utilization: 0.60 search-space: - - { tp: 8, ep: 8, dp-attn: false, kv-offloading: dram, kv-offload-backend: { name: vllm-native }, spec-decoding: mtp, conc-list: [64] } + - { tp: 8, ep: 1, dp-attn: false, kv-offloading: none, spec-decoding: mtp, conc-list: [1, 2, 4, 6, 8, 12] } + - { tp: 8, ep: 8, dp-attn: false, kv-offloading: none, spec-decoding: mtp, conc-list: [16, 24, 32, 40, 48, 56, 64] } # DP4+EP4 is not fit-safe at the required 1,048,576-token model length: # a direct c56 probe left 12.09 GiB KV memory versus 14.88 GiB required. # LMCache invalid-block recovery currently assumes one KV-cache group, diff --git a/perf-changelog.yaml b/perf-changelog.yaml index e6a18884b..50e9f230a 100644 --- a/perf-changelog.yaml +++ b/perf-changelog.yaml @@ -5724,4 +5724,6 @@ - "The second fast pass confirms TP8 weakly dominates TP4 at matched c4/c6. TP8+EP8 c56 reaches 89.22k input and 496.46 output tok/s with 52.9% KV use, but p95 TTFT has risen to 13.29s. Probe the remaining upper band at c64/c72/c80/c88/c96/c104/c112: c96 is the linear KV-capacity estimate from c48, while c104/c112 bracket the expected cache and latency cliff." - "The GPU-only upper-band pass completes on all seven points and confirms a monotonic post-c56 collapse: c64/c72/c80 reach 79.34k/414.46, 72.17k/306.93, and 59.06k/284.48 input/output tok/s; c88/c96/c104/c112 fall to 34.33k/142.61, 24.39k/117.42, 15.24k/79.54, and 13.28k/70.73. All points have zero request errors; c88/c96/c112 miss only the fast-window completed-record TTFT coverage gate." - "Test one isolated follow-up variable before finalizing: TP8+EP8 c64 with the script's supported vLLM-native DRAM offload, leaving vLLM v0.26.0, MTP3, golden AL 2.49, FP8 KV, topology, concurrency, memory utilization, and AgentX trace unchanged. Keep GPU-only c56/c64 as the preserved baseline and expand offload only if c64 improves." + - "Reject native DRAM offload after the isolated c64 test: it completes 719 valid requests with zero request errors but reaches only 73.45k input and 366.17 output tok/s versus the preserved GPU-only c64 result at 79.34k/414.46, while reporting zero external-cache hits despite roughly 20 TB of cumulative host-KV writes. The fast-window TTFT coverage miss (92.8% with ITL at 100%) is consistent with the slower long-response tail and does not change the throughput regression." + - "Run the reusable one-hour sweep on the measured GPU-resident Pareto grid only: TP8 c1/c2/c4/c6/c8/c12 for the low-latency band, then TP8+EP8 c16/c24/c32/c40/c48/c56/c64 for the throughput band. This preserves the B200/B300 low-concurrency spacing, switches topology at the measured crossover, includes every sampled rise to the c56 knee, and retains c64 as the adjacent post-knee guard without re-running the dominated TP4, DP8+EP8, offload, or c72+ tails." pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2540 From 11edf7a53ac844b8815902ff54d909826debb36b Mon Sep 17 00:00:00 2001 From: Cam Quilici Date: Mon, 10 Aug 2026 04:29:31 -0500 Subject: [PATCH 10/18] perf(mi355x): probe larger DSV4 prefill budget --- .../single_node/agentic/dsv4_fp4_mi355x_vllm_mtp.sh | 2 +- configs/amd-master.yaml | 9 +++++---- perf-changelog.yaml | 1 + 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/benchmarks/single_node/agentic/dsv4_fp4_mi355x_vllm_mtp.sh b/benchmarks/single_node/agentic/dsv4_fp4_mi355x_vllm_mtp.sh index 58d04df7a..3b5596b2f 100644 --- a/benchmarks/single_node/agentic/dsv4_fp4_mi355x_vllm_mtp.sh +++ b/benchmarks/single_node/agentic/dsv4_fp4_mi355x_vllm_mtp.sh @@ -406,7 +406,7 @@ VLLM_CMD=( "${EP_ARGS[@]}" --gpu-memory-utilization 0.9 --block-size 256 - --max-num-batched-tokens 8192 + --max-num-batched-tokens 16384 --moe-backend aiter --compilation-config '{"mode":3,"cudagraph_mode":"FULL_DECODE_ONLY"}' --speculative-config "$SPEC_CONFIG" diff --git a/configs/amd-master.yaml b/configs/amd-master.yaml index 5055dd73b..eb43766b4 100644 --- a/configs/amd-master.yaml +++ b/configs/amd-master.yaml @@ -1231,8 +1231,10 @@ qwen3.5-fp8-mi355x-sglang-agentic-hicache: # B200/B300-shaped topology space one variable at a time: TP8 weakly dominates # TP4 at low concurrency, TP8+EP8 dominates DP8+EP8, and native DRAM offload at # c64 regresses the GPU-only point without producing an external-cache hit. The -# reusable sweep therefore follows the measured GPU-resident frontier from TP8 -# c1-c12 into TP8+EP8 c16-c56, with c64 retained as the post-knee guard. +# reusable sweep followed the measured GPU-resident frontier from TP8 c1-c12 +# into TP8+EP8 c16-c64. The current fast follow-up isolates only c48 while +# testing a larger prefill token budget; the all-green full grid remains the +# rollback baseline in run 31357800541. dsv4-fp4-mi355x-vllm-agentic-mtp: image: vllm/vllm-openai-rocm:v0.26.0 model: deepseek-ai/DeepSeek-V4-Pro @@ -1245,8 +1247,7 @@ dsv4-fp4-mi355x-vllm-agentic-mtp: agentic-coding: - dram-utilization: 0.60 search-space: - - { tp: 8, ep: 1, dp-attn: false, kv-offloading: none, spec-decoding: mtp, conc-list: [1, 2, 4, 6, 8, 12] } - - { tp: 8, ep: 8, dp-attn: false, kv-offloading: none, spec-decoding: mtp, conc-list: [16, 24, 32, 40, 48, 56, 64] } + - { tp: 8, ep: 8, dp-attn: false, kv-offloading: none, spec-decoding: mtp, conc-list: [48] } # DP4+EP4 is not fit-safe at the required 1,048,576-token model length: # a direct c56 probe left 12.09 GiB KV memory versus 14.88 GiB required. # LMCache invalid-block recovery currently assumes one KV-cache group, diff --git a/perf-changelog.yaml b/perf-changelog.yaml index 50e9f230a..1cb731717 100644 --- a/perf-changelog.yaml +++ b/perf-changelog.yaml @@ -5726,4 +5726,5 @@ - "Test one isolated follow-up variable before finalizing: TP8+EP8 c64 with the script's supported vLLM-native DRAM offload, leaving vLLM v0.26.0, MTP3, golden AL 2.49, FP8 KV, topology, concurrency, memory utilization, and AgentX trace unchanged. Keep GPU-only c56/c64 as the preserved baseline and expand offload only if c64 improves." - "Reject native DRAM offload after the isolated c64 test: it completes 719 valid requests with zero request errors but reaches only 73.45k input and 366.17 output tok/s versus the preserved GPU-only c64 result at 79.34k/414.46, while reporting zero external-cache hits despite roughly 20 TB of cumulative host-KV writes. The fast-window TTFT coverage miss (92.8% with ITL at 100%) is consistent with the slower long-response tail and does not change the throughput regression." - "Run the reusable one-hour sweep on the measured GPU-resident Pareto grid only: TP8 c1/c2/c4/c6/c8/c12 for the low-latency band, then TP8+EP8 c16/c24/c32/c40/c48/c56/c64 for the throughput band. This preserves the B200/B300 low-concurrency spacing, switches topology at the measured crossover, includes every sampled rise to the c56 knee, and retains c64 as the adjacent post-knee guard without re-running the dominated TP4, DP8+EP8, offload, or c72+ tails." + - "The reusable GPU-only grid completed green in run 31357800541. Isolate one follow-up variable at its input-throughput peak, TP8+EP8 c48: raise max-num-batched-tokens from 8192 to 16384 while keeping vLLM v0.26.0, topology, concurrency, MTP3/golden AL 2.49, FP8 KV, GPU memory utilization, and AgentX trace unchanged. Use agentx-fast and preserve the full-grid run as the rollback baseline." pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2540 From 86773f811263eccf45aa9600520d9e6bc97efae7 Mon Sep 17 00:00:00 2001 From: Cam Quilici Date: Mon, 10 Aug 2026 05:43:07 -0500 Subject: [PATCH 11/18] perf(mi355x): probe shallower DSV4 MTP --- .../agentic/dsv4_fp4_mi355x_vllm_mtp.sh | 15 +++++++++------ perf-changelog.yaml | 2 ++ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/benchmarks/single_node/agentic/dsv4_fp4_mi355x_vllm_mtp.sh b/benchmarks/single_node/agentic/dsv4_fp4_mi355x_vllm_mtp.sh index 3b5596b2f..168ee6223 100644 --- a/benchmarks/single_node/agentic/dsv4_fp4_mi355x_vllm_mtp.sh +++ b/benchmarks/single_node/agentic/dsv4_fp4_mi355x_vllm_mtp.sh @@ -376,11 +376,14 @@ fi # leave 2x headroom rather than clipping those bursts at the scheduler. MAX_NUM_SEQS=$((2 * CONC)) -# DeepSeek-V4-Pro ships a native MTP head. AgentX throughput pins its -# three-token draft to the committed thinking-on golden acceptance length; -# eval-only runs use real target verification so accuracy remains meaningful. -NUM_SPEC_TOKENS=3 -SYNTHETIC_ACCEPT_LEN=2.49 +# DeepSeek-V4-Pro ships a native MTP head. AgentX throughput pins each tested +# draft depth to its committed thinking-on golden acceptance length; eval-only +# runs use real target verification so accuracy remains meaningful. +# The isolated 16K scheduler-budget probe regressed the matched c48 control, so +# restore 8K and isolate the K=2 golden MTP operating point. Draft depth and its +# measured golden acceptance length are one coupled speculative configuration. +NUM_SPEC_TOKENS=2 +SYNTHETIC_ACCEPT_LEN=2.27 if [ "${EVAL_ONLY:-false}" = "true" ]; then SPEC_CONFIG="{\"method\": \"mtp\", \"num_speculative_tokens\": $NUM_SPEC_TOKENS}" else @@ -406,7 +409,7 @@ VLLM_CMD=( "${EP_ARGS[@]}" --gpu-memory-utilization 0.9 --block-size 256 - --max-num-batched-tokens 16384 + --max-num-batched-tokens 8192 --moe-backend aiter --compilation-config '{"mode":3,"cudagraph_mode":"FULL_DECODE_ONLY"}' --speculative-config "$SPEC_CONFIG" diff --git a/perf-changelog.yaml b/perf-changelog.yaml index 1cb731717..be2103861 100644 --- a/perf-changelog.yaml +++ b/perf-changelog.yaml @@ -5727,4 +5727,6 @@ - "Reject native DRAM offload after the isolated c64 test: it completes 719 valid requests with zero request errors but reaches only 73.45k input and 366.17 output tok/s versus the preserved GPU-only c64 result at 79.34k/414.46, while reporting zero external-cache hits despite roughly 20 TB of cumulative host-KV writes. The fast-window TTFT coverage miss (92.8% with ITL at 100%) is consistent with the slower long-response tail and does not change the throughput regression." - "Run the reusable one-hour sweep on the measured GPU-resident Pareto grid only: TP8 c1/c2/c4/c6/c8/c12 for the low-latency band, then TP8+EP8 c16/c24/c32/c40/c48/c56/c64 for the throughput band. This preserves the B200/B300 low-concurrency spacing, switches topology at the measured crossover, includes every sampled rise to the c56 knee, and retains c64 as the adjacent post-knee guard without re-running the dominated TP4, DP8+EP8, offload, or c72+ tails." - "The reusable GPU-only grid completed green in run 31357800541. Isolate one follow-up variable at its input-throughput peak, TP8+EP8 c48: raise max-num-batched-tokens from 8192 to 16384 while keeping vLLM v0.26.0, topology, concurrency, MTP3/golden AL 2.49, FP8 KV, GPU memory utilization, and AgentX trace unchanged. Use agentx-fast and preserve the full-grid run as the rollback baseline." + - "Reject the 16384-token scheduler budget after its exact c48 fast comparison completed fully green but regressed to 80,316.53 input / 412.36 output tok/s over 1,228.83 seconds, versus 86,334.85 / 471.67 over 1,229.32 seconds for the duration-matched 8192-token control from run 31341602956. Restore 8192 before any further experiment." + - "Next isolate only the golden MTP operating point at c48: switch from K=3 with its measured synthetic acceptance length 2.49 to K=2 with its measured synthetic acceptance length 2.27, while retaining vLLM v0.26.0, TP8+EP8, max-num-seqs 96, FP8 KV, 0.9 memory utilization, FULL_DECODE_ONLY graphs, and the exact AgentX trace. Draft depth and its matching golden acceptance length are one coupled speculative configuration." pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2540 From 9e245f4c1b0fe723f035f71210ccb0b45ff2410b Mon Sep 17 00:00:00 2001 From: Cam Quilici Date: Mon, 10 Aug 2026 06:41:47 -0500 Subject: [PATCH 12/18] perf(mi355x): probe piecewise DSV4 graphs --- .../agentic/dsv4_fp4_mi355x_vllm_mtp.sh | 17 ++++++++--------- perf-changelog.yaml | 2 ++ 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/benchmarks/single_node/agentic/dsv4_fp4_mi355x_vllm_mtp.sh b/benchmarks/single_node/agentic/dsv4_fp4_mi355x_vllm_mtp.sh index 168ee6223..a8aabe847 100644 --- a/benchmarks/single_node/agentic/dsv4_fp4_mi355x_vllm_mtp.sh +++ b/benchmarks/single_node/agentic/dsv4_fp4_mi355x_vllm_mtp.sh @@ -376,14 +376,13 @@ fi # leave 2x headroom rather than clipping those bursts at the scheduler. MAX_NUM_SEQS=$((2 * CONC)) -# DeepSeek-V4-Pro ships a native MTP head. AgentX throughput pins each tested -# draft depth to its committed thinking-on golden acceptance length; eval-only -# runs use real target verification so accuracy remains meaningful. -# The isolated 16K scheduler-budget probe regressed the matched c48 control, so -# restore 8K and isolate the K=2 golden MTP operating point. Draft depth and its -# measured golden acceptance length are one coupled speculative configuration. -NUM_SPEC_TOKENS=2 -SYNTHETIC_ACCEPT_LEN=2.27 +# DeepSeek-V4-Pro ships a native MTP head. AgentX throughput pins its +# three-token draft to the committed thinking-on golden acceptance length; +# eval-only runs use real target verification so accuracy remains meaningful. +# The isolated 16K scheduler-budget and K=2 probes both regressed their matched +# c48 controls. Restore the K=3/8K baseline before isolating graph capture mode. +NUM_SPEC_TOKENS=3 +SYNTHETIC_ACCEPT_LEN=2.49 if [ "${EVAL_ONLY:-false}" = "true" ]; then SPEC_CONFIG="{\"method\": \"mtp\", \"num_speculative_tokens\": $NUM_SPEC_TOKENS}" else @@ -411,7 +410,7 @@ VLLM_CMD=( --block-size 256 --max-num-batched-tokens 8192 --moe-backend aiter - --compilation-config '{"mode":3,"cudagraph_mode":"FULL_DECODE_ONLY"}' + --compilation-config '{"mode":3,"cudagraph_mode":"FULL_AND_PIECEWISE"}' --speculative-config "$SPEC_CONFIG" --tokenizer-mode deepseek_v4 --tool-call-parser deepseek_v4 diff --git a/perf-changelog.yaml b/perf-changelog.yaml index be2103861..e40ed8615 100644 --- a/perf-changelog.yaml +++ b/perf-changelog.yaml @@ -5729,4 +5729,6 @@ - "The reusable GPU-only grid completed green in run 31357800541. Isolate one follow-up variable at its input-throughput peak, TP8+EP8 c48: raise max-num-batched-tokens from 8192 to 16384 while keeping vLLM v0.26.0, topology, concurrency, MTP3/golden AL 2.49, FP8 KV, GPU memory utilization, and AgentX trace unchanged. Use agentx-fast and preserve the full-grid run as the rollback baseline." - "Reject the 16384-token scheduler budget after its exact c48 fast comparison completed fully green but regressed to 80,316.53 input / 412.36 output tok/s over 1,228.83 seconds, versus 86,334.85 / 471.67 over 1,229.32 seconds for the duration-matched 8192-token control from run 31341602956. Restore 8192 before any further experiment." - "Next isolate only the golden MTP operating point at c48: switch from K=3 with its measured synthetic acceptance length 2.49 to K=2 with its measured synthetic acceptance length 2.27, while retaining vLLM v0.26.0, TP8+EP8, max-num-seqs 96, FP8 KV, 0.9 memory utilization, FULL_DECODE_ONLY graphs, and the exact AgentX trace. Draft depth and its matching golden acceptance length are one coupled speculative configuration." + - "Reject K=2 after the exact c48 fast run completed fully green at 83,283.76 input / 448.52 output tok/s over 1,226.65 seconds, versus 86,334.85 / 471.67 over 1,229.32 seconds for the duration-matched K=3 control: input regressed 3.53% and output regressed 4.91%. Restore K=3 with golden acceptance length 2.49 before any further experiment." + - "Next isolate only graph capture mode at c48: switch FULL_DECODE_ONLY to FULL_AND_PIECEWISE while keeping vLLM v0.26.0, TP8+EP8, K=3/golden AL 2.49, max-num-batched-tokens 8192, max-num-seqs 96, FP8 KV, 0.9 memory utilization, and the exact AgentX trace unchanged." pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2540 From 1de2b07945a9b5173721da33d57800d2dddb5956 Mon Sep 17 00:00:00 2001 From: Cam Quilici Date: Mon, 10 Aug 2026 07:39:39 -0500 Subject: [PATCH 13/18] perf(mi355x): probe INT4 quick reduce --- .../single_node/agentic/dsv4_fp4_mi355x_vllm_mtp.sh | 9 +++++---- configs/amd-master.yaml | 6 +++--- perf-changelog.yaml | 2 ++ 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/benchmarks/single_node/agentic/dsv4_fp4_mi355x_vllm_mtp.sh b/benchmarks/single_node/agentic/dsv4_fp4_mi355x_vllm_mtp.sh index a8aabe847..2db1c452c 100644 --- a/benchmarks/single_node/agentic/dsv4_fp4_mi355x_vllm_mtp.sh +++ b/benchmarks/single_node/agentic/dsv4_fp4_mi355x_vllm_mtp.sh @@ -379,8 +379,9 @@ MAX_NUM_SEQS=$((2 * CONC)) # DeepSeek-V4-Pro ships a native MTP head. AgentX throughput pins its # three-token draft to the committed thinking-on golden acceptance length; # eval-only runs use real target verification so accuracy remains meaningful. -# The isolated 16K scheduler-budget and K=2 probes both regressed their matched -# c48 controls. Restore the K=3/8K baseline before isolating graph capture mode. +# The isolated 16K scheduler-budget, K=2, and piecewise-graph probes all +# regressed their matched c48 controls. Restore the K=3/8K/FULL_DECODE_ONLY +# baseline before isolating INT4 Quick Reduce. NUM_SPEC_TOKENS=3 SYNTHETIC_ACCEPT_LEN=2.49 if [ "${EVAL_ONLY:-false}" = "true" ]; then @@ -392,7 +393,7 @@ fi echo "Starting vllm server..." set -x export VLLM_ROCM_USE_AITER=1 -#export VLLM_ROCM_QUICK_REDUCE_QUANTIZATION=INT4 +export VLLM_ROCM_QUICK_REDUCE_QUANTIZATION=INT4 export VLLM_ROCM_USE_AITER_MOE=1 { set +x; } 2>/dev/null @@ -410,7 +411,7 @@ VLLM_CMD=( --block-size 256 --max-num-batched-tokens 8192 --moe-backend aiter - --compilation-config '{"mode":3,"cudagraph_mode":"FULL_AND_PIECEWISE"}' + --compilation-config '{"mode":3,"cudagraph_mode":"FULL_DECODE_ONLY"}' --speculative-config "$SPEC_CONFIG" --tokenizer-mode deepseek_v4 --tool-call-parser deepseek_v4 diff --git a/configs/amd-master.yaml b/configs/amd-master.yaml index eb43766b4..97e52a249 100644 --- a/configs/amd-master.yaml +++ b/configs/amd-master.yaml @@ -1232,9 +1232,9 @@ qwen3.5-fp8-mi355x-sglang-agentic-hicache: # TP4 at low concurrency, TP8+EP8 dominates DP8+EP8, and native DRAM offload at # c64 regresses the GPU-only point without producing an external-cache hit. The # reusable sweep followed the measured GPU-resident frontier from TP8 c1-c12 -# into TP8+EP8 c16-c64. The current fast follow-up isolates only c48 while -# testing a larger prefill token budget; the all-green full grid remains the -# rollback baseline in run 31357800541. +# into TP8+EP8 c16-c64. The current fast follow-up isolates INT4 Quick Reduce +# at c48; the all-green full grid remains the rollback baseline in run +# 31357800541. dsv4-fp4-mi355x-vllm-agentic-mtp: image: vllm/vllm-openai-rocm:v0.26.0 model: deepseek-ai/DeepSeek-V4-Pro diff --git a/perf-changelog.yaml b/perf-changelog.yaml index e40ed8615..32378d16a 100644 --- a/perf-changelog.yaml +++ b/perf-changelog.yaml @@ -5731,4 +5731,6 @@ - "Next isolate only the golden MTP operating point at c48: switch from K=3 with its measured synthetic acceptance length 2.49 to K=2 with its measured synthetic acceptance length 2.27, while retaining vLLM v0.26.0, TP8+EP8, max-num-seqs 96, FP8 KV, 0.9 memory utilization, FULL_DECODE_ONLY graphs, and the exact AgentX trace. Draft depth and its matching golden acceptance length are one coupled speculative configuration." - "Reject K=2 after the exact c48 fast run completed fully green at 83,283.76 input / 448.52 output tok/s over 1,226.65 seconds, versus 86,334.85 / 471.67 over 1,229.32 seconds for the duration-matched K=3 control: input regressed 3.53% and output regressed 4.91%. Restore K=3 with golden acceptance length 2.49 before any further experiment." - "Next isolate only graph capture mode at c48: switch FULL_DECODE_ONLY to FULL_AND_PIECEWISE while keeping vLLM v0.26.0, TP8+EP8, K=3/golden AL 2.49, max-num-batched-tokens 8192, max-num-seqs 96, FP8 KV, 0.9 memory utilization, and the exact AgentX trace unchanged." + - "Reject FULL_AND_PIECEWISE after the exact c48 fast run completed fully green at 83,955.53 input / 455.90 output tok/s over 1,228.87 seconds, versus 86,334.85 / 471.67 over 1,229.32 seconds for the duration-matched FULL_DECODE_ONLY control: input regressed 2.76% and output regressed 3.34%. The run processed 795 valid requests with zero request errors, passed TTFT/ITL coverage, and exported nonempty vllm: metrics, so this is a measured graph-mode regression rather than infrastructure noise." + - "Next isolate only INT4 Quick Reduce at the retained c48 baseline: enable VLLM_ROCM_QUICK_REDUCE_QUANTIZATION=INT4 while restoring FULL_DECODE_ONLY and keeping vLLM v0.26.0, TP8+EP8, K=3/golden AL 2.49, max-num-batched-tokens 8192, max-num-seqs 96, FP8 KV, 0.9 memory utilization, and the exact AgentX trace unchanged. This is a standard ROCm vLLM communication optimization already used by other MI355X recipes; the paired eval guards accuracy." pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2540 From 4c52de6c8aacf4a89d6d4c7a99cee79d6ade1c4d Mon Sep 17 00:00:00 2001 From: Cam Quilici Date: Mon, 10 Aug 2026 08:31:17 -0500 Subject: [PATCH 14/18] perf(mi355x): test compiled DSV4 graph path --- .../single_node/agentic/dsv4_fp4_mi355x_vllm_mtp.sh | 8 ++++---- perf-changelog.yaml | 2 ++ 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/benchmarks/single_node/agentic/dsv4_fp4_mi355x_vllm_mtp.sh b/benchmarks/single_node/agentic/dsv4_fp4_mi355x_vllm_mtp.sh index 2db1c452c..7beb30101 100644 --- a/benchmarks/single_node/agentic/dsv4_fp4_mi355x_vllm_mtp.sh +++ b/benchmarks/single_node/agentic/dsv4_fp4_mi355x_vllm_mtp.sh @@ -379,9 +379,9 @@ MAX_NUM_SEQS=$((2 * CONC)) # DeepSeek-V4-Pro ships a native MTP head. AgentX throughput pins its # three-token draft to the committed thinking-on golden acceptance length; # eval-only runs use real target verification so accuracy remains meaningful. -# The isolated 16K scheduler-budget, K=2, and piecewise-graph probes all -# regressed their matched c48 controls. Restore the K=3/8K/FULL_DECODE_ONLY -# baseline before isolating INT4 Quick Reduce. +# The isolated 16K scheduler-budget, K=2, piecewise-graph, and INT4 Quick +# Reduce probes did not improve their matched c48 controls. Restore the +# K=3/8K/FULL_DECODE_ONLY baseline before isolating breakable CUDA graphs. NUM_SPEC_TOKENS=3 SYNTHETIC_ACCEPT_LEN=2.49 if [ "${EVAL_ONLY:-false}" = "true" ]; then @@ -393,7 +393,7 @@ fi echo "Starting vllm server..." set -x export VLLM_ROCM_USE_AITER=1 -export VLLM_ROCM_QUICK_REDUCE_QUANTIZATION=INT4 +export VLLM_USE_BREAKABLE_CUDAGRAPH=0 export VLLM_ROCM_USE_AITER_MOE=1 { set +x; } 2>/dev/null diff --git a/perf-changelog.yaml b/perf-changelog.yaml index 32378d16a..34f6c8951 100644 --- a/perf-changelog.yaml +++ b/perf-changelog.yaml @@ -5733,4 +5733,6 @@ - "Next isolate only graph capture mode at c48: switch FULL_DECODE_ONLY to FULL_AND_PIECEWISE while keeping vLLM v0.26.0, TP8+EP8, K=3/golden AL 2.49, max-num-batched-tokens 8192, max-num-seqs 96, FP8 KV, 0.9 memory utilization, and the exact AgentX trace unchanged." - "Reject FULL_AND_PIECEWISE after the exact c48 fast run completed fully green at 83,955.53 input / 455.90 output tok/s over 1,228.87 seconds, versus 86,334.85 / 471.67 over 1,229.32 seconds for the duration-matched FULL_DECODE_ONLY control: input regressed 2.76% and output regressed 3.34%. The run processed 795 valid requests with zero request errors, passed TTFT/ITL coverage, and exported nonempty vllm: metrics, so this is a measured graph-mode regression rather than infrastructure noise." - "Next isolate only INT4 Quick Reduce at the retained c48 baseline: enable VLLM_ROCM_QUICK_REDUCE_QUANTIZATION=INT4 while restoring FULL_DECODE_ONLY and keeping vLLM v0.26.0, TP8+EP8, K=3/golden AL 2.49, max-num-batched-tokens 8192, max-num-seqs 96, FP8 KV, 0.9 memory utilization, and the exact AgentX trace unchanged. This is a standard ROCm vLLM communication optimization already used by other MI355X recipes; the paired eval guards accuracy." + - "Reject INT4 Quick Reduce after the exact c48 fast run completed successfully at 87,176.57 input / 470.37 output tok/s over 1,228.05 seconds, versus 86,334.85 / 471.67 over 1,229.32 seconds for the duration-matched control: input improved only 0.98%, output regressed 0.28%, and the candidate introduced one empty-content response while the control was error-free. The 0.12% error rate remained below the harness threshold, TTFT/ITL coverage was 100%, GSM8K passed, and vllm: metrics exported, but this is not a clean Pareto improvement, so restore unquantized collectives." + - "Next isolate only vLLM's graph execution path at the retained c48 baseline: set VLLM_USE_BREAKABLE_CUDAGRAPH=0 while keeping FULL_DECODE_ONLY, vLLM v0.26.0, TP8+EP8, K=3/golden AL 2.49, max-num-batched-tokens 8192, max-num-seqs 96, FP8 KV, 0.9 memory utilization, and the exact AgentX trace unchanged. Current logs show auto-enabled breakable CUDA graphs force CompilationMode.NONE despite compilation mode 3; opting out tests the actual torch.compile path without changing graph capture mode or any workload setting." pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2540 From 428e6b740455022fce112f7da376047da6e238e1 Mon Sep 17 00:00:00 2001 From: Cam Quilici Date: Mon, 10 Aug 2026 12:50:09 -0500 Subject: [PATCH 15/18] perf(mi355x): add offload and DEP collection points --- .../agentic/dsv4_fp4_mi355x_vllm_mtp.sh | 144 +++++++++++------- configs/amd-master.yaml | 25 +-- perf-changelog.yaml | 1 + 3 files changed, 103 insertions(+), 67 deletions(-) diff --git a/benchmarks/single_node/agentic/dsv4_fp4_mi355x_vllm_mtp.sh b/benchmarks/single_node/agentic/dsv4_fp4_mi355x_vllm_mtp.sh index 7beb30101..187f003c8 100644 --- a/benchmarks/single_node/agentic/dsv4_fp4_mi355x_vllm_mtp.sh +++ b/benchmarks/single_node/agentic/dsv4_fp4_mi355x_vllm_mtp.sh @@ -107,6 +107,87 @@ mkdir -p "$RESULT_DIR" SERVER_PID="" ROUTER_PID="" MOONCAKE_MASTER_PID="" +LMCACHE_PID="" + +cleanup_agentic_services() { + local exit_code=$? + trap - EXIT INT TERM + set +e + stop_background_process_tree "$ROUTER_PID" "vLLM router" + stop_background_process_tree "$SERVER_PID" "vLLM server" 60 + stop_background_process_tree "$MOONCAKE_MASTER_PID" "Mooncake master" + stop_background_process_tree "$LMCACHE_PID" "LMCache server" + exit "$exit_code" +} +trap cleanup_agentic_services EXIT +trap 'exit 130' INT +trap 'exit 143' TERM + +# Mooncake does not publish a ROCm wheel. Build the pinned release once for +# each immutable OS/Python/ROCm tuple and reuse the shared cache on later jobs. +install_mooncake_rocm() { + local mooncake_tag="v0.3.11.post1" + local mooncake_src="/tmp/Mooncake-$mooncake_tag" + local mooncake_stage="/tmp/mooncake-stage-$mooncake_tag" + local build_jobs cache_root cache_key cache_archive cache_tmp + local engine_path os_version python_abi rocm_version + + build_jobs=$(nproc) + if ((build_jobs > 32)); then + build_jobs=32 + fi + os_version=$(. /etc/os-release && printf '%s-%s' "$ID" "$VERSION_ID") + python_abi=$(python3 -c 'import sys; print(f"cp{sys.version_info.major}{sys.version_info.minor}")') + rocm_version=$(sed -n '1p' /opt/rocm/.info/version 2>/dev/null || true) + if [[ -z "$rocm_version" ]]; then + rocm_version=$(hipconfig --version) + fi + rocm_version=${rocm_version//[^[:alnum:]._-]/_} + cache_root="${HF_HUB_CACHE:?HF_HUB_CACHE must be set}/inferencex/mooncake" + cache_key="${mooncake_tag}-${os_version}-${python_abi}-${rocm_version}-$(uname -m)-hip" + cache_archive="$cache_root/$cache_key.tar.gz" + mkdir -p "$cache_root" + + apt-get update + DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ + build-essential cmake git libasio-dev libboost-dev libcurl4-openssl-dev \ + libgflags-dev libgoogle-glog-dev libibverbs-dev libjsoncpp-dev \ + libnuma-dev libpython3-dev libssl-dev libunwind-dev liburing-dev \ + libxxhash-dev libyaml-cpp-dev libzstd-dev ninja-build pybind11-dev + + exec 9>"$cache_archive.lock" + flock -w 1800 9 + if [[ -f "$cache_archive" ]] && ! tar -tzf "$cache_archive" >/dev/null 2>&1; then + rm -f "$cache_archive" + fi + if [[ ! -f "$cache_archive" ]]; then + echo "Building HIP Mooncake cache artifact: $cache_archive" + rm -rf "$mooncake_src" "$mooncake_stage" + git clone --depth 1 --branch "$mooncake_tag" --recurse-submodules \ + --shallow-submodules https://github.com/kvcache-ai/Mooncake.git "$mooncake_src" + cmake -S "$mooncake_src/extern/yalantinglibs" \ + -B "$mooncake_src/extern/yalantinglibs/build" \ + -DBUILD_EXAMPLES=OFF -DBUILD_BENCHMARK=OFF -DBUILD_UNIT_TESTS=OFF + cmake --build "$mooncake_src/extern/yalantinglibs/build" -j "$build_jobs" + cmake --install "$mooncake_src/extern/yalantinglibs/build" + cmake -S "$mooncake_src" -B "$mooncake_src/build" -G Ninja \ + -DCMAKE_BUILD_TYPE=Release -DUSE_CUDA=OFF -DUSE_HIP=ON \ + -DWITH_EP=OFF -DWITH_STORE=ON -DWITH_STORE_RUST=OFF \ + -DWITH_RUST_EXAMPLE=OFF -DBUILD_EXAMPLES=OFF -DBUILD_UNIT_TESTS=OFF + cmake --build "$mooncake_src/build" -j "$build_jobs" + mkdir -p "$mooncake_stage" + DESTDIR="$mooncake_stage" cmake --install "$mooncake_src/build" + cache_tmp=$(mktemp "$cache_root/$cache_key.tmp.XXXXXX") + tar -C "$mooncake_stage" -czf "$cache_tmp" . + mv -f "$cache_tmp" "$cache_archive" + else + echo "Using HIP Mooncake cache artifact: $cache_archive" + fi + tar -C / -xzf "$cache_archive" + engine_path=$(python3 -c 'import mooncake.engine; print(mooncake.engine.__file__)') + ldd "$engine_path" | grep -q 'libamdhip64.so' + exec 9>&- +} OFFLOAD_ARGS=() @@ -139,30 +220,13 @@ case "${KV_OFFLOAD_BACKEND:-}" in ;; mooncake) require_agentic_kv_offload_backend mooncake - # ---- Mooncake config ---------------------------------------------------------- # Embedded mode contributes one segment per GPU rank to a shared - # distributed store, so pre-divide the aggregate host-memory budget. + # distributed store, so pre-divide the generated aggregate budget. PER_RANK_GB=$((TOTAL_CPU_DRAM_GB / TP)) - - #MOONCAKE_VERSION=0.3.11.post1 - #apt-get update && apt-get install -y libcurl4 libibverbs1 rdma-core librdmacm1 libnuma1 liburing2 - #agentic_pip_install --quiet --no-cache-dir --no-deps \ - # --force-reinstall "mooncake-transfer-engine-non-cuda==$MOONCAKE_VERSION" - - git clone https://github.com/kvcache-ai/Mooncake.git - cd Mooncake - bash dependencies.sh - mkdir build - cd build - cmake .. - make -j - sudo make install # optional, make it ready to be used by vLLM/SGLang - cd .. - cd .. - + if ! python3 -c "from mooncake.store import MooncakeDistributedStore" >/dev/null 2>&1; then + install_mooncake_rocm + fi python3 -c "from mooncake.store import MooncakeDistributedStore" >/dev/null - export INFERENCEX_MOONCAKE_MAX_TRANSFER_BATCH_KEYS=32 - python3 "$(dirname "$0")/patch_vllm_mooncake_transfer_batches.py" MOONCAKE_MASTER_PORT=$((PORT + 12000)) MOONCAKE_CONFIG_PATH="$RESULT_DIR/mooncake_config.json" @@ -178,22 +242,15 @@ case "${KV_OFFLOAD_BACKEND:-}" in "enable_offload": false } EOF -# (srok) - #"protocol": "rdma", - #"device_name": "mlx5_0", - #"local_buffer_size": "4GB", export MOONCAKE_CONFIG_PATH export MC_ENABLE_DEST_DEVICE_AFFINITY=1 export PYTHONHASHSEED=0 export MC_SLICE_SIZE=1048576 - # (srok) - #export MC_WORKERS_PER_CTX=4 export MC_WORKERS_PER_CTX=8 MOONCAKE_EVICTION_HIGH_WATERMARK_RATIO=0.80 MOONCAKE_EVICTION_RATIO=0.10 MOONCAKE_KV_LEASE_TTL=60s - #MOONCAKE_KV_LEASE_TTL=3600s echo "Starting Mooncake master on port $MOONCAKE_MASTER_PORT..." mooncake_master --port "$MOONCAKE_MASTER_PORT" \ @@ -219,30 +276,6 @@ EOF lmcache) require_agentic_kv_offload_backend lmcache # ---- Lmcache config ---------------------------------------------------------- - LMCACHE_PID="" - - cleanup_lmcache_server() { - if [[ -n "$LMCACHE_PID" ]] && kill -0 "$LMCACHE_PID" 2>/dev/null; then - kill "$LMCACHE_PID" 2>/dev/null || true - wait "$LMCACHE_PID" 2>/dev/null || true - fi - } - - trap cleanup_lmcache_server EXIT - - cleanup_agentic_services() { - local exit_code=$? - trap - EXIT INT TERM - set +e - stop_background_process_tree "$ROUTER_PID" "vLLM router" - stop_background_process_tree "$SERVER_PID" "vLLM server" 60 - stop_background_process_tree "$MOONCAKE_MASTER_PID" "Mooncake master" - exit "$exit_code" - } - trap cleanup_agentic_services EXIT - trap 'exit 130' INT - trap 'exit 143' TERM - wait_for_lmcache_ready() { { set +x; } 2>/dev/null local attempts="${LMCACHE_READY_ATTEMPTS:-120}" @@ -379,9 +412,9 @@ MAX_NUM_SEQS=$((2 * CONC)) # DeepSeek-V4-Pro ships a native MTP head. AgentX throughput pins its # three-token draft to the committed thinking-on golden acceptance length; # eval-only runs use real target verification so accuracy remains meaningful. -# The isolated 16K scheduler-budget, K=2, piecewise-graph, and INT4 Quick -# Reduce probes did not improve their matched c48 controls. Restore the -# K=3/8K/FULL_DECODE_ONLY baseline before isolating breakable CUDA graphs. +# The isolated scheduler, MTP-depth, graph-mode, collective, and breakable- +# graph probes did not produce a clean improvement. Keep the verified +# K=3/8K/FULL_DECODE_ONLY baseline while expanding topology coverage. NUM_SPEC_TOKENS=3 SYNTHETIC_ACCEPT_LEN=2.49 if [ "${EVAL_ONLY:-false}" = "true" ]; then @@ -393,7 +426,6 @@ fi echo "Starting vllm server..." set -x export VLLM_ROCM_USE_AITER=1 -export VLLM_USE_BREAKABLE_CUDAGRAPH=0 export VLLM_ROCM_USE_AITER_MOE=1 { set +x; } 2>/dev/null diff --git a/configs/amd-master.yaml b/configs/amd-master.yaml index 97e52a249..72ac84d81 100644 --- a/configs/amd-master.yaml +++ b/configs/amd-master.yaml @@ -1227,14 +1227,11 @@ qwen3.5-fp8-mi355x-sglang-agentic-hicache: - { tp: 8, ep: 1, kv-offloading: none, conc-list: [1, 2, 4, 8, 16, 32] } - { tp: 8, ep: 1, kv-offloading: dram, kv-offload-backend: { name: hicache }, conc-list: [16, 32, 48, 64] } -# DeepSeek-V4-Pro FP4 MTP refresh for MI355X. Fast discovery measured the full -# B200/B300-shaped topology space one variable at a time: TP8 weakly dominates -# TP4 at low concurrency, TP8+EP8 dominates DP8+EP8, and native DRAM offload at -# c64 regresses the GPU-only point without producing an external-cache hit. The -# reusable sweep followed the measured GPU-resident frontier from TP8 c1-c12 -# into TP8+EP8 c16-c64. The current fast follow-up isolates INT4 Quick Reduce -# at c48; the all-green full grid remains the rollback baseline in run -# 31357800541. +# DeepSeek-V4-Pro FP4 MTP collection sweep for MI355X. Keep the verified +# GPU-resident frontier, add denser c52/c60/c68 TEP guards, collect the same +# points with pinned Mooncake DRAM offload, and retain representative DEP8 and +# DEP4 cells even when dominated. The fast pass is a functionality gate; +# Pareto optimality is deliberately not required for inclusion. dsv4-fp4-mi355x-vllm-agentic-mtp: image: vllm/vllm-openai-rocm:v0.26.0 model: deepseek-ai/DeepSeek-V4-Pro @@ -1247,9 +1244,15 @@ dsv4-fp4-mi355x-vllm-agentic-mtp: agentic-coding: - dram-utilization: 0.60 search-space: - - { tp: 8, ep: 8, dp-attn: false, kv-offloading: none, spec-decoding: mtp, conc-list: [48] } - # DP4+EP4 is not fit-safe at the required 1,048,576-token model length: - # a direct c56 probe left 12.09 GiB KV memory versus 14.88 GiB required. + - { tp: 8, ep: 1, dp-attn: false, kv-offloading: none, spec-decoding: mtp, conc-list: [1, 2, 4, 6, 8, 12] } + - { tp: 8, ep: 8, dp-attn: false, kv-offloading: none, spec-decoding: mtp, conc-list: [16, 24, 32, 40, 48, 52, 56, 60, 64, 68] } + - { tp: 8, ep: 8, dp-attn: false, kv-offloading: dram, kv-offload-backend: { name: mooncake, version: "0.3.11.post1" }, spec-decoding: mtp, conc-list: [52, 60, 68] } + - { tp: 8, ep: 8, dp-attn: true, kv-offloading: none, spec-decoding: mtp, conc-list: [64, 128, 192, 224], router: { name: vllm-router, version: "0.1.14" } } + - { tp: 4, ep: 4, dp-attn: true, kv-offloading: none, spec-decoding: mtp, conc-list: [4, 8], router: { name: vllm-router, version: "0.1.14" } } + # DEP4 previously had only 12.09 GiB/GPU available for the native + # 1,048,576-token context versus a 14.88 GiB minimum. Retain two cells in + # the fast gate to reconfirm whether the current base can now initialize; + # do not weaken the AgentX context limit to make them pass. # LMCache invalid-block recovery currently assumes one KV-cache group, # while MTP creates two. Restore these points after the upstream hybrid # KV recovery fix lands: https://github.com/vllm-project/vllm/pull/45497 diff --git a/perf-changelog.yaml b/perf-changelog.yaml index 34f6c8951..7ae48e4da 100644 --- a/perf-changelog.yaml +++ b/perf-changelog.yaml @@ -5735,4 +5735,5 @@ - "Next isolate only INT4 Quick Reduce at the retained c48 baseline: enable VLLM_ROCM_QUICK_REDUCE_QUANTIZATION=INT4 while restoring FULL_DECODE_ONLY and keeping vLLM v0.26.0, TP8+EP8, K=3/golden AL 2.49, max-num-batched-tokens 8192, max-num-seqs 96, FP8 KV, 0.9 memory utilization, and the exact AgentX trace unchanged. This is a standard ROCm vLLM communication optimization already used by other MI355X recipes; the paired eval guards accuracy." - "Reject INT4 Quick Reduce after the exact c48 fast run completed successfully at 87,176.57 input / 470.37 output tok/s over 1,228.05 seconds, versus 86,334.85 / 471.67 over 1,229.32 seconds for the duration-matched control: input improved only 0.98%, output regressed 0.28%, and the candidate introduced one empty-content response while the control was error-free. The 0.12% error rate remained below the harness threshold, TTFT/ITL coverage was 100%, GSM8K passed, and vllm: metrics exported, but this is not a clean Pareto improvement, so restore unquantized collectives." - "Next isolate only vLLM's graph execution path at the retained c48 baseline: set VLLM_USE_BREAKABLE_CUDAGRAPH=0 while keeping FULL_DECODE_ONLY, vLLM v0.26.0, TP8+EP8, K=3/golden AL 2.49, max-num-batched-tokens 8192, max-num-seqs 96, FP8 KV, 0.9 memory utilization, and the exact AgentX trace unchanged. Current logs show auto-enabled breakable CUDA graphs force CompilationMode.NONE despite compilation mode 3; opting out tests the actual torch.compile path without changing graph capture mode or any workload setting." + - "Expand the final collection matrix rather than limiting it to Pareto points: keep the verified TP8 and TEP8 grid, add non-offload TEP8 c52/c60/c68 around the measured c56 knee, pair those three cells with pinned Mooncake 0.3.11.post1 DRAM offload under the generated aggregate host-memory cap, restore representative DEP8 c64/c128/c192/c224, and probe DEP4 c4/c8 without reducing the native AgentX context limit. Run agentx-fast first as a functionality gate, then collect every functional cell in the reusable full-duration sweep even when dominated." pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2540 From f894cc8fb2b7efef4b1155fae7a2d922d58f93ca Mon Sep 17 00:00:00 2001 From: Cam Quilici Date: Mon, 10 Aug 2026 13:02:31 -0500 Subject: [PATCH 16/18] fix(mi355x): bound Mooncake transfer logging --- benchmarks/single_node/agentic/dsv4_fp4_mi355x_vllm_mtp.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/benchmarks/single_node/agentic/dsv4_fp4_mi355x_vllm_mtp.sh b/benchmarks/single_node/agentic/dsv4_fp4_mi355x_vllm_mtp.sh index 187f003c8..707c67114 100644 --- a/benchmarks/single_node/agentic/dsv4_fp4_mi355x_vllm_mtp.sh +++ b/benchmarks/single_node/agentic/dsv4_fp4_mi355x_vllm_mtp.sh @@ -242,6 +242,9 @@ case "${KV_OFFLOAD_BACKEND:-}" in "enable_offload": false } EOF + # Mooncake v0.3.11.post1 emits its transfer polling loop at VLOG(1). + # Keep normal INFO diagnostics while suppressing that unbounded hot-loop output. + export GLOG_v=0 export MOONCAKE_CONFIG_PATH export MC_ENABLE_DEST_DEVICE_AFFINITY=1 export PYTHONHASHSEED=0 From 1b48a1a1436eaa4040b3c651978cb6037d889add Mon Sep 17 00:00:00 2001 From: Cam Quilici Date: Mon, 10 Aug 2026 13:38:07 -0500 Subject: [PATCH 17/18] fix(mi355x): fit native context on DEP4 --- .../single_node/agentic/dsv4_fp4_mi355x_vllm_mtp.sh | 12 +++++++++++- perf-changelog.yaml | 1 + 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/benchmarks/single_node/agentic/dsv4_fp4_mi355x_vllm_mtp.sh b/benchmarks/single_node/agentic/dsv4_fp4_mi355x_vllm_mtp.sh index 707c67114..c5f0a95e7 100644 --- a/benchmarks/single_node/agentic/dsv4_fp4_mi355x_vllm_mtp.sh +++ b/benchmarks/single_node/agentic/dsv4_fp4_mi355x_vllm_mtp.sh @@ -426,6 +426,16 @@ else SPEC_CONFIG="{\"method\": \"mtp\", \"num_speculative_tokens\": $NUM_SPEC_TOKENS, \"rejection_sample_method\": \"synthetic\", \"synthetic_acceptance_length\": $SYNTHETIC_ACCEPT_LEN}" fi +# DEP4 replicates the attention weights across four DP ranks. At the common +# 0.90 setting vLLM leaves only 12.06--12.50 GiB for KV on MI355X, below the +# 14.88 GiB required to admit one native 1,048,576-token request. Give only +# this topology the extra headroom it needs; established TP/TEP/DEP8 results +# retain their original memory fraction. +GPU_MEM_UTIL=0.9 +if [ "$DP_ATTENTION" = "true" ] && [ "$TP" -eq 4 ]; then + GPU_MEM_UTIL=0.92 +fi + echo "Starting vllm server..." set -x export VLLM_ROCM_USE_AITER=1 @@ -442,7 +452,7 @@ VLLM_CMD=( --kv-cache-dtype fp8 "${PARALLEL_ARGS[@]}" "${EP_ARGS[@]}" - --gpu-memory-utilization 0.9 + --gpu-memory-utilization "$GPU_MEM_UTIL" --block-size 256 --max-num-batched-tokens 8192 --moe-backend aiter diff --git a/perf-changelog.yaml b/perf-changelog.yaml index 7ae48e4da..46dde7793 100644 --- a/perf-changelog.yaml +++ b/perf-changelog.yaml @@ -5736,4 +5736,5 @@ - "Reject INT4 Quick Reduce after the exact c48 fast run completed successfully at 87,176.57 input / 470.37 output tok/s over 1,228.05 seconds, versus 86,334.85 / 471.67 over 1,229.32 seconds for the duration-matched control: input improved only 0.98%, output regressed 0.28%, and the candidate introduced one empty-content response while the control was error-free. The 0.12% error rate remained below the harness threshold, TTFT/ITL coverage was 100%, GSM8K passed, and vllm: metrics exported, but this is not a clean Pareto improvement, so restore unquantized collectives." - "Next isolate only vLLM's graph execution path at the retained c48 baseline: set VLLM_USE_BREAKABLE_CUDAGRAPH=0 while keeping FULL_DECODE_ONLY, vLLM v0.26.0, TP8+EP8, K=3/golden AL 2.49, max-num-batched-tokens 8192, max-num-seqs 96, FP8 KV, 0.9 memory utilization, and the exact AgentX trace unchanged. Current logs show auto-enabled breakable CUDA graphs force CompilationMode.NONE despite compilation mode 3; opting out tests the actual torch.compile path without changing graph capture mode or any workload setting." - "Expand the final collection matrix rather than limiting it to Pareto points: keep the verified TP8 and TEP8 grid, add non-offload TEP8 c52/c60/c68 around the measured c56 knee, pair those three cells with pinned Mooncake 0.3.11.post1 DRAM offload under the generated aggregate host-memory cap, restore representative DEP8 c64/c128/c192/c224, and probe DEP4 c4/c8 without reducing the native AgentX context limit. Run agentx-fast first as a functionality gate, then collect every functional cell in the reusable full-duration sweep even when dominated." + - "Use 0.92 GPU-memory utilization only for DEP4: the isolated native-context c4/c8 probe measured 12.06--12.50 GiB of free KV at 0.90 versus the 14.88 GiB required for one 1,048,576-token request. Keep 0.90 unchanged for established TP8, TEP8, and DEP8 cells." pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2540 From 42fc55445ba368aa661f0c88ccf48abdc83a70e8 Mon Sep 17 00:00:00 2001 From: Cam Quilici Date: Mon, 10 Aug 2026 23:18:17 -0500 Subject: [PATCH 18/18] Simplify MI355X performance changelog --- perf-changelog.yaml | 27 ++++----------------------- 1 file changed, 4 insertions(+), 23 deletions(-) diff --git a/perf-changelog.yaml b/perf-changelog.yaml index ca5307664..ea1562333 100644 --- a/perf-changelog.yaml +++ b/perf-changelog.yaml @@ -5731,29 +5731,10 @@ scenario-type: - agentic-coding description: - - "Refresh the MI355X DeepSeek-V4-Pro FP4 vLLM AgentX MTP frontier after the prior eight-point run peaked near 66k total tok/s and its only DP-attention point used EP1/full-model replication." - - "Use the latest stable ROCm vLLM v0.26.0 release, raise GPU-memory utilization from 0.8 to 0.9, make the official 256-token block and 8192-token scheduler budget explicit, and use FULL_DECODE_ONLY graph capture. Baseline logs showed roughly 44 GiB/GPU of unused fit-safe KV headroom at 0.8." - - "Replace the isolated DP8/EP1 c64 point with 40 points spanning TP8, fit-validated TP4, TP8+EP8 and DP8+EP8. Mirror the B200/B300 MTP low-concurrency cells and extend DP8+EP8 through concurrency 224, with extra MI355X intermediates to resolve the local knee. DP8+EP8 is the intended throughput topology: attention remains data parallel while the FP4 experts are sharded across all eight GPUs." - - "Direct fit validation shows TP4 leaves 37.47 GiB/GPU for a 2.82M-token KV cache and serves normally. DP4+EP4 is excluded because it leaves only 12.09 GiB/GPU KV versus 14.88 GiB required for the committed 1,048,576-token model length; the workload is not weakened to force an invalid topology." - - "Keep MTP and its committed three-token golden synthetic acceptance length of 2.49 on every throughput point; eval-only runs retain real target verification. Enable prompt-token details for request-level cache accounting, and require a nonempty vllm: server-metrics export from AIPerf." - - "Use agentx-fast discovery before the reusable sweep: 25 completed throughput points show DP8+EP8 is uniformly dominated by TP8+EP8, while TP4 collapses above concurrency 12. Narrow the second fast pass to the six unresolved TP8 c4/c6/c12, TP4 c4/c6, and TP8+EP8 c56 cells; the final full-duration grid will contain only measured frontier points and adjacent guards." - - "The second fast pass confirms TP8 weakly dominates TP4 at matched c4/c6. TP8+EP8 c56 reaches 89.22k input and 496.46 output tok/s with 52.9% KV use, but p95 TTFT has risen to 13.29s. Probe the remaining upper band at c64/c72/c80/c88/c96/c104/c112: c96 is the linear KV-capacity estimate from c48, while c104/c112 bracket the expected cache and latency cliff." - - "The GPU-only upper-band pass completes on all seven points and confirms a monotonic post-c56 collapse: c64/c72/c80 reach 79.34k/414.46, 72.17k/306.93, and 59.06k/284.48 input/output tok/s; c88/c96/c104/c112 fall to 34.33k/142.61, 24.39k/117.42, 15.24k/79.54, and 13.28k/70.73. All points have zero request errors; c88/c96/c112 miss only the fast-window completed-record TTFT coverage gate." - - "Test one isolated follow-up variable before finalizing: TP8+EP8 c64 with the script's supported vLLM-native DRAM offload, leaving vLLM v0.26.0, MTP3, golden AL 2.49, FP8 KV, topology, concurrency, memory utilization, and AgentX trace unchanged. Keep GPU-only c56/c64 as the preserved baseline and expand offload only if c64 improves." - - "Reject native DRAM offload after the isolated c64 test: it completes 719 valid requests with zero request errors but reaches only 73.45k input and 366.17 output tok/s versus the preserved GPU-only c64 result at 79.34k/414.46, while reporting zero external-cache hits despite roughly 20 TB of cumulative host-KV writes. The fast-window TTFT coverage miss (92.8% with ITL at 100%) is consistent with the slower long-response tail and does not change the throughput regression." - - "Run the reusable one-hour sweep on the measured GPU-resident Pareto grid only: TP8 c1/c2/c4/c6/c8/c12 for the low-latency band, then TP8+EP8 c16/c24/c32/c40/c48/c56/c64 for the throughput band. This preserves the B200/B300 low-concurrency spacing, switches topology at the measured crossover, includes every sampled rise to the c56 knee, and retains c64 as the adjacent post-knee guard without re-running the dominated TP4, DP8+EP8, offload, or c72+ tails." - - "The reusable GPU-only grid completed green in run 31357800541. Isolate one follow-up variable at its input-throughput peak, TP8+EP8 c48: raise max-num-batched-tokens from 8192 to 16384 while keeping vLLM v0.26.0, topology, concurrency, MTP3/golden AL 2.49, FP8 KV, GPU memory utilization, and AgentX trace unchanged. Use agentx-fast and preserve the full-grid run as the rollback baseline." - - "Reject the 16384-token scheduler budget after its exact c48 fast comparison completed fully green but regressed to 80,316.53 input / 412.36 output tok/s over 1,228.83 seconds, versus 86,334.85 / 471.67 over 1,229.32 seconds for the duration-matched 8192-token control from run 31341602956. Restore 8192 before any further experiment." - - "Next isolate only the golden MTP operating point at c48: switch from K=3 with its measured synthetic acceptance length 2.49 to K=2 with its measured synthetic acceptance length 2.27, while retaining vLLM v0.26.0, TP8+EP8, max-num-seqs 96, FP8 KV, 0.9 memory utilization, FULL_DECODE_ONLY graphs, and the exact AgentX trace. Draft depth and its matching golden acceptance length are one coupled speculative configuration." - - "Reject K=2 after the exact c48 fast run completed fully green at 83,283.76 input / 448.52 output tok/s over 1,226.65 seconds, versus 86,334.85 / 471.67 over 1,229.32 seconds for the duration-matched K=3 control: input regressed 3.53% and output regressed 4.91%. Restore K=3 with golden acceptance length 2.49 before any further experiment." - - "Next isolate only graph capture mode at c48: switch FULL_DECODE_ONLY to FULL_AND_PIECEWISE while keeping vLLM v0.26.0, TP8+EP8, K=3/golden AL 2.49, max-num-batched-tokens 8192, max-num-seqs 96, FP8 KV, 0.9 memory utilization, and the exact AgentX trace unchanged." - - "Reject FULL_AND_PIECEWISE after the exact c48 fast run completed fully green at 83,955.53 input / 455.90 output tok/s over 1,228.87 seconds, versus 86,334.85 / 471.67 over 1,229.32 seconds for the duration-matched FULL_DECODE_ONLY control: input regressed 2.76% and output regressed 3.34%. The run processed 795 valid requests with zero request errors, passed TTFT/ITL coverage, and exported nonempty vllm: metrics, so this is a measured graph-mode regression rather than infrastructure noise." - - "Next isolate only INT4 Quick Reduce at the retained c48 baseline: enable VLLM_ROCM_QUICK_REDUCE_QUANTIZATION=INT4 while restoring FULL_DECODE_ONLY and keeping vLLM v0.26.0, TP8+EP8, K=3/golden AL 2.49, max-num-batched-tokens 8192, max-num-seqs 96, FP8 KV, 0.9 memory utilization, and the exact AgentX trace unchanged. This is a standard ROCm vLLM communication optimization already used by other MI355X recipes; the paired eval guards accuracy." - - "Reject INT4 Quick Reduce after the exact c48 fast run completed successfully at 87,176.57 input / 470.37 output tok/s over 1,228.05 seconds, versus 86,334.85 / 471.67 over 1,229.32 seconds for the duration-matched control: input improved only 0.98%, output regressed 0.28%, and the candidate introduced one empty-content response while the control was error-free. The 0.12% error rate remained below the harness threshold, TTFT/ITL coverage was 100%, GSM8K passed, and vllm: metrics exported, but this is not a clean Pareto improvement, so restore unquantized collectives." - - "Next isolate only vLLM's graph execution path at the retained c48 baseline: set VLLM_USE_BREAKABLE_CUDAGRAPH=0 while keeping FULL_DECODE_ONLY, vLLM v0.26.0, TP8+EP8, K=3/golden AL 2.49, max-num-batched-tokens 8192, max-num-seqs 96, FP8 KV, 0.9 memory utilization, and the exact AgentX trace unchanged. Current logs show auto-enabled breakable CUDA graphs force CompilationMode.NONE despite compilation mode 3; opting out tests the actual torch.compile path without changing graph capture mode or any workload setting." - - "Expand the final collection matrix rather than limiting it to Pareto points: keep the verified TP8 and TEP8 grid, add non-offload TEP8 c52/c60/c68 around the measured c56 knee, pair those three cells with pinned Mooncake 0.3.11.post1 DRAM offload under the generated aggregate host-memory cap, restore representative DEP8 c64/c128/c192/c224, and probe DEP4 c4/c8 without reducing the native AgentX context limit. Run agentx-fast first as a functionality gate, then collect every functional cell in the reusable full-duration sweep even when dominated." - - "Use 0.92 GPU-memory utilization only for DEP4: the isolated native-context c4/c8 probe measured 12.06--12.50 GiB of free KV at 0.90 versus the 14.88 GiB required for one 1,048,576-token request. Keep 0.90 unchanged for established TP8, TEP8, and DEP8 cells." - - "Upgrade the final 26-point collection to the latest stable vLLM ROCm v0.27.0 release after the isolated Mooncake c52 functionality gate completed 575/575 warmup requests and 248/248 measured requests with zero errors, live external-cache telemetry, and nonempty vllm: metrics." + - "Refresh the MI355X DeepSeek-V4-Pro MTP submission on stable vLLM ROCm v0.27.0; raise GPU-memory utilization from 0.80 to 0.90 and use 256-token blocks, an 8192-token scheduler budget, and FULL_DECODE_ONLY graphs." + - "Keep the measured MTP operating point at three draft tokens with golden synthetic acceptance length 2.49." + - "Expand collection to TP8 c1-c12, TP8/EP8 c16-c68, Mooncake DRAM offload c52/c60/c68, DEP8 c64-c224, and DEP4 c4/c8, including dominated points requested for comparison." + - "Use 0.92 GPU-memory utilization only for DEP4 so the native 1,048,576-token context fits; all other points retain 0.90." pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2540 - config-keys: