From 602cbe26287c0f8baf3610a45d2aee1fea165fd2 Mon Sep 17 00:00:00 2001 From: weireweire <20922698+weireweire@users.noreply.github.com> Date: Wed, 7 Oct 2026 17:07:46 +0800 Subject: [PATCH 1/7] perf(agentx): fold DSpark sampling and retune c64/c128 for GB300 DSV4.1 Flash SGLang MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bump the image to nightly-dev-cu13-20260929-79cafec0 and set SGLANG_DSPARK_FOLDED_SAMPLING=2 on every point: the AUTO default keeps DSpark draft sampling eager for DeepSeek-V4.1 TP shards, which left low-concurrency decode launch-bound. Run TP4 c64 with 8K chunks and a 16-step prefill-decode interval, and let TP2 c128 admit all 128 sessions with a 4-step interval and mem-fraction-static 0.85. 中文:将镜像升级到 nightly-dev-cu13-20260929-79cafec0,并在所有点上设置 SGLANG_DSPARK_FOLDED_SAMPLING=2:AUTO 默认值对 DeepSeek-V4.1 的 TP 分片 保持 DSpark draft 采样为 eager 执行,导致低并发 decode 受 kernel 发射限制。 TP4 c64 改为 8K prefill chunk 与 16 步 prefill-decode interval;TP2 c128 接纳全部 128 个会话,使用 4 步 interval 与 mem-fraction-static 0.85。 --- .../sglang/gb300-fp4-mtp/agentic.yaml | 28 +++++++++++++------ inferencex-e2e/configs/nvidia-master.yaml | 2 +- inferencex-e2e/perf-changelog.yaml | 11 ++++++++ 3 files changed, 31 insertions(+), 10 deletions(-) diff --git a/inferencex-e2e/benchmarks/single_node/srt-slurm-recipes/dsv41flash/sglang/gb300-fp4-mtp/agentic.yaml b/inferencex-e2e/benchmarks/single_node/srt-slurm-recipes/dsv41flash/sglang/gb300-fp4-mtp/agentic.yaml index 58510b81e0..ef286952d7 100644 --- a/inferencex-e2e/benchmarks/single_node/srt-slurm-recipes/dsv41flash/sglang/gb300-fp4-mtp/agentic.yaml +++ b/inferencex-e2e/benchmarks/single_node/srt-slurm-recipes/dsv41flash/sglang/gb300-fp4-mtp/agentic.yaml @@ -5,7 +5,7 @@ base: name: dsv41flash-fp4-gb300-sglang-agentic model: path: hf:deepseek-ai/DeepSeek-V4.1-Flash - container: lmsysorg/sglang:dev-cu13-nightly-0924@sha256:d2c9929f8cc9889326203f6cbc46da48b69de42891b167592c9c76cc803d246e + container: lmsysorg/sglang:nightly-dev-cu13-20260929-79cafec0@sha256:0f075735a6bf913a7cc1cd7ece4f526ae8af70fc5b88fdc02d9efe92a61cf3ae precision: fp4 resources: gpu_type: gb300 @@ -47,6 +47,10 @@ base: SGLANG_DEFAULT_THINKING: '1' SGLANG_DSV41_REASONING_EFFORT: high SGLANG_DSPARK_OPT_MARKOV_W2_BF16: 'True' + # Fold DSpark draft sampling into the draft CUDA graph. AUTO leaves it eager + # for V4.1 TP shards, which left c1 decode launch-bound (~6 ms GPU idle per + # step in nsys at TP4 c1). + SGLANG_DSPARK_FOLDED_SAMPLING: '2' # Cold weight loads from the shared HF cache plus graph capture outlast # srt-slurm's 1800 s default, as they did the legacy one-hour deadline. health_check: @@ -63,11 +67,12 @@ base: # One variant per point. Admission is 2x CONC, capped at the graph batch. SWA # prefix tails are 64x CONC up to 4096 from c2. TP2 keeps row-sharded Engram -# tables in host DRAM and doubles the prefill chunk from c64. TP4 uses static -# ragged verify; pure TP4 c1/c2 keep Engram in HBM, while TP4/EP4 from c4 keeps -# it in host DRAM with 16K chunks, no prefill-decode interval, 4096 SWA tails -# and a 128 graph batch, as matched one-hour c64 runs favored. Saturation -# points get a longer warmup drain. +# tables in host DRAM and doubles the prefill chunk from c64; TP2 c128 admits +# 128 requests with a 4-step prefill-decode interval. TP4 uses static ragged +# verify; pure TP4 c1/c2 keep Engram in HBM, while TP4/EP4 from c4 keeps it in +# host DRAM with 4096 SWA tails and a 128 graph batch, 16K chunks and no +# prefill-decode interval, except c64, which runs 8K chunks with a 16-step +# interval. Saturation points get a longer warmup drain. override_tp2_c1: roles: agg: @@ -202,7 +207,12 @@ override_tp2_c128: expert-parallel-size: 2 chunked-prefill-size: 8192 swa-prefix-tails: 4096 - max-running-requests: 64 + # Admitting 64 of 128 sessions with a 16-step interval collapsed this point + # in the PR #3421 sweep; admitting all 128 with a 4-step interval holds it. + prefill-decode-interval: 4 + mem-fraction-static: 0.85 + max-running-requests: 128 + cuda-graph-max-bs-decode: 128 env: SGLANG_ENABLE_DSV41_ENGRAM_HOST_TABLE: '1' SGLANG_DSV41_ENGRAM_HOST_TABLE_LAYOUT: per_rank @@ -337,8 +347,8 @@ override_tp4_c64: args: tensor-parallel-size: 4 expert-parallel-size: 4 - chunked-prefill-size: 16384 - prefill-decode-interval: 0 + chunked-prefill-size: 8192 + prefill-decode-interval: 16 swa-prefix-tails: 4096 max-running-requests: 128 cuda-graph-max-bs-decode: 128 diff --git a/inferencex-e2e/configs/nvidia-master.yaml b/inferencex-e2e/configs/nvidia-master.yaml index e2ad6ad8ef..6dcef37c7c 100644 --- a/inferencex-e2e/configs/nvidia-master.yaml +++ b/inferencex-e2e/configs/nvidia-master.yaml @@ -9232,7 +9232,7 @@ dsv41flash-fp4-b300-sglang-agentic-dspark: # Official SGLang nightly; TP4 C1/C2 use GPU Engram, other points use host DRAM. dsv41flash-fp4-gb300-sglang-agentic-dspark: - image: lmsysorg/sglang:dev-cu13-nightly-0924@sha256:d2c9929f8cc9889326203f6cbc46da48b69de42891b167592c9c76cc803d246e + image: lmsysorg/sglang:nightly-dev-cu13-20260929-79cafec0@sha256:0f075735a6bf913a7cc1cd7ece4f526ae8af70fc5b88fdc02d9efe92a61cf3ae model: deepseek-ai/DeepSeek-V4.1-Flash model-prefix: dsv41flash runner: cluster:gb300-nv diff --git a/inferencex-e2e/perf-changelog.yaml b/inferencex-e2e/perf-changelog.yaml index 5031b626c3..4f638d512d 100644 --- a/inferencex-e2e/perf-changelog.yaml +++ b/inferencex-e2e/perf-changelog.yaml @@ -9327,3 +9327,14 @@ description: - "Enable SGLANG_OPT_USE_TOPK_V2 (false -> true) so the DSA indexer uses the top-k v2 kernel." pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/3724 + +- config-keys: + - dsv41flash-fp4-gb300-sglang-agentic-dspark + scenario-type: + - agentic-coding + description: + - "Bump the image from lmsysorg/sglang:dev-cu13-nightly-0924 to lmsysorg/sglang:nightly-dev-cu13-20260929-79cafec0 and update model.container to match. With the recipe otherwise unchanged, local GB300 runs on the new image reproduce the PR #3421 sweep (TP4 c1 439.8 vs 436 tok/s/user median, TP4 c32 249.5 vs 250)." + - "Set SGLANG_DSPARK_FOLDED_SAMPLING=2 on every point. The AUTO default keeps DSpark draft sampling eager for DeepSeek-V4.1 TP shards; nsys at TP4 c1 shows the decode step drop from 10.98 ms to 6.79 ms and GPU idle per step from 5.98 ms to 1.96 ms when it is folded into the draft graph. Local one-hour runs (synthetic acceptance 3.51): TP4 c1 5,845 -> 6,931 tok/s/GPU at 439.8 -> 649.8 tok/s/user median (386.8 -> 539.2 P90); TP4 c32 56,719 -> 57,704 at 249.5 -> 274.2 median; TP2 c64 147,452 -> 149,666 at 96.3 -> 99.4 median." + - "TP4 c64: 8K prefill chunks with a 16-step prefill-decode interval instead of 16K chunks with none. Local runs with the fold: 82,586 -> 85,093 tok/s/GPU at 86.8 -> 136.8 tok/s/user median (46.3 -> 72.1 P90); P90 TTFT 5.7 -> 12.5 s." + - "TP2 c128: admit all 128 sessions (max-running-requests and cuda-graph-max-bs-decode 64 -> 128) with a 4-step prefill-decode interval and mem-fraction-static 0.85. The PR #3421 sweep measured 18,631 tok/s/GPU at 130.9 tok/s/user median at this point; locally the new settings gave 147,763 tok/s/GPU at 37.9 tok/s/user median with a 51 s P90 TTFT (measured before the fold was added)." + pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/TBD From 8408a7a70e571490981f7f5c57ef1b868e481d5a Mon Sep 17 00:00:00 2001 From: weireweire <20922698+weireweire@users.noreply.github.com> Date: Wed, 7 Oct 2026 17:08:33 +0800 Subject: [PATCH 2/7] chore(changelog): link the GB300 DSV4.1 Flash SGLang entry to #3782 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 中文:将 GB300 DSV4.1 Flash SGLang 的 changelog 条目链接到 #3782。 --- inferencex-e2e/perf-changelog.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inferencex-e2e/perf-changelog.yaml b/inferencex-e2e/perf-changelog.yaml index 4f638d512d..fd74bffbc9 100644 --- a/inferencex-e2e/perf-changelog.yaml +++ b/inferencex-e2e/perf-changelog.yaml @@ -9337,4 +9337,4 @@ - "Set SGLANG_DSPARK_FOLDED_SAMPLING=2 on every point. The AUTO default keeps DSpark draft sampling eager for DeepSeek-V4.1 TP shards; nsys at TP4 c1 shows the decode step drop from 10.98 ms to 6.79 ms and GPU idle per step from 5.98 ms to 1.96 ms when it is folded into the draft graph. Local one-hour runs (synthetic acceptance 3.51): TP4 c1 5,845 -> 6,931 tok/s/GPU at 439.8 -> 649.8 tok/s/user median (386.8 -> 539.2 P90); TP4 c32 56,719 -> 57,704 at 249.5 -> 274.2 median; TP2 c64 147,452 -> 149,666 at 96.3 -> 99.4 median." - "TP4 c64: 8K prefill chunks with a 16-step prefill-decode interval instead of 16K chunks with none. Local runs with the fold: 82,586 -> 85,093 tok/s/GPU at 86.8 -> 136.8 tok/s/user median (46.3 -> 72.1 P90); P90 TTFT 5.7 -> 12.5 s." - "TP2 c128: admit all 128 sessions (max-running-requests and cuda-graph-max-bs-decode 64 -> 128) with a 4-step prefill-decode interval and mem-fraction-static 0.85. The PR #3421 sweep measured 18,631 tok/s/GPU at 130.9 tok/s/user median at this point; locally the new settings gave 147,763 tok/s/GPU at 37.9 tok/s/user median with a 51 s P90 TTFT (measured before the fold was added)." - pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/TBD + pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/3782 From 4c1105a125ed51ac14227473bbffc0c9d937a78e Mon Sep 17 00:00:00 2001 From: weireweire <20922698+weireweire@users.noreply.github.com> Date: Fri, 9 Oct 2026 12:59:34 +0800 Subject: [PATCH 3/7] perf(agentx): bump GB300 DSV4.1 Flash SGLang to the 20261008 nightly, 16K chunks at TP4 c1 Root cause: on the 20260929 nightly the Python radix-tree insert walk slices the remaining key at every node, which delays the last prefill chunk on 200K-400K-token AgentX prompts. At TP4 c1, 4K chunks with a 16-step prefill-decode interval split long cache-miss prefills into many steps and made subagent requests wait behind them. Fix: pin lmsysorg/sglang:nightly-dev-cu13-20261008-7760d526 by digest in the recipe and the master config. The image makes the Rust radix-tree core the default. TP4 c1 now runs 16K chunks with no prefill-decode interval. Validation: local GB300 TP4 c1 30-minute AgentX runs, synthetic acceptance 3.51. Image bump: 5,570 -> 5,577 tok/s/GPU, P90 interactivity 521.5 -> 562.5. Chunking (new image, fastokens backend in both arms): 5,826 -> 5,957 tok/s/GPU, P90 TTFT 1.38 -> 0.46 s. Other points were not rerun on the new image. --- .../dsv41flash/sglang/gb300-fp4-mtp/agentic.yaml | 14 ++++++++------ inferencex-e2e/configs/nvidia-master.yaml | 2 +- inferencex-e2e/perf-changelog.yaml | 9 +++++++++ 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/inferencex-e2e/benchmarks/single_node/srt-slurm-recipes/dsv41flash/sglang/gb300-fp4-mtp/agentic.yaml b/inferencex-e2e/benchmarks/single_node/srt-slurm-recipes/dsv41flash/sglang/gb300-fp4-mtp/agentic.yaml index ef286952d7..0c96781b25 100644 --- a/inferencex-e2e/benchmarks/single_node/srt-slurm-recipes/dsv41flash/sglang/gb300-fp4-mtp/agentic.yaml +++ b/inferencex-e2e/benchmarks/single_node/srt-slurm-recipes/dsv41flash/sglang/gb300-fp4-mtp/agentic.yaml @@ -5,7 +5,7 @@ base: name: dsv41flash-fp4-gb300-sglang-agentic model: path: hf:deepseek-ai/DeepSeek-V4.1-Flash - container: lmsysorg/sglang:nightly-dev-cu13-20260929-79cafec0@sha256:0f075735a6bf913a7cc1cd7ece4f526ae8af70fc5b88fdc02d9efe92a61cf3ae + container: lmsysorg/sglang:nightly-dev-cu13-20261008-7760d526@sha256:f991a9648fc0a00410bab27d96bf96a0263be9d9b178fe01ee95cffe622fd283 precision: fp4 resources: gpu_type: gb300 @@ -69,10 +69,11 @@ base: # prefix tails are 64x CONC up to 4096 from c2. TP2 keeps row-sharded Engram # tables in host DRAM and doubles the prefill chunk from c64; TP2 c128 admits # 128 requests with a 4-step prefill-decode interval. TP4 uses static ragged -# verify; pure TP4 c1/c2 keep Engram in HBM, while TP4/EP4 from c4 keeps it in -# host DRAM with 4096 SWA tails and a 128 graph batch, 16K chunks and no -# prefill-decode interval, except c64, which runs 8K chunks with a 16-step -# interval. Saturation points get a longer warmup drain. +# verify; pure TP4 c1/c2 keep Engram in HBM, and c1 runs 16K chunks with no +# prefill-decode interval. TP4/EP4 from c4 keeps Engram in host DRAM with 4096 +# SWA tails and a 128 graph batch, 16K chunks and no prefill-decode interval, +# except c64, which runs 8K chunks with a 16-step interval. Saturation points +# get a longer warmup drain. override_tp2_c1: roles: agg: @@ -228,7 +229,8 @@ override_tp4_c1: args: tensor-parallel-size: 4 expert-parallel-size: 1 - chunked-prefill-size: 4096 + chunked-prefill-size: 16384 + prefill-decode-interval: 0 max-running-requests: 2 env: SGLANG_ENABLE_DSV41_ENGRAM_HOST_TABLE: '0' diff --git a/inferencex-e2e/configs/nvidia-master.yaml b/inferencex-e2e/configs/nvidia-master.yaml index b08077aa89..7d0f0cdfa9 100644 --- a/inferencex-e2e/configs/nvidia-master.yaml +++ b/inferencex-e2e/configs/nvidia-master.yaml @@ -9227,7 +9227,7 @@ dsv41flash-fp4-b300-sglang-agentic-dspark: # Official SGLang nightly; TP4 C1/C2 use GPU Engram, other points use host DRAM. dsv41flash-fp4-gb300-sglang-agentic-dspark: - image: lmsysorg/sglang:nightly-dev-cu13-20260929-79cafec0@sha256:0f075735a6bf913a7cc1cd7ece4f526ae8af70fc5b88fdc02d9efe92a61cf3ae + image: lmsysorg/sglang:nightly-dev-cu13-20261008-7760d526@sha256:f991a9648fc0a00410bab27d96bf96a0263be9d9b178fe01ee95cffe622fd283 model: deepseek-ai/DeepSeek-V4.1-Flash model-prefix: dsv41flash runner: cluster:gb300-nv diff --git a/inferencex-e2e/perf-changelog.yaml b/inferencex-e2e/perf-changelog.yaml index c7166b69fe..333189caa7 100644 --- a/inferencex-e2e/perf-changelog.yaml +++ b/inferencex-e2e/perf-changelog.yaml @@ -9499,3 +9499,12 @@ - "TP4 c64: 8K prefill chunks with a 16-step prefill-decode interval instead of 16K chunks with none. Local runs with the fold: 82,586 -> 85,093 tok/s/GPU at 86.8 -> 136.8 tok/s/user median (46.3 -> 72.1 P90); P90 TTFT 5.7 -> 12.5 s." - "TP2 c128: admit all 128 sessions (max-running-requests and cuda-graph-max-bs-decode 64 -> 128) with a 4-step prefill-decode interval and mem-fraction-static 0.85. The PR #3421 sweep measured 18,631 tok/s/GPU at 130.9 tok/s/user median at this point; locally the new settings gave 147,763 tok/s/GPU at 37.9 tok/s/user median with a 51 s P90 TTFT (measured before the fold was added)." pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/3782 + +- config-keys: + - dsv41flash-fp4-gb300-sglang-agentic-dspark + scenario-type: + - agentic-coding + description: + - "Bump the image from lmsysorg/sglang:nightly-dev-cu13-20260929-79cafec0 to nightly-dev-cu13-20261008-7760d526 (digest sha256:f991a9648fc0a00410bab27d96bf96a0263be9d9b178fe01ee95cffe622fd283) and update model.container to match. The new nightly makes the Rust radix-tree core the default (sgl-project/sglang#39627), which removes a Python insert walk that grew with prompt length and depth on 200K-400K-token AgentX prompts. Local GB300 TP4 c1 30-minute runs (synthetic acceptance 3.51) with the recipe otherwise unchanged: 5,570 -> 5,577 tok/s/GPU, P90 interactivity 521.5 -> 562.5 tok/s/user (median 658.4 -> 635.3), median TTFT 0.86 -> 0.81 s." + - "TP4 c1: 16K prefill chunks with no prefill-decode interval instead of 4K chunks with a 16-step interval. Long cache-miss prefills now finish in a quarter of the steps, and subagent requests no longer wait behind a long parent prefill. Local runs on the new image (fastokens 0.3.2 tokenizer backend installed on top in both arms): 5,826 -> 5,957 tok/s/GPU, P90 interactivity 561.6 -> 566.4 tok/s/user, P90 TTFT 1.38 -> 0.46 s, subagent P90 TTFT 2.51 -> 0.70 s." + pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/XXX From df4c173cea8a219010d2eed612ed10c191a26ffe Mon Sep 17 00:00:00 2001 From: weireweire <20922698+weireweire@users.noreply.github.com> Date: Fri, 9 Oct 2026 13:00:33 +0800 Subject: [PATCH 4/7] chore(changelog): link the GB300 DSV4.1 Flash SGLang 20261008 entry to #3859 --- inferencex-e2e/perf-changelog.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inferencex-e2e/perf-changelog.yaml b/inferencex-e2e/perf-changelog.yaml index 333189caa7..ba88c4d58e 100644 --- a/inferencex-e2e/perf-changelog.yaml +++ b/inferencex-e2e/perf-changelog.yaml @@ -9507,4 +9507,4 @@ description: - "Bump the image from lmsysorg/sglang:nightly-dev-cu13-20260929-79cafec0 to nightly-dev-cu13-20261008-7760d526 (digest sha256:f991a9648fc0a00410bab27d96bf96a0263be9d9b178fe01ee95cffe622fd283) and update model.container to match. The new nightly makes the Rust radix-tree core the default (sgl-project/sglang#39627), which removes a Python insert walk that grew with prompt length and depth on 200K-400K-token AgentX prompts. Local GB300 TP4 c1 30-minute runs (synthetic acceptance 3.51) with the recipe otherwise unchanged: 5,570 -> 5,577 tok/s/GPU, P90 interactivity 521.5 -> 562.5 tok/s/user (median 658.4 -> 635.3), median TTFT 0.86 -> 0.81 s." - "TP4 c1: 16K prefill chunks with no prefill-decode interval instead of 4K chunks with a 16-step interval. Long cache-miss prefills now finish in a quarter of the steps, and subagent requests no longer wait behind a long parent prefill. Local runs on the new image (fastokens 0.3.2 tokenizer backend installed on top in both arms): 5,826 -> 5,957 tok/s/GPU, P90 interactivity 561.6 -> 566.4 tok/s/user, P90 TTFT 1.38 -> 0.46 s, subagent P90 TTFT 2.51 -> 0.70 s." - pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/XXX + pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/3859 From 62be65dac267053fc5db1ad0d9eae47c93e3dfa1 Mon Sep 17 00:00:00 2001 From: weireweire <20922698+weireweire@users.noreply.github.com> Date: Mon, 12 Oct 2026 12:14:37 +0800 Subject: [PATCH 5/7] perf(agentx): GB300 DSV4.1 Flash SGLang 20261012 nightly, tuned TP2 c8-c32, DEP2 c64/c128 Bump to nightly-dev-cu13-20261012-e6072935, which carries DP attention with MegaMoE. TP2 c8/c16/c32 run 16K chunks with decoder SWA bounded replay and a longer prefill-decode interval; c64 and c128 move to DEP2 behind sglang-router with shortest-prefill-first scheduling. --- .../sglang/gb300-fp4-mtp/agentic.yaml | 107 +++++++++++------- inferencex-e2e/configs/nvidia-master.yaml | 5 +- inferencex-e2e/perf-changelog.yaml | 5 +- 3 files changed, 75 insertions(+), 42 deletions(-) diff --git a/inferencex-e2e/benchmarks/single_node/srt-slurm-recipes/dsv41flash/sglang/gb300-fp4-mtp/agentic.yaml b/inferencex-e2e/benchmarks/single_node/srt-slurm-recipes/dsv41flash/sglang/gb300-fp4-mtp/agentic.yaml index 0c96781b25..327c68309d 100644 --- a/inferencex-e2e/benchmarks/single_node/srt-slurm-recipes/dsv41flash/sglang/gb300-fp4-mtp/agentic.yaml +++ b/inferencex-e2e/benchmarks/single_node/srt-slurm-recipes/dsv41flash/sglang/gb300-fp4-mtp/agentic.yaml @@ -5,7 +5,7 @@ base: name: dsv41flash-fp4-gb300-sglang-agentic model: path: hf:deepseek-ai/DeepSeek-V4.1-Flash - container: lmsysorg/sglang:nightly-dev-cu13-20261008-7760d526@sha256:f991a9648fc0a00410bab27d96bf96a0263be9d9b178fe01ee95cffe622fd283 + container: lmsysorg/sglang:nightly-dev-cu13-20261012-e6072935@sha256:b5c488694d74c13587af6057b90220498c4869571c8e1e3c43dd6f43ae721306 precision: fp4 resources: gpu_type: gb300 @@ -67,13 +67,14 @@ base: # One variant per point. Admission is 2x CONC, capped at the graph batch. SWA # prefix tails are 64x CONC up to 4096 from c2. TP2 keeps row-sharded Engram -# tables in host DRAM and doubles the prefill chunk from c64; TP2 c128 admits -# 128 requests with a 4-step prefill-decode interval. TP4 uses static ragged -# verify; pure TP4 c1/c2 keep Engram in HBM, and c1 runs 16K chunks with no -# prefill-decode interval. TP4/EP4 from c4 keeps Engram in host DRAM with 4096 -# SWA tails and a 128 graph batch, 16K chunks and no prefill-decode interval, -# except c64, which runs 8K chunks with a 16-step interval. Saturation points -# get a longer warmup drain. +# tables in host DRAM; from c8 it runs 16K chunks with decoder SWA bounded replay +# and a longer prefill-decode interval. c64 and c128 run DEP2 (DP attention with +# MegaMoE) behind the SGLang router with shortest-prefill-first scheduling. TP4 +# uses static ragged verify; pure TP4 c1/c2 keep Engram in HBM, and c1 runs 16K +# chunks with no prefill-decode interval. TP4/EP4 from c4 keeps Engram in host +# DRAM with 4096 SWA tails and a 128 graph batch, 16K chunks and no +# prefill-decode interval, except c64, which runs 8K chunks with a 16-step +# interval. Saturation points get a longer warmup drain. override_tp2_c1: roles: agg: @@ -134,12 +135,19 @@ override_tp2_c8: args: tensor-parallel-size: 2 expert-parallel-size: 2 - chunked-prefill-size: 4096 + <<: &tp2_bounded_replay + chunked-prefill-size: 16384 + enable-decoder-swa-bounded-replay: true + cuda-graph-backend-prefill: disabled + prefill-decode-interval: 96 swa-prefix-tails: 512 max-running-requests: 16 env: - SGLANG_ENABLE_DSV41_ENGRAM_HOST_TABLE: '1' - SGLANG_DSV41_ENGRAM_HOST_TABLE_LAYOUT: per_rank + <<: &tp2_env + SGLANG_ENABLE_DSV41_ENGRAM_HOST_TABLE: '1' + SGLANG_DSV41_ENGRAM_HOST_TABLE_LAYOUT: per_rank + PYTORCH_CUDA_ALLOC_CONF: expandable_segments:True + SGLANG_NUMA_BIND_V2: '0' benchmark: env: CONC: '8' @@ -152,12 +160,14 @@ override_tp2_c16: args: tensor-parallel-size: 2 expert-parallel-size: 2 - chunked-prefill-size: 4096 + <<: *tp2_bounded_replay + prefill-decode-interval: 96 + tokenizer-worker-num: 4 swa-prefix-tails: 1024 max-running-requests: 32 env: - SGLANG_ENABLE_DSV41_ENGRAM_HOST_TABLE: '1' - SGLANG_DSV41_ENGRAM_HOST_TABLE_LAYOUT: per_rank + <<: *tp2_env + SGLANG_NUMA_BIND_V2: '0' benchmark: env: CONC: '16' @@ -170,57 +180,76 @@ override_tp2_c32: args: tensor-parallel-size: 2 expert-parallel-size: 2 - chunked-prefill-size: 4096 + <<: *tp2_bounded_replay + prefill-decode-interval: 48 + tokenizer-worker-num: 4 swa-prefix-tails: 2048 max-running-requests: 64 - env: - SGLANG_ENABLE_DSV41_ENGRAM_HOST_TABLE: '1' - SGLANG_DSV41_ENGRAM_HOST_TABLE_LAYOUT: per_rank + env: *tp2_env benchmark: env: CONC: '32' AGENTIC_WARMUP_GRACE_PERIOD: '3600' -override_tp2_c64: +override_dep2_c64: + frontend: &dep2_frontend + type: sglang-router + args: + policy: cache_aware + request-id-headers: x-correlation-id + dp-aware: true + connect-timeout-secs: 900 + request-timeout-secs: 14400 + disable-health-check: true + disable-retries: true roles: agg: gpus: 2 args: - tensor-parallel-size: 2 - expert-parallel-size: 2 - chunked-prefill-size: 8192 - swa-prefix-tails: 4096 - max-running-requests: 64 - env: + <<: &dep2_args + tensor-parallel-size: 2 + data-parallel-size: 2 + expert-parallel-size: 2 + enable-dp-attention: true + enable-dp-lm-head: true + enable-dp-attention-local-control-broadcast: true + load-balance-method: total_requests + moe-a2a-backend: megamoe + schedule-policy: shortest-prefill-first + tokenizer-worker-num: 4 + chunked-prefill-size: 16384 + swa-prefix-tails: 4096 + prefill-decode-interval: 24 + max-running-requests: 128 + env: &dep2_env SGLANG_ENABLE_DSV41_ENGRAM_HOST_TABLE: '1' SGLANG_DSV41_ENGRAM_HOST_TABLE_LAYOUT: per_rank + SGLANG_RAGGED_VERIFY_MODE: static + SGLANG_NUMA_BIND_V2: '0' + PYTORCH_CUDA_ALLOC_CONF: expandable_segments:True benchmark: env: + <<: &dep2_client + AIPERF_HTTP_X_SMG_ROUTING_KEY_FROM_CORRELATION_ID: 'true' + AGENTIC_WARMUP_GRACE_PERIOD: '3600' CONC: '64' - AGENTIC_WARMUP_GRACE_PERIOD: '3600' -override_tp2_c128: +override_dep2_c128: + frontend: *dep2_frontend roles: agg: gpus: 2 args: - tensor-parallel-size: 2 - expert-parallel-size: 2 - chunked-prefill-size: 8192 - swa-prefix-tails: 4096 - # Admitting 64 of 128 sessions with a 16-step interval collapsed this point - # in the PR #3421 sweep; admitting all 128 with a 4-step interval holds it. - prefill-decode-interval: 4 + <<: *dep2_args + prefill-decode-interval: 16 mem-fraction-static: 0.85 - max-running-requests: 128 + max-running-requests: 256 cuda-graph-max-bs-decode: 128 - env: - SGLANG_ENABLE_DSV41_ENGRAM_HOST_TABLE: '1' - SGLANG_DSV41_ENGRAM_HOST_TABLE_LAYOUT: per_rank + env: *dep2_env benchmark: env: + <<: *dep2_client CONC: '128' - AGENTIC_WARMUP_GRACE_PERIOD: '3600' override_tp4_c1: roles: diff --git a/inferencex-e2e/configs/nvidia-master.yaml b/inferencex-e2e/configs/nvidia-master.yaml index 7d0f0cdfa9..0900d7c3c7 100644 --- a/inferencex-e2e/configs/nvidia-master.yaml +++ b/inferencex-e2e/configs/nvidia-master.yaml @@ -9227,7 +9227,7 @@ dsv41flash-fp4-b300-sglang-agentic-dspark: # Official SGLang nightly; TP4 C1/C2 use GPU Engram, other points use host DRAM. dsv41flash-fp4-gb300-sglang-agentic-dspark: - image: lmsysorg/sglang:nightly-dev-cu13-20261008-7760d526@sha256:f991a9648fc0a00410bab27d96bf96a0263be9d9b178fe01ee95cffe622fd283 + image: lmsysorg/sglang:nightly-dev-cu13-20261012-e6072935@sha256:b5c488694d74c13587af6057b90220498c4869571c8e1e3c43dd6f43ae721306 model: deepseek-ai/DeepSeek-V4.1-Flash model-prefix: dsv41flash runner: cluster:gb300-nv @@ -9238,7 +9238,8 @@ dsv41flash-fp4-gb300-sglang-agentic-dspark: agentic-coding: - dram-utilization: 0.80 search-space: - - { tp: 2, ep: 2, kv-offloading: none, spec-decoding: mtp, conc-list: [1, 2, 4, 8, 16, 32, 64, 128], srt-recipe: benchmarks/single_node/srt-slurm-recipes/dsv41flash/sglang/gb300-fp4-mtp/agentic.yaml } + - { tp: 2, ep: 2, kv-offloading: none, spec-decoding: mtp, conc-list: [1, 2, 4, 8, 16, 32], srt-recipe: benchmarks/single_node/srt-slurm-recipes/dsv41flash/sglang/gb300-fp4-mtp/agentic.yaml } + - { tp: 2, ep: 2, dp-attn: true, kv-offloading: none, spec-decoding: mtp, conc-list: [64, 128], router: { name: sglang-router, version: "0.3.2" }, srt-recipe: benchmarks/single_node/srt-slurm-recipes/dsv41flash/sglang/gb300-fp4-mtp/agentic.yaml } - { tp: 4, ep: 1, kv-offloading: none, spec-decoding: mtp, conc-list: [1, 2], srt-recipe: benchmarks/single_node/srt-slurm-recipes/dsv41flash/sglang/gb300-fp4-mtp/agentic.yaml } - { tp: 4, ep: 4, kv-offloading: none, spec-decoding: mtp, conc-list: [4, 8, 16, 32, 64, 128], srt-recipe: benchmarks/single_node/srt-slurm-recipes/dsv41flash/sglang/gb300-fp4-mtp/agentic.yaml } dsv41flash-fp4-gb300-dynamo-sglang-agentic-agg: diff --git a/inferencex-e2e/perf-changelog.yaml b/inferencex-e2e/perf-changelog.yaml index ba88c4d58e..1470f2565e 100644 --- a/inferencex-e2e/perf-changelog.yaml +++ b/inferencex-e2e/perf-changelog.yaml @@ -9505,6 +9505,9 @@ scenario-type: - agentic-coding description: - - "Bump the image from lmsysorg/sglang:nightly-dev-cu13-20260929-79cafec0 to nightly-dev-cu13-20261008-7760d526 (digest sha256:f991a9648fc0a00410bab27d96bf96a0263be9d9b178fe01ee95cffe622fd283) and update model.container to match. The new nightly makes the Rust radix-tree core the default (sgl-project/sglang#39627), which removes a Python insert walk that grew with prompt length and depth on 200K-400K-token AgentX prompts. Local GB300 TP4 c1 30-minute runs (synthetic acceptance 3.51) with the recipe otherwise unchanged: 5,570 -> 5,577 tok/s/GPU, P90 interactivity 521.5 -> 562.5 tok/s/user (median 658.4 -> 635.3), median TTFT 0.86 -> 0.81 s." + - "Bump the image from lmsysorg/sglang:nightly-dev-cu13-20260929-79cafec0 to nightly-dev-cu13-20261012-e6072935 (digest sha256:b5c488694d74c13587af6057b90220498c4869571c8e1e3c43dd6f43ae721306) and update model.container to match. The new nightly makes the Rust radix-tree core the default (sgl-project/sglang#39627), which removes a Python insert walk that grew with prompt length and depth on 200K-400K-token AgentX prompts, and supports DP attention with the MegaMoE all-to-all backend (sgl-project/sglang#43228)." - "TP4 c1: 16K prefill chunks with no prefill-decode interval instead of 4K chunks with a 16-step interval. Long cache-miss prefills now finish in a quarter of the steps, and subagent requests no longer wait behind a long parent prefill. Local runs on the new image (fastokens 0.3.2 tokenizer backend installed on top in both arms): 5,826 -> 5,957 tok/s/GPU, P90 interactivity 561.6 -> 566.4 tok/s/user, P90 TTFT 1.38 -> 0.46 s, subagent P90 TTFT 2.51 -> 0.70 s." + - "TP2 c8/c16/c32: 16K prefill chunks with decoder SWA bounded replay and the prefill CUDA graph disabled, a 96/96/48-step prefill-decode interval, PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True, 4 tokenizer workers at c16/c32, and SGLANG_NUMA_BIND_V2=0 at c8/c16 (previously 4K chunks with the default 16-step interval). Local one-hour runs on the new image: c8 30,341 tok/s/GPU at 310.5 tok/s/user P90 (390.7 median); c16 55,560 at 264.6 (324.9); c32 113,613 at 183.1 (242.7)." + - "c64 and c128 move from TP2 to DEP2 (TP2/DP2/EP2 with DP attention, DP LM head and MegaMoE) behind sglang-router (cache_aware, dp-aware, routing key from the AIPerf correlation id), with total_requests load balancing, shortest-prefill-first scheduling, 16K chunks, 4096 SWA prefix tails and 4 tokenizer workers. c64 uses a 24-step prefill-decode interval and admits 128; c128 a 16-step interval, mem-fraction-static 0.85, admits 256 with a 128 graph batch. Local one-hour runs: c64 200,265 tok/s/GPU at 114.3 tok/s/user P90 (132.7 median), versus 149,666 at 99.4 median for the TP2 point it replaces; c128 271,364 at 81.6 P90 (93.0 median), versus 147,763 at 37.9 median." + - "TP4 c1 on the new image (one hour): 7,314 tok/s/GPU at 625.7 tok/s/user P90 (670.3 median), P90 TTFT 1.38 s." pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/3859 From 6a92b9877c14f2a4040527d9eaf20c2a126a1095 Mon Sep 17 00:00:00 2001 From: weireweire <20922698+weireweire@users.noreply.github.com> Date: Mon, 12 Oct 2026 15:56:39 +0800 Subject: [PATCH 6/7] perf(agentx): GB300 DSV4.1 Flash SGLang: trim to 7 Pareto points, TP4 EP1 at c4/c16 Keep TP4 c1/c4/c16, TP2 c16/c32 and DEP2 c64/c128; the other points are dominated. TP4 c4 and c16 run EP1, and c16 adds a 192-step prefill-decode interval, 4 tokenizer workers and soft NUMA binding. --- .../sglang/gb300-fp4-mtp/agentic.yaml | 206 ++---------------- inferencex-e2e/configs/nvidia-master.yaml | 7 +- inferencex-e2e/perf-changelog.yaml | 7 +- 3 files changed, 24 insertions(+), 196 deletions(-) diff --git a/inferencex-e2e/benchmarks/single_node/srt-slurm-recipes/dsv41flash/sglang/gb300-fp4-mtp/agentic.yaml b/inferencex-e2e/benchmarks/single_node/srt-slurm-recipes/dsv41flash/sglang/gb300-fp4-mtp/agentic.yaml index 327c68309d..3796366014 100644 --- a/inferencex-e2e/benchmarks/single_node/srt-slurm-recipes/dsv41flash/sglang/gb300-fp4-mtp/agentic.yaml +++ b/inferencex-e2e/benchmarks/single_node/srt-slurm-recipes/dsv41flash/sglang/gb300-fp4-mtp/agentic.yaml @@ -66,69 +66,15 @@ base: AIPERF_REQUIRED_SERVER_METRIC_PREFIX: 'sglang:' # One variant per point. Admission is 2x CONC, capped at the graph batch. SWA -# prefix tails are 64x CONC up to 4096 from c2. TP2 keeps row-sharded Engram -# tables in host DRAM; from c8 it runs 16K chunks with decoder SWA bounded replay -# and a longer prefill-decode interval. c64 and c128 run DEP2 (DP attention with -# MegaMoE) behind the SGLang router with shortest-prefill-first scheduling. TP4 -# uses static ragged verify; pure TP4 c1/c2 keep Engram in HBM, and c1 runs 16K -# chunks with no prefill-decode interval. TP4/EP4 from c4 keeps Engram in host -# DRAM with 4096 SWA tails and a 128 graph batch, 16K chunks and no -# prefill-decode interval, except c64, which runs 8K chunks with a 16-step -# interval. Saturation points get a longer warmup drain. -override_tp2_c1: - roles: - agg: - gpus: 2 - args: - tensor-parallel-size: 2 - expert-parallel-size: 2 - chunked-prefill-size: 4096 - max-running-requests: 2 - env: - SGLANG_ENABLE_DSV41_ENGRAM_HOST_TABLE: '1' - SGLANG_DSV41_ENGRAM_HOST_TABLE_LAYOUT: per_rank - benchmark: - env: - CONC: '1' - AGENTIC_WARMUP_GRACE_PERIOD: '1800' - -override_tp2_c2: - roles: - agg: - gpus: 2 - args: - tensor-parallel-size: 2 - expert-parallel-size: 2 - chunked-prefill-size: 4096 - swa-prefix-tails: 128 - max-running-requests: 4 - env: - SGLANG_ENABLE_DSV41_ENGRAM_HOST_TABLE: '1' - SGLANG_DSV41_ENGRAM_HOST_TABLE_LAYOUT: per_rank - benchmark: - env: - CONC: '2' - AGENTIC_WARMUP_GRACE_PERIOD: '1800' - -override_tp2_c4: - roles: - agg: - gpus: 2 - args: - tensor-parallel-size: 2 - expert-parallel-size: 2 - chunked-prefill-size: 4096 - swa-prefix-tails: 256 - max-running-requests: 8 - env: - SGLANG_ENABLE_DSV41_ENGRAM_HOST_TABLE: '1' - SGLANG_DSV41_ENGRAM_HOST_TABLE_LAYOUT: per_rank - benchmark: - env: - CONC: '4' - AGENTIC_WARMUP_GRACE_PERIOD: '1800' - -override_tp2_c8: +# prefix tails are 64x CONC up to 4096. TP2 keeps row-sharded Engram tables in +# host DRAM and runs 16K chunks with decoder SWA bounded replay and a longer +# prefill-decode interval. c64 and c128 run DEP2 (DP attention with MegaMoE) +# behind the SGLang router with shortest-prefill-first scheduling. TP4 uses +# static ragged verify and 16K chunks; c1 keeps Engram in HBM with no +# prefill-decode interval. TP4/EP1 c4 and c16 keep Engram in host DRAM with 4096 +# SWA tails and a 128 graph batch; c16 adds a 192-step interval. Saturation +# points get a longer warmup drain. +override_tp2_c16: roles: agg: gpus: 2 @@ -140,34 +86,15 @@ override_tp2_c8: enable-decoder-swa-bounded-replay: true cuda-graph-backend-prefill: disabled prefill-decode-interval: 96 - swa-prefix-tails: 512 - max-running-requests: 16 + tokenizer-worker-num: 4 + swa-prefix-tails: 1024 + max-running-requests: 32 env: <<: &tp2_env SGLANG_ENABLE_DSV41_ENGRAM_HOST_TABLE: '1' SGLANG_DSV41_ENGRAM_HOST_TABLE_LAYOUT: per_rank PYTORCH_CUDA_ALLOC_CONF: expandable_segments:True SGLANG_NUMA_BIND_V2: '0' - benchmark: - env: - CONC: '8' - AGENTIC_WARMUP_GRACE_PERIOD: '1800' - -override_tp2_c16: - roles: - agg: - gpus: 2 - args: - tensor-parallel-size: 2 - expert-parallel-size: 2 - <<: *tp2_bounded_replay - prefill-decode-interval: 96 - tokenizer-worker-num: 4 - swa-prefix-tails: 1024 - max-running-requests: 32 - env: - <<: *tp2_env - SGLANG_NUMA_BIND_V2: '0' benchmark: env: CONC: '16' @@ -269,31 +196,13 @@ override_tp4_c1: CONC: '1' AGENTIC_WARMUP_GRACE_PERIOD: '1800' -override_tp4_c2: - roles: - agg: - gpus: 4 - args: - tensor-parallel-size: 4 - expert-parallel-size: 1 - chunked-prefill-size: 4096 - swa-prefix-tails: 128 - max-running-requests: 4 - env: - SGLANG_ENABLE_DSV41_ENGRAM_HOST_TABLE: '0' - SGLANG_RAGGED_VERIFY_MODE: static - benchmark: - env: - CONC: '2' - AGENTIC_WARMUP_GRACE_PERIOD: '1800' - override_tp4_c4: roles: agg: gpus: 4 args: tensor-parallel-size: 4 - expert-parallel-size: 4 + expert-parallel-size: 1 chunked-prefill-size: 16384 prefill-decode-interval: 0 swa-prefix-tails: 4096 @@ -308,107 +217,26 @@ override_tp4_c4: CONC: '4' AGENTIC_WARMUP_GRACE_PERIOD: '1800' -override_tp4_c8: - roles: - agg: - gpus: 4 - args: - tensor-parallel-size: 4 - expert-parallel-size: 4 - chunked-prefill-size: 16384 - prefill-decode-interval: 0 - swa-prefix-tails: 4096 - max-running-requests: 128 - cuda-graph-max-bs-decode: 128 - env: - SGLANG_ENABLE_DSV41_ENGRAM_HOST_TABLE: '1' - SGLANG_DSV41_ENGRAM_HOST_TABLE_LAYOUT: per_rank - SGLANG_RAGGED_VERIFY_MODE: static - benchmark: - env: - CONC: '8' - AGENTIC_WARMUP_GRACE_PERIOD: '1800' - override_tp4_c16: roles: agg: gpus: 4 args: tensor-parallel-size: 4 - expert-parallel-size: 4 + expert-parallel-size: 1 chunked-prefill-size: 16384 - prefill-decode-interval: 0 + prefill-decode-interval: 192 + tokenizer-worker-num: 4 swa-prefix-tails: 4096 max-running-requests: 128 cuda-graph-max-bs-decode: 128 env: SGLANG_ENABLE_DSV41_ENGRAM_HOST_TABLE: '1' SGLANG_DSV41_ENGRAM_HOST_TABLE_LAYOUT: per_rank + SGLANG_NUMA_BIND_V2: '0' SGLANG_RAGGED_VERIFY_MODE: static benchmark: env: CONC: '16' AGENTIC_WARMUP_GRACE_PERIOD: '1800' -override_tp4_c32: - roles: - agg: - gpus: 4 - args: - tensor-parallel-size: 4 - expert-parallel-size: 4 - chunked-prefill-size: 16384 - prefill-decode-interval: 0 - swa-prefix-tails: 4096 - max-running-requests: 128 - cuda-graph-max-bs-decode: 128 - env: - SGLANG_ENABLE_DSV41_ENGRAM_HOST_TABLE: '1' - SGLANG_DSV41_ENGRAM_HOST_TABLE_LAYOUT: per_rank - SGLANG_RAGGED_VERIFY_MODE: static - benchmark: - env: - CONC: '32' - AGENTIC_WARMUP_GRACE_PERIOD: '3600' - -override_tp4_c64: - roles: - agg: - gpus: 4 - args: - tensor-parallel-size: 4 - expert-parallel-size: 4 - chunked-prefill-size: 8192 - prefill-decode-interval: 16 - swa-prefix-tails: 4096 - max-running-requests: 128 - cuda-graph-max-bs-decode: 128 - env: - SGLANG_ENABLE_DSV41_ENGRAM_HOST_TABLE: '1' - SGLANG_DSV41_ENGRAM_HOST_TABLE_LAYOUT: per_rank - SGLANG_RAGGED_VERIFY_MODE: static - benchmark: - env: - CONC: '64' - AGENTIC_WARMUP_GRACE_PERIOD: '3600' - -override_tp4_c128: - roles: - agg: - gpus: 4 - args: - tensor-parallel-size: 4 - expert-parallel-size: 4 - chunked-prefill-size: 16384 - prefill-decode-interval: 0 - swa-prefix-tails: 4096 - max-running-requests: 128 - cuda-graph-max-bs-decode: 128 - env: - SGLANG_ENABLE_DSV41_ENGRAM_HOST_TABLE: '1' - SGLANG_DSV41_ENGRAM_HOST_TABLE_LAYOUT: per_rank - SGLANG_RAGGED_VERIFY_MODE: static - benchmark: - env: - CONC: '128' - AGENTIC_WARMUP_GRACE_PERIOD: '3600' diff --git a/inferencex-e2e/configs/nvidia-master.yaml b/inferencex-e2e/configs/nvidia-master.yaml index 2c21e9ec4b..45a74c6e22 100644 --- a/inferencex-e2e/configs/nvidia-master.yaml +++ b/inferencex-e2e/configs/nvidia-master.yaml @@ -9224,7 +9224,7 @@ dsv41flash-fp4-b300-sglang-agentic-dspark: - { tp: 2, ep: 1, kv-offloading: none, spec-decoding: mtp, conc-list: [1, 4, 16, 24, 32, 48], srt-recipe: benchmarks/single_node/srt-slurm-recipes/dsv41flash/sglang/b300-fp4-mtp/agentic.yaml } - { tp: 4, ep: 4, dp-attn: true, kv-offloading: none, spec-decoding: mtp, conc-list: [192], router: { name: sglang-router, version: "0.3.2" }, srt-recipe: benchmarks/single_node/srt-slurm-recipes/dsv41flash/sglang/b300-fp4-mtp/agentic.yaml } -# Official SGLang nightly; TP4 C1/C2 use GPU Engram, other points use host DRAM. +# Official SGLang nightly; TP4 C1 uses GPU Engram, other points use host DRAM. dsv41flash-fp4-gb300-sglang-agentic-dspark: image: lmsysorg/sglang:nightly-dev-cu13-20261012-e6072935@sha256:b5c488694d74c13587af6057b90220498c4869571c8e1e3c43dd6f43ae721306 model: deepseek-ai/DeepSeek-V4.1-Flash @@ -9237,10 +9237,9 @@ dsv41flash-fp4-gb300-sglang-agentic-dspark: agentic-coding: - dram-utilization: 0.80 search-space: - - { tp: 2, ep: 2, kv-offloading: none, spec-decoding: mtp, conc-list: [1, 2, 4, 8, 16, 32], srt-recipe: benchmarks/single_node/srt-slurm-recipes/dsv41flash/sglang/gb300-fp4-mtp/agentic.yaml } + - { tp: 2, ep: 2, kv-offloading: none, spec-decoding: mtp, conc-list: [16, 32], srt-recipe: benchmarks/single_node/srt-slurm-recipes/dsv41flash/sglang/gb300-fp4-mtp/agentic.yaml } - { tp: 2, ep: 2, dp-attn: true, kv-offloading: none, spec-decoding: mtp, conc-list: [64, 128], router: { name: sglang-router, version: "0.3.2" }, srt-recipe: benchmarks/single_node/srt-slurm-recipes/dsv41flash/sglang/gb300-fp4-mtp/agentic.yaml } - - { tp: 4, ep: 1, kv-offloading: none, spec-decoding: mtp, conc-list: [1, 2], srt-recipe: benchmarks/single_node/srt-slurm-recipes/dsv41flash/sglang/gb300-fp4-mtp/agentic.yaml } - - { tp: 4, ep: 4, kv-offloading: none, spec-decoding: mtp, conc-list: [4, 8, 16, 32, 64, 128], srt-recipe: benchmarks/single_node/srt-slurm-recipes/dsv41flash/sglang/gb300-fp4-mtp/agentic.yaml } + - { tp: 4, ep: 1, kv-offloading: none, spec-decoding: mtp, conc-list: [1, 4, 16], srt-recipe: benchmarks/single_node/srt-slurm-recipes/dsv41flash/sglang/gb300-fp4-mtp/agentic.yaml } dsv41flash-fp4-gb300-dynamo-sglang-agentic-agg: image: lmsysorg/sglang:nightly-dev-20260928-81f27fb3@sha256:d9e4917808cfaa4b3be033a0c85a3a73d71eb93c17accbfa2ac3e96f551f3a33 model: deepseek-ai/DeepSeek-V4.1-Flash diff --git a/inferencex-e2e/perf-changelog.yaml b/inferencex-e2e/perf-changelog.yaml index daf2870044..58a1e746b8 100644 --- a/inferencex-e2e/perf-changelog.yaml +++ b/inferencex-e2e/perf-changelog.yaml @@ -9568,8 +9568,9 @@ - agentic-coding description: - "Bump the image from lmsysorg/sglang:nightly-dev-cu13-20260929-79cafec0 to nightly-dev-cu13-20261012-e6072935 (digest sha256:b5c488694d74c13587af6057b90220498c4869571c8e1e3c43dd6f43ae721306) and update model.container to match. The new nightly makes the Rust radix-tree core the default (sgl-project/sglang#39627), which removes a Python insert walk that grew with prompt length and depth on 200K-400K-token AgentX prompts, and supports DP attention with the MegaMoE all-to-all backend (sgl-project/sglang#43228)." - - "TP4 c1: 16K prefill chunks with no prefill-decode interval instead of 4K chunks with a 16-step interval. Long cache-miss prefills now finish in a quarter of the steps, and subagent requests no longer wait behind a long parent prefill. Local runs on the new image (fastokens 0.3.2 tokenizer backend installed on top in both arms): 5,826 -> 5,957 tok/s/GPU, P90 interactivity 561.6 -> 566.4 tok/s/user, P90 TTFT 1.38 -> 0.46 s, subagent P90 TTFT 2.51 -> 0.70 s." - - "TP2 c8/c16/c32: 16K prefill chunks with decoder SWA bounded replay and the prefill CUDA graph disabled, a 96/96/48-step prefill-decode interval, PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True, 4 tokenizer workers at c16/c32, and SGLANG_NUMA_BIND_V2=0 at c8/c16 (previously 4K chunks with the default 16-step interval). Local one-hour runs on the new image: c8 30,341 tok/s/GPU at 310.5 tok/s/user P90 (390.7 median); c16 55,560 at 264.6 (324.9); c32 113,613 at 183.1 (242.7)." + - "Trim the curve from 16 to 7 points: TP4 c1, c4 and c16; TP2 c16 and c32; DEP2 c64 and c128. TP2 c1/c2/c4/c8 and TP4 c2/c8/c32/c64/c128 are dominated on the tok/s/GPU vs P90 tok/s/user Pareto by the remaining points." + - "TP4 c1: 16K prefill chunks with no prefill-decode interval instead of 4K chunks with a 16-step interval. Long cache-miss prefills now finish in a quarter of the steps, and subagent requests no longer wait behind a long parent prefill. Local one-hour run on the new image: 7,314 tok/s/GPU at 625.7 tok/s/user P90 (670.3 median), P90 TTFT 1.38 s." + - "TP4 c4 and c16 move from EP4 to EP1: at batch 1-5, EP4 makes each decode step wait for the rank holding the most-selected experts. c16 also takes a 192-step prefill-decode interval, 4 tokenizer workers and SGLANG_NUMA_BIND_V2=0; a prefill forward costs about 200 ms of host dispatch on Grace and stalls every running decode." + - "TP2 c16/c32: 16K prefill chunks with decoder SWA bounded replay and the prefill CUDA graph disabled, a 96/48-step prefill-decode interval, PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True and 4 tokenizer workers; SGLANG_NUMA_BIND_V2=0 at c16 (previously 4K chunks with the default 16-step interval). Local one-hour runs on the new image: c16 55,560 tok/s/GPU at 264.6 tok/s/user P90 (324.9 median); c32 113,613 at 183.1 (242.7)." - "c64 and c128 move from TP2 to DEP2 (TP2/DP2/EP2 with DP attention, DP LM head and MegaMoE) behind sglang-router (cache_aware, dp-aware, routing key from the AIPerf correlation id), with total_requests load balancing, shortest-prefill-first scheduling, 16K chunks, 4096 SWA prefix tails and 4 tokenizer workers. c64 uses a 24-step prefill-decode interval and admits 128; c128 a 16-step interval, mem-fraction-static 0.85, admits 256 with a 128 graph batch. Local one-hour runs: c64 200,265 tok/s/GPU at 114.3 tok/s/user P90 (132.7 median), versus 149,666 at 99.4 median for the TP2 point it replaces; c128 271,364 at 81.6 P90 (93.0 median), versus 147,763 at 37.9 median." - - "TP4 c1 on the new image (one hour): 7,314 tok/s/GPU at 625.7 tok/s/user P90 (670.3 median), P90 TTFT 1.38 s." pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/3859 From 6b07b8e6930edcb8309cb59ca758fce5a3ef3f6b Mon Sep 17 00:00:00 2001 From: weireweire <20922698+weireweire@users.noreply.github.com> Date: Mon, 12 Oct 2026 16:01:27 +0800 Subject: [PATCH 7/7] chore: credit the GB300 DSV4.1 Flash config-only tuning campaign Co-authored-by: nbommi19 <227267412+nbommi19@users.noreply.github.com>