Skip to content

Commit b9efee3

Browse files
fix: Dsv4 dev3 cp (ai-dynamo#9357)
Signed-off-by: Dmitry Tokarev <dtokarev@nvidia.com>
1 parent 64ca941 commit b9efee3

13 files changed

Lines changed: 51 additions & 39 deletions

File tree

‎recipes/deepseek-v4/container/README.md‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ Shared reference Dockerfiles for the DeepSeek-V4 family — used by both [`deeps
1313
| SGLang (GB200) | [`sglang/Dockerfile.dsv4.sglang.gb200`](sglang/Dockerfile.dsv4.sglang.gb200) | `lmsysorg/sglang:deepseek-v4-grace-blackwell` (digest-pinned, arm64) | Two-stage; Dynamo runtime image as donor |
1414

1515
NVIDIA also publishes the prebuilt images for vLLM and SGLang which manifests pull directly:
16-
- `nvcr.io/nvidia/ai-dynamo/vllm-runtime:1.2.0-deepseek-v4-cuda13-dev.2` (multi-arch)
17-
- `nvcr.io/nvidia/ai-dynamo/sglang-runtime:1.2.0-deepseek-v4-cuda13-dev.2` (arm64 only)
18-
- `nvcr.io/nvidia/ai-dynamo/sglang-runtime:1.2.0-deepseek-v4-cuda12-dev.2` (amd64 only)
16+
- `nvcr.io/nvidia/ai-dynamo/vllm-runtime:1.2.0-deepseek-v4-cuda13-dev.3` (multi-arch)
17+
- `nvcr.io/nvidia/ai-dynamo/sglang-runtime:1.2.0-deepseek-v4-cuda13-dev.3` (arm64 only)
18+
- `nvcr.io/nvidia/ai-dynamo/sglang-runtime:1.2.0-deepseek-v4-cuda12-dev.3` (amd64 only)
1919

2020
The `cudaXY` suffix encodes the CUDA major version baked into the image, not the hardware target.
2121

‎recipes/deepseek-v4/deepseek-v4-flash/README.md‎

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ Aggregated-serving recipes for **DeepSeek-V4-Flash** on Dynamo. Two backends (**
99

1010
| Variant | Backend | Hardware | Manifest | Topology | Container |
1111
|---------|---------|----------|----------|----------|-----------|
12-
| **vllm-agg-b200** | vLLM | 4x B200 | [`vllm/agg_b200/deploy.yaml`](vllm/agg_b200/deploy.yaml) | DP=4 + Expert Parallel, TP=1 | Prebuilt NGC image (`...1.2.0-deepseek-v4-cuda13-dev.2`, multi-arch) |
13-
| **vllm-agg-gb200** | vLLM | 4x GB200 | [`vllm/agg_gb200/deploy.yaml`](vllm/agg_gb200/deploy.yaml) | TP=4 + Expert Parallel, `deep_gemm_mega_moe` | Prebuilt NGC image (`...1.2.0-deepseek-v4-cuda13-dev.2`, multi-arch) |
14-
| **sglang-agg** | SGLang | 4x B200 | [`sglang/agg/deploy.yaml`](sglang/agg/deploy.yaml) | TP=4, MXFP4 MoE via FlashInfer, EAGLE MTP 3/4 | Prebuilt NGC image (`...1.2.0-deepseek-v4-cuda12-dev.2`); optional [custom build](../container/) |
15-
| **sglang-agg-gb200** | SGLang | 4x GB200 | [`sglang/agg-gb200/deploy.yaml`](sglang/agg-gb200/deploy.yaml) | TP=4, MXFP4 MoE via FlashInfer, EAGLE MTP 3/4 | Prebuilt NGC image (`...1.2.0-deepseek-v4-cuda13-dev.2`, arm64) |
12+
| **vllm-agg-b200** | vLLM | 4x B200 | [`vllm/agg_b200/deploy.yaml`](vllm/agg_b200/deploy.yaml) | DP=4 + Expert Parallel, TP=1 | Prebuilt NGC image (`...1.2.0-deepseek-v4-cuda13-dev.3`, multi-arch) |
13+
| **vllm-agg-gb200** | vLLM | 4x GB200 | [`vllm/agg_gb200/deploy.yaml`](vllm/agg_gb200/deploy.yaml) | TP=4 + Expert Parallel, `deep_gemm_mega_moe` | Prebuilt NGC image (`...1.2.0-deepseek-v4-cuda13-dev.3`, multi-arch) |
14+
| **sglang-agg** | SGLang | 4x B200 | [`sglang/agg/deploy.yaml`](sglang/agg/deploy.yaml) | TP=4, MXFP4 MoE via FlashInfer, EAGLE MTP 3/4 | Prebuilt NGC image (`...1.2.0-deepseek-v4-cuda12-dev.3`); optional [custom build](../container/) |
15+
| **sglang-agg-gb200** | SGLang | 4x GB200 | [`sglang/agg-gb200/deploy.yaml`](sglang/agg-gb200/deploy.yaml) | TP=4, MXFP4 MoE via FlashInfer, EAGLE MTP 3/4 | Prebuilt NGC image (`...1.2.0-deepseek-v4-cuda13-dev.3`, arm64) |
1616

1717
The B200 variants fill 4 of 8 GPUs on a B200 node; the GB200 variants fill all 4 GPUs of a single GB200 NVL4 tray.
1818

@@ -130,6 +130,7 @@ curl http://localhost:8000/v1/chat/completions \
130130
| `--kv-cache-dtype fp8` + `--block-size 256` | FP8 KV cache; block size matches the upstream recipe |
131131
| `--tensor-parallel-size 1 --data-parallel-size 4 --enable-expert-parallel` | DP=4 + EP across the 4 GPUs (TP=1) |
132132
| `--compilation-config '{"cudagraph_mode":"FULL_AND_PIECEWISE","custom_ops":["all"]}'` | Single-node DEP compilation config from the upstream recipe |
133+
| `--no-enable-flashinfer-autotune` | Skip per-shape FlashInfer autotuning at startup; required on dsv4 for correct accuracy |
133134
| `--max-num-seqs 256` | Concurrency cap |
134135

135136
### vLLM GB200 (`vllm/agg_gb200/deploy.yaml`)
@@ -140,6 +141,7 @@ Same OpenAI-renderer wiring as the B200 variant; differences below come from the
140141
|---|---|
141142
| `--tensor-parallel-size 4 --enable-expert-parallel` | **TP=4 + EP** across the 4 GPUs of the NVL4 tray (DP dropped — the GB200 tray's intra-tray NVLink makes TP attractive for this size class) |
142143
| `--moe-backend deep_gemm_mega_moe` | DeepGEMM "mega MoE" kernel — the optimized FP8 MoE path for V4 expert routing on Blackwell |
144+
| `--no-enable-flashinfer-autotune` | Skip per-shape FlashInfer autotuning at startup; required on dsv4 for correct accuracy |
143145
| `NCCL_NVLS_ENABLE=1`, `NCCL_P2P_LEVEL=NVL`, `VLLM_USE_NCCL_SYMM_MEM=1` | Enable NVLink Sharp (NVLS) multicast for one-shot all-reduce on the tray |
144146

145147
### SGLang B200 (`sglang/agg/deploy.yaml`)
@@ -167,7 +169,7 @@ Recipe-level (per-variant) settings:
167169

168170
| | vLLM B200 (`vllm-agg-b200`) | vLLM GB200 (`vllm-agg-gb200`) | SGLang B200 (`sglang-agg`) | SGLang GB200 (`sglang-agg-gb200`) |
169171
|---|---|---|---|---|
170-
| **Backend image** | Prebuilt `nvcr.io/nvidia/ai-dynamo/vllm-runtime:1.2.0-deepseek-v4-cuda13-dev.2` (multi-arch) | Prebuilt `nvcr.io/nvidia/ai-dynamo/vllm-runtime:1.2.0-deepseek-v4-cuda13-dev.2` (multi-arch) | Prebuilt `nvcr.io/nvidia/ai-dynamo/sglang-runtime:1.2.0-deepseek-v4-cuda12-dev.2` | Prebuilt `nvcr.io/nvidia/ai-dynamo/sglang-runtime:1.2.0-deepseek-v4-cuda13-dev.2` |
172+
| **Backend image** | Prebuilt `nvcr.io/nvidia/ai-dynamo/vllm-runtime:1.2.0-deepseek-v4-cuda13-dev.3` (multi-arch) | Prebuilt `nvcr.io/nvidia/ai-dynamo/vllm-runtime:1.2.0-deepseek-v4-cuda13-dev.3` (multi-arch) | Prebuilt `nvcr.io/nvidia/ai-dynamo/sglang-runtime:1.2.0-deepseek-v4-cuda12-dev.3` | Prebuilt `nvcr.io/nvidia/ai-dynamo/sglang-runtime:1.2.0-deepseek-v4-cuda13-dev.3` |
171173
| **Parallelism** | DP=4 + Expert Parallel, TP=1 | TP=4 + Expert Parallel | TP=4 | TP=4 |
172174
| **MoE backend** | vLLM's V4 expert kernel (FP4) | DeepGEMM mega MoE | FlashInfer MXFP4 | FlashInfer MXFP4 |
173175
| **KV cache** | FP8, block size 256 | FP8, block size 256 | engine default | engine default |
@@ -243,14 +245,15 @@ If `tool_calls` is missing and raw tool-call markers appear in `content`, confir
243245

244246
### vLLM-specific
245247

246-
- **Prebuilt images.** Both `vllm/agg_b200/deploy.yaml` and `vllm/agg_gb200/deploy.yaml` reference `nvcr.io/nvidia/ai-dynamo/vllm-runtime:1.2.0-deepseek-v4-cuda13-dev.2` (multi-arch). To rebuild from source (custom Dynamo branch, different vLLM base, etc.), see [`<repo_root>/container/README.md`](../../../container/README.md).
248+
- **Prebuilt images.** Both `vllm/agg_b200/deploy.yaml` and `vllm/agg_gb200/deploy.yaml` reference `nvcr.io/nvidia/ai-dynamo/vllm-runtime:1.2.0-deepseek-v4-cuda13-dev.3` (multi-arch). To rebuild from source (custom Dynamo branch, different vLLM base, etc.), see [`<repo_root>/container/README.md`](../../../container/README.md).
247249
- **Engine-ready timeout.** `VLLM_ENGINE_READY_TIMEOUT_S=3600` matches the startup probe budget on both variants.
248250
- **DP stability (B200 only).** `VLLM_RANDOMIZE_DP_DUMMY_INPUTS=1` and `VLLM_SKIP_P2P_CHECK=1` mirror the DeepSeek-R1 vLLM recipe and stabilize DP dummy inputs. The GB200 variant uses TP (no DP), so `VLLM_RANDOMIZE_DP_DUMMY_INPUTS` is not set.
251+
- **FlashInfer autotune.** `--no-enable-flashinfer-autotune` skips per-shape FlashInfer autotuning at startup and is set on both vLLM variants. Required on dsv4: the autotuner currently produces tunings that regress GSM8k accuracy. Skipping it also shortens first-launch warmup.
249252
- **FlashInfer TRT-LLM allreduce on GB200.** You may see a non-fatal startup warning `Failed to initialize FlashInfer Allreduce norm fusion workspace ... Flashinfer allreduce-norm fusion will be disabled`. vLLM falls back to a non-fused allreduce + RMSNorm; correctness is unaffected. To enable the fused kernel, set the compilation pass: `--compilation-config '{"mode":3,"cudagraph_mode":"FULL_AND_PIECEWISE","custom_ops":["all"],"pass_config":{"fuse_allreduce_rms":true}}'`.
250253

251254
### SGLang-specific
252255

253-
- **Prebuilt images.** `sglang/agg/deploy.yaml` references `nvcr.io/nvidia/ai-dynamo/sglang-runtime:1.2.0-deepseek-v4-cuda12-dev.2` and `sglang/agg-gb200/deploy.yaml` references the arm64 sibling `nvcr.io/nvidia/ai-dynamo/sglang-runtime:1.2.0-deepseek-v4-cuda13-dev.2`. To rebuild either (custom Dynamo branch, different SGLang base, etc.), see [`recipes/deepseek-v4/container/README.md`](../container/README.md).
256+
- **Prebuilt images.** `sglang/agg/deploy.yaml` references `nvcr.io/nvidia/ai-dynamo/sglang-runtime:1.2.0-deepseek-v4-cuda12-dev.3` and `sglang/agg-gb200/deploy.yaml` references the arm64 sibling `nvcr.io/nvidia/ai-dynamo/sglang-runtime:1.2.0-deepseek-v4-cuda13-dev.3`. To rebuild either (custom Dynamo branch, different SGLang base, etc.), see [`recipes/deepseek-v4/container/README.md`](../container/README.md).
254257
- **DeepGEMM / FlashInfer warmup.** `SGLANG_JIT_DEEPGEMM_PRECOMPILE=0` + `SGLANG_JIT_DEEPGEMM_FAST_WARMUP=1` skip the slow precompile and use the fast warmup path. `--disable-flashinfer-autotune` skips per-shape FlashInfer autotuning at startup; the dsv4 base ships pre-tuned defaults.
255258
- **NCCL / Gloo.** `NCCL_CUMEM_ENABLE=1` is set for V4 NCCL collectives on Blackwell. `GLOO_SOCKET_IFNAME=eth0` pins Gloo to the standard pod interface.
256259

‎recipes/deepseek-v4/deepseek-v4-flash/sglang/agg-gb200/deploy.yaml‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ spec:
3232
tolerations:
3333
- operator: Exists
3434
mainContainer:
35-
image: nvcr.io/nvidia/ai-dynamo/sglang-runtime:1.2.0-deepseek-v4-cuda13-dev.2
35+
image: nvcr.io/nvidia/ai-dynamo/sglang-runtime:1.2.0-deepseek-v4-cuda13-dev.3
3636
imagePullPolicy: Always
3737
env:
3838
- name: HF_HOME
@@ -66,7 +66,7 @@ spec:
6666
tolerations:
6767
- operator: Exists
6868
mainContainer:
69-
image: nvcr.io/nvidia/ai-dynamo/sglang-runtime:1.2.0-deepseek-v4-cuda13-dev.2
69+
image: nvcr.io/nvidia/ai-dynamo/sglang-runtime:1.2.0-deepseek-v4-cuda13-dev.3
7070
imagePullPolicy: Always
7171
workingDir: /workspace
7272
command:

‎recipes/deepseek-v4/deepseek-v4-flash/sglang/agg/deploy.yaml‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ spec:
2727
mountPoint: /models
2828
extraPodSpec:
2929
mainContainer:
30-
image: nvcr.io/nvidia/ai-dynamo/sglang-runtime:1.2.0-deepseek-v4-cuda12-dev.2
30+
image: nvcr.io/nvidia/ai-dynamo/sglang-runtime:1.2.0-deepseek-v4-cuda12-dev.3
3131
imagePullPolicy: Always
3232
env:
3333
- name: HF_HOME
@@ -63,7 +63,7 @@ spec:
6363
value: "true"
6464
effect: NoSchedule
6565
mainContainer:
66-
image: nvcr.io/nvidia/ai-dynamo/sglang-runtime:1.2.0-deepseek-v4-cuda12-dev.2
66+
image: nvcr.io/nvidia/ai-dynamo/sglang-runtime:1.2.0-deepseek-v4-cuda12-dev.3
6767
imagePullPolicy: Always
6868
workingDir: /workspace
6969
command:

‎recipes/deepseek-v4/deepseek-v4-flash/vllm/agg_b200/deploy.yaml‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ spec:
3030
mountPoint: /opt/models
3131
extraPodSpec:
3232
mainContainer:
33-
image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:1.2.0-deepseek-v4-cuda13-dev.2
33+
image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:1.2.0-deepseek-v4-cuda13-dev.3
3434
workingDir: /workspace/examples/backends/vllm
3535
env:
3636
- name: HF_HOME
@@ -48,7 +48,7 @@ spec:
4848
size: 200Gi
4949
extraPodSpec:
5050
mainContainer:
51-
image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:1.2.0-deepseek-v4-cuda13-dev.2
51+
image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:1.2.0-deepseek-v4-cuda13-dev.3
5252
workingDir: /workspace/examples/backends/vllm
5353
# Up to ~60 min for first launch: weight load + FlashInfer autotune +
5454
# cudagraph warmup. periodSeconds * failureThreshold = 10 * 360 = 3600s.
@@ -98,6 +98,7 @@ spec:
9898
--dyn-tool-call-parser deepseek_v4 \
9999
--attention-config '{"use_fp4_indexer_cache":true}' \
100100
--compilation-config '{"cudagraph_mode":"FULL_AND_PIECEWISE","custom_ops":["all"]}' \
101+
--no-enable-flashinfer-autotune \
101102
--max-num-seqs 256
102103
replicas: 1
103104
resources:

‎recipes/deepseek-v4/deepseek-v4-flash/vllm/agg_gb200/deploy.yaml‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ spec:
2929
value: arm64
3030
effect: NoSchedule
3131
mainContainer:
32-
image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:1.2.0-deepseek-v4-cuda13-dev.2
32+
image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:1.2.0-deepseek-v4-cuda13-dev.3
3333
workingDir: /workspace/examples/backends/vllm
3434
env:
3535
- name: HF_HOME
@@ -55,7 +55,7 @@ spec:
5555
value: arm64
5656
effect: NoSchedule
5757
mainContainer:
58-
image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:1.2.0-deepseek-v4-cuda13-dev.2
58+
image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:1.2.0-deepseek-v4-cuda13-dev.3
5959
workingDir: /workspace/examples/backends/vllm
6060
# ~60 min budget for first launch (10 * 360 = 3600s).
6161
startupProbe:
@@ -106,6 +106,7 @@ spec:
106106
--attention-config '{"use_fp4_indexer_cache":true}' \
107107
--moe-backend deep_gemm_mega_moe \
108108
--compilation-config '{"cudagraph_mode":"FULL_AND_PIECEWISE","custom_ops":["all"]}' \
109+
--no-enable-flashinfer-autotune \
109110
--max-num-seqs 256
110111
replicas: 1
111112
resources:

0 commit comments

Comments
 (0)