Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
6aa6a8f
llm-d-vllm: optimize DSv4-Pro GB200 recipe configs
ilmarkov Jul 15, 2026
da217ba
Merge upstream/main into imarkov/update-dsv4
ilmarkov Jul 21, 2026
277bc92
Merge branch 'main' into imarkov/update-dsv4
ilmarkov Jul 28, 2026
187a1cb
Merge branch 'main' into imarkov/update-dsv4
cquil11 Aug 2, 2026
bf730c9
Update perf-changelog.yaml
cquil11 Aug 2, 2026
c6e4c33
Fix llm-d sweep changelog config key
cquil11 Aug 2, 2026
ca92a7d
Merge branch 'main' into imarkov/update-dsv4
cquil11 Aug 2, 2026
21f4cf7
Merge branch 'main' into imarkov/update-dsv4
cquil11 Aug 2, 2026
2f9e91e
Bump version, remove stream-interval
ilmarkov Aug 3, 2026
94edc8d
Merge branch 'main' into imarkov/update-dsv4
cquil11 Aug 3, 2026
4ab04df
Update perf-changelog.yaml
cquil11 Aug 3, 2026
fced56c
Fix image tag
ilmarkov Aug 4, 2026
2bcc650
Merge branch 'main' into imarkov/update-dsv4
ilmarkov Aug 4, 2026
7670077
Merge remote-tracking branch 'origin/imarkov/update-dsv4' into imarko…
ilmarkov Aug 4, 2026
6965673
Merge branch 'main' into update-dsv4-fp4-gb200-llmd-vllm
ilmarkov Aug 5, 2026
c500460
Fix perf-changelog for PR #2498
ilmarkov Aug 5, 2026
691d9a9
Fix perf-changelog append-only CI failure for PR #2498
ilmarkov Aug 5, 2026
e35c16d
Merge branch 'main' into update-dsv4-fp4-gb200-llmd-vllm
ilmarkov Aug 5, 2026
2d545f1
fix(gb200): reuse guarded Enroot imports
cquil11 Aug 5, 2026
ece71e6
fix(gb200): pin Quay image digest
cquil11 Aug 5, 2026
d834d4a
Fix EPP startup by dropping unsupported weighted-random-picker thresh…
ilmarkov Aug 6, 2026
c9d6213
Merge upstream/update-dsv4-fp4-gb200-llmd-vllm into update-dsv4-fp4-g…
ilmarkov Aug 6, 2026
98b6e6a
Drop llmd-vllm low-middle sweep using low-latency recipe at c256/512.
ilmarkov Aug 6, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion benchmarks/llm-d/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
# --build-arg EPP_FROM_IMAGE="$EPP_FROM_IMAGE" \
# --build-arg ROUTING_SIDECAR_IMAGE="$ROUTING_SIDECAR_IMAGE" \
# --build-arg ENVOY_FROM_IMAGE="$ENVOY_FROM_IMAGE" ...
ARG VLLM_BASE=vllm/vllm-openai:v0.23.0
ARG VLLM_BASE=vllm/vllm-openai:v0.26.0
ARG EPP_FROM_IMAGE=ghcr.io/llm-d/llm-d-router-endpoint-picker:v0.9.0
ARG ROUTING_SIDECAR_IMAGE=ghcr.io/llm-d/llm-d-router-disagg-sidecar:v0.9.0
ARG ENVOY_FROM_IMAGE=envoyproxy/envoy:distroless-v1.33.2
Expand Down
30 changes: 20 additions & 10 deletions benchmarks/multi_node/llm-d-recipes/dsv4-fp4-gb200-low-latency.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
# decode ep:1/dp-attn:false in the master key is what selects the
# pure-TP path in server.sh. Decode knobs are latency-sized: max-num-seqs
# 256, max-num-batched-tokens 256, max-cudagraph-capture-size 256,
# FULL_DECODE_ONLY graphs, stream-interval 50, gpu-memory-utilization 0.9.
# FULL_DECODE_ONLY graphs, gpu-memory-utilization 0.9.
# 2. PREFILL is IDENTICAL to the mid-curve/high-tpt prefill (copied verbatim,
# DEP8 with enable-ep-weight-filter + moe-backend deep_gemm_mega_moe). An
# earlier srt-slurm-style low-latency prefill (weight-offload, no filter,
Expand Down Expand Up @@ -51,7 +51,7 @@ plugins:
- type: prefix-cache-scorer
- type: queue-scorer
- type: active-request-scorer
- type: max-score-picker
- type: weighted-random-picker

schedulingProfiles:
- name: prefill
Expand All @@ -63,12 +63,13 @@ schedulingProfiles:
weight: 2
- pluginRef: active-request-scorer
weight: 2
- pluginRef: max-score-picker
- pluginRef: weighted-random-picker
- name: decode
plugins:
- pluginRef: decode-filter
- pluginRef: active-request-scorer
- pluginRef: max-score-picker
weight: 2
- pluginRef: weighted-random-picker

dataLayer:
discovery:
Expand All @@ -89,7 +90,10 @@ prefill:
extra-args: >-
--kv-cache-dtype fp8
--enforce-eager
--gpu-memory-utilization 0.9
--gpu-memory-utilization 0.95
--max-model-len 9280
--max-num-seqs 16
--max-num-batched-tokens 32768
--enable-cumem-allocator
--no-enable-prefix-caching
--no-async-scheduling
Expand All @@ -98,6 +102,7 @@ prefill:
--moe-backend deep_gemm_mega_moe
--enable-ep-weight-filter
--no-disable-hybrid-kv-cache-manager
--no-enable-flashinfer-autotune
--numa-bind
env:
NCCL_CUMEM_ENABLE: "1"
Expand All @@ -123,14 +128,16 @@ prefill:
NVSHMEM_REMOTE_TRANSPORT: "none"
NVSHMEM_ENABLE_NIC_PE_MAPPING: "1"
NVSHMEM_HCA_PE_MAPPING: "mlx5_0:1:1,mlx5_1:1:1,mlx5_3:1:1,mlx5_4:1:1"
VLLM_USE_NCCL_SYMM_MEM: "1"
VLLM_USE_NCCL_SYMM_MEM: "0"
VLLM_SPARSE_INDEXER_MAX_LOGITS_MB: "1024"
VLLM_MAX_TOKENS_PER_EXPERT_FP4_MOE: "2048"
TILELANG_CLEANUP_TEMP_FILES: "1"
TORCH_SYMMMEM: "NVSHMEM"
NVSHMEM_CUMEM_HANDLE_TYPE: "FABRIC"
NVSHMEM_DISABLE_CUDA_VMM: "0"
VLLM_SKIP_P2P_CHECK: "1"
VLLM_RANDOMIZE_DP_DUMMY_INPUTS: "0"
VLLM_RANDOMIZE_DP_DUMMY_INPUTS: "1"
VLLM_USE_DEEP_GEMM: "1"
VLLM_USE_RUST_FRONTEND: "1"
NVIDIA_GDRCOPY: "enabled"
VLLM_HTTP_TIMEOUT_KEEP_ALIVE: "120"
# Harden distributed coordination against transient gloo/NCCL resets under
Expand All @@ -156,7 +163,6 @@ decode:
--no-enable-flashinfer-autotune
--block-size 256
--compilation-config {"cudagraph_mode":"FULL_DECODE_ONLY","mode":0}
--stream-interval 50
--tokenizer-mode deepseek_v4
--no-disable-hybrid-kv-cache-manager
--enable-sleep-mode
Expand All @@ -171,9 +177,13 @@ decode:
# rc added so KV falls back to InfiniBand, not TCP (see prefill note).
UCX_TLS: "cuda_copy,cuda_ipc,rc,tcp"
UCX_CUDA_IPC_ENABLE_MNNVL: "y"
VLLM_USE_NCCL_SYMM_MEM: "1"
VLLM_USE_NCCL_SYMM_MEM: "0"
TILELANG_CLEANUP_TEMP_FILES: "1"
NVSHMEM_CUMEM_HANDLE_TYPE: "FABRIC"
NVSHMEM_DISABLE_CUDA_VMM: "0"
VLLM_SKIP_P2P_CHECK: "1"
VLLM_RANDOMIZE_DP_DUMMY_INPUTS: "1"
VLLM_USE_RUST_FRONTEND: "1"
NVIDIA_GDRCOPY: "enabled"
TORCH_DISTRIBUTED_DEFAULT_TIMEOUT: "1800"

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ plugins:
- type: prefix-cache-scorer
- type: queue-scorer
- type: active-request-scorer
- type: max-score-picker
- type: weighted-random-picker

schedulingProfiles:
- name: prefill
Expand All @@ -57,12 +57,13 @@ schedulingProfiles:
weight: 2
- pluginRef: active-request-scorer
weight: 2
- pluginRef: max-score-picker
- pluginRef: weighted-random-picker
- name: decode
plugins:
- pluginRef: decode-filter
- pluginRef: active-request-scorer
- pluginRef: max-score-picker
weight: 2
- pluginRef: weighted-random-picker

dataLayer:
discovery:
Expand All @@ -87,7 +88,10 @@ prefill:
extra-args: >-
--kv-cache-dtype fp8
--enforce-eager
--gpu-memory-utilization 0.9
--gpu-memory-utilization 0.95
--max-model-len 9280
--max-num-seqs 16
--max-num-batched-tokens 32768
--enable-cumem-allocator
--no-enable-prefix-caching
--no-async-scheduling
Expand All @@ -96,6 +100,7 @@ prefill:
--moe-backend deep_gemm_mega_moe
--enable-ep-weight-filter
--no-disable-hybrid-kv-cache-manager
--no-enable-flashinfer-autotune
--numa-bind
env:
NCCL_CUMEM_ENABLE: "1"
Expand All @@ -121,14 +126,16 @@ prefill:
NVSHMEM_REMOTE_TRANSPORT: "none"
NVSHMEM_ENABLE_NIC_PE_MAPPING: "1"
NVSHMEM_HCA_PE_MAPPING: "mlx5_0:1:1,mlx5_1:1:1,mlx5_3:1:1,mlx5_4:1:1"
VLLM_USE_NCCL_SYMM_MEM: "1"
VLLM_USE_NCCL_SYMM_MEM: "0"
VLLM_SPARSE_INDEXER_MAX_LOGITS_MB: "1024"
VLLM_MAX_TOKENS_PER_EXPERT_FP4_MOE: "2048"
TILELANG_CLEANUP_TEMP_FILES: "1"
TORCH_SYMMMEM: "NVSHMEM"
NVSHMEM_CUMEM_HANDLE_TYPE: "FABRIC"
NVSHMEM_DISABLE_CUDA_VMM: "0"
VLLM_SKIP_P2P_CHECK: "1"
VLLM_RANDOMIZE_DP_DUMMY_INPUTS: "0"
VLLM_RANDOMIZE_DP_DUMMY_INPUTS: "1"
VLLM_USE_DEEP_GEMM: "1"
VLLM_USE_RUST_FRONTEND: "1"
NVIDIA_GDRCOPY: "enabled"
VLLM_HTTP_TIMEOUT_KEEP_ALIVE: "120"
# Harden distributed coordination against transient gloo/NCCL connection
Expand All @@ -146,12 +153,13 @@ decode:
--max-num-seqs 512
--max-num-batched-tokens 512
--max-cudagraph-capture-size 512
--gpu-memory-utilization 0.85
--gpu-memory-utilization 0.9
--max-model-len 9280
--enable-cumem-allocator
--no-enable-prefix-caching
--no-enable-flashinfer-autotune
--block-size 256
--compilation-config {"cudagraph_mode":"FULL_DECODE_ONLY","mode":0}
--stream-interval 50
--tokenizer-mode deepseek_v4
--moe-backend deep_gemm_mega_moe
--enable-ep-weight-filter
Expand All @@ -170,12 +178,14 @@ decode:
NVSHMEM_REMOTE_TRANSPORT: "none"
NVSHMEM_ENABLE_NIC_PE_MAPPING: "1"
NVSHMEM_HCA_PE_MAPPING: "mlx5_0:1:1,mlx5_1:1:1,mlx5_3:1:1,mlx5_4:1:1"
VLLM_USE_NCCL_SYMM_MEM: "1"
VLLM_USE_NCCL_SYMM_MEM: "0"
TILELANG_CLEANUP_TEMP_FILES: "1"
TORCH_SYMMMEM: "NVSHMEM"
NVSHMEM_CUMEM_HANDLE_TYPE: "FABRIC"
NVSHMEM_DISABLE_CUDA_VMM: "0"
VLLM_SKIP_P2P_CHECK: "1"
VLLM_RANDOMIZE_DP_DUMMY_INPUTS: "0"
VLLM_RANDOMIZE_DP_DUMMY_INPUTS: "1"
VLLM_USE_DEEP_GEMM: "1"
VLLM_USE_RUST_FRONTEND: "1"
NVIDIA_GDRCOPY: "enabled"
# See prefill note: harden the decode's cross-node DP8/EP8 coordination
# against transient gloo resets under the conc4096 warmup burst.
Expand Down
24 changes: 1 addition & 23 deletions configs/nvidia-master.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5107,7 +5107,7 @@ dsv4-fp4-gb200-dynamo-vllm:
# TODO: change image to official llmd image.
# Build source: benchmarks/llm-d/Dockerfile.
dsv4-fp4-gb200-llmd-vllm:
image: ghcr.io/ezrasilvera/llm-d-nokube-vllm:vllm0.23
image: quay.io/rh-ee-imarkov/llm-d-nokube-vllm:vllm0.26@sha256:a9095d4c835935c4070be2040de0a5ef3b44098f603092ab66d743b0e731b7b4
model: deepseek-ai/DeepSeek-V4-Pro
model-prefix: dsv4
runner: gb200
Expand Down Expand Up @@ -5143,28 +5143,6 @@ dsv4-fp4-gb200-llmd-vllm:
- "DECODE_NODES=2"
- "GPUS_PER_NODE=4"

# Low-middle: 1 prefill DEP8 + 4 decode TP8.
- spec-decoding: "none"
conc-list: [256, 512]
prefill:
num-worker: 1
tp: 1
ep: 8
dp-attn: true
additional-settings:
- "PREFILL_NODES=2"
- "GPUS_PER_NODE=4"
- "CONFIG_FILE=dsv4-fp4-gb200-low-latency.yaml"
decode:
num-worker: 4
tp: 8
ep: 1
dp-attn: false
additional-settings:
- "DECODE_NODES=8"
- "DECODE_WORKERS=4"
- "GPUS_PER_NODE=4"

# Mid curve: 1 prefill DEP8 + 1 decode DEP8.
- spec-decoding: "none"
conc-list: [256, 512, 1024]
Expand Down
10 changes: 10 additions & 0 deletions perf-changelog.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5460,3 +5460,13 @@
- "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:
- dsv4-fp4-gb200-llmd-vllm
description:
- "Decode: gpu-memory-utilization 0.85->0.9, add max-model-len 9280, disable NCCL symmetric memory, add no-enable-flashinfer-autotune, drop stream-interval (unsupported by rust frontend)"
- "Prefill: gpu-memory-utilization 0.9->0.95, add max-model-len 9280, add max-num-seqs 16 + max-num-batched-tokens 32768, enable rust frontend, enable randomize-dp-dummy-inputs"
- "EPP: switch from max-score-picker to weighted-random-picker for better load distribution under high concurrency"
- "Low-latency recipe: same prefill optimizations, decode NCCL symmetric memory disabled + rust frontend enabled, drop stream-interval"
- "Sweep: drop low-middle point (c256/512, 1P×4D) from llmd-vllm key; low-latency recipe runs at c1 only"
pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2498
Loading