diff --git a/inferencex-e2e/benchmarks/single_node/srt-slurm-recipes/dsv41flash/sglang/gb300-fp4-mtp/agentic-tuned.yaml b/inferencex-e2e/benchmarks/single_node/srt-slurm-recipes/dsv41flash/sglang/gb300-fp4-mtp/agentic-tuned.yaml new file mode 100644 index 0000000000..c3bfe24719 --- /dev/null +++ b/inferencex-e2e/benchmarks/single_node/srt-slurm-recipes/dsv41flash/sglang/gb300-fp4-mtp/agentic-tuned.yaml @@ -0,0 +1,208 @@ +# DeepSeek-V4.1-Flash AgentX on GB300 with SGLang native DSpark: knob-tuned +# curve on the official nightly-dev-cu13-20261012-e6072935 image. Stock SGLang, +# no framework patches: every change is a server flag, environment variable, +# topology or the image. Five points: TP2 C8/C32, DEP2 C160 and TP4 C1/C14, +# the configurations not already in dsv41flash-fp4-gb300-sglang-agentic-dspark +# (InferenceX #3859 carries DEP2 C64/C128 and TP4 C4/C16 unchanged). Each is +# the exact configuration measured on this image in one full +# 3600 s AgentX run (results in each variant's comment: p90 tok/s/user / +# tok/s/GPU / TTFT p90, and the published GB300 point at the same TP and +# concurrency where one exists). +# +# Knobs against the published dsv41flash-fp4-gb300-sglang-agentic-dspark +# curve: SGLANG_DSPARK_FOLDED_SAMPLING=2, 16K prefill chunks, a longer +# prefill-decode interval, tokenizer-worker-num 4, shortest-prefill-first +# scheduling at DEP2, decoder SWA bounded replay at TP2, SGLANG_NUMA_BIND_V2=0 +# (Engram host-table huge pages), expert parallelism 1 at TP4, caps sized to the +# concurrency; DEP2 at C160 (data-parallel attention, MegaMoE all-to-all, +# cache-aware DP-aware sglang-router, as in InferenceX #3859). +base: + schema: 2 + name: dsv41flash-fp4-gb300-sglang-agentic-tuned + resources: + gpu_type: gb300 + gpus_per_node: 4 + frontend: + enable_multiple_frontends: false + observability: + enabled: false + tachometer: + enabled: false + engine: sglang + roles: + agg: + nodes: 1 + workers: 1 + args: + served-model-name: deepseek-ai/DeepSeek-V4.1-Flash + trust-remote-code: true + speculative-algorithm: DSPARK + speculative-dspark-block-size: 5 + reasoning-parser: auto + tool-call-parser: auto + watchdog-timeout: 3600 + enable-metrics: true + chunked-prefill-size: 16384 + env: + PYTHONNOUSERSITE: '1' + PYTHONUNBUFFERED: '1' + SGLANG_TIMEOUT_KEEP_ALIVE: '900' + SGLANG_DEFAULT_THINKING: '1' + SGLANG_DSV41_REASONING_EFFORT: high + SGLANG_DSPARK_OPT_MARKOV_W2_BF16: 'True' + SGLANG_DSPARK_FOLDED_SAMPLING: '2' + health_check: + max_attempts: 1440 + interval_seconds: 5 + benchmark: + type: custom + command: bash /infmax-workspace/benchmarks/srt_agentic.sh + env: + AIPERF_HTTP_TCP_USER_TIMEOUT: '900000' + AIPERF_REQUIRED_SERVER_METRIC_PREFIX: 'sglang:' + +# c8-pdi96-numa0-i1012: 317.3 / 30,527 / 1.5 s; published 2026-10-09 227.3 / 29,970 / 1.5 s +override_tp2_c8: + frontend: + type: sglang + roles: + agg: + args: + prefill-decode-interval: 96 + mem-fraction-static: 0.8 + cuda-graph-max-bs-decode: 64 + tensor-parallel-size: 2 + expert-parallel-size: 2 + swa-prefix-tails: 512 + max-running-requests: 16 + enable-decoder-swa-bounded-replay: true + cuda-graph-backend-prefill: disabled + 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' + gpus: 2 + benchmark: + env: + CONC: '8' + AGENTIC_WARMUP_GRACE_PERIOD: '1800' + +# c32-pdi48-tok4-numa0-i1012: 186.3 / 114,929 / 2.8 s; published 2026-10-09 112.5 / 94,503 / 10.3 s +override_tp2_c32: + frontend: + type: sglang + roles: + agg: + args: + prefill-decode-interval: 48 + tokenizer-worker-num: 4 + mem-fraction-static: 0.8 + cuda-graph-max-bs-decode: 64 + tensor-parallel-size: 2 + expert-parallel-size: 2 + swa-prefix-tails: 2048 + max-running-requests: 64 + enable-decoder-swa-bounded-replay: true + cuda-graph-backend-prefill: disabled + 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' + gpus: 2 + benchmark: + env: + CONC: '32' + AGENTIC_WARMUP_GRACE_PERIOD: '3600' + +# c160-dep2-megamoe-router-i1012: 82.4 / 301,770 / 3.9 s; no published point +override_dep2_c160: + 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: + args: + prefill-decode-interval: 16 + mem-fraction-static: 0.85 + cuda-graph-max-bs-decode: 128 + 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 + swa-prefix-tails: 4096 + max-running-requests: 256 + 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 + gpus: 2 + benchmark: + env: + AIPERF_HTTP_X_SMG_ROUTING_KEY_FROM_CORRELATION_ID: 'true' + AGENTIC_WARMUP_GRACE_PERIOD: '3600' + CONC: '160' + +# c1-tp4-fold2-i1012: 624.9 / 7,358 / 1.3 s; published 2026-10-09 536.0 / 6,840 / 1.8 s +override_tp4_c1: + frontend: + type: sglang + roles: + agg: + args: + prefill-decode-interval: 16 + mem-fraction-static: 0.8 + cuda-graph-max-bs-decode: 64 + tensor-parallel-size: 4 + expert-parallel-size: 1 + max-running-requests: 2 + env: + SGLANG_ENABLE_DSV41_ENGRAM_HOST_TABLE: '0' + SGLANG_RAGGED_VERIFY_MODE: static + gpus: 4 + benchmark: + env: + CONC: '1' + AGENTIC_WARMUP_GRACE_PERIOD: '1800' + +# c14-tp4-stock-i1012: 453.8 / 22,381 / 1.9 s; no published point +override_tp4_c14: + frontend: + type: sglang + roles: + agg: + args: + prefill-decode-interval: 192 + tokenizer-worker-num: 4 + mem-fraction-static: 0.8 + cuda-graph-max-bs-decode: 128 + tensor-parallel-size: 4 + expert-parallel-size: 1 + swa-prefix-tails: 4096 + max-running-requests: 128 + 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' + gpus: 4 + benchmark: + env: + CONC: '14' + AGENTIC_WARMUP_GRACE_PERIOD: '1800' diff --git a/inferencex-e2e/configs/nvidia-master.yaml b/inferencex-e2e/configs/nvidia-master.yaml index 4efe59f80c..b10552fb96 100644 --- a/inferencex-e2e/configs/nvidia-master.yaml +++ b/inferencex-e2e/configs/nvidia-master.yaml @@ -9141,6 +9141,22 @@ dsv41flash-fp4-gb300-sglang-agentic-dspark: - { tp: 2, ep: 2, kv-offloading: none, spec-decoding: mtp, conc-list: [16, 32], srt-recipe: 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: agentic.yaml } - { tp: 4, ep: 1, kv-offloading: none, spec-decoding: mtp, conc-list: [1, 4, 16], srt-recipe: agentic.yaml } +dsv41flash-fp4-gb300-sglang-agentic-dspark-tuned: + image: lmsysorg/sglang:nightly-dev-cu13-20261012-e6072935@sha256:b5c488694d74c13587af6057b90220498c4869571c8e1e3c43dd6f43ae721306 + model: deepseek-ai/DeepSeek-V4.1-Flash + model-prefix: dsv41flash + runner: cluster:gb300-nv + precision: fp4 + framework: sglang + multinode: false + srt-recipe-dir: dsv41flash/sglang/gb300-fp4-mtp + scenarios: + agentic-coding: + - dram-utilization: 0.80 + search-space: + - { tp: 2, ep: 2, kv-offloading: none, spec-decoding: mtp, conc-list: [8, 32], srt-recipe: agentic-tuned.yaml } + - { tp: 2, ep: 2, dp-attn: true, kv-offloading: none, spec-decoding: mtp, conc-list: [160], router: { name: sglang-router, version: "0.3.2" }, srt-recipe: agentic-tuned.yaml } + - { tp: 4, ep: 1, kv-offloading: none, spec-decoding: mtp, conc-list: [1, 14], srt-recipe: agentic-tuned.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 6f2ebc3425..9bc3c76916 100644 --- a/inferencex-e2e/perf-changelog.yaml +++ b/inferencex-e2e/perf-changelog.yaml @@ -9738,3 +9738,13 @@ - "Enable INT4 QuickReduce with a 256 MiB size limit and FlyDSL stage-2 FP8 on prefill and decode workers." - "Configure MoRIIO READ and prefill-only SimpleCPUOffloadConnector through native role arguments. Use recipe-scoped draft checkpoint and RDMA device/provider mounts. Use the upstream discovery-template fix from srt-slurm #508 through the shared v2.51.1 dependency." pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/3582 + +- config-keys: + - dsv41flash-fp4-gb300-sglang-agentic-dspark-tuned + scenario-type: + - agentic-coding + description: + - "Add a knob-tuned sibling of the GB300 DeepSeek-V4.1-Flash SGLang AgentX curve on the official lmsysorg/sglang:nightly-dev-cu13-20261012-e6072935 (digest pinned, the same image as InferenceX #3859), stock SGLang without framework patches: five points measured on that image that InferenceX #3859 does not already carry, TP2/EP2 at C8 and C32, DEP2 (TP2/DP2/EP2 with DP attention) at C160, and TP4/EP1 at C1 and C14; one variant per point in agentic-tuned.yaml, each the exact configuration measured in a full 3600 s run. DEP2 C64/C128 and TP4 C4/C16 were dropped because #3859 ships the same configurations in dsv41flash-fp4-gb300-sglang-agentic-dspark." + - "Every point: SGLANG_DSPARK_FOLDED_SAMPLING=2 and 16K prefill chunks. TP2/EP2 C8 and C32: decoder SWA bounded replay (prefill graph backend disabled), expandable allocator segments, SGLANG_NUMA_BIND_V2=0 and a prefill-decode interval of 96 at C8 and 48 at C32; tokenizer-worker-num 4 at C32. DEP2 C160, as in InferenceX #3859: DP attention with DP LM head and local control broadcast, MegaMoE all-to-all, total_requests load balancing, shortest-prefill-first, tokenizer-worker-num 4, interval 16 and request cap 256, behind sglang-router (cache_aware, dp-aware, routing key from the AIPerf correlation id). TP4 C14: EP1, interval 192, tokenizer-worker-num 4, caps 128, static ragged verify and SGLANG_NUMA_BIND_V2=0; TP4 C1: the published recipe with folded sampling and 16K chunks and a 16-step prefill-decode interval." + - "Canonical DSpark block 5 and golden acceptance 3.51 are unchanged. GSM8K passed on folded sampling (TP2 0.975, TP4 0.973), on bounded replay (0.977), on the DEP2 router config on this image (0.9742) and on stock TP4 on this image (0.9735)." + pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/3929