-
Notifications
You must be signed in to change notification settings - Fork 257
[NV] Add B300 DeepSeek-V4-Pro AgentX with SGLang DSpark6 / 使用 SGLang DSpark6 新增 B300 DeepSeek-V4-Pro AgentX #2624
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
83e2635
8a4a0a0
927f3d3
e9c00d8
e28fa42
1cbf9c3
4b038b9
4324132
2be8f91
d39f736
2366223
831b912
abf9155
8d66f6c
3cf6a42
b19ddad
b62a50c
8042c25
8bdb32e
1d3656e
78c1bd6
9da2042
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,137 @@ | ||
| name: "agg-b300-dep4-mtp-kvoffload" | ||
|
|
||
| model: | ||
| path: "deepseek-v4-pro-0813" | ||
| container: "dynamo-sglang" | ||
| precision: "fp4" | ||
|
|
||
| identity: | ||
| model: | ||
| repo: "deepseek-ai/DeepSeek-V4-Pro-0813" | ||
| container: | ||
| image: "lmsysorg/sglang:nightly-dev-cu13-20260816-4a6dc267" | ||
|
|
||
| dynamo: | ||
| install: true | ||
| hash: "7a4e47ead90ec6b479e397996f6479ce7d251510" | ||
|
|
||
| slurm: | ||
| time_limit: "8:00:00" | ||
|
|
||
| health_check: | ||
| max_attempts: 1440 | ||
| interval_seconds: 10 | ||
|
|
||
| resources: | ||
| gpu_type: "b300" | ||
| gpus_per_node: 4 | ||
| agg_nodes: 1 | ||
| agg_workers: 1 | ||
| gpus_per_agg: 4 | ||
|
|
||
| infra: | ||
| etcd_nats_dedicated_node: true | ||
| nats_max_payload_mb: 32 | ||
|
|
||
| frontend: | ||
| type: dynamo | ||
| nginx_session_affinity: true | ||
| nginx_session_affinity_header: X-Dynamo-Session-ID | ||
| enable_multiple_frontends: false | ||
| env: | ||
| PIP_BREAK_SYSTEM_PACKAGES: "1" | ||
| args: | ||
| router-mode: "kv" | ||
| router-session-affinity-ttl-secs: "14400" | ||
| active-decode-blocks-threshold: "None" | ||
| active-prefill-tokens-threshold: "None" | ||
| active-prefill-tokens-threshold-frac: "None" | ||
|
|
||
| backend: | ||
| type: sglang | ||
| # Let srt-slurm allocate and register the worker-local publisher endpoint; | ||
| # Dynamo needs discovery metadata in addition to the SGLang CLI flag. | ||
| kv_events_config: | ||
| aggregated: true | ||
| aggregated_environment: | ||
| PIP_BREAK_SYSTEM_PACKAGES: "1" | ||
| SGLANG_RAGGED_VERIFY_MODE: "static" | ||
| SGLANG_DEFAULT_THINKING: "1" | ||
| SGLANG_DSV4_REASONING_EFFORT: high | ||
| SGLANG_ENABLE_UNIFIED_RADIX_TREE: "1" | ||
| SGLANG_OPT_UNIFIED_CACHE_FREE_OUT_OF_WINDOW_SLOTS: "1" | ||
| SGLANG_OPT_USE_DEEPGEMM_MEGA_MOE: "1" | ||
| SGLANG_OPT_DEEPGEMM_MEGA_MOE_USE_FP4_ACTS: "1" | ||
| SGLANG_OPT_DEEPGEMM_MEGA_MOE_USE_MXF4_KIND: "1" | ||
| SGLANG_OPT_DEEPGEMM_MEGA_MOE_NUM_MAX_TOKENS_PER_RANK: "9216" | ||
| SGLANG_OPT_USE_CUSTOM_ALL_REDUCE_V2: "0" | ||
| SGLANG_OPT_SWA_SPLIT_LEAF_ON_INSERT: "1" | ||
| SGLANG_OPT_USE_JIT_INDEXER_METADATA: "1" | ||
| SGLANG_OPT_USE_JIT_NORM: "1" | ||
| SGLANG_OPT_USE_TOPK_V2: "1" | ||
| sglang_config: | ||
| aggregated: | ||
| served-model-name: "deepseek-ai/DeepSeek-V4-Pro-0813" | ||
| trust-remote-code: true | ||
| enable-metrics: true | ||
| enable-cache-report: true | ||
| # The AgentX corpus contains a small number of traces longer than the | ||
| # runtime KV capacity. Match the existing native B300 launcher: truncate | ||
| # those requests instead of leaving Dynamo streams unresolved. | ||
| allow-auto-truncate: true | ||
| # DSpark draft weights raise the measured minimum viable fraction to | ||
| # 0.9258 on B300; use the same 0.94 fraction as the GB300 TP4 recipe. | ||
| mem-fraction-static: 0.94 | ||
| swa-full-tokens-ratio: 0.02 | ||
| chunked-prefill-size: 32768 | ||
| max-prefill-tokens: 8192 | ||
| max-running-requests: 128 | ||
| cuda-graph-max-bs: 32 | ||
| stream-interval: 20 | ||
| incremental-streaming-output: true | ||
| watchdog-timeout: 1800 | ||
| dp-size: 4 | ||
| tp-size: 4 | ||
| ep-size: 4 | ||
| enable-dp-attention: true | ||
| enable-dp-lm-head: true | ||
| enable-prefill-delayer: true | ||
| prefill-delayer-max-delay-passes: 30 | ||
| moe-dense-tp-size: 1 | ||
| load-balance-method: total_tokens | ||
| moe-a2a-backend: megamoe | ||
| enable-hierarchical-cache: true | ||
| # DEP4's smaller device KV pool otherwise leaves only ~28 GB of host | ||
| # prefix cache per node; ratio 75 raises it to ~700 GB, matching the | ||
| # effective per-session capacity of the validated DEP8 configuration. | ||
| hicache-ratio: 75 | ||
| hicache-write-policy: write_back | ||
| hicache-io-backend: direct | ||
| hicache-mem-layout: page_first_direct | ||
| weight-loader-drop-cache-after-load: true | ||
| speculative-algorithm: DSPARK | ||
| speculative-dspark-block-size: 6 | ||
| speculative-num-steps: 1 | ||
| speculative-eagle-topk: 1 | ||
| speculative-num-draft-tokens: 7 | ||
|
|
||
| sbatch_directives: | ||
| mem: "0" | ||
| cpus-per-task: "144" | ||
|
|
||
| srun_options: | ||
| mem: "0" | ||
| container-remap-root: "" | ||
|
|
||
| benchmark: | ||
| type: custom | ||
| command: bash /infmax-workspace/benchmarks/multi_node/agentic_srt.sh | ||
| env: | ||
| INFMAX_CONTAINER_WORKSPACE: /infmax-workspace | ||
| RESULT_DIR: /logs/agentic | ||
| PORT: "8000" | ||
| IS_MULTINODE: "false" | ||
| TP: "4" | ||
| AIPERF_HTTP_X_DYNAMO_SESSION_ID_FROM_CORRELATION_ID: "true" | ||
| AIPERF_USE_DYNAMO_CONV_AWARE_ROUTING: "0" | ||
| AIPERF_REQUIRED_SERVER_METRIC_PREFIX: "sglang:" | ||
| Original file line number | Diff line number | Diff line change | ||||||
|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,136 @@ | ||||||||
| name: "agg-b300-dep8-mtp-kvoffload" | ||||||||
|
|
||||||||
| model: | ||||||||
| path: "deepseek-v4-pro-0813" | ||||||||
| container: "dynamo-sglang" | ||||||||
| precision: "fp4" | ||||||||
|
|
||||||||
| identity: | ||||||||
| model: | ||||||||
| repo: "deepseek-ai/DeepSeek-V4-Pro-0813" | ||||||||
| container: | ||||||||
| image: "lmsysorg/sglang:nightly-dev-cu13-20260816-4a6dc267" | ||||||||
|
|
||||||||
| dynamo: | ||||||||
| install: true | ||||||||
| hash: "7a4e47ead90ec6b479e397996f6479ce7d251510" | ||||||||
|
|
||||||||
| slurm: | ||||||||
| time_limit: "8:00:00" | ||||||||
|
|
||||||||
| health_check: | ||||||||
| max_attempts: 1440 | ||||||||
| interval_seconds: 10 | ||||||||
|
|
||||||||
| resources: | ||||||||
| gpu_type: "b300" | ||||||||
| gpus_per_node: 8 | ||||||||
| agg_nodes: 1 | ||||||||
| agg_workers: 1 | ||||||||
| gpus_per_agg: 8 | ||||||||
|
|
||||||||
| infra: | ||||||||
| etcd_nats_dedicated_node: true | ||||||||
| nats_max_payload_mb: 32 | ||||||||
|
|
||||||||
| frontend: | ||||||||
| type: dynamo | ||||||||
| nginx_session_affinity: true | ||||||||
| nginx_session_affinity_header: X-Dynamo-Session-ID | ||||||||
| enable_multiple_frontends: false | ||||||||
| env: | ||||||||
| PIP_BREAK_SYSTEM_PACKAGES: "1" | ||||||||
| args: | ||||||||
| router-mode: "kv" | ||||||||
| router-session-affinity-ttl-secs: "14400" | ||||||||
| active-decode-blocks-threshold: "None" | ||||||||
| active-prefill-tokens-threshold: "None" | ||||||||
| active-prefill-tokens-threshold-frac: "None" | ||||||||
|
|
||||||||
| backend: | ||||||||
| type: sglang | ||||||||
| # Let srt-slurm allocate and register the worker-local publisher endpoint; | ||||||||
| # Dynamo needs discovery metadata in addition to the SGLang CLI flag. | ||||||||
| kv_events_config: | ||||||||
| aggregated: true | ||||||||
| aggregated_environment: | ||||||||
| PIP_BREAK_SYSTEM_PACKAGES: "1" | ||||||||
| SGLANG_RAGGED_VERIFY_MODE: "static" | ||||||||
| SGLANG_DEFAULT_THINKING: "1" | ||||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🟡 WARNING: Same as DEP4 — missing Fix:
Suggested change
|
||||||||
| SGLANG_DSV4_REASONING_EFFORT: high | ||||||||
| SGLANG_ENABLE_UNIFIED_RADIX_TREE: "1" | ||||||||
| SGLANG_OPT_UNIFIED_CACHE_FREE_OUT_OF_WINDOW_SLOTS: "1" | ||||||||
| SGLANG_OPT_USE_DEEPGEMM_MEGA_MOE: "1" | ||||||||
| SGLANG_OPT_DEEPGEMM_MEGA_MOE_USE_FP4_ACTS: "1" | ||||||||
| SGLANG_OPT_DEEPGEMM_MEGA_MOE_USE_MXF4_KIND: "1" | ||||||||
| SGLANG_OPT_DEEPGEMM_MEGA_MOE_NUM_MAX_TOKENS_PER_RANK: "9216" | ||||||||
| SGLANG_OPT_USE_CUSTOM_ALL_REDUCE_V2: "0" | ||||||||
| SGLANG_OPT_SWA_SPLIT_LEAF_ON_INSERT: "1" | ||||||||
| SGLANG_OPT_USE_JIT_INDEXER_METADATA: "1" | ||||||||
| SGLANG_OPT_USE_JIT_NORM: "1" | ||||||||
| SGLANG_OPT_USE_TOPK_V2: "1" | ||||||||
| sglang_config: | ||||||||
| aggregated: | ||||||||
| served-model-name: "deepseek-ai/DeepSeek-V4-Pro-0813" | ||||||||
| trust-remote-code: true | ||||||||
| enable-metrics: true | ||||||||
| enable-cache-report: true | ||||||||
| # The AgentX corpus contains a small number of traces longer than the | ||||||||
| # runtime KV capacity. Match the existing native B300 launcher: truncate | ||||||||
| # those requests instead of leaving Dynamo streams unresolved. | ||||||||
| allow-auto-truncate: true | ||||||||
| # Leave activation headroom for 8K/rank chunked prefill; 0.90 OOMs | ||||||||
| # under the c128 AgentX warmup while 0.85 completes the full run. | ||||||||
| mem-fraction-static: 0.85 | ||||||||
| swa-full-tokens-ratio: 0.02 | ||||||||
| chunked-prefill-size: 65536 | ||||||||
| max-prefill-tokens: 8192 | ||||||||
| max-running-requests: 1152 | ||||||||
| cuda-graph-max-bs: 144 | ||||||||
| stream-interval: 20 | ||||||||
| incremental-streaming-output: true | ||||||||
| watchdog-timeout: 1800 | ||||||||
| dp-size: 8 | ||||||||
| tp-size: 8 | ||||||||
| ep-size: 8 | ||||||||
| enable-dp-attention: true | ||||||||
| enable-dp-lm-head: true | ||||||||
| enable-prefill-delayer: true | ||||||||
| prefill-delayer-max-delay-passes: 30 | ||||||||
| moe-dense-tp-size: 1 | ||||||||
| load-balance-method: total_tokens | ||||||||
| moe-a2a-backend: megamoe | ||||||||
| enable-hierarchical-cache: true | ||||||||
| # Keep the explicit host KV pool within the x86 B300 node's 3 TB DRAM | ||||||||
| # budget; ratio 2.0 OOMs during startup before the benchmark can run. | ||||||||
| hicache-ratio: 1.5 | ||||||||
| hicache-write-policy: write_back | ||||||||
| hicache-io-backend: direct | ||||||||
| hicache-mem-layout: page_first_direct | ||||||||
| weight-loader-drop-cache-after-load: true | ||||||||
| speculative-algorithm: DSPARK | ||||||||
| speculative-dspark-block-size: 6 | ||||||||
| speculative-num-steps: 1 | ||||||||
| speculative-eagle-topk: 1 | ||||||||
| speculative-num-draft-tokens: 7 | ||||||||
|
|
||||||||
| sbatch_directives: | ||||||||
| mem: "0" | ||||||||
| cpus-per-task: "144" | ||||||||
|
|
||||||||
| srun_options: | ||||||||
| mem: "0" | ||||||||
| container-remap-root: "" | ||||||||
|
|
||||||||
| benchmark: | ||||||||
| type: custom | ||||||||
| command: bash /infmax-workspace/benchmarks/multi_node/agentic_srt.sh | ||||||||
| env: | ||||||||
| INFMAX_CONTAINER_WORKSPACE: /infmax-workspace | ||||||||
| RESULT_DIR: /logs/agentic | ||||||||
| PORT: "8000" | ||||||||
| IS_MULTINODE: "false" | ||||||||
| TP: "8" | ||||||||
| AIPERF_HTTP_X_DYNAMO_SESSION_ID_FROM_CORRELATION_ID: "true" | ||||||||
| AIPERF_USE_DYNAMO_CONV_AWARE_ROUTING: "0" | ||||||||
| AIPERF_REQUIRED_SERVER_METRIC_PREFIX: "sglang:" | ||||||||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -8705,6 +8705,7 @@ glm5.1-fp8-b200-tilert: | |
| dp-attn: false | ||
| additional-settings: | ||
| - "DECODE_NODES=1" | ||
|
|
||
| - isl: 8192 | ||
| osl: 1024 | ||
| search-space: | ||
|
|
@@ -8725,3 +8726,54 @@ glm5.1-fp8-b200-tilert: | |
| dp-attn: false | ||
| additional-settings: | ||
| - "DECODE_NODES=1" | ||
|
|
||
| dsv4-fp4-b300-dynamo-sglang-agentic-mtp-agg: | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🔴 BLOCKING: This new config block is inserted in the middle of Why it matters: The tilert config's second point (
The file still parses as valid YAML, which is why the PR's YAML-parse validation didn't catch it. Fix: Move the entire |
||
| image: lmsysorg/sglang:nightly-dev-cu13-20260816-4a6dc267 | ||
| model: deepseek-ai/DeepSeek-V4-Pro-0813 | ||
| model-prefix: dsv4 | ||
| runner: cluster:b300-nv | ||
| precision: fp4 | ||
| framework: dynamo-sglang | ||
| router: { name: dynamo-router, version: "7a4e47ead90ec6b479e397996f6479ce7d251510" } | ||
| multinode: true | ||
| disagg: false | ||
| scenarios: | ||
| agentic-coding: | ||
| - dram-utilization: 0.95 | ||
| search-space: | ||
| - spec-decoding: draft_model | ||
| conc-list: [48, 64] | ||
| kv-offloading: dram | ||
| kv-offload-backend: { name: hicache } | ||
| prefill: | ||
| num-worker: 1 | ||
| tp: 4 | ||
| ep: 4 | ||
| dp-attn: true | ||
| additional-settings: | ||
| - "SYNTHETIC_ACCEPTANCE=true" | ||
|
Comment on lines
+8708
to
+8754
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🔴 The new Extended reasoning...What the bug is: In Why this corrupts the YAML structure: The new block's own scenario list item, Verified directly against the tree with This confirms both halves of the corruption in the current working tree, not just in the diff context. Concrete proof/walkthrough:
Why nothing else catches this: YAML syntax is fully valid (no parse error), so any lint/syntax check passes. The bug is purely structural/semantic — a silent mis-nesting — which won't be caught by tests unless something actually diffs scenario counts per top-level config before/after. Impact: Two sweeps are broken: the glm5.1 config silently loses a benchmark data point (no error, just missing coverage), and the new B300 AgentX sweep would attempt to run a scenario with settings incompatible with its framework (dynamo-sglang vs. vllm PREFILL_IMAGE), likely causing that scenario to fail or produce meaningless results. Fix: Move the new |
||
| - "SYNTHETIC_ACCEPTANCE_LENGTH=3.77" | ||
| - "CONFIG_FILE=recipes/sglang/deepseek-v4/agentic/agg-b300-dep4-mtp-kvoffload.yaml" | ||
| decode: | ||
| num-worker: 0 | ||
| tp: 4 | ||
| ep: 4 | ||
| dp-attn: true | ||
| - spec-decoding: draft_model | ||
| conc-list: [128, 256, 384, 512, 576] | ||
| kv-offloading: dram | ||
| kv-offload-backend: { name: hicache } | ||
| prefill: | ||
| num-worker: 1 | ||
| tp: 8 | ||
| ep: 8 | ||
| dp-attn: true | ||
| additional-settings: | ||
| - "SYNTHETIC_ACCEPTANCE=true" | ||
| - "SYNTHETIC_ACCEPTANCE_LENGTH=3.77" | ||
| - "CONFIG_FILE=recipes/sglang/deepseek-v4/agentic/agg-b300-dep8-mtp-kvoffload.yaml" | ||
| decode: | ||
| num-worker: 0 | ||
| tp: 8 | ||
| ep: 8 | ||
| dp-attn: true | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,19 @@ | ||
| deepseek-v4-pro-0813: | ||
| thinking_on: | ||
| 1: 1.84 | ||
| 2: 2.51 | ||
| 3: 3.01 | ||
| 4: 3.36 | ||
| 5: 3.61 | ||
| 6: 3.77 | ||
| 7: 3.73 | ||
| 8: 3.47 | ||
| thinking_off: | ||
| 1: 1.94 | ||
| 2: 2.81 | ||
| 3: 3.58 | ||
| 4: 4.17 | ||
| 5: 4.74 | ||
| 6: 5.12 | ||
| 7: 5.24 | ||
| 8: 4.95 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🟡 WARNING: Missing
SGLANG_DSV4_REASONING_EFFORT: highinaggregated_environment.Why it matters: Every existing DSV4 AgentX recipe sets it in each worker env block (GB300
agg-gb300-tp4/tp8-mtp-lowlatency.yaml, all fourdisagg-gb300-*-mtp-kvoffload.yaml, andagg-h200-tp8-mtp-kvoffload.yaml). Without it the model runs at the default reasoning effort, which changes generation length/profile — so the B300 curve isn't comparable with the GB300/H200 DSV4 AgentX results this PR claims parity with, and the golden acceptance length 3.82 (measured at efforthigh) no longer matches what eval-only real-verify runs will observe.Fix:
(Same fix needed in
agg-b300-dep8-mtp-kvoffload.yamlline 60.)