|
| 1 | +name: "svf-vllm-disagg-gb200-2p3d-tep8-tp8-agentic" |
| 2 | + |
| 3 | +# Agentic-coding decode-heavy shape for GB200: two cache-affinitized TEP8 |
| 4 | +# prefill workers and three TP8 decode workers. Every worker spans two four-GPU |
| 5 | +# GB200 nodes. A dedicated infra node brings the allocation to eleven nodes / |
| 6 | +# 40 inference GPUs. |
| 7 | +# |
| 8 | +# TEP4 does not fit the DSv4 FP4 checkpoint in 186 GiB GB200 HBM: v0.23.0 |
| 9 | +# reached 182.5 GiB/rank and needed another 1.97 GiB while constructing MoE |
| 10 | +# weights (run 27732316539). TP8 is the minimum viable model sharding here. |
| 11 | +# Dynamo KV routing plus explicit vLLM KV-event publication preserves cache |
| 12 | +# affinity across the prefill replicas. Unlike DEP, TEP does not put |
| 13 | +# unrelated, highly variable agentic requests behind one attention barrier. |
| 14 | +# The 2026-05-26 Dynamo wheel is required for vLLM v0.23 KV-event tuples. The |
| 15 | +# older 2026-04-26 wheel rejects every BlockStored event's trailing metadata, |
| 16 | +# which leaves the router trees empty and destroys prefix affinity. |
| 17 | + |
| 18 | +model: |
| 19 | + path: "deepseek-v4-pro" |
| 20 | + container: "vllm/vllm-openai:v0.23.0" |
| 21 | + precision: "fp4" |
| 22 | + |
| 23 | +dynamo: |
| 24 | + install: true |
| 25 | + wheel: "1.2.0.dev20260526" |
| 26 | + |
| 27 | +setup_script: vllm-container-deps.sh |
| 28 | + |
| 29 | +slurm: |
| 30 | + time_limit: "8:00:00" |
| 31 | + |
| 32 | +health_check: |
| 33 | + max_attempts: 1440 |
| 34 | + interval_seconds: 10 |
| 35 | + |
| 36 | +resources: |
| 37 | + gpu_type: "gb200" |
| 38 | + gpus_per_node: 4 |
| 39 | + prefill_nodes: 4 |
| 40 | + decode_nodes: 6 |
| 41 | + prefill_workers: 2 |
| 42 | + decode_workers: 3 |
| 43 | + gpus_per_prefill: 8 |
| 44 | + gpus_per_decode: 8 |
| 45 | + |
| 46 | +infra: |
| 47 | + etcd_nats_dedicated_node: true |
| 48 | + nats_max_payload_mb: 32 |
| 49 | + |
| 50 | +frontend: |
| 51 | + type: dynamo |
| 52 | + enable_multiple_frontends: false |
| 53 | + env: |
| 54 | + # srt-slurm defaults to NATS, whose bounded streaming responders rejected |
| 55 | + # c64 decode handoffs as "all workers are busy". Dynamo documents TCP as |
| 56 | + # the fastest request plane; event publication still uses NATS separately. |
| 57 | + DYN_REQUEST_PLANE: "tcp" |
| 58 | + args: |
| 59 | + router-mode: "kv" |
| 60 | + router-reset-states: true |
| 61 | + |
| 62 | +backend: |
| 63 | + type: vllm |
| 64 | + connector: null |
| 65 | + prefill_environment: |
| 66 | + DYN_REQUEST_PLANE: "tcp" |
| 67 | + TILELANG_CLEANUP_TEMP_FILES: "1" |
| 68 | + VLLM_USE_NCCL_SYMM_MEM: "1" |
| 69 | + TORCH_SYMMMEM: "NVSHMEM" |
| 70 | + NCCL_CUMEM_ENABLE: "1" |
| 71 | + NCCL_MNNVL_ENABLE: "1" |
| 72 | + NCCL_NVLS_ENABLE: "1" |
| 73 | + VLLM_SERVER_DEV_MODE: "1" |
| 74 | + VLLM_SPARSE_INDEXER_MAX_LOGITS_MB: "1024" |
| 75 | + VLLM_MAX_TOKENS_PER_EXPERT_FP4_MOE: "2048" |
| 76 | + UCX_MEMTYPE_CACHE: "n" |
| 77 | + UCX_MEMTYPE_REG_WHOLE: "n" |
| 78 | + UCX_TLS: "cuda_copy,cuda_ipc,tcp" |
| 79 | + UCX_CUDA_IPC_ENABLE_MNNVL: "y" |
| 80 | + NCCL_P2P_LEVEL: NVL |
| 81 | + decode_environment: |
| 82 | + DYN_REQUEST_PLANE: "tcp" |
| 83 | + TILELANG_CLEANUP_TEMP_FILES: "1" |
| 84 | + VLLM_USE_NCCL_SYMM_MEM: "1" |
| 85 | + TORCH_SYMMMEM: "NVSHMEM" |
| 86 | + NCCL_CUMEM_ENABLE: "1" |
| 87 | + NCCL_MNNVL_ENABLE: "1" |
| 88 | + NCCL_NVLS_ENABLE: "1" |
| 89 | + VLLM_SERVER_DEV_MODE: "1" |
| 90 | + UCX_MEMTYPE_CACHE: "n" |
| 91 | + UCX_MEMTYPE_REG_WHOLE: "n" |
| 92 | + UCX_TLS: "cuda_copy,cuda_ipc,tcp" |
| 93 | + UCX_CUDA_IPC_ENABLE_MNNVL: "y" |
| 94 | + NCCL_P2P_LEVEL: NVL |
| 95 | + |
| 96 | + vllm_config: |
| 97 | + prefill: |
| 98 | + # vLLM v0.23 broadcasts rank zero's generated engine ID across each TP |
| 99 | + # group. Leaving engine_id unset gives every prefill replica a distinct |
| 100 | + # ID while keeping both nodes of that replica consistent. |
| 101 | + kv-transfer-config: '{"kv_connector": "NixlConnector", "kv_role": "kv_both"}' |
| 102 | + kv-events-config: '{"publisher":"zmq","topic":"kv-events","endpoint":"tcp://*:20080","enable_kv_cache_events":true}' |
| 103 | + served-model-name: "deepseek-ai/DeepSeek-V4-Pro" |
| 104 | + kv-cache-dtype: "fp8" |
| 105 | + tensor-parallel-size: 8 |
| 106 | + pipeline-parallel-size: 1 |
| 107 | + enable-expert-parallel: true |
| 108 | + enable-ep-weight-filter: true |
| 109 | + attention-config: '{"use_fp4_indexer_cache": true}' |
| 110 | + enforce-eager: true |
| 111 | + max-num-seqs: 16 |
| 112 | + max-num-batched-tokens: 16384 |
| 113 | + trust-remote-code: true |
| 114 | + no-enable-flashinfer-autotune: true |
| 115 | + no-async-scheduling: true |
| 116 | + block-size: 256 |
| 117 | + gpu-memory-utilization: 0.9 |
| 118 | + no-disable-hybrid-kv-cache-manager: true |
| 119 | + tokenizer-mode: deepseek_v4 |
| 120 | + decode: |
| 121 | + # Generated IDs are distinct per decode replica and synchronized across |
| 122 | + # each replica's two-node TP8 group by vLLM v0.23. |
| 123 | + kv-transfer-config: '{"kv_connector": "NixlConnector", "kv_role": "kv_both"}' |
| 124 | + served-model-name: "deepseek-ai/DeepSeek-V4-Pro" |
| 125 | + kv-cache-dtype: "fp8" |
| 126 | + tensor-parallel-size: 8 |
| 127 | + pipeline-parallel-size: 1 |
| 128 | + attention-config: '{"use_fp4_indexer_cache": true}' |
| 129 | + max-num-seqs: 512 |
| 130 | + max-cudagraph-capture-size: 512 |
| 131 | + max-num-batched-tokens: 512 |
| 132 | + trust-remote-code: true |
| 133 | + no-enable-flashinfer-autotune: true |
| 134 | + block-size: 256 |
| 135 | + compilation-config: '{"cudagraph_mode":"FULL_DECODE_ONLY","mode":0}' |
| 136 | + gpu-memory-utilization: 0.9 |
| 137 | + stream-interval: 50 |
| 138 | + all2all-backend: "flashinfer_nvlink_one_sided" |
| 139 | + no-disable-hybrid-kv-cache-manager: true |
| 140 | + tokenizer-mode: deepseek_v4 |
| 141 | + |
| 142 | +sbatch_directives: |
| 143 | + cpus-per-task: "72" |
| 144 | + |
| 145 | +srun_options: |
| 146 | + container-remap-root: "" |
| 147 | + |
| 148 | +benchmark: |
| 149 | + type: custom |
| 150 | + command: bash /infmax-workspace/benchmarks/multi_node/agentic_srt.sh |
| 151 | + env: |
| 152 | + INFMAX_CONTAINER_WORKSPACE: /infmax-workspace |
| 153 | + RESULT_DIR: /logs/agentic |
| 154 | + PORT: "8000" |
| 155 | + IS_MULTINODE: "true" |
| 156 | + AIPERF_DATASET_MMAP_CACHE_DIR: "/aiperf_mmap_cache" |
| 157 | + HF_HUB_CACHE: "/hf_hub_cache" |
| 158 | + WEKA_LOADER_OVERRIDE: "semianalysis_cc_traces_weka_061526" |
0 commit comments