Inference Serving Configurations
Every serving configuration used in AA-AgentPerf hardware benchmarking, from June 2026 onwards. Each entry captures the model, accelerator system, precision, inference framework, parallelism topology, and full launch command.
AA-AgentPerf
Showing 17 of 98 configurations
DeepSeek V4.1 Flash — featured configurations
MI355X x8
# DeepSeek V4.1 Flash (MXFP4) on MI355X x8 — vLLM ROCm nightly, TP2 on GPUs 0-1, DSpark speculative decoding
# (5 tokens, probabilistic draft, block verification; adaptive verification off, not supported on ROCm).
# vLLM recipes DeepSeek V4.1 Flash MI355X settings: AITER MoE, MXFP4 sparse indexer, block size 128, breakable CUDA
# graphs, --no-swa-bounded-replay, Engram tables in pinned host memory; Rust frontend, max-model-len 262144, max-num-seqs 256.
# Weights: deepseek-ai/DeepSeek-V4.1-Flash @ dba1be0a40aa45a94ad051997016db3960a90277
# Image: vllm/vllm-openai-rocm:nightly-rocm100-bb87d227d4b964abb2a966cdf9194f3d376d9bbe (vLLM 0.31.1rc1.dev1+gbb87d227d, ROCm 10.0.0)
# Server pinned to the GPUs' NUMA node.
docker run -d \
--device=/dev/kfd \
--device=/dev/dri \
--group-add 44 \
--group-add 992 \
--security-opt seccomp=unconfined \
--ipc=host \
--shm-size=32g \
--network host \
--privileged \
--ulimit memlock=-1 \
--ulimit nofile=1048576:1048576 \
-v <host-path>:/cache \
-v <host-path>:/root/.cache/vllm \
-e HF_HOME=/cache \
-e HF_HUB_OFFLINE=1 \
-e VLLM_ROCM_USE_AITER=1 \
-e VLLM_ROCM_USE_AITER_MOE=1 \
-e AITER_TRITON_LOG_LEVEL=ERROR \
-e VLLM_USE_BREAKABLE_CUDAGRAPH=1 \
-e VLLM_ROCM_USE_AITER_TRITON_SPARSE_MLA=1 \
-e VLLM_ROCM_QUICK_REDUCE_QUANTIZATION=INT4 \
-e OMP_NUM_THREADS=1 \
-e VLLM_ENGINE_READY_TIMEOUT_S=3600 \
-e VLLM_USE_RUST_FRONTEND=1 \
-e ROCR_VISIBLE_DEVICES=0,1 \
-e HIP_VISIBLE_DEVICES=0,1 \
--entrypoint bash \
vllm/vllm-openai-rocm:nightly-rocm100-bb87d227d4b964abb2a966cdf9194f3d376d9bbe \
-c "exec vllm serve deepseek-ai/DeepSeek-V4.1-Flash \
--served-model-name deepseek-ai/DeepSeek-V4.1-Flash \
--host 127.0.0.1 \
--port 30000 \
--language-model-only \
--tokenizer-mode deepseek_v41 \
--tool-call-parser deepseek_v41 \
--enable-auto-tool-choice \
--reasoning-parser deepseek_v41 \
--moe-backend aiter \
--gpu-memory-utilization 0.9 \
--no-swa-bounded-replay \
--attention-config '{\"indexer_kv_dtype\":\"mxfp4\",\"indexer_sparse_logits\":true}' \
--block-size 128 \
--speculative-config '{\"method\":\"dspark\",\"num_speculative_tokens\":5,\"draft_sample_method\":\"probabilistic\",\"rejection_sample_method\":\"block\",\"enable_adaptive_verification\":false}' \
--max-model-len 262144 \
--max-num-batched-tokens 16384 \
--enable-prompt-tokens-details \
--disable-uvicorn-access-log \
--tensor-parallel-size 2 \
--engram-config '{\"cpu_offload\":true}' \
--max-num-seqs 256 \
--max-cudagraph-capture-size 1536"Host-specific paths are redacted as <host-path>.
Submitted by Artificial Analysis
# DeepSeek V4.1 Flash (MXFP4) on MI355X x8 — vLLM ROCm nightly, TP2 on GPUs 0-1, DSpark speculative decoding
# (5 tokens, probabilistic draft, block verification; adaptive verification off, not supported on ROCm).
# vLLM recipes DeepSeek V4.1 Flash MI355X settings: AITER MoE, MXFP4 sparse indexer, block size 128, breakable CUDA
# graphs, --no-swa-bounded-replay, Engram tables in pinned host memory; Rust frontend, max-model-len 262144, max-num-seqs 64.
# Weights: deepseek-ai/DeepSeek-V4.1-Flash @ dba1be0a40aa45a94ad051997016db3960a90277
# Image: vllm/vllm-openai-rocm:nightly-rocm100-bb87d227d4b964abb2a966cdf9194f3d376d9bbe (vLLM 0.31.1rc1.dev1+gbb87d227d, ROCm 10.0.0)
# Server pinned to the GPUs' NUMA node.
docker run -d \
--device=/dev/kfd \
--device=/dev/dri \
--group-add 44 \
--group-add 992 \
--security-opt seccomp=unconfined \
--ipc=host \
--shm-size=32g \
--network host \
--privileged \
--ulimit memlock=-1 \
--ulimit nofile=1048576:1048576 \
-v <host-path>:/cache \
-v <host-path>:/root/.cache/vllm \
-e HF_HOME=/cache \
-e HF_HUB_OFFLINE=1 \
-e VLLM_ROCM_USE_AITER=1 \
-e VLLM_ROCM_USE_AITER_MOE=1 \
-e AITER_TRITON_LOG_LEVEL=ERROR \
-e VLLM_USE_BREAKABLE_CUDAGRAPH=1 \
-e VLLM_ROCM_USE_AITER_TRITON_SPARSE_MLA=1 \
-e VLLM_ROCM_QUICK_REDUCE_QUANTIZATION=INT4 \
-e OMP_NUM_THREADS=1 \
-e VLLM_ENGINE_READY_TIMEOUT_S=3600 \
-e VLLM_USE_RUST_FRONTEND=1 \
-e ROCR_VISIBLE_DEVICES=0,1 \
-e HIP_VISIBLE_DEVICES=0,1 \
--entrypoint bash \
vllm/vllm-openai-rocm:nightly-rocm100-bb87d227d4b964abb2a966cdf9194f3d376d9bbe \
-c "exec vllm serve deepseek-ai/DeepSeek-V4.1-Flash \
--served-model-name deepseek-ai/DeepSeek-V4.1-Flash \
--host 127.0.0.1 \
--port 30000 \
--language-model-only \
--tokenizer-mode deepseek_v41 \
--tool-call-parser deepseek_v41 \
--enable-auto-tool-choice \
--reasoning-parser deepseek_v41 \
--moe-backend aiter \
--gpu-memory-utilization 0.9 \
--no-swa-bounded-replay \
--attention-config '{\"indexer_kv_dtype\":\"mxfp4\",\"indexer_sparse_logits\":true}' \
--block-size 128 \
--speculative-config '{\"method\":\"dspark\",\"num_speculative_tokens\":5,\"draft_sample_method\":\"probabilistic\",\"rejection_sample_method\":\"block\",\"enable_adaptive_verification\":false}' \
--max-model-len 262144 \
--max-num-batched-tokens 16384 \
--enable-prompt-tokens-details \
--disable-uvicorn-access-log \
--tensor-parallel-size 2 \
--engram-config '{\"cpu_offload\":true}' \
--max-num-seqs 64 \
--max-cudagraph-capture-size 384"Host-specific paths are redacted as <host-path>.
Submitted by Artificial Analysis
# DeepSeek V4.1 Flash (MXFP4) on MI355X x8 — vLLM ROCm nightly, TP4 on GPUs 0-3, DSpark speculative decoding
# (5 tokens, probabilistic draft, block verification; adaptive verification off, not supported on ROCm).
# vLLM recipes (vllm-project/recipes @ 21302fdc75) MI355X settings: mono decode layer, AITER MoE, MXFP4 sparse indexer,
# breakable CUDA graphs, INT4 quick reduce, Engram tables on GPU (the recipe's TP4 form); Rust frontend, max-model-len 262144.
# Weights: deepseek-ai/DeepSeek-V4.1-Flash @ dba1be0a40aa45a94ad051997016db3960a90277
# Image: vllm/vllm-openai-rocm:nightly-rocm100-fe4df3df0eb703862c686b256e9fe44fa94c8945 (vLLM 0.31.1rc1.dev296+gfe4df3df0, ROCm 10.0.0)
# Server pinned to the GPUs' NUMA node.
docker run -d \
--device=/dev/kfd \
--device=/dev/dri \
--group-add 44 \
--group-add 992 \
--security-opt seccomp=unconfined \
--ipc=host \
--shm-size=32g \
--network host \
--privileged \
--ulimit memlock=-1 \
--ulimit nofile=1048576:1048576 \
-v <host-path>:/cache \
-v <host-path>:/root/.cache/vllm \
-e HF_HOME=/cache \
-e HF_HUB_OFFLINE=1 \
-e VLLM_ROCM_USE_AITER=1 \
-e VLLM_ROCM_USE_AITER_MOE=1 \
-e AITER_TRITON_LOG_LEVEL=ERROR \
-e VLLM_USE_BREAKABLE_CUDAGRAPH=1 \
-e VLLM_ROCM_USE_AITER_TRITON_SPARSE_MLA=1 \
-e VLLM_ROCM_QUICK_REDUCE_QUANTIZATION=INT4 \
-e OMP_NUM_THREADS=1 \
-e VLLM_ENGINE_READY_TIMEOUT_S=3600 \
-e VLLM_USE_RUST_FRONTEND=1 \
-e VLLM_ROCM_MONO_DECODE=1 \
-e ROCR_VISIBLE_DEVICES=0,1,2,3 \
-e HIP_VISIBLE_DEVICES=0,1,2,3 \
--entrypoint bash \
vllm/vllm-openai-rocm:nightly-rocm100-fe4df3df0eb703862c686b256e9fe44fa94c8945 \
-c "exec vllm serve deepseek-ai/DeepSeek-V4.1-Flash \
--served-model-name deepseek-ai/DeepSeek-V4.1-Flash \
--host 127.0.0.1 \
--port 30000 \
--language-model-only \
--tokenizer-mode deepseek_v41 \
--tool-call-parser deepseek_v41 \
--enable-auto-tool-choice \
--reasoning-parser deepseek_v41 \
--moe-backend aiter \
--gpu-memory-utilization 0.9 \
--no-swa-bounded-replay \
--attention-config '{\"indexer_kv_dtype\":\"mxfp4\",\"indexer_sparse_logits\":true}' \
--block-size 128 \
--speculative-config '{\"method\":\"dspark\",\"num_speculative_tokens\":5,\"draft_sample_method\":\"probabilistic\",\"rejection_sample_method\":\"block\",\"enable_adaptive_verification\":false}' \
--max-model-len 262144 \
--max-num-batched-tokens 16384 \
--enable-prompt-tokens-details \
--disable-uvicorn-access-log \
--tensor-parallel-size 4 \
--engram-config '{\"cpu_offload\":false}' \
--max-num-seqs 64 \
--max-cudagraph-capture-size 384"Host-specific paths are redacted as <host-path>.
Submitted by Artificial Analysis
B200 (SXM) x8
# DeepSeek V4.1 Flash (MXFP4) on B200 (SXM) x8 — vLLM 0.31.0, TP2 on 2 of the node's 8 GPUs, DSpark speculative decoding
# (5 tokens, probabilistic draft, block verification; adaptive verification off, as it crashes vLLM DSpark at high concurrency on
# B300/GB300). Otherwise vLLM recipes B200 TP2 settings (FP8 KV cache, Engram tables in host memory, max-num-seqs 128)
# with Rust frontend, uvicorn access log off, max-model-len 262144.
# Weights: deepseek-ai/DeepSeek-V4.1-Flash @ dba1be0a40aa45a94ad051997016db3960a90277
# Image: vllm/vllm-openai:v0.31.0 (vLLM 0.31.0, CUDA 13.0)
# Server pinned to the GPUs' NUMA node.
docker run -d \
--gpus '"device=<2 GPUs>"' \
--ipc=host \
--shm-size=32g \
--network host \
--ulimit memlock=-1 \
-v <host-path>:/hub:ro \
-e VLLM_ENGINE_READY_TIMEOUT_S=3600 \
-e VLLM_USE_RUST_FRONTEND=1 \
--entrypoint vllm \
vllm/vllm-openai:v0.31.0 \
serve deepseek-ai/DeepSeek-V4.1-Flash \
--served-model-name deepseek-ai/DeepSeek-V4.1-Flash \
--host 127.0.0.1 \
--port 30014 \
--tensor-parallel-size 2 \
--trust-remote-code \
--tokenizer-mode deepseek_v41 \
--tool-call-parser deepseek_v41 \
--enable-auto-tool-choice \
--reasoning-parser deepseek_v41 \
--attention-config '{"backend":"FLASHINFER_MLA_SPARSE_DSV41","indexer_kv_dtype":"mxfp4","indexer_sparse_logits":true}' \
--kv-cache-dtype fp8 \
--engram-config '{"cpu_offload":true}' \
--max-model-len 262144 \
--enable-prompt-tokens-details \
--disable-uvicorn-access-log \
--max-num-seqs 128 \
--speculative-config '{"method":"dspark","num_speculative_tokens":5,"draft_sample_method":"probabilistic","rejection_sample_method":"block","enable_adaptive_verification":false}'Host-specific paths are redacted as <host-path>.
Submitted by Artificial Analysis
# DeepSeek V4.1 Flash (MXFP4) on B200 (SXM) x8 — vLLM 0.31.0, TP4 on 4 of the node's 8 GPUs, DSpark speculative decoding
# (5 tokens, probabilistic draft, block verification, adaptive verification on). vLLM recipes B200 settings (FP8 KV cache,
# Engram tables in host memory, max-num-seqs 128) with Rust frontend, uvicorn access log off, max-model-len 262144.
# Weights: deepseek-ai/DeepSeek-V4.1-Flash @ dba1be0a40aa45a94ad051997016db3960a90277
# Image: vllm/vllm-openai:v0.31.0 (vLLM 0.31.0, CUDA 13.0)
# Server pinned to the GPUs' NUMA node.
docker run -d \
--gpus '"device=<4 GPUs>"' \
--ipc=host \
--shm-size=32g \
--network host \
--ulimit memlock=-1 \
-v <host-path>:/hub:ro \
-e VLLM_ENGINE_READY_TIMEOUT_S=3600 \
-e VLLM_USE_RUST_FRONTEND=1 \
--entrypoint vllm \
vllm/vllm-openai:v0.31.0 \
serve deepseek-ai/DeepSeek-V4.1-Flash \
--served-model-name deepseek-ai/DeepSeek-V4.1-Flash \
--host 127.0.0.1 \
--port 30001 \
--tensor-parallel-size 4 \
--trust-remote-code \
--tokenizer-mode deepseek_v41 \
--tool-call-parser deepseek_v41 \
--enable-auto-tool-choice \
--reasoning-parser deepseek_v41 \
--attention-config '{"backend":"FLASHINFER_MLA_SPARSE_DSV41","indexer_kv_dtype":"mxfp4","indexer_sparse_logits":true}' \
--kv-cache-dtype fp8 \
--engram-config '{"cpu_offload":true}' \
--max-model-len 262144 \
--enable-prompt-tokens-details \
--disable-uvicorn-access-log \
--max-num-seqs 128 \
--speculative-config '{"method":"dspark","num_speculative_tokens":5,"draft_sample_method":"probabilistic","rejection_sample_method":"block","enable_adaptive_verification":true}'Host-specific paths are redacted as <host-path>.
Submitted by Artificial Analysis
B300 x8
# DeepSeek V4.1 Flash (MXFP4) on B300 x8 — vLLM 0.31.0, TP=2 on 2 of the node's 8 GPUs, Rust frontend.
# vLLM recipes B300 TP2 settings (FLASHINFER_MLA_SPARSE_DSV41 attention, MXFP4 indexer with sparse logits, FP8 KV cache,
# Engram CPU offload, B300 compile and CUDA graph sizes, --max-num-seqs 256, --max-num-batched-tokens 8192), plus text-only mode
# and DSpark speculative decoding (5 tokens, adaptive verification on).
# Weights: deepseek-ai/DeepSeek-V4.1-Flash @ dba1be0a40aa45a94ad051997016db3960a90277
# Image: vllm/vllm-openai:v0.31.0@sha256:c1c9f6fd5c109ba7f0546a59f5b2f15fb87f64c77782e90a27b648b42a8e67c3
# Server pinned to CPU cores on its GPUs' socket.
VLLM_ENGINE_READY_TIMEOUT_S=3600 \
VLLM_USE_RUST_FRONTEND=1 \
vllm serve deepseek-ai/DeepSeek-V4.1-Flash \
--served-model-name deepseek-ai/DeepSeek-V4.1-Flash \
--host 0.0.0.0 \
--port 30000 \
--tensor-parallel-size 2 \
--trust-remote-code \
--tokenizer-mode deepseek_v41 \
--tool-call-parser deepseek_v41 \
--enable-auto-tool-choice \
--reasoning-parser deepseek_v41 \
--language-model-only \
--enable-prompt-tokens-details \
--disable-uvicorn-access-log \
--attention-config '{"backend":"FLASHINFER_MLA_SPARSE_DSV41","indexer_kv_dtype":"mxfp4","indexer_sparse_logits":true}' \
--kv-cache-dtype fp8 \
--engram-config '{"cpu_offload":true}' \
--compilation-config '{"mode":"VLLM_COMPILE","cudagraph_mode":"FULL_AND_PIECEWISE","cudagraph_capture_sizes":[6,12,18,24,30,36,48,60,72,96,120,144,192,240,288,384,480,576,768,1020,1536,2046,3072,4092,6144,8190]}' \
--max-cudagraph-capture-size 8190 \
--max-num-batched-tokens 8192 \
--max-num-seqs 256 \
--speculative-config '{"method":"dspark","num_speculative_tokens":5,"draft_sample_method":"probabilistic","rejection_sample_method":"block","enable_adaptive_verification":true}'Submitted by Artificial Analysis
# DeepSeek V4.1 Flash (MXFP4) on B300 x8 — vLLM 0.31.0, TP=8 on all 8 GPUs with vLLM NUMA binding, Rust frontend.
# vLLM recipes B300 settings at TP8 (FLASHINFER_MLA_SPARSE_DSV41 attention, MXFP4 indexer with sparse logits, FP8 KV cache,
# Engram CPU offload, B300 compile and CUDA graph sizes, --max-num-seqs 256, --max-num-batched-tokens 8192), plus text-only mode
# and DSpark speculative decoding (5 tokens, adaptive verification on).
# Weights: deepseek-ai/DeepSeek-V4.1-Flash @ dba1be0a40aa45a94ad051997016db3960a90277
# Image: vllm/vllm-openai:v0.31.0@sha256:c1c9f6fd5c109ba7f0546a59f5b2f15fb87f64c77782e90a27b648b42a8e67c3
VLLM_ENGINE_READY_TIMEOUT_S=3600 \
VLLM_USE_RUST_FRONTEND=1 \
vllm serve deepseek-ai/DeepSeek-V4.1-Flash \
--served-model-name deepseek-ai/DeepSeek-V4.1-Flash \
--host 0.0.0.0 \
--port 30000 \
--tensor-parallel-size 8 \
--trust-remote-code \
--tokenizer-mode deepseek_v41 \
--tool-call-parser deepseek_v41 \
--enable-auto-tool-choice \
--reasoning-parser deepseek_v41 \
--language-model-only \
--enable-prompt-tokens-details \
--disable-uvicorn-access-log \
--attention-config '{"backend":"FLASHINFER_MLA_SPARSE_DSV41","indexer_kv_dtype":"mxfp4","indexer_sparse_logits":true}' \
--kv-cache-dtype fp8 \
--engram-config '{"cpu_offload":true}' \
--compilation-config '{"mode":"VLLM_COMPILE","cudagraph_mode":"FULL_AND_PIECEWISE","cudagraph_capture_sizes":[6,12,18,24,30,36,48,60,72,96,120,144,192,240,288,384,480,576,768,1020,1536,2046,3072,4092,6144,8190]}' \
--max-cudagraph-capture-size 8190 \
--max-num-batched-tokens 8192 \
--max-num-seqs 256 \
--numa-bind \
--numa-bind-nodes 0 0 0 0 1 1 1 1 \
--speculative-config '{"method":"dspark","num_speculative_tokens":5,"draft_sample_method":"probabilistic","rejection_sample_method":"block","enable_adaptive_verification":true}'Submitted by Artificial Analysis
GB200 NVL72
# DeepSeek V4.1 Flash (MXFP4) on GB200 NVL72 — vLLM 0.31.0 in-flight batching on 2 of a tray's 4 GPUs, TP2,
# DSpark speculative decoding (5 draft tokens, probabilistic drafts, block rejection, adaptive verification off),
# FlashInfer sparse MLA attention with an MXFP4 indexer, FP8 KV cache, Engram tables in host memory,
# Rust frontend.
# Weights: deepseek-ai/DeepSeek-V4.1-Flash
# Image: vllm-v0310.sqsh (vLLM 0.31.0, aarch64)
# Server pinned to the Grace CPU socket attached to its GPUs.
export CUDA_VISIBLE_DEVICES=0,1
export VLLM_ENGINE_READY_TIMEOUT_S=3600
export VLLM_USE_RUST_FRONTEND=1
vllm serve deepseek-ai/DeepSeek-V4.1-Flash \
--served-model-name deepseek-ai/DeepSeek-V4.1-Flash \
--host 0.0.0.0 \
--port 8000 \
--tensor-parallel-size 2 \
--trust-remote-code \
--tokenizer-mode deepseek_v41 \
--tool-call-parser deepseek_v41 \
--enable-auto-tool-choice \
--reasoning-parser deepseek_v41 \
--language-model-only \
--enable-prompt-tokens-details \
--disable-uvicorn-access-log \
--attention-config '{"backend":"FLASHINFER_MLA_SPARSE_DSV41","indexer_kv_dtype":"mxfp4","indexer_sparse_logits":true}' \
--kv-cache-dtype fp8 \
--engram-config '{"cpu_offload":true}' \
--max-num-seqs 128 \
--max-model-len 262144 \
--speculative-config '{"method":"dspark","num_speculative_tokens":5,"draft_sample_method":"probabilistic","rejection_sample_method":"block","enable_adaptive_verification":false}'Submitted by NVIDIA
# DeepSeek V4.1 Flash (MXFP4) on GB200 NVL72 — SGLang in-flight batching on one 4-GPU tray, TP4 + EP4, # DSPARK speculative decoding (block size 5), decode CUDA graphs up to batch 128, cache reporting on. # Weights: deepseek-ai/DeepSeek-V4.1-Flash # Image: sglang-dsv41.sqsh (SGLang 0.0.0.dev1+gda64c5cbb, aarch64) export SGLANG_JIT_DEEPGEMM_PRECOMPILE=0 export SGLANG_JIT_DEEPGEMM_FAST_WARMUP=1 export SGLANG_DEFAULT_THINKING=true export PYTORCH_CUDA_ALLOC_CONF= python3 -m sglang.launch_server \ --model-path deepseek-ai/DeepSeek-V4.1-Flash \ --served-model-name deepseek-ai/DeepSeek-V4.1-Flash \ --trust-remote-code \ --tp 4 \ --ep-size 4 \ --page-size 256 \ --mem-fraction-static 0.8 \ --max-running-requests 256 \ --speculative-algorithm DSPARK \ --speculative-dspark-block-size 5 \ --cuda-graph-max-bs-decode 128 \ --enable-cache-report \ --reasoning-parser auto \ --tool-call-parser auto \ --watchdog-timeout 3600 \ --host 0.0.0.0 \ --port 30000
Submitted by NVIDIA
GB300 NVL72
# DeepSeek V4.1 Flash (NVFP4) on GB300 NVL72 — vLLM 0.30.0 in-flight batching, TP2 on GPUs 0-1 of a 4-GPU
# tray, DSpark speculative decoding (5 draft tokens, probabilistic drafts, block rejection, adaptive verification),
# 4 API servers, Engram tables offloaded to host memory.
# Image: vllm/vllm-openai:v0.30.0-aarch64 with Dynamo 1.5.0 added (Dynamo unused here)
# Patched over stock vLLM 0.30.0: vllm#58784, plus a local patch (NVFP4 DSpark-drafter fix: the draft experts
# keep MXFP4; same dispatch as draft PR vllm#59655).
# SM clock capped at 1200 MHz (memory clock set high, 3996 MHz; default power limit).
# VLLM_USE_BREAKABLE_CUDAGRAPH is left unset (vLLM auto-enables it).
VLLM_ENGINE_READY_TIMEOUT_S=3600 \
PYTHONUNBUFFERED=1 \
vllm serve <model-path> \
--served-model-name deepseek-ai/DeepSeek-V4.1-Flash \
--host 0.0.0.0 \
--port 8000 \
--tensor-parallel-size 2 \
--speculative-config '{"method":"dspark","num_speculative_tokens":5,"draft_sample_method":"probabilistic","rejection_sample_method":"block","enable_adaptive_verification":true}' \
--engram-config '{"cpu_offload":true}' \
--language-model-only \
--max-cudagraph-capture-size 2048 \
--api-server-count 4 \
--max-num-seqs 512 \
--tokenizer-mode deepseek_v41 \
--tool-call-parser deepseek_v41 \
--enable-auto-tool-choice \
--reasoning-parser deepseek_v41 \
--gpu-memory-utilization 0.92 \
--max-model-len 1048576 \
--enable-prompt-tokens-details \
--trust-remote-codeSubmitted by NVIDIA
# NVIDIA Dynamo 1.5.0 + vLLM 0.30.0 disaggregated serving of DeepSeek V4.1 Flash (MXFP4) on GB300 NVL72 —
# 4 GPUs: 1x prefill worker + 1x decode worker, each TP2 on GPUs 0-1 of its own tray; DSpark speculative
# decoding on both (5 draft tokens, probabilistic drafts, block rejection, adaptive verification); NIXL (UCX)
# KV transfer. etcd and the Dynamo frontend (KV-aware routing) share a third tray that does no GPU work.
# Weights: deepseek-ai/DeepSeek-V4.1-Flash
# Image: vllm-v0.30.0-dynamo-rel.sqsh (vLLM 0.30.0 + Dynamo 1.5.0)
# Patched over stock vLLM 0.30.0: vllm#58784, vllm#57662.
# Frontend / router and worker environment (every role; JIT cache paths omitted):
# ETCD_ENDPOINTS=http://<node2>:2379 HF_HUB_OFFLINE=1 PYTHONUNBUFFERED=1 DSV41_DROP_FIRST_DRAFT=
# UCX_RCACHE_MAX_UNRELEASED=1024 VLLM_ENGINE_READY_TIMEOUT_S=3600
# DYN_TCP_RPC_HOST=<node-ip> DYN_TCP_RESPONSE_STREAM_HOST=<node-ip> DYN_EVENT_PLANE_HOST=<node-ip>
# (<node-ip> = that node's own cluster-network IP)
# Worker environment, in addition:
# DYN_SYSTEM_PORT=8081 (prefill) / 8091 (decode)
# etcd and the frontend (node 2, no GPUs; OpenAI-compatible on :8000, KV routing, no session-affinity TTL here):
etcd \
--listen-client-urls http://0.0.0.0:2379 \
--advertise-client-urls http://<node2>:2379 \
--listen-peer-urls http://127.0.0.1:2380 \
--initial-advertise-peer-urls http://127.0.0.1:2380 \
--initial-cluster default=http://127.0.0.1:2380 \
--data-dir <host-path>
python3 -m dynamo.frontend \
--http-host 0.0.0.0 \
--http-port 8000 \
--router-mode kv \
--kv-cache-block-size 128
# Prefill worker (node 0, TP2 on GPUs 0-1):
python3 -m dynamo.vllm \
--model deepseek-ai/DeepSeek-V4.1-Flash \
--served-model-name deepseek-ai/DeepSeek-V4.1-Flash \
--tokenizer-mode deepseek_v41 \
--dyn-tool-call-parser deepseek_v41 \
--dyn-reasoning-parser deepseek_v41 \
--gpu-memory-utilization 0.9 \
--max-model-len 1048576 \
--kv-events-config '{"enable_kv_cache_events":true,"publisher":"zmq"}' \
--trust-remote-code \
--tensor-parallel-size 2 \
--speculative-config '{"method":"dspark","num_speculative_tokens":5,"draft_sample_method":"probabilistic","rejection_sample_method":"block","enable_adaptive_verification":true}' \
--kv-transfer-config '{"kv_connector":"NixlConnector","kv_role":"kv_producer"}' \
--disaggregation-mode prefill \
--router-mode kv \
--router-session-affinity-ttl-secs 3600
# Decode worker (node 1, TP2 on GPUs 0-1; no --router-* flags):
python3 -m dynamo.vllm \
--model deepseek-ai/DeepSeek-V4.1-Flash \
--served-model-name deepseek-ai/DeepSeek-V4.1-Flash \
--tokenizer-mode deepseek_v41 \
--dyn-tool-call-parser deepseek_v41 \
--dyn-reasoning-parser deepseek_v41 \
--gpu-memory-utilization 0.9 \
--max-model-len 1048576 \
--kv-events-config '{"enable_kv_cache_events":true,"publisher":"zmq"}' \
--trust-remote-code \
--tensor-parallel-size 2 \
--speculative-config '{"method":"dspark","num_speculative_tokens":5,"draft_sample_method":"probabilistic","rejection_sample_method":"block","enable_adaptive_verification":true}' \
--kv-transfer-config '{"kv_connector":"NixlConnector","kv_role":"kv_consumer"}' \
--disaggregation-mode decodeHost-specific paths are redacted as <host-path>.
Submitted by NVIDIA
# DeepSeek V4.1 Flash (MXFP4) on GB300 NVL72 — SGLang in-flight batching on one 4-GPU tray, TP4 + EP4, # DSPARK speculative decoding (block size 5), decode CUDA graphs up to batch 64; low-latency recipe. # The server resolves FP8 (e4m3) KV cache, page size 256, MoE backend flashinfer_mxfp4, 256 max running # requests; parsers auto-detect to deepseek-v41 / deepseekv41. No HiCache, no cache report, no extra env vars. # Weights: deepseek-ai/DeepSeek-V4.1-Flash # Image: lmsysorg/sglang:dev-cu13-dsv41@sha256:4a5d132a06a77c8331e15845f2e925adc788b00105097ad55409afa3f4fa4860 sglang serve \ --trust-remote-code \ --model-path deepseek-ai/DeepSeek-V4.1-Flash \ --tp 4 \ --ep-size 4 \ --mem-fraction-static 0.8 \ --speculative-algorithm DSPARK \ --speculative-dspark-block-size 5 \ --cuda-graph-max-bs-decode 64 \ --reasoning-parser auto \ --tool-call-parser auto \ --host 0.0.0.0 \ --port 30000 \ --served-model-name deepseek-ai/DeepSeek-V4.1-Flash
Submitted by NVIDIA
H100 (SXM) x8
# DeepSeek V4.1 Flash (MXFP4) on H100 (SXM) x8 — vLLM (deepseekv41-flash-0909 image), TP8 on all 8 GPUs,
# no speculative decoding. Rust frontend, uvicorn access log off, max-model-len 262144.
# Weights: deepseek-ai/DeepSeek-V4.1-Flash @ dba1be0a40aa45a94ad051997016db3960a90277
# Image: vllm/vllm-openai:deepseekv41-flash-0909 (vLLM 0.1.dev20904+g179dd0fa9)
docker run -d \
--gpus '"device=<8 GPUs>"' \
--ipc=host \
--shm-size=32g \
--network host \
--ulimit memlock=-1 \
-v <host-path>:/hub:ro \
-e VLLM_ENGINE_READY_TIMEOUT_S=3600 \
-e VLLM_USE_RUST_FRONTEND=1 \
--entrypoint vllm \
vllm/vllm-openai:deepseekv41-flash-0909 \
serve deepseek-ai/DeepSeek-V4.1-Flash \
--served-model-name deepseek-ai/DeepSeek-V4.1-Flash \
--host 127.0.0.1 \
--port 30000 \
--tensor-parallel-size 8 \
--trust-remote-code \
--tokenizer-mode deepseek_v41 \
--tool-call-parser deepseek_v41 \
--enable-auto-tool-choice \
--reasoning-parser deepseek_v41 \
--gpu-memory-utilization 0.9 \
--max-model-len 262144 \
--enable-prompt-tokens-details \
--disable-uvicorn-access-logHost-specific paths are redacted as <host-path>.
Submitted by Artificial Analysis
# DeepSeek V4.1 Flash (MXFP4) on H100 (SXM) x8 — vLLM (deepseekv41-flash-0909 image), TP8 on all 8 GPUs,
# DSpark speculative decoding (5 tokens, probabilistic draft, block verification, adaptive verification on).
# Rust frontend, uvicorn access log off, vLLM --numa-bind, max-model-len 262144; Engram tables in host memory (vLLM default).
# --gpu-memory-utilization 0.95 and --max-num-seqs 64: at 0.9, DSpark CUDA-graph profiling leaves no KV cache blocks.
# Weights: deepseek-ai/DeepSeek-V4.1-Flash @ dba1be0a40aa45a94ad051997016db3960a90277
# Image: vllm/vllm-openai:deepseekv41-flash-0909 (vLLM 0.1.dev20904+g179dd0fa9)
docker run -d \
--gpus '"device=<8 GPUs>"' \
--ipc=host \
--shm-size=32g \
--network host \
--ulimit memlock=-1 \
-v <host-path>:/hub:ro \
-e VLLM_ENGINE_READY_TIMEOUT_S=3600 \
-e VLLM_USE_RUST_FRONTEND=1 \
--entrypoint vllm \
vllm/vllm-openai:deepseekv41-flash-0909 \
serve deepseek-ai/DeepSeek-V4.1-Flash \
--served-model-name deepseek-ai/DeepSeek-V4.1-Flash \
--host 127.0.0.1 \
--port 30000 \
--tensor-parallel-size 8 \
--trust-remote-code \
--tokenizer-mode deepseek_v41 \
--tool-call-parser deepseek_v41 \
--enable-auto-tool-choice \
--reasoning-parser deepseek_v41 \
--gpu-memory-utilization 0.95 \
--max-model-len 262144 \
--max-num-seqs 64 \
--enable-prompt-tokens-details \
--disable-uvicorn-access-log \
--numa-bind \
--numa-bind-nodes 0 0 0 0 1 1 1 1 \
--speculative-config '{"method":"dspark","num_speculative_tokens":5,"draft_sample_method":"probabilistic","rejection_sample_method":"block","enable_adaptive_verification":true}'Host-specific paths are redacted as <host-path>.
Submitted by Artificial Analysis
H200 (SXM) x8
# DeepSeek V4.1 Flash (MXFP4) on H200 (SXM) x8 — vLLM, TP4 on 4 of the node's 8 GPUs, no speculative decoding
# (Engram offloaded to host memory, the vLLM default), Rust frontend, uvicorn access log off, max model length 262144.
# Weights: deepseek-ai/DeepSeek-V4.1-Flash @ dba1be0a40aa45a94ad051997016db3960a90277
# Image: vllm/vllm-openai:deepseekv41-flash-0909 (vLLM 0.1.dev20904+g179dd0fa9)
# Server pinned to the GPUs' NUMA node.
docker run -d \
--gpus '"device=<4 GPUs>"' \
--ipc=host --shm-size=32g --network host \
--ulimit memlock=-1 \
-v <host-path>:/hub:ro \
-e VLLM_ENGINE_READY_TIMEOUT_S=3600 \
-e VLLM_USE_RUST_FRONTEND=1 \
--entrypoint vllm \
vllm/vllm-openai:deepseekv41-flash-0909 \
serve deepseek-ai/DeepSeek-V4.1-Flash \
--served-model-name deepseek-ai/DeepSeek-V4.1-Flash \
--host 127.0.0.1 \
--port 30002 \
--tensor-parallel-size 4 \
--trust-remote-code \
--tokenizer-mode deepseek_v41 \
--tool-call-parser deepseek_v41 \
--enable-auto-tool-choice \
--reasoning-parser deepseek_v41 \
--gpu-memory-utilization 0.9 \
--max-model-len 262144 \
--enable-prompt-tokens-details \
--disable-uvicorn-access-logHost-specific paths are redacted as <host-path>.
Submitted by Artificial Analysis
# DeepSeek V4.1 Flash (MXFP4) on H200 (SXM) x8 — vLLM, TP4 on 4 of the node's 8 GPUs, DSpark speculative decoding
# (5 tokens, block rejection sampling, adaptive verification).
# --max-model-len 262144 and --gpu-memory-utilization 0.92: at the default 1M context the draft left no KV blocks.
# Weights: deepseek-ai/DeepSeek-V4.1-Flash @ dba1be0a40aa45a94ad051997016db3960a90277
# Image: vllm/vllm-openai:deepseekv41-flash-0909 (vLLM 0.1.dev20904+g179dd0fa9)
docker run -d \
--gpus '"device=<4 GPUs>"' \
--ipc=host --shm-size=32g --network host \
--ulimit memlock=-1 \
-v <host-path>:/hub:ro \
-e VLLM_ENGINE_READY_TIMEOUT_S=3600 \
--entrypoint vllm \
vllm/vllm-openai:deepseekv41-flash-0909 \
serve deepseek-ai/DeepSeek-V4.1-Flash \
--served-model-name deepseek-ai/DeepSeek-V4.1-Flash \
--host 127.0.0.1 \
--port 30002 \
--tensor-parallel-size 4 \
--trust-remote-code \
--tokenizer-mode deepseek_v41 \
--tool-call-parser deepseek_v41 \
--enable-auto-tool-choice \
--reasoning-parser deepseek_v41 \
--gpu-memory-utilization 0.92 \
--max-model-len 262144 \
--enable-prompt-tokens-details \
--speculative-config '{"method":"dspark","num_speculative_tokens":5,"draft_sample_method":"probabilistic","rejection_sample_method":"block","enable_adaptive_verification":true}'Host-specific paths are redacted as <host-path>.
Submitted by Artificial Analysis
# DeepSeek V4.1 Flash (MXFP4) on H200 (SXM) x8 — vLLM, TP8 on all 8 GPUs, DSpark speculative decoding
# (5 tokens, block rejection sampling, adaptive verification), Rust frontend, uvicorn access log off.
# --max-model-len 262144 and --gpu-memory-utilization 0.92: at the default 1M context the draft left no KV blocks.
# Weights: deepseek-ai/DeepSeek-V4.1-Flash @ dba1be0a40aa45a94ad051997016db3960a90277
# Image: vllm/vllm-openai:deepseekv41-flash-0909 (vLLM 0.1.dev20904+g179dd0fa9)
docker run -d \
--gpus '"device=<8 GPUs>"' \
--ipc=host --shm-size=32g --network host \
--ulimit memlock=-1 \
-v <host-path>:/hub:ro \
-e VLLM_ENGINE_READY_TIMEOUT_S=3600 \
-e VLLM_USE_RUST_FRONTEND=1 \
--entrypoint vllm \
vllm/vllm-openai:deepseekv41-flash-0909 \
serve deepseek-ai/DeepSeek-V4.1-Flash \
--served-model-name deepseek-ai/DeepSeek-V4.1-Flash \
--host 127.0.0.1 \
--port 30000 \
--tensor-parallel-size 8 \
--trust-remote-code \
--tokenizer-mode deepseek_v41 \
--tool-call-parser deepseek_v41 \
--enable-auto-tool-choice \
--reasoning-parser deepseek_v41 \
--gpu-memory-utilization 0.92 \
--max-model-len 262144 \
--enable-prompt-tokens-details \
--disable-uvicorn-access-log \
--speculative-config '{"method":"dspark","num_speculative_tokens":5,"draft_sample_method":"probabilistic","rejection_sample_method":"block","enable_adaptive_verification":true}'Host-specific paths are redacted as <host-path>.
Submitted by Artificial Analysis