|
| 1 | +# Kimi-K3 AgentX with TP8 workers, MoRIIO READ and prefill-only CPU offload. |
| 2 | +base: |
| 3 | + schema: 2 |
| 4 | + name: kimik3-fp4-mi355x-vllm-disagg-agentic |
| 5 | + slurm: |
| 6 | + time_limit: '08:00:00' |
| 7 | + sbatch_directives: |
| 8 | + mem: '0' |
| 9 | + srun_options: |
| 10 | + container-remap-root: '' |
| 11 | + container-writable: '' |
| 12 | + mem: '0' |
| 13 | + container_mounts: |
| 14 | + /dev/infiniband: /dev/infiniband |
| 15 | + extra_mount: |
| 16 | + - /it-share/data/Inferact-Kimi-K3-DSpark:/models/Inferact-Kimi-K3-DSpark |
| 17 | + # Match the host's Ionic provider without replacing the image's verbs core. |
| 18 | + - /usr/lib/x86_64-linux-gnu/libibverbs/libionic-rdmav34.so:/usr/lib/x86_64-linux-gnu/libibverbs/libionic-rdmav34.so:ro |
| 19 | + resources: |
| 20 | + gpu_type: mi355x |
| 21 | + gpus_per_node: 8 |
| 22 | + frontend: |
| 23 | + type: vllm-router |
| 24 | + enable_multiple_frontends: false |
| 25 | + placement: |
| 26 | + node: head |
| 27 | + # Native Pyxis/Enroot digest reference; imported in the frontend's job step. |
| 28 | + container_image: registry-1.docker.io#vllm/vllm-router:sha256:1fbf06701abce8c8cd459414e472d63999c05b201baffc62e00727c10583f5ea |
| 29 | + args: |
| 30 | + policy: consistent_hash |
| 31 | + prefill-policy: consistent_hash |
| 32 | + decode-policy: consistent_hash |
| 33 | + log-level: info |
| 34 | + observability: |
| 35 | + enabled: false |
| 36 | + tachometer: |
| 37 | + enabled: false |
| 38 | + health_check: |
| 39 | + interval_seconds: 10 |
| 40 | + # Match the engine's 7200-second weight-loading budget. |
| 41 | + max_attempts: 720 |
| 42 | + engine: |
| 43 | + type: vllm |
| 44 | + connector: moriio |
| 45 | + roles: |
| 46 | + prefill: |
| 47 | + nodes: 1 |
| 48 | + workers: 1 |
| 49 | + gpus: 8 |
| 50 | + args: &common_args |
| 51 | + served-model-name: moonshotai/Kimi-K3 |
| 52 | + trust-remote-code: true |
| 53 | + tensor-parallel-size: 8 |
| 54 | + decode-context-parallel-size: 1 |
| 55 | + cp-kv-cache-interleave-size: 1 |
| 56 | + dcp-comm-backend: a2a |
| 57 | + moe-backend: auto |
| 58 | + load-format: fastsafetensors |
| 59 | + gpu-memory-utilization: 0.90 |
| 60 | + language-model-only: true |
| 61 | + enable-auto-tool-choice: true |
| 62 | + tool-call-parser: kimi_k3 |
| 63 | + reasoning-parser: kimi_k3 |
| 64 | + max-model-len: 1048576 |
| 65 | + stream-interval: 10 |
| 66 | + enable-prefix-caching: true |
| 67 | + prefix-match-unit: 128 |
| 68 | + kv-cache-dtype: fp8 |
| 69 | + mamba-ssm-cache-dtype: float32 |
| 70 | + block-size: 128 |
| 71 | + attention-backend: ROCM_AITER_MLA |
| 72 | + attention-config: '{"mla_prefill_backend":"ROCM_AITER_FA","use_prefill_query_quantization":true}' |
| 73 | + # The native srt driver supplies the measured AL for the selected DSpark |
| 74 | + # draft length in throughput runs and keeps real block rejection for eval. |
| 75 | + speculative-config: '{"model":"/models/Inferact-Kimi-K3-DSpark","method":"dspark","num_speculative_tokens":4,"attention_backend":"ROCM_AITER_MLA","kv_cache_dtype":"fp8","draft_sample_method":"probabilistic","rejection_sample_method":"block"}' |
| 76 | + kv-transfer-config: '{"kv_connector":"MultiConnector","kv_role":"kv_both","kv_load_failure_policy":"fail","kv_connector_extra_config":{"connectors":[{"kv_connector":"MoRIIOConnector","kv_role":"kv_producer","kv_load_failure_policy":"fail","kv_connector_extra_config":{"backend":"rdma"}},{"kv_connector":"SimpleCPUOffloadConnector","kv_role":"kv_both","kv_connector_extra_config":{"cpu_bytes_to_use":1799000000000,"lazy_offload":false}}]}}' |
| 77 | + env: &common_env |
| 78 | + NCCL_IB_HCA: rdma0,rdma1,rdma2,rdma3,rdma4,rdma5,rdma6,rdma7 |
| 79 | + NCCL_SOCKET_IFNAME: eno0 |
| 80 | + GLOO_SOCKET_IFNAME: eno0 |
| 81 | + # Use the nightly's default SiTUv2 activation selection. |
| 82 | + VLLM_ROCM_USE_AITER: '1' |
| 83 | + AITER_BF16_FP8_MOE_BOUND: '0' |
| 84 | + AITER_FLYDSL_STAGE2_FP8: '1' |
| 85 | + VLLM_ROCM_AITER_MLA_ASM_PADDING: asm |
| 86 | + VLLM_ROCM_AITER_MLA_DCP_VERIFY: asm |
| 87 | + VLLM_ROCM_QUICK_REDUCE_QUANTIZATION: INT4 |
| 88 | + VLLM_ROCM_QUICK_REDUCE_MAX_SIZE_BYTES_MB: '256' |
| 89 | + SAFETENSORS_FAST_GPU: '1' |
| 90 | + VLLM_SSM_CONV_STATE_LAYOUT: DS |
| 91 | + VLLM_KV_CACHE_LAYOUT: HND |
| 92 | + NCCL_DMABUF_ENABLE: '0' |
| 93 | + HSA_ENABLE_IPC_MODE_LEGACY: '1' |
| 94 | + HIP_FORCE_DEV_KERNARG: '1' |
| 95 | + PYTHONHASHSEED: '42' |
| 96 | + # Keep DCP collectives on the graph-compatible RCCL path. |
| 97 | + VLLM_USE_DIRECT_DCP_A2A: '0' |
| 98 | + VLLM_USE_DIRECT_DCP_Q_GATHER: '0' |
| 99 | + VLLM_USE_DIRECT_DCP_KV_GATHER: '0' |
| 100 | + VLLM_ENGINE_READY_TIMEOUT_S: '7200' |
| 101 | + VLLM_EXECUTE_MODEL_TIMEOUT_SECONDS: '1200' |
| 102 | + PYTHONNOUSERSITE: '1' |
| 103 | + VLLM_SERVER_DEV_MODE: '0' |
| 104 | + # Bound RDMA queue resources and the wait for available send slots. |
| 105 | + MORI_IO_SQ_BACKOFF_TIMEOUT_US: '50000' |
| 106 | + MORI_IO_QP_MAX_SEND_WR: '16384' |
| 107 | + MORI_IO_QP_MAX_CQE: '32768' |
| 108 | + MORI_IO_QP_MAX_SGE: '2' |
| 109 | + MORI_IO_TC_DISABLE: '0' |
| 110 | + decode: |
| 111 | + nodes: 1 |
| 112 | + workers: 1 |
| 113 | + gpus: 8 |
| 114 | + args: |
| 115 | + <<: *common_args |
| 116 | + kv-transfer-config: '{"kv_connector":"MoRIIOConnector","kv_role":"kv_consumer","kv_load_failure_policy":"fail","kv_connector_extra_config":{"backend":"rdma"}}' |
| 117 | + env: *common_env |
| 118 | + benchmark: |
| 119 | + placement: |
| 120 | + node: head |
| 121 | + |
| 122 | +override_1p3d_c12: |
| 123 | + roles: |
| 124 | + prefill: |
| 125 | + args: |
| 126 | + max-num-seqs: 24 |
| 127 | + max-num-batched-tokens: 8192 |
| 128 | + compilation-config: '{"mode":3,"cudagraph_mode":"NONE","max_cudagraph_capture_size":0,"custom_ops":["+fused_rms_norm_gated","+quant_fp8","+grouped_topk","+sparse_attn_indexer","none"]}' |
| 129 | + env: |
| 130 | + HSA_NO_SCRATCH_RECLAIM: '0' |
| 131 | + decode: |
| 132 | + nodes: 3 |
| 133 | + workers: 3 |
| 134 | + args: |
| 135 | + max-num-seqs: 8 |
| 136 | + max-num-batched-tokens: 512 |
| 137 | + compilation-config: '{"mode":3,"cudagraph_mode":"FULL_DECODE_ONLY","max_cudagraph_capture_size":40,"cudagraph_capture_sizes":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40],"custom_ops":["+fused_rms_norm_gated","+quant_fp8","+grouped_topk","+sparse_attn_indexer","none"]}' |
| 138 | + |
| 139 | +override_1p2d_c24: &tp8_c24 |
| 140 | + roles: &tp8_c24_roles |
| 141 | + prefill: |
| 142 | + args: |
| 143 | + decode-context-parallel-size: 8 |
| 144 | + max-num-seqs: 48 |
| 145 | + max-num-batched-tokens: 8192 |
| 146 | + compilation-config: '{"mode":3,"cudagraph_mode":"NONE","max_cudagraph_capture_size":0,"custom_ops":["+fused_rms_norm_gated","+quant_fp8","+grouped_topk","+sparse_attn_indexer","none"]}' |
| 147 | + decode: &tp8_c24_decode |
| 148 | + nodes: 2 |
| 149 | + workers: 2 |
| 150 | + args: &tp8_c24_decode_args |
| 151 | + decode-context-parallel-size: 8 |
| 152 | + max-num-seqs: 24 |
| 153 | + max-num-batched-tokens: 512 |
| 154 | + compilation-config: '{"mode":3,"cudagraph_mode":"FULL_DECODE_ONLY","max_cudagraph_capture_size":120,"cudagraph_capture_sizes":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,70,80,90,100,110,120],"custom_ops":["+fused_rms_norm_gated","+quant_fp8","+grouped_topk","+sparse_attn_indexer","none"]}' |
| 155 | + |
| 156 | +# Keep the c24 serving policy; scale only the decoder replicas and per-D limit. |
| 157 | +override_1p3d_c24: |
| 158 | + <<: *tp8_c24 |
| 159 | + roles: |
| 160 | + <<: *tp8_c24_roles |
| 161 | + decode: |
| 162 | + <<: *tp8_c24_decode |
| 163 | + nodes: 3 |
| 164 | + workers: 3 |
| 165 | + args: |
| 166 | + <<: *tp8_c24_decode_args |
| 167 | + max-num-seqs: 16 |
| 168 | + |
| 169 | +override_1p1d_c48: &tp8_c48 |
| 170 | + roles: &tp8_c48_roles |
| 171 | + prefill: &tp8_c48_prefill |
| 172 | + args: &tp8_c48_prefill_args |
| 173 | + decode-context-parallel-size: 8 |
| 174 | + max-num-seqs: 96 |
| 175 | + max-num-batched-tokens: 8192 |
| 176 | + compilation-config: '{"mode":3,"cudagraph_mode":"NONE","max_cudagraph_capture_size":0,"custom_ops":["+fused_rms_norm_gated","+quant_fp8","+grouped_topk","+sparse_attn_indexer","none"]}' |
| 177 | + env: |
| 178 | + # Short-tail segmented MLA can require ~4.1 GB of non-reclaimable scratch. |
| 179 | + HSA_NO_SCRATCH_RECLAIM: '0' |
| 180 | + decode: &tp8_c48_decode |
| 181 | + args: &tp8_c48_decode_args |
| 182 | + decode-context-parallel-size: 8 |
| 183 | + max-num-seqs: 96 |
| 184 | + max-num-batched-tokens: 512 |
| 185 | + compilation-config: '{"mode":3,"cudagraph_mode":"FULL_DECODE_ONLY","max_cudagraph_capture_size":240,"cudagraph_capture_sizes":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,130,140,150,160,170,180,190,200,210,220,230,240],"custom_ops":["+fused_rms_norm_gated","+quant_fp8","+grouped_topk","+sparse_attn_indexer","none"]}' |
| 186 | + |
| 187 | +override_1p1d_c56: |
| 188 | + <<: *tp8_c48 |
| 189 | + roles: |
| 190 | + <<: *tp8_c48_roles |
| 191 | + prefill: |
| 192 | + <<: *tp8_c48_prefill |
| 193 | + args: |
| 194 | + <<: *tp8_c48_prefill_args |
| 195 | + max-num-seqs: 112 |
| 196 | + decode: |
| 197 | + <<: *tp8_c48_decode |
| 198 | + args: |
| 199 | + <<: *tp8_c48_decode_args |
| 200 | + max-num-seqs: 112 |
| 201 | + compilation-config: '{"mode":3,"cudagraph_mode":"FULL_DECODE_ONLY","max_cudagraph_capture_size":280,"cudagraph_capture_sizes":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,130,140,150,160,170,180,190,200,210,220,230,240,250,260,270,280],"custom_ops":["+fused_rms_norm_gated","+quant_fp8","+grouped_topk","+sparse_attn_indexer","none"]}' |
| 202 | + |
| 203 | +override_1p2d_c48: |
| 204 | + <<: *tp8_c48 |
| 205 | + roles: |
| 206 | + <<: *tp8_c48_roles |
| 207 | + decode: |
| 208 | + <<: *tp8_c48_decode |
| 209 | + nodes: 2 |
| 210 | + workers: 2 |
| 211 | + args: |
| 212 | + <<: *tp8_c48_decode_args |
| 213 | + max-num-seqs: 48 |
0 commit comments