From 5f301c02c5948deb539eed8a101792c8ff861f7b Mon Sep 17 00:00:00 2001 From: Sahithi Chigurupati Date: Thu, 23 Jul 2026 15:32:57 -0700 Subject: [PATCH 01/10] dsv4 gb300 agentic: Dynamo session-routing upgrade (dev20260718 + X-Dynamo-Session-ID) Update the six DeepSeek-V4-Pro GB300 Dynamo-SGLang AgentX sweep points: - Dynamo 1.3.0.dev1 -> 1.3.0.dev20260718 (router queueing off by default, targeting the high-concurrency regression seen with queueing enabled). - Migrate AgentX session affinity from nvext.session_control to X-Dynamo-Session-ID headers: recipes set AIPERF_HTTP_X_DYNAMO_SESSION_ID_FROM_CORRELATION_ID=true; nginx affinity + Dynamo router use X-Dynamo-Session-ID with a 3600s TTL. benchmark_lib retains the legacy --use-dynamo-conv-aware-routing path when the header opt-in is absent. - Pin the aiperf submodule to 6c84373b (X-Dynamo-Session-ID header support). - Remove DYN_ROUTER_TEMPERATURE=10000000, restoring Dynamo's deterministic 0.0 default. - Add SGLANG_DISABLE_DRAFT_EXTEND_CUDA_GRAPH=1 to the agg + 2p1d recipes to avoid the pathological DSV4 EAGLE draft-extend CUDA-graph capture. - SGLang nightly-dev-cu13-20260711-7de33ce8 -> nightly-dev-cu13-20260719-99f5a6f4. - Add gb300-nv hardware metadata to runners.yaml (available-cpu-dram-mib, gpus-per-node), required by the agentic DRAM-offload matrix logic. --- benchmarks/benchmark_lib.sh | 25 ++++++++++++------- .../agentic/agg-gb300-tp4-mtp-kvoffload.yaml | 19 +++++++------- ...-12p4d-dep8-dep16-c1024-mtp-kvoffload.yaml | 10 +++----- ...-gb300-2p1d-dep8-tp4-c8-mtp-kvoffload.yaml | 13 +++++----- ...00-2p4d-dep8-dep16-c256-mtp-kvoffload.yaml | 10 +++----- ...00-4p4d-dep8-dep16-c256-mtp-kvoffload.yaml | 10 +++----- ...00-6p4d-dep8-dep16-c512-mtp-kvoffload.yaml | 10 +++----- configs/nvidia-master.yaml | 8 +++--- configs/runners.yaml | 3 +++ perf-changelog.yaml | 10 ++++++++ utils/aiperf | 2 +- 11 files changed, 66 insertions(+), 54 deletions(-) diff --git a/benchmarks/benchmark_lib.sh b/benchmarks/benchmark_lib.sh index 9a01f63b4b..15691ec631 100644 --- a/benchmarks/benchmark_lib.sh +++ b/benchmarks/benchmark_lib.sh @@ -1794,16 +1794,23 @@ build_replay_cmd() { REPLAY_CMD+=" --use-server-token-count" # Dynamo's KV router needs an explicit conversation session binding to # keep later turns on the prefill worker that owns their prefix blocks. - # X-Correlation-ID is useful tracing metadata but does not establish that - # binding by itself. AIPerf emits nvext.session_control bind/close actions - # keyed by the stable conversation correlation ID when this flag is set. + # New Dynamo deployments use X-Dynamo-Session-ID headers, while existing + # pinned deployments retain the nvext.session_control behavior by default. if [[ "${FRAMEWORK:-}" == dynamo-* ]]; then - REPLAY_CMD+=" --use-dynamo-conv-aware-routing" - # The upstream 300s affinity TTL is shorter than an overloaded - # high-concurrency agentic request. Keep bindings alive across long - # prefills, generation, and capped inter-turn delay. This controls the - # router's inactivity lease; it does not relax HTTP/request failures. - REPLAY_CMD+=" --dynamo-session-timeout-seconds ${AIPERF_DYNAMO_SESSION_TIMEOUT_SECONDS:-3600}" + case "${AIPERF_HTTP_X_DYNAMO_SESSION_ID_FROM_CORRELATION_ID:-false}" in + true|True|TRUE|1) + # AIPerf PR #17's environment setting is inherited directly + # from benchmark.env and needs no routing CLI flag. + ;; + *) + # Existing Dynamo recipes retain the legacy nvext behavior. + REPLAY_CMD+=" --use-dynamo-conv-aware-routing" + # The upstream 300s affinity TTL is shorter than an overloaded + # high-concurrency agentic request. Keep bindings alive across + # long prefills, generation, and capped inter-turn delay. + REPLAY_CMD+=" --dynamo-session-timeout-seconds ${AIPERF_DYNAMO_SESSION_TIMEOUT_SECONDS:-3600}" + ;; + esac fi # Disable DCGM GPU telemetry collection. aiperf's GpuMetricTimeSeries # freezes its metric schema on the first DCGM scrape, then KeyErrors when diff --git a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/agg-gb300-tp4-mtp-kvoffload.yaml b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/agg-gb300-tp4-mtp-kvoffload.yaml index 3ff9e31924..7fee5dc431 100644 --- a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/agg-gb300-tp4-mtp-kvoffload.yaml +++ b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/agg-gb300-tp4-mtp-kvoffload.yaml @@ -16,7 +16,7 @@ model: dynamo: install: true - wheel: "1.3.0.dev1" + wheel: "1.3.0.dev20260718" slurm: time_limit: "8:00:00" @@ -44,11 +44,10 @@ infra: frontend: type: dynamo nginx_session_affinity: true - nginx_session_affinity_header: X-Correlation-ID + nginx_session_affinity_header: X-Dynamo-Session-ID enable_multiple_frontends: true num_additional_frontends: 4 env: - DYN_ROUTER_TEMPERATURE: "10000000" # The sglang image is PEP 668 externally-managed; the runtime dynamo # install (dynamo_wheels.py / source build) runs pip and fails with # "externally-managed-environment" without this. Lets pip install into @@ -56,7 +55,7 @@ frontend: PIP_BREAK_SYSTEM_PACKAGES: "1" args: router-mode: "kv" - router-reset-states: true + router-session-affinity-ttl-secs: "3600" active-decode-blocks-threshold: "None" active-prefill-tokens-threshold: "None" active-prefill-tokens-threshold-frac: "None" @@ -66,6 +65,9 @@ backend: aggregated_environment: SGLANG_DEFAULT_THINKING: '1' + # TP4/bs128 can spend over an hour capturing the DSV4 EAGLE draft-extend + # graph. Keep the target/decode graphs and use the upstream eager fallback. + SGLANG_DISABLE_DRAFT_EXTEND_CUDA_GRAPH: "1" SGLANG_DSV4_REASONING_EFFORT: high SGLANG_SIMULATE_ACC_LEN: '2.49' SGLANG_SIMULATE_ACC_METHOD: match-expected @@ -139,11 +141,9 @@ benchmark: # in process_agentic_result.py instead. TP must match sglang_config tp-size. IS_MULTINODE: "false" TP: "4" - # Enable dynamo conv-aware routing (per-session affinity so multi-turn - # KV cache is reused across turns). Previously opted out because the - # frontend 400'd on aiperf's nvext.session_control actions; re-enabled - # to test with the current build. - AIPERF_USE_DYNAMO_CONV_AWARE_ROUTING: "1" + # Stamp X-Dynamo-Session-ID on every turn so both nginx and Dynamo's + # router keep the session on the worker that owns its KV prefix. + AIPERF_HTTP_X_DYNAMO_SESSION_ID_FROM_CORRELATION_ID: "true" # Container-side path of the aiperf mmap dataset cache; host-side mount # wired via launch_gb300-*.sh srtslurm.yaml default_mounts. Without it, # aiperf re-tokenizes + re-writes the dataset mmap on every run. @@ -151,4 +151,3 @@ benchmark: # Persistent HF hub cache (also via default_mounts) so the trace dataset # isn't re-downloaded each run; overrides the workflow-level HF_HUB_CACHE. HF_HUB_CACHE: "/hf_hub_cache" - diff --git a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-12p4d-dep8-dep16-c1024-mtp-kvoffload.yaml b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-12p4d-dep8-dep16-c1024-mtp-kvoffload.yaml index 715b0c631e..1e00283043 100644 --- a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-12p4d-dep8-dep16-c1024-mtp-kvoffload.yaml +++ b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-12p4d-dep8-dep16-c1024-mtp-kvoffload.yaml @@ -15,7 +15,7 @@ model: dynamo: install: true - wheel: "1.3.0.dev1" + wheel: "1.3.0.dev20260718" slurm: time_limit: "8:00:00" @@ -41,15 +41,14 @@ infra: frontend: type: dynamo nginx_session_affinity: true - nginx_session_affinity_header: X-Correlation-ID + nginx_session_affinity_header: X-Dynamo-Session-ID enable_multiple_frontends: true num_additional_frontends: 4 env: - DYN_ROUTER_TEMPERATURE: "10000000" PIP_BREAK_SYSTEM_PACKAGES: "1" args: router-mode: "kv" - router-reset-states: true + router-session-affinity-ttl-secs: "3600" active-decode-blocks-threshold: "None" active-prefill-tokens-threshold: "None" active-prefill-tokens-threshold-frac: "None" @@ -206,7 +205,6 @@ benchmark: RESULT_DIR: /logs/agentic PORT: "8000" IS_MULTINODE: "true" - AIPERF_USE_DYNAMO_CONV_AWARE_ROUTING: "1" + AIPERF_HTTP_X_DYNAMO_SESSION_ID_FROM_CORRELATION_ID: "true" AIPERF_DATASET_MMAP_CACHE_DIR: "/aiperf_mmap_cache" HF_HUB_CACHE: "/hf_hub_cache" - diff --git a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-2p1d-dep8-tp4-c8-mtp-kvoffload.yaml b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-2p1d-dep8-tp4-c8-mtp-kvoffload.yaml index dc91c255ce..d926b9a937 100644 --- a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-2p1d-dep8-tp4-c8-mtp-kvoffload.yaml +++ b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-2p1d-dep8-tp4-c8-mtp-kvoffload.yaml @@ -15,7 +15,7 @@ model: dynamo: install: true - wheel: "1.3.0.dev1" + wheel: "1.3.0.dev20260718" slurm: time_limit: "8:00:00" @@ -41,15 +41,14 @@ infra: frontend: type: dynamo nginx_session_affinity: true - nginx_session_affinity_header: X-Correlation-ID + nginx_session_affinity_header: X-Dynamo-Session-ID enable_multiple_frontends: true num_additional_frontends: 4 env: - DYN_ROUTER_TEMPERATURE: "10000000" PIP_BREAK_SYSTEM_PACKAGES: "1" args: router-mode: "kv" - router-reset-states: true + router-session-affinity-ttl-secs: "3600" active-decode-blocks-threshold: "None" active-prefill-tokens-threshold: "None" active-prefill-tokens-threshold-frac: "None" @@ -92,6 +91,9 @@ backend: decode_environment: SGLANG_DISAGGREGATION_WAITING_TIMEOUT: "900" + # Match the TP4 aggregate worker: avoid the pathological DSV4 EAGLE + # draft-extend graph capture while retaining the target/decode graphs. + SGLANG_DISABLE_DRAFT_EXTEND_CUDA_GRAPH: "1" SGLANG_SIMULATE_ACC_LEN: '2.49' SGLANG_SIMULATE_ACC_METHOD: match-expected SGLANG_SIMULATE_ACC_TOKEN_MODE: "real-draft-token" @@ -205,7 +207,6 @@ benchmark: RESULT_DIR: /logs/agentic PORT: "8000" IS_MULTINODE: "true" - AIPERF_USE_DYNAMO_CONV_AWARE_ROUTING: "1" + AIPERF_HTTP_X_DYNAMO_SESSION_ID_FROM_CORRELATION_ID: "true" AIPERF_DATASET_MMAP_CACHE_DIR: "/aiperf_mmap_cache" HF_HUB_CACHE: "/hf_hub_cache" - diff --git a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-2p4d-dep8-dep16-c256-mtp-kvoffload.yaml b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-2p4d-dep8-dep16-c256-mtp-kvoffload.yaml index 6df695b914..0c9df6f9ec 100644 --- a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-2p4d-dep8-dep16-c256-mtp-kvoffload.yaml +++ b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-2p4d-dep8-dep16-c256-mtp-kvoffload.yaml @@ -15,7 +15,7 @@ model: dynamo: install: true - wheel: "1.3.0.dev1" + wheel: "1.3.0.dev20260718" slurm: time_limit: "8:00:00" @@ -41,15 +41,14 @@ infra: frontend: type: dynamo nginx_session_affinity: true - nginx_session_affinity_header: X-Correlation-ID + nginx_session_affinity_header: X-Dynamo-Session-ID enable_multiple_frontends: true num_additional_frontends: 4 env: - DYN_ROUTER_TEMPERATURE: "10000000" PIP_BREAK_SYSTEM_PACKAGES: "1" args: router-mode: "kv" - router-reset-states: true + router-session-affinity-ttl-secs: "3600" active-decode-blocks-threshold: "None" active-prefill-tokens-threshold: "None" active-prefill-tokens-threshold-frac: "None" @@ -206,7 +205,6 @@ benchmark: RESULT_DIR: /logs/agentic PORT: "8000" IS_MULTINODE: "true" - AIPERF_USE_DYNAMO_CONV_AWARE_ROUTING: "1" + AIPERF_HTTP_X_DYNAMO_SESSION_ID_FROM_CORRELATION_ID: "true" AIPERF_DATASET_MMAP_CACHE_DIR: "/aiperf_mmap_cache" HF_HUB_CACHE: "/hf_hub_cache" - diff --git a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-4p4d-dep8-dep16-c256-mtp-kvoffload.yaml b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-4p4d-dep8-dep16-c256-mtp-kvoffload.yaml index 107a787ba9..3fbe5268eb 100644 --- a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-4p4d-dep8-dep16-c256-mtp-kvoffload.yaml +++ b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-4p4d-dep8-dep16-c256-mtp-kvoffload.yaml @@ -15,7 +15,7 @@ model: dynamo: install: true - wheel: "1.3.0.dev1" + wheel: "1.3.0.dev20260718" slurm: time_limit: "8:00:00" @@ -40,15 +40,14 @@ infra: frontend: type: dynamo nginx_session_affinity: true - nginx_session_affinity_header: X-Correlation-ID + nginx_session_affinity_header: X-Dynamo-Session-ID enable_multiple_frontends: true num_additional_frontends: 4 env: - DYN_ROUTER_TEMPERATURE: "10000000" PIP_BREAK_SYSTEM_PACKAGES: "1" args: router-mode: "kv" - router-reset-states: true + router-session-affinity-ttl-secs: "3600" active-decode-blocks-threshold: "None" active-prefill-tokens-threshold: "None" active-prefill-tokens-threshold-frac: "None" @@ -206,7 +205,6 @@ benchmark: RESULT_DIR: /logs/agentic PORT: "8000" IS_MULTINODE: "true" - AIPERF_USE_DYNAMO_CONV_AWARE_ROUTING: "1" + AIPERF_HTTP_X_DYNAMO_SESSION_ID_FROM_CORRELATION_ID: "true" AIPERF_DATASET_MMAP_CACHE_DIR: "/aiperf_mmap_cache" HF_HUB_CACHE: "/hf_hub_cache" - diff --git a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-6p4d-dep8-dep16-c512-mtp-kvoffload.yaml b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-6p4d-dep8-dep16-c512-mtp-kvoffload.yaml index 27a4e42d22..4b17f493ef 100644 --- a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-6p4d-dep8-dep16-c512-mtp-kvoffload.yaml +++ b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-6p4d-dep8-dep16-c512-mtp-kvoffload.yaml @@ -15,7 +15,7 @@ model: dynamo: install: true - wheel: "1.3.0.dev1" + wheel: "1.3.0.dev20260718" slurm: time_limit: "8:00:00" @@ -41,15 +41,14 @@ infra: frontend: type: dynamo nginx_session_affinity: true - nginx_session_affinity_header: X-Correlation-ID + nginx_session_affinity_header: X-Dynamo-Session-ID enable_multiple_frontends: true num_additional_frontends: 4 env: - DYN_ROUTER_TEMPERATURE: "10000000" PIP_BREAK_SYSTEM_PACKAGES: "1" args: router-mode: "kv" - router-reset-states: true + router-session-affinity-ttl-secs: "3600" active-decode-blocks-threshold: "None" active-prefill-tokens-threshold: "None" active-prefill-tokens-threshold-frac: "None" @@ -206,7 +205,6 @@ benchmark: RESULT_DIR: /logs/agentic PORT: "8000" IS_MULTINODE: "true" - AIPERF_USE_DYNAMO_CONV_AWARE_ROUTING: "1" + AIPERF_HTTP_X_DYNAMO_SESSION_ID_FROM_CORRELATION_ID: "true" AIPERF_DATASET_MMAP_CACHE_DIR: "/aiperf_mmap_cache" HF_HUB_CACHE: "/hf_hub_cache" - diff --git a/configs/nvidia-master.yaml b/configs/nvidia-master.yaml index a167f49270..dee9c69e1d 100644 --- a/configs/nvidia-master.yaml +++ b/configs/nvidia-master.yaml @@ -7882,13 +7882,13 @@ dsv4-fp4-gb200-dynamo-vllm-agentic-2p1d-dep8-dep8: dp-attn: true dsv4-fp4-gb300-dynamo-sglang-agentic-agg: - image: lmsysorg/sglang:nightly-dev-cu13-20260711-7de33ce8 + image: lmsysorg/sglang:nightly-dev-cu13-20260719-99f5a6f4 model: deepseek-ai/DeepSeek-V4-Pro model-prefix: dsv4 runner: cluster:gb300-nv precision: fp4 framework: dynamo-sglang - router: { name: dynamo-router, version: "1.3.0.dev1" } + router: { name: dynamo-router, version: "1.3.0.dev20260718" } multinode: true disagg: false scenarios: @@ -7916,13 +7916,13 @@ dsv4-fp4-gb300-dynamo-sglang-agentic-agg: dp-attn: false dsv4-fp4-gb300-dynamo-sglang-agentic-disagg: - image: lmsysorg/sglang:nightly-dev-cu13-20260711-7de33ce8 + image: lmsysorg/sglang:nightly-dev-cu13-20260719-99f5a6f4 model: deepseek-ai/DeepSeek-V4-Pro model-prefix: dsv4 runner: cluster:gb300-nv precision: fp4 framework: dynamo-sglang - router: { name: dynamo-router, version: "1.3.0.dev1" } + router: { name: dynamo-router, version: "1.3.0.dev20260718" } kv-p2p-transfer: mooncake multinode: true disagg: true diff --git a/configs/runners.yaml b/configs/runners.yaml index 851b821ba2..69788865ad 100644 --- a/configs/runners.yaml +++ b/configs/runners.yaml @@ -315,6 +315,9 @@ hardware: cluster:gb200-nv: available-cpu-dram-mib: 860_160 gpus-per-node: 4 + cluster:gb300-nv: + available-cpu-dram-mib: 860_160 + gpus-per-node: 4 cluster:mi300x-amds: available-cpu-dram-mib: 2_321_924 gpus-per-node: 8 diff --git a/perf-changelog.yaml b/perf-changelog.yaml index 335245a6c3..85c3058c0b 100644 --- a/perf-changelog.yaml +++ b/perf-changelog.yaml @@ -5060,3 +5060,13 @@ - "Re-pin VLLM_ROUTER_IMAGE to vllm/vllm-router:nightly-20260716-1fbcde7 (previous nightly-20260629-e667ebb was garbage-collected from Docker Hub)" - "Exclude known-bad nodes mia1-p01-g09,g14 from the disagg node pool" pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2301 + +- config-keys: + - dsv4-fp4-gb300-dynamo-sglang-agentic-agg + - dsv4-fp4-gb300-dynamo-sglang-agentic-disagg + description: + - "Upgrade Dynamo from 1.3.0.dev1 to 1.3.0.dev20260718 so router queueing is disabled by default at high concurrency" + - "Pin AIPerf to PR #17 (6c84373b) and migrate AgentX session affinity from nvext.session_control to X-Dynamo-Session-ID headers with a 3600-second router TTL" + - "Remove the DYN_ROUTER_TEMPERATURE=10000000 override and restore Dynamo's deterministic 0.0 default" + - "Upgrade SGLang from nightly-dev-cu13-20260711-7de33ce8 to nightly-dev-cu13-20260719-99f5a6f4, the latest nightly before the scheduler WAR-barrier regression in SGLang #31687" + pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/XXX diff --git a/utils/aiperf b/utils/aiperf index 0d2aa0572a..6c84373b1d 160000 --- a/utils/aiperf +++ b/utils/aiperf @@ -1 +1 @@ -Subproject commit 0d2aa0572ac685943d38c580675c4a61023581d3 +Subproject commit 6c84373b1d638a7a9ac077ee8b90490b9e93e7d9 From eb527b69fdbb91ab5f918e27a37c6eb24f53061f Mon Sep 17 00:00:00 2001 From: Sahithi Chigurupati Date: Thu, 23 Jul 2026 15:43:33 -0700 Subject: [PATCH 02/10] perf-changelog: set dsv4 gb300 session-routing pr-link to #2319 --- perf-changelog.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/perf-changelog.yaml b/perf-changelog.yaml index 85c3058c0b..b3a800841c 100644 --- a/perf-changelog.yaml +++ b/perf-changelog.yaml @@ -5069,4 +5069,4 @@ - "Pin AIPerf to PR #17 (6c84373b) and migrate AgentX session affinity from nvext.session_control to X-Dynamo-Session-ID headers with a 3600-second router TTL" - "Remove the DYN_ROUTER_TEMPERATURE=10000000 override and restore Dynamo's deterministic 0.0 default" - "Upgrade SGLang from nightly-dev-cu13-20260711-7de33ce8 to nightly-dev-cu13-20260719-99f5a6f4, the latest nightly before the scheduler WAR-barrier regression in SGLang #31687" - pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/XXX + pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2319 From 269a70bcc1add09d6167d26639592bb1b7b64f7e Mon Sep 17 00:00:00 2001 From: Sahithi Chigurupati Date: Sun, 26 Jul 2026 17:47:55 -0700 Subject: [PATCH 03/10] aiperf: bump to agentx-v1.0 branch tip (session-routing re-landed via #19) Replace the frozen pin to the aiperf PR #17 merge (6c84373b, which the integration branch reverted in #18) with the current cquil11/aiperf-agentx-v1.0 tip (655792405), where the X-Dynamo-Session-ID session-routing support was re-landed via aiperf #19. This tracks the branch InferenceX's aiperf submodule targets instead of a stranded pre-revert commit. --- perf-changelog.yaml | 2 +- utils/aiperf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/perf-changelog.yaml b/perf-changelog.yaml index b3a800841c..084fec3cf7 100644 --- a/perf-changelog.yaml +++ b/perf-changelog.yaml @@ -5066,7 +5066,7 @@ - dsv4-fp4-gb300-dynamo-sglang-agentic-disagg description: - "Upgrade Dynamo from 1.3.0.dev1 to 1.3.0.dev20260718 so router queueing is disabled by default at high concurrency" - - "Pin AIPerf to PR #17 (6c84373b) and migrate AgentX session affinity from nvext.session_control to X-Dynamo-Session-ID headers with a 3600-second router TTL" + - "Bump AIPerf to the agentx-v1.0 branch tip (6557924, X-Dynamo-Session-ID session-routing support) and migrate AgentX session affinity from nvext.session_control to X-Dynamo-Session-ID headers with a 3600-second router TTL" - "Remove the DYN_ROUTER_TEMPERATURE=10000000 override and restore Dynamo's deterministic 0.0 default" - "Upgrade SGLang from nightly-dev-cu13-20260711-7de33ce8 to nightly-dev-cu13-20260719-99f5a6f4, the latest nightly before the scheduler WAR-barrier regression in SGLang #31687" pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2319 diff --git a/utils/aiperf b/utils/aiperf index 6c84373b1d..6557924059 160000 --- a/utils/aiperf +++ b/utils/aiperf @@ -1 +1 @@ -Subproject commit 6c84373b1d638a7a9ac077ee8b90490b9e93e7d9 +Subproject commit 655792405980c5211722bc45a5f8401f3bad304a From 19362ee67e220979da6fe88c5972ea1783955c18 Mon Sep 17 00:00:00 2001 From: weireweire <20922698+weireweire@users.noreply.github.com> Date: Wed, 5 Aug 2026 10:35:44 +0800 Subject: [PATCH 04/10] perf(agentx): restore pre-watchdog DSV4 concurrency at 300s cap MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Root cause: the 300-second per-trajectory idle-gap cap leaves fewer session trees active than the 10-second watchdog, so the restored low-concurrency grid underfeeds the DSV4 GB300 servers. Fix: restore the last measured pre-saturation concurrency grid from the uncapped replay campaign, rename the coupled recipes, and explicitly set the per-trajectory idle-gap cap to 300 seconds on every aggregate and disaggregated point. Validation: generated the nine targeted DSV4 Dynamo-SGLang AgentX jobs with concurrencies 2/4/8/16, 80, 256, 512, 768, and 1536; 238 matrix and changelog tests passed. 中文:300 秒单轨迹空闲间隔上限使活跃会话树少于 10 秒 watchdog,恢复后的低并发配置无法喂满服务端。本提交恢复无上限回放阶段实测的饱和前并发网格,同步重命名配置,并为所有聚合式与分离式测点显式设置 300 秒上限;目标配置生成及 238 项测试均通过。 --- .../agentic/agg-gb300-tp4-mtp-kvoffload.yaml | 1 + ...-12p4d-dep8-dep16-c1536-mtp-kvoffload.yaml} | 5 +++-- ...gb300-2p1d-dep8-tp4-c80-mtp-kvoffload.yaml} | 5 +++-- ...300-2p4d-dep8-dep16-c256-mtp-kvoffload.yaml | 1 + ...00-4p4d-dep8-dep16-c512-mtp-kvoffload.yaml} | 5 +++-- ...00-6p4d-dep8-dep16-c768-mtp-kvoffload.yaml} | 5 +++-- configs/nvidia-master.yaml | 18 +++++++++--------- perf-changelog.yaml | 1 + 8 files changed, 24 insertions(+), 17 deletions(-) rename benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/{disagg-gb300-12p4d-dep8-dep16-c1024-mtp-kvoffload.yaml => disagg-gb300-12p4d-dep8-dep16-c1536-mtp-kvoffload.yaml} (98%) rename benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/{disagg-gb300-2p1d-dep8-tp4-c8-mtp-kvoffload.yaml => disagg-gb300-2p1d-dep8-tp4-c80-mtp-kvoffload.yaml} (98%) rename benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/{disagg-gb300-4p4d-dep8-dep16-c256-mtp-kvoffload.yaml => disagg-gb300-4p4d-dep8-dep16-c512-mtp-kvoffload.yaml} (98%) rename benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/{disagg-gb300-6p4d-dep8-dep16-c512-mtp-kvoffload.yaml => disagg-gb300-6p4d-dep8-dep16-c768-mtp-kvoffload.yaml} (98%) diff --git a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/agg-gb300-tp4-mtp-kvoffload.yaml b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/agg-gb300-tp4-mtp-kvoffload.yaml index 7fee5dc431..c08c30ede3 100644 --- a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/agg-gb300-tp4-mtp-kvoffload.yaml +++ b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/agg-gb300-tp4-mtp-kvoffload.yaml @@ -141,6 +141,7 @@ benchmark: # in process_agentic_result.py instead. TP must match sglang_config tp-size. IS_MULTINODE: "false" TP: "4" + AIPERF_TRACE_IDLE_GAP_CAP_SECONDS: "300" # Stamp X-Dynamo-Session-ID on every turn so both nginx and Dynamo's # router keep the session on the worker that owns its KV prefix. AIPERF_HTTP_X_DYNAMO_SESSION_ID_FROM_CORRELATION_ID: "true" diff --git a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-12p4d-dep8-dep16-c1024-mtp-kvoffload.yaml b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-12p4d-dep8-dep16-c1536-mtp-kvoffload.yaml similarity index 98% rename from benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-12p4d-dep8-dep16-c1024-mtp-kvoffload.yaml rename to benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-12p4d-dep8-dep16-c1536-mtp-kvoffload.yaml index 1e00283043..85c4807f03 100644 --- a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-12p4d-dep8-dep16-c1024-mtp-kvoffload.yaml +++ b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-12p4d-dep8-dep16-c1536-mtp-kvoffload.yaml @@ -1,7 +1,7 @@ -name: "disagg-gb300-12p4d-dep8-dep16-c1024-mtp-kvoffload" +name: "disagg-gb300-12p4d-dep8-dep16-c1536-mtp-kvoffload" # Agentic-coding SGLang disaggregated Pareto recipe for DeepSeek-V4-Pro on GB300 -# (12P x DEP8 / 4D x DEP16, MTP + hierarchical-cache KV offload), tuned for concurrency 1024. +# (12P x DEP8 / 4D x DEP16, MTP + hierarchical-cache KV offload), tuned for concurrency 1536. # # Uses the flat single-variant srtctl schema the agentic CI flow expects; # resources + backend (prefill/decode env + sglang_config) are normalized @@ -205,6 +205,7 @@ benchmark: RESULT_DIR: /logs/agentic PORT: "8000" IS_MULTINODE: "true" + AIPERF_TRACE_IDLE_GAP_CAP_SECONDS: "300" AIPERF_HTTP_X_DYNAMO_SESSION_ID_FROM_CORRELATION_ID: "true" AIPERF_DATASET_MMAP_CACHE_DIR: "/aiperf_mmap_cache" HF_HUB_CACHE: "/hf_hub_cache" diff --git a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-2p1d-dep8-tp4-c8-mtp-kvoffload.yaml b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-2p1d-dep8-tp4-c80-mtp-kvoffload.yaml similarity index 98% rename from benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-2p1d-dep8-tp4-c8-mtp-kvoffload.yaml rename to benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-2p1d-dep8-tp4-c80-mtp-kvoffload.yaml index d926b9a937..f504c0b1b9 100644 --- a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-2p1d-dep8-tp4-c8-mtp-kvoffload.yaml +++ b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-2p1d-dep8-tp4-c80-mtp-kvoffload.yaml @@ -1,7 +1,7 @@ -name: "disagg-gb300-2p1d-dep8-tp4-c8-mtp-kvoffload" +name: "disagg-gb300-2p1d-dep8-tp4-c80-mtp-kvoffload" # Agentic-coding SGLang disaggregated Pareto recipe for DeepSeek-V4-Pro on GB300 -# (2P x DEP8 / 1D x TP4, MTP + hierarchical-cache KV offload), tuned for concurrency 8. +# (2P x DEP8 / 1D x TP4, MTP + hierarchical-cache KV offload), tuned for concurrency 80. # # Uses the flat single-variant srtctl schema the agentic CI flow expects; # resources + backend (prefill/decode env + sglang_config) are normalized @@ -207,6 +207,7 @@ benchmark: RESULT_DIR: /logs/agentic PORT: "8000" IS_MULTINODE: "true" + AIPERF_TRACE_IDLE_GAP_CAP_SECONDS: "300" AIPERF_HTTP_X_DYNAMO_SESSION_ID_FROM_CORRELATION_ID: "true" AIPERF_DATASET_MMAP_CACHE_DIR: "/aiperf_mmap_cache" HF_HUB_CACHE: "/hf_hub_cache" diff --git a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-2p4d-dep8-dep16-c256-mtp-kvoffload.yaml b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-2p4d-dep8-dep16-c256-mtp-kvoffload.yaml index 0c9df6f9ec..97688f0f1a 100644 --- a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-2p4d-dep8-dep16-c256-mtp-kvoffload.yaml +++ b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-2p4d-dep8-dep16-c256-mtp-kvoffload.yaml @@ -205,6 +205,7 @@ benchmark: RESULT_DIR: /logs/agentic PORT: "8000" IS_MULTINODE: "true" + AIPERF_TRACE_IDLE_GAP_CAP_SECONDS: "300" AIPERF_HTTP_X_DYNAMO_SESSION_ID_FROM_CORRELATION_ID: "true" AIPERF_DATASET_MMAP_CACHE_DIR: "/aiperf_mmap_cache" HF_HUB_CACHE: "/hf_hub_cache" diff --git a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-4p4d-dep8-dep16-c256-mtp-kvoffload.yaml b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-4p4d-dep8-dep16-c512-mtp-kvoffload.yaml similarity index 98% rename from benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-4p4d-dep8-dep16-c256-mtp-kvoffload.yaml rename to benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-4p4d-dep8-dep16-c512-mtp-kvoffload.yaml index 3fbe5268eb..47cba7df95 100644 --- a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-4p4d-dep8-dep16-c256-mtp-kvoffload.yaml +++ b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-4p4d-dep8-dep16-c512-mtp-kvoffload.yaml @@ -1,7 +1,7 @@ -name: "disagg-gb300-4p4d-dep8-dep16-c256-mtp-kvoffload" +name: "disagg-gb300-4p4d-dep8-dep16-c512-mtp-kvoffload" # Agentic-coding SGLang disaggregated recipe for DeepSeek-V4-Pro on GB300 -# (4P x DEP8 / 4D x DEP16, MTP + hierarchical-cache KV offload), tuned for concurrency 256. +# (4P x DEP8 / 4D x DEP16, MTP + hierarchical-cache KV offload), tuned for concurrency 512. # # DEP8-prefill variant aligned with the measured Pareto point: prefill uses # tp/dp/ep 8, four nodes, and SGLANG_DSV4_MHC_PREWARM=1. @@ -205,6 +205,7 @@ benchmark: RESULT_DIR: /logs/agentic PORT: "8000" IS_MULTINODE: "true" + AIPERF_TRACE_IDLE_GAP_CAP_SECONDS: "300" AIPERF_HTTP_X_DYNAMO_SESSION_ID_FROM_CORRELATION_ID: "true" AIPERF_DATASET_MMAP_CACHE_DIR: "/aiperf_mmap_cache" HF_HUB_CACHE: "/hf_hub_cache" diff --git a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-6p4d-dep8-dep16-c512-mtp-kvoffload.yaml b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-6p4d-dep8-dep16-c768-mtp-kvoffload.yaml similarity index 98% rename from benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-6p4d-dep8-dep16-c512-mtp-kvoffload.yaml rename to benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-6p4d-dep8-dep16-c768-mtp-kvoffload.yaml index 4b17f493ef..0ba3e15365 100644 --- a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-6p4d-dep8-dep16-c512-mtp-kvoffload.yaml +++ b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-6p4d-dep8-dep16-c768-mtp-kvoffload.yaml @@ -1,7 +1,7 @@ -name: "disagg-gb300-6p4d-dep8-dep16-c512-mtp-kvoffload" +name: "disagg-gb300-6p4d-dep8-dep16-c768-mtp-kvoffload" # Agentic-coding SGLang disaggregated Pareto recipe for DeepSeek-V4-Pro on GB300 -# (6P x DEP8 / 4D x DEP16, MTP + hierarchical-cache KV offload), tuned for concurrency 512. +# (6P x DEP8 / 4D x DEP16, MTP + hierarchical-cache KV offload), tuned for concurrency 768. # # Uses the flat single-variant srtctl schema the agentic CI flow expects; # resources + backend (prefill/decode env + sglang_config) are normalized @@ -205,6 +205,7 @@ benchmark: RESULT_DIR: /logs/agentic PORT: "8000" IS_MULTINODE: "true" + AIPERF_TRACE_IDLE_GAP_CAP_SECONDS: "300" AIPERF_HTTP_X_DYNAMO_SESSION_ID_FROM_CORRELATION_ID: "true" AIPERF_DATASET_MMAP_CACHE_DIR: "/aiperf_mmap_cache" HF_HUB_CACHE: "/hf_hub_cache" diff --git a/configs/nvidia-master.yaml b/configs/nvidia-master.yaml index b58b3b5b9d..ed51feffa8 100644 --- a/configs/nvidia-master.yaml +++ b/configs/nvidia-master.yaml @@ -7676,7 +7676,7 @@ dsv4-fp4-gb300-dynamo-sglang-agentic-agg: - dram-utilization: 0.80 search-space: - spec-decoding: mtp - conc-list: [1, 4, 8, 16] + conc-list: [2, 4, 8, 16] kv-offloading: dram kv-offload-backend: { name: hicache } prefill: @@ -7711,7 +7711,7 @@ dsv4-fp4-gb300-dynamo-sglang-agentic-disagg: - dram-utilization: 0.80 search-space: - spec-decoding: mtp - conc-list: [8] + conc-list: [80] kv-offloading: dram kv-offload-backend: { name: hicache } prefill: @@ -7720,7 +7720,7 @@ dsv4-fp4-gb300-dynamo-sglang-agentic-disagg: ep: 8 dp-attn: true additional-settings: - - "CONFIG_FILE=recipes/sglang/deepseek-v4/agentic/disagg-gb300-2p1d-dep8-tp4-c8-mtp-kvoffload.yaml" + - "CONFIG_FILE=recipes/sglang/deepseek-v4/agentic/disagg-gb300-2p1d-dep8-tp4-c80-mtp-kvoffload.yaml" decode: num-worker: 1 tp: 4 @@ -7743,7 +7743,7 @@ dsv4-fp4-gb300-dynamo-sglang-agentic-disagg: ep: 16 dp-attn: true - spec-decoding: mtp - conc-list: [256] + conc-list: [512] kv-offloading: dram kv-offload-backend: { name: hicache } prefill: @@ -7752,14 +7752,14 @@ dsv4-fp4-gb300-dynamo-sglang-agentic-disagg: ep: 8 dp-attn: true additional-settings: - - "CONFIG_FILE=recipes/sglang/deepseek-v4/agentic/disagg-gb300-4p4d-dep8-dep16-c256-mtp-kvoffload.yaml" + - "CONFIG_FILE=recipes/sglang/deepseek-v4/agentic/disagg-gb300-4p4d-dep8-dep16-c512-mtp-kvoffload.yaml" decode: num-worker: 1 tp: 16 ep: 16 dp-attn: true - spec-decoding: mtp - conc-list: [512] + conc-list: [768] kv-offloading: dram kv-offload-backend: { name: hicache } prefill: @@ -7768,14 +7768,14 @@ dsv4-fp4-gb300-dynamo-sglang-agentic-disagg: ep: 8 dp-attn: true additional-settings: - - "CONFIG_FILE=recipes/sglang/deepseek-v4/agentic/disagg-gb300-6p4d-dep8-dep16-c512-mtp-kvoffload.yaml" + - "CONFIG_FILE=recipes/sglang/deepseek-v4/agentic/disagg-gb300-6p4d-dep8-dep16-c768-mtp-kvoffload.yaml" decode: num-worker: 1 tp: 16 ep: 16 dp-attn: true - spec-decoding: mtp - conc-list: [1024] + conc-list: [1536] kv-offloading: dram kv-offload-backend: { name: hicache } prefill: @@ -7784,7 +7784,7 @@ dsv4-fp4-gb300-dynamo-sglang-agentic-disagg: ep: 8 dp-attn: true additional-settings: - - "CONFIG_FILE=recipes/sglang/deepseek-v4/agentic/disagg-gb300-12p4d-dep8-dep16-c1024-mtp-kvoffload.yaml" + - "CONFIG_FILE=recipes/sglang/deepseek-v4/agentic/disagg-gb300-12p4d-dep8-dep16-c1536-mtp-kvoffload.yaml" decode: num-worker: 1 tp: 16 diff --git a/perf-changelog.yaml b/perf-changelog.yaml index fee15c52c6..46c6a96b29 100644 --- a/perf-changelog.yaml +++ b/perf-changelog.yaml @@ -5458,4 +5458,5 @@ - "Migrate AgentX session affinity from nvext.session_control to X-Dynamo-Session-ID headers with a 3600-second router TTL" - "Remove the DYN_ROUTER_TEMPERATURE=10000000 override and restore Dynamo's deterministic 0.0 default" - "Upgrade SGLang from nightly-dev-cu13-20260711-7de33ce8 to nightly-dev-cu13-20260719-99f5a6f4, the latest nightly before the scheduler WAR-barrier regression in SGLang #31687" + - "Restore the pre-watchdog AgentX concurrency grid and use an explicit 300-second per-trajectory idle-gap cap on every point" pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2319 From 753452066b64ecc5bafbe1c8aa42b6e8642d8d3a Mon Sep 17 00:00:00 2001 From: weireweire <20922698+weireweire@users.noreply.github.com> Date: Wed, 5 Aug 2026 14:08:05 +0800 Subject: [PATCH 05/10] Remove explicit AgentX idle gap cap overrides --- .../sglang/deepseek-v4/agentic/agg-gb300-tp4-mtp-kvoffload.yaml | 1 - .../disagg-gb300-12p4d-dep8-dep16-c1536-mtp-kvoffload.yaml | 1 - .../agentic/disagg-gb300-2p1d-dep8-tp4-c80-mtp-kvoffload.yaml | 1 - .../agentic/disagg-gb300-2p4d-dep8-dep16-c256-mtp-kvoffload.yaml | 1 - .../agentic/disagg-gb300-4p4d-dep8-dep16-c512-mtp-kvoffload.yaml | 1 - .../agentic/disagg-gb300-6p4d-dep8-dep16-c768-mtp-kvoffload.yaml | 1 - 6 files changed, 6 deletions(-) diff --git a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/agg-gb300-tp4-mtp-kvoffload.yaml b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/agg-gb300-tp4-mtp-kvoffload.yaml index c08c30ede3..7fee5dc431 100644 --- a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/agg-gb300-tp4-mtp-kvoffload.yaml +++ b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/agg-gb300-tp4-mtp-kvoffload.yaml @@ -141,7 +141,6 @@ benchmark: # in process_agentic_result.py instead. TP must match sglang_config tp-size. IS_MULTINODE: "false" TP: "4" - AIPERF_TRACE_IDLE_GAP_CAP_SECONDS: "300" # Stamp X-Dynamo-Session-ID on every turn so both nginx and Dynamo's # router keep the session on the worker that owns its KV prefix. AIPERF_HTTP_X_DYNAMO_SESSION_ID_FROM_CORRELATION_ID: "true" diff --git a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-12p4d-dep8-dep16-c1536-mtp-kvoffload.yaml b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-12p4d-dep8-dep16-c1536-mtp-kvoffload.yaml index 85c4807f03..abdc82406a 100644 --- a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-12p4d-dep8-dep16-c1536-mtp-kvoffload.yaml +++ b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-12p4d-dep8-dep16-c1536-mtp-kvoffload.yaml @@ -205,7 +205,6 @@ benchmark: RESULT_DIR: /logs/agentic PORT: "8000" IS_MULTINODE: "true" - AIPERF_TRACE_IDLE_GAP_CAP_SECONDS: "300" AIPERF_HTTP_X_DYNAMO_SESSION_ID_FROM_CORRELATION_ID: "true" AIPERF_DATASET_MMAP_CACHE_DIR: "/aiperf_mmap_cache" HF_HUB_CACHE: "/hf_hub_cache" diff --git a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-2p1d-dep8-tp4-c80-mtp-kvoffload.yaml b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-2p1d-dep8-tp4-c80-mtp-kvoffload.yaml index f504c0b1b9..dfe5f68104 100644 --- a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-2p1d-dep8-tp4-c80-mtp-kvoffload.yaml +++ b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-2p1d-dep8-tp4-c80-mtp-kvoffload.yaml @@ -207,7 +207,6 @@ benchmark: RESULT_DIR: /logs/agentic PORT: "8000" IS_MULTINODE: "true" - AIPERF_TRACE_IDLE_GAP_CAP_SECONDS: "300" AIPERF_HTTP_X_DYNAMO_SESSION_ID_FROM_CORRELATION_ID: "true" AIPERF_DATASET_MMAP_CACHE_DIR: "/aiperf_mmap_cache" HF_HUB_CACHE: "/hf_hub_cache" diff --git a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-2p4d-dep8-dep16-c256-mtp-kvoffload.yaml b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-2p4d-dep8-dep16-c256-mtp-kvoffload.yaml index 97688f0f1a..0c9df6f9ec 100644 --- a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-2p4d-dep8-dep16-c256-mtp-kvoffload.yaml +++ b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-2p4d-dep8-dep16-c256-mtp-kvoffload.yaml @@ -205,7 +205,6 @@ benchmark: RESULT_DIR: /logs/agentic PORT: "8000" IS_MULTINODE: "true" - AIPERF_TRACE_IDLE_GAP_CAP_SECONDS: "300" AIPERF_HTTP_X_DYNAMO_SESSION_ID_FROM_CORRELATION_ID: "true" AIPERF_DATASET_MMAP_CACHE_DIR: "/aiperf_mmap_cache" HF_HUB_CACHE: "/hf_hub_cache" diff --git a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-4p4d-dep8-dep16-c512-mtp-kvoffload.yaml b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-4p4d-dep8-dep16-c512-mtp-kvoffload.yaml index 47cba7df95..e1de624e49 100644 --- a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-4p4d-dep8-dep16-c512-mtp-kvoffload.yaml +++ b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-4p4d-dep8-dep16-c512-mtp-kvoffload.yaml @@ -205,7 +205,6 @@ benchmark: RESULT_DIR: /logs/agentic PORT: "8000" IS_MULTINODE: "true" - AIPERF_TRACE_IDLE_GAP_CAP_SECONDS: "300" AIPERF_HTTP_X_DYNAMO_SESSION_ID_FROM_CORRELATION_ID: "true" AIPERF_DATASET_MMAP_CACHE_DIR: "/aiperf_mmap_cache" HF_HUB_CACHE: "/hf_hub_cache" diff --git a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-6p4d-dep8-dep16-c768-mtp-kvoffload.yaml b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-6p4d-dep8-dep16-c768-mtp-kvoffload.yaml index 0ba3e15365..9e6aebf5ab 100644 --- a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-6p4d-dep8-dep16-c768-mtp-kvoffload.yaml +++ b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-6p4d-dep8-dep16-c768-mtp-kvoffload.yaml @@ -205,7 +205,6 @@ benchmark: RESULT_DIR: /logs/agentic PORT: "8000" IS_MULTINODE: "true" - AIPERF_TRACE_IDLE_GAP_CAP_SECONDS: "300" AIPERF_HTTP_X_DYNAMO_SESSION_ID_FROM_CORRELATION_ID: "true" AIPERF_DATASET_MMAP_CACHE_DIR: "/aiperf_mmap_cache" HF_HUB_CACHE: "/hf_hub_cache" From e80607c8cecefd06e90c4d7163e8255f55065974 Mon Sep 17 00:00:00 2001 From: weireweire <20922698+weireweire@users.noreply.github.com> Date: Fri, 7 Aug 2026 10:10:57 +0800 Subject: [PATCH 06/10] fix(agentx): collect DSV4 SGLang worker metrics Root cause: the DSV4 AgentX launcher pinned srt-slurm v1.0.10, which does not inject logical worker metric endpoints, and the SGLang recipes did not enable their metrics endpoints. AIPerf therefore could not capture aggregate, prefill, and decode engine metrics for the frontend visualization.\n\nFix: pin the DSV4 AgentX path to srt-slurm v1.0.38 and enable metrics on all 11 SGLang workers across the aggregate and disaggregate recipes. v1.0.38 supplies every logical worker leader through AIPERF_SERVER_METRICS_URLS.\n\nValidation: bash syntax and YAML checks passed; all six recipes dry-ran successfully; 224 InferenceX matrix/validation tests and three srt-slurm logical metrics endpoint tests passed. --- .../agentic/agg-gb300-tp4-mtp-kvoffload.yaml | 1 + ...agg-gb300-12p4d-dep8-dep16-c1536-mtp-kvoffload.yaml | 2 ++ .../disagg-gb300-2p1d-dep8-tp4-c80-mtp-kvoffload.yaml | 2 ++ ...isagg-gb300-2p4d-dep8-dep16-c256-mtp-kvoffload.yaml | 2 ++ ...isagg-gb300-4p4d-dep8-dep16-c512-mtp-kvoffload.yaml | 2 ++ ...isagg-gb300-6p4d-dep8-dep16-c768-mtp-kvoffload.yaml | 2 ++ runners/launch_gb300-nv.sh | 10 +++++----- 7 files changed, 16 insertions(+), 5 deletions(-) diff --git a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/agg-gb300-tp4-mtp-kvoffload.yaml b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/agg-gb300-tp4-mtp-kvoffload.yaml index 7fee5dc431..4dbf2c2a97 100644 --- a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/agg-gb300-tp4-mtp-kvoffload.yaml +++ b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/agg-gb300-tp4-mtp-kvoffload.yaml @@ -89,6 +89,7 @@ backend: sglang_config: aggregated: served-model-name: "deepseek-ai/DeepSeek-V4-Pro" + enable-metrics: true trust-remote-code: true stream-interval: 50 watchdog-timeout: 1000000 diff --git a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-12p4d-dep8-dep16-c1536-mtp-kvoffload.yaml b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-12p4d-dep8-dep16-c1536-mtp-kvoffload.yaml index abdc82406a..019889471b 100644 --- a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-12p4d-dep8-dep16-c1536-mtp-kvoffload.yaml +++ b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-12p4d-dep8-dep16-c1536-mtp-kvoffload.yaml @@ -128,6 +128,7 @@ backend: prefill: host: 0.0.0.0 served-model-name: deepseek-ai/DeepSeek-V4-Pro + enable-metrics: true model-path: /model/ trust-remote-code: true watchdog-timeout: 86400 @@ -162,6 +163,7 @@ backend: decode: host: 0.0.0.0 served-model-name: deepseek-ai/DeepSeek-V4-Pro + enable-metrics: true model-path: /model/ trust-remote-code: true watchdog-timeout: 86400 diff --git a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-2p1d-dep8-tp4-c80-mtp-kvoffload.yaml b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-2p1d-dep8-tp4-c80-mtp-kvoffload.yaml index dfe5f68104..16b1fe1c91 100644 --- a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-2p1d-dep8-tp4-c80-mtp-kvoffload.yaml +++ b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-2p1d-dep8-tp4-c80-mtp-kvoffload.yaml @@ -131,6 +131,7 @@ backend: prefill: host: 0.0.0.0 served-model-name: deepseek-ai/DeepSeek-V4-Pro + enable-metrics: true model-path: /model/ trust-remote-code: true watchdog-timeout: 86400 @@ -165,6 +166,7 @@ backend: decode: host: 0.0.0.0 served-model-name: deepseek-ai/DeepSeek-V4-Pro + enable-metrics: true model-path: /model/ trust-remote-code: true watchdog-timeout: 86400 diff --git a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-2p4d-dep8-dep16-c256-mtp-kvoffload.yaml b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-2p4d-dep8-dep16-c256-mtp-kvoffload.yaml index 0c9df6f9ec..b17c7edc38 100644 --- a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-2p4d-dep8-dep16-c256-mtp-kvoffload.yaml +++ b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-2p4d-dep8-dep16-c256-mtp-kvoffload.yaml @@ -128,6 +128,7 @@ backend: prefill: host: 0.0.0.0 served-model-name: deepseek-ai/DeepSeek-V4-Pro + enable-metrics: true model-path: /model/ trust-remote-code: true watchdog-timeout: 86400 @@ -162,6 +163,7 @@ backend: decode: host: 0.0.0.0 served-model-name: deepseek-ai/DeepSeek-V4-Pro + enable-metrics: true model-path: /model/ trust-remote-code: true watchdog-timeout: 86400 diff --git a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-4p4d-dep8-dep16-c512-mtp-kvoffload.yaml b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-4p4d-dep8-dep16-c512-mtp-kvoffload.yaml index e1de624e49..269595d1b8 100644 --- a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-4p4d-dep8-dep16-c512-mtp-kvoffload.yaml +++ b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-4p4d-dep8-dep16-c512-mtp-kvoffload.yaml @@ -128,6 +128,7 @@ backend: prefill: host: 0.0.0.0 served-model-name: deepseek-ai/DeepSeek-V4-Pro + enable-metrics: true model-path: /model/ trust-remote-code: true watchdog-timeout: 86400 @@ -162,6 +163,7 @@ backend: decode: host: 0.0.0.0 served-model-name: deepseek-ai/DeepSeek-V4-Pro + enable-metrics: true model-path: /model/ trust-remote-code: true watchdog-timeout: 86400 diff --git a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-6p4d-dep8-dep16-c768-mtp-kvoffload.yaml b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-6p4d-dep8-dep16-c768-mtp-kvoffload.yaml index 9e6aebf5ab..a7a86df269 100644 --- a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-6p4d-dep8-dep16-c768-mtp-kvoffload.yaml +++ b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-6p4d-dep8-dep16-c768-mtp-kvoffload.yaml @@ -128,6 +128,7 @@ backend: prefill: host: 0.0.0.0 served-model-name: deepseek-ai/DeepSeek-V4-Pro + enable-metrics: true model-path: /model/ trust-remote-code: true watchdog-timeout: 86400 @@ -162,6 +163,7 @@ backend: decode: host: 0.0.0.0 served-model-name: deepseek-ai/DeepSeek-V4-Pro + enable-metrics: true model-path: /model/ trust-remote-code: true watchdog-timeout: 86400 diff --git a/runners/launch_gb300-nv.sh b/runners/launch_gb300-nv.sh index 36fcad9e50..44dae7d379 100644 --- a/runners/launch_gb300-nv.sh +++ b/runners/launch_gb300-nv.sh @@ -156,13 +156,13 @@ if [[ "$IS_AGENTIC" == "1" && $FRAMEWORK == "dynamo-sglang" && $MODEL_PREFIX == cp -rT "$GITHUB_WORKSPACE/benchmarks/multi_node/srt-slurm-recipes/sglang/qwen3.5" \ recipes/sglang/qwen3.5 elif [[ "$IS_AGENTIC" == "1" && $FRAMEWORK == "dynamo-sglang" && $MODEL_PREFIX == "dsv4" ]]; then - # DSv4 GB300 sglang agentic: NVIDIA/srt-slurm v1.0.10 has the nginx - # client_max_body_size fix (>1 MiB agentic warmup bodies), the - # session-affinity frontend, and the BenchmarkType.CUSTOM / extra_mount - # schema these recipes need. + # DSv4 GB300 sglang agentic uses NVIDIA/srt-slurm v1.0.38. In addition to + # the nginx session-affinity and custom-benchmark support, this release + # injects AIPERF_SERVER_METRICS_URLS for every logical SGLang worker leader + # so AgentX captures aggregate or disaggregated backend metrics. git clone https://github.com/NVIDIA/srt-slurm.git "$SRT_REPO_DIR" cd "$SRT_REPO_DIR" - git checkout v1.0.10 + git checkout v1.0.38 mkdir -p recipes/sglang/deepseek-v4/agentic cp -rT "$GITHUB_WORKSPACE/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic" \ recipes/sglang/deepseek-v4/agentic From 201b22d27bd2bf5ffd4920279bf59de460d8ae98 Mon Sep 17 00:00:00 2001 From: weireweire <20922698+weireweire@users.noreply.github.com> Date: Fri, 7 Aug 2026 10:54:45 +0800 Subject: [PATCH 07/10] perf(agentx): move DSV4 12P4D point to concurrency 2048 Root cause: the restored 12P4D AgentX entry used concurrency 1536 even though the prior same-topology sweep measured higher output and total token throughput at concurrency 2048.\n\nFix: change the master-config concurrency to 2048 and rename the checked-in recipe and internal identity so the generated job and recipe mapping remain consistent.\n\nValidation: the targeted matrix expansion produces one 3600-second concurrency-2048 job with the renamed recipe; all 224 matrix/validation tests pass, and the recipe dry-run succeeds. --- ...=> disagg-gb300-12p4d-dep8-dep16-c2048-mtp-kvoffload.yaml} | 4 ++-- configs/nvidia-master.yaml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) rename benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/{disagg-gb300-12p4d-dep8-dep16-c1536-mtp-kvoffload.yaml => disagg-gb300-12p4d-dep8-dep16-c2048-mtp-kvoffload.yaml} (98%) diff --git a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-12p4d-dep8-dep16-c1536-mtp-kvoffload.yaml b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-12p4d-dep8-dep16-c2048-mtp-kvoffload.yaml similarity index 98% rename from benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-12p4d-dep8-dep16-c1536-mtp-kvoffload.yaml rename to benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-12p4d-dep8-dep16-c2048-mtp-kvoffload.yaml index 019889471b..7dbfcb8009 100644 --- a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-12p4d-dep8-dep16-c1536-mtp-kvoffload.yaml +++ b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-12p4d-dep8-dep16-c2048-mtp-kvoffload.yaml @@ -1,7 +1,7 @@ -name: "disagg-gb300-12p4d-dep8-dep16-c1536-mtp-kvoffload" +name: "disagg-gb300-12p4d-dep8-dep16-c2048-mtp-kvoffload" # Agentic-coding SGLang disaggregated Pareto recipe for DeepSeek-V4-Pro on GB300 -# (12P x DEP8 / 4D x DEP16, MTP + hierarchical-cache KV offload), tuned for concurrency 1536. +# (12P x DEP8 / 4D x DEP16, MTP + hierarchical-cache KV offload), tuned for concurrency 2048. # # Uses the flat single-variant srtctl schema the agentic CI flow expects; # resources + backend (prefill/decode env + sglang_config) are normalized diff --git a/configs/nvidia-master.yaml b/configs/nvidia-master.yaml index ed51feffa8..be524e3350 100644 --- a/configs/nvidia-master.yaml +++ b/configs/nvidia-master.yaml @@ -7775,7 +7775,7 @@ dsv4-fp4-gb300-dynamo-sglang-agentic-disagg: ep: 16 dp-attn: true - spec-decoding: mtp - conc-list: [1536] + conc-list: [2048] kv-offloading: dram kv-offload-backend: { name: hicache } prefill: @@ -7784,7 +7784,7 @@ dsv4-fp4-gb300-dynamo-sglang-agentic-disagg: ep: 8 dp-attn: true additional-settings: - - "CONFIG_FILE=recipes/sglang/deepseek-v4/agentic/disagg-gb300-12p4d-dep8-dep16-c1536-mtp-kvoffload.yaml" + - "CONFIG_FILE=recipes/sglang/deepseek-v4/agentic/disagg-gb300-12p4d-dep8-dep16-c2048-mtp-kvoffload.yaml" decode: num-worker: 1 tp: 16 From 3471a80cec8b656b514f4a3373d26ad5478dc3e8 Mon Sep 17 00:00:00 2001 From: weireweire <20922698+weireweire@users.noreply.github.com> Date: Sat, 8 Aug 2026 20:04:48 +0800 Subject: [PATCH 08/10] Use concurrency 1536 for DSV4 AgentX throughput point Root cause: The concurrency-2048 job exhausted the eight-hour CI window before producing an aggregated benchmark result.\n\nFix: Restore the 12P4D AgentX sweep point and its recipe identity to concurrency 1536.\n\nValidation: 224 matrix tests passed; the targeted generator produced one 3600-second concurrency-1536 job; the renamed recipe passed srtctl dry-run. --- ...=> disagg-gb300-12p4d-dep8-dep16-c1536-mtp-kvoffload.yaml} | 4 ++-- configs/nvidia-master.yaml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) rename benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/{disagg-gb300-12p4d-dep8-dep16-c2048-mtp-kvoffload.yaml => disagg-gb300-12p4d-dep8-dep16-c1536-mtp-kvoffload.yaml} (98%) diff --git a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-12p4d-dep8-dep16-c2048-mtp-kvoffload.yaml b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-12p4d-dep8-dep16-c1536-mtp-kvoffload.yaml similarity index 98% rename from benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-12p4d-dep8-dep16-c2048-mtp-kvoffload.yaml rename to benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-12p4d-dep8-dep16-c1536-mtp-kvoffload.yaml index 7dbfcb8009..019889471b 100644 --- a/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-12p4d-dep8-dep16-c2048-mtp-kvoffload.yaml +++ b/benchmarks/multi_node/srt-slurm-recipes/sglang/deepseek-v4/agentic/disagg-gb300-12p4d-dep8-dep16-c1536-mtp-kvoffload.yaml @@ -1,7 +1,7 @@ -name: "disagg-gb300-12p4d-dep8-dep16-c2048-mtp-kvoffload" +name: "disagg-gb300-12p4d-dep8-dep16-c1536-mtp-kvoffload" # Agentic-coding SGLang disaggregated Pareto recipe for DeepSeek-V4-Pro on GB300 -# (12P x DEP8 / 4D x DEP16, MTP + hierarchical-cache KV offload), tuned for concurrency 2048. +# (12P x DEP8 / 4D x DEP16, MTP + hierarchical-cache KV offload), tuned for concurrency 1536. # # Uses the flat single-variant srtctl schema the agentic CI flow expects; # resources + backend (prefill/decode env + sglang_config) are normalized diff --git a/configs/nvidia-master.yaml b/configs/nvidia-master.yaml index bb3158ac8f..c6d52ef3b6 100644 --- a/configs/nvidia-master.yaml +++ b/configs/nvidia-master.yaml @@ -7505,7 +7505,7 @@ dsv4-fp4-gb300-dynamo-sglang-agentic-disagg: ep: 16 dp-attn: true - spec-decoding: mtp - conc-list: [2048] + conc-list: [1536] kv-offloading: dram kv-offload-backend: { name: hicache } prefill: @@ -7514,7 +7514,7 @@ dsv4-fp4-gb300-dynamo-sglang-agentic-disagg: ep: 8 dp-attn: true additional-settings: - - "CONFIG_FILE=recipes/sglang/deepseek-v4/agentic/disagg-gb300-12p4d-dep8-dep16-c2048-mtp-kvoffload.yaml" + - "CONFIG_FILE=recipes/sglang/deepseek-v4/agentic/disagg-gb300-12p4d-dep8-dep16-c1536-mtp-kvoffload.yaml" decode: num-worker: 1 tp: 16 From 0f532170c686ffc265d5c5dfaf09ab8c3b2f63b7 Mon Sep 17 00:00:00 2001 From: Xin Li Date: Sat, 8 Aug 2026 13:11:28 -0400 Subject: [PATCH 09/10] fix perf-changelog to be append-only --- perf-changelog.yaml | 45 ++++++++++++++++++++++++++++++++------------- 1 file changed, 32 insertions(+), 13 deletions(-) diff --git a/perf-changelog.yaml b/perf-changelog.yaml index fa79f5ddf6..972822269e 100644 --- a/perf-changelog.yaml +++ b/perf-changelog.yaml @@ -1738,7 +1738,7 @@ - "TP=2 and TP=4, concurrency 4-256 for 1k1k and 8k1k sequence lengths" - "Add --gpu-memory-utilization 0.9 to server launch" pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/1133 - + - config-keys: - dsv4-fp8-h200-vllm @@ -5450,17 +5450,6 @@ - "Cap the 1P1D TP4 concurrency sweep at 256 (was 512); drop the 2P1D TP4 layout (128/256/512) as it is CI-flaky with negligible curve impact." pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/1943 -- config-keys: - - dsv4-fp4-gb300-dynamo-sglang-agentic-agg - - dsv4-fp4-gb300-dynamo-sglang-agentic-disagg - description: - - "Upgrade Dynamo from 1.3.0.dev1 to 1.3.0.dev20260718 so router queueing is disabled by default at high concurrency" - - "Migrate AgentX session affinity from nvext.session_control to X-Dynamo-Session-ID headers with a 3600-second router TTL" - - "Remove the DYN_ROUTER_TEMPERATURE=10000000 override and restore Dynamo's deterministic 0.0 default" - - "Upgrade SGLang from nightly-dev-cu13-20260711-7de33ce8 to nightly-dev-cu13-20260719-99f5a6f4, the latest nightly before the scheduler WAR-barrier regression in SGLang #31687" - - "Restore the pre-watchdog AgentX concurrency grid and use AIPerf's default 300-second per-trajectory idle-gap cap" - pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2319 - - config-keys: - minimaxm3-fp4-b300-vllm-agentic-mtp scenario-type: @@ -5470,7 +5459,7 @@ - "Use the Inferact/MiniMax-M3-EAGLE3-GQA draft model with three speculative tokens and synthetic rejection sampling; thinking-on synthetic acceptance length is 2.78." - "Use vllm/vllm-openai:nightly-387189c42997b27e2c04b5d97ef8190ffa2bf909 with prefix caching enabled, default KV-cache dtype, FlashInfer TRT-LLM attention with FP8 indexer KV, and the EAGLE3 drafter on FLASH_ATTN." pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2328 - + - config-keys: - qwen3.5-fp4-mi355x-sglang - qwen3.5-fp4-mi355x-sglang-mtp @@ -5644,3 +5633,33 @@ - "Staging fix after run 30729467646, in which all five cells failed identically. /lustre/fsw/gharunners/models/GLM-5.2-NVFP4 already existed on b200-dgxc holding config.json, generation_config.json, hf_quant_config.json, chat_template.jinja, README.md and .quant_summary.txt and no weights or tokenizer at all -- an aborted or metadata-only pull. The `ls -A` emptiness guard accepted it, every cell skipped the download, SGLang read config.json fine and then died in AutoTokenizer.from_pretrained with \"Couldn't instantiate the backend tokenizer\". The B300 sibling ran 5/5 green on the same image and the same MTP + simulated-acceptance config in run 30729399405, so this was staging only, not the recipe or the image." - "Replaces the emptiness guard with a completeness check -- tokenizer_config.json, a tokenizer.json or tokenizer.model, model.safetensors.index.json, and every shard the index names -- and serializes the ~433 GB download behind an flock on .download.lock so one cell stages the checkpoint and the other four wait instead of five allocations racing the same Lustre path. hf download resumes into a partially-populated --local-dir, so it downloads on top of the stub. The launcher probe now also requires a candidate to hold at least one weight shard rather than merely exist, so a stub in one staged tree cannot be preferred over a real copy in another." pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2448 + +- config-keys: + - qwen3.5-fp4-mi355x-atom + description: + - "Add Qwen3.5-397B-A17B MXFP4 single-node MI355X ATOM benchmark" + - "Image: rocm/atom:rocm7.2.2_ubuntu24.04_py3.12_pytorch_release_2.10.0_atom0.1.2.post" + - "TP=2 and TP=4, concurrency 4-256 for 1k1k and 8k1k sequence lengths" + - "Add --gpu-memory-utilization 0.9 to server launch" + pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/1133 + +- config-keys: + - dsv4-fp4-gb300-dynamo-sglang-agentic-agg + - dsv4-fp4-gb300-dynamo-sglang-agentic-disagg + description: + - "Upgrade Dynamo from 1.3.0.dev1 to 1.3.0.dev20260718 so router queueing is disabled by default at high concurrency" + - "Migrate AgentX session affinity from nvext.session_control to X-Dynamo-Session-ID headers with a 3600-second router TTL" + - "Remove the DYN_ROUTER_TEMPERATURE=10000000 override and restore Dynamo's deterministic 0.0 default" + - "Upgrade SGLang from nightly-dev-cu13-20260711-7de33ce8 to nightly-dev-cu13-20260719-99f5a6f4, the latest nightly before the scheduler WAR-barrier regression in SGLang #31687" + - "Restore the pre-watchdog AgentX concurrency grid and use AIPerf's default 300-second per-trajectory idle-gap cap" + pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2319 + +- config-keys: + - minimaxm3-fp4-b300-vllm-agentic-mtp + scenario-type: + - agentic-coding + description: + - "Add five MiniMax-M3 NVFP4 B300 single-node aggregate vLLM AgentX points: TP8 concurrency 1; TP4 concurrency 1, 2, and 16; TP2 concurrency 2." + - "Use the Inferact/MiniMax-M3-EAGLE3-GQA draft model with three speculative tokens and synthetic rejection sampling; thinking-on synthetic acceptance length is 2.78." + - "Use vllm/vllm-openai:nightly-387189c42997b27e2c04b5d97ef8190ffa2bf909 with prefix caching enabled, default KV-cache dtype, FlashInfer TRT-LLM attention with FP8 indexer KV, and the EAGLE3 drafter on FLASH_ATTN." + pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2328 From 12605b890d13d0c24e33c53224a0bbb14ecb2c9b Mon Sep 17 00:00:00 2001 From: Xin Li Date: Sat, 8 Aug 2026 13:12:25 -0400 Subject: [PATCH 10/10] fix perf-changelog --- perf-changelog.yaml | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/perf-changelog.yaml b/perf-changelog.yaml index 972822269e..daa5b610e4 100644 --- a/perf-changelog.yaml +++ b/perf-changelog.yaml @@ -5634,15 +5634,6 @@ - "Replaces the emptiness guard with a completeness check -- tokenizer_config.json, a tokenizer.json or tokenizer.model, model.safetensors.index.json, and every shard the index names -- and serializes the ~433 GB download behind an flock on .download.lock so one cell stages the checkpoint and the other four wait instead of five allocations racing the same Lustre path. hf download resumes into a partially-populated --local-dir, so it downloads on top of the stub. The launcher probe now also requires a candidate to hold at least one weight shard rather than merely exist, so a stub in one staged tree cannot be preferred over a real copy in another." pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2448 -- config-keys: - - qwen3.5-fp4-mi355x-atom - description: - - "Add Qwen3.5-397B-A17B MXFP4 single-node MI355X ATOM benchmark" - - "Image: rocm/atom:rocm7.2.2_ubuntu24.04_py3.12_pytorch_release_2.10.0_atom0.1.2.post" - - "TP=2 and TP=4, concurrency 4-256 for 1k1k and 8k1k sequence lengths" - - "Add --gpu-memory-utilization 0.9 to server launch" - pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/1133 - - config-keys: - dsv4-fp4-gb300-dynamo-sglang-agentic-agg - dsv4-fp4-gb300-dynamo-sglang-agentic-disagg @@ -5653,13 +5644,3 @@ - "Upgrade SGLang from nightly-dev-cu13-20260711-7de33ce8 to nightly-dev-cu13-20260719-99f5a6f4, the latest nightly before the scheduler WAR-barrier regression in SGLang #31687" - "Restore the pre-watchdog AgentX concurrency grid and use AIPerf's default 300-second per-trajectory idle-gap cap" pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2319 - -- config-keys: - - minimaxm3-fp4-b300-vllm-agentic-mtp - scenario-type: - - agentic-coding - description: - - "Add five MiniMax-M3 NVFP4 B300 single-node aggregate vLLM AgentX points: TP8 concurrency 1; TP4 concurrency 1, 2, and 16; TP2 concurrency 2." - - "Use the Inferact/MiniMax-M3-EAGLE3-GQA draft model with three speculative tokens and synthetic rejection sampling; thinking-on synthetic acceptance length is 2.78." - - "Use vllm/vllm-openai:nightly-387189c42997b27e2c04b5d97ef8190ffa2bf909 with prefix caching enabled, default KV-cache dtype, FlashInfer TRT-LLM attention with FP8 indexer KV, and the EAGLE3 drafter on FLASH_ATTN." - pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2328