[UX] DCP Topology Validation (#49777)
Signed-off-by: Taneem Ibrahim <taneem.ibrahim@gmail.com>
Taneem Ibrahim committed
Jul 25, 2026 at 16:53 UTC
dbd80cc031718cae22ec8999bc5a494bacc4e955
1 file changed
+23
-17
vllm/config/model.py
+23
-17
@@ -1298,27 +1298,33 @@ class ModelConfig:
1298
decode_context_parallel_size = parallel_config.decode_context_parallel_size
1299
if decode_context_parallel_size > 1 and not self.use_mla:
1300
total_num_kv_heads = self.get_total_num_kv_heads()
1301
- assert tensor_parallel_size > total_num_kv_heads, (
1302
- f"tensor parallel size {tensor_parallel_size} must be greater "
1303
- f"than total num kv heads {total_num_kv_heads} when enable "
1304
- f"decode context parallel for GQA/MQA"
1305
- )
1301
+ if tensor_parallel_size <= total_num_kv_heads:
1302
+ raise ValueError(
1303
+ "Decode context parallelism for GQA/MQA requires "
1304
+ f"`--tensor-parallel-size` ({tensor_parallel_size}) to be "
1305
+ "greater than the model's total number of KV heads "
1306
+ f"({total_num_kv_heads}). Increase `--tensor-parallel-size` "
1307
+ "or set `--decode-context-parallel-size 1`."
1308
+ )
1309
1310
max_dcp_size = tensor_parallel_size // total_num_kv_heads
1308
- assert decode_context_parallel_size <= max_dcp_size, (
1309
- f"decode context parallel size must less than or equal to "
1310
- f"(tensor parallel size {tensor_parallel_size} // total "
1311
- f"num kv heads {total_num_kv_heads}) = {max_dcp_size}, "
1312
- f"but got {decode_context_parallel_size}"
1313
- )
1311
+ if decode_context_parallel_size > max_dcp_size:
1312
+ raise ValueError(
1313
+ "`--decode-context-parallel-size` "
1314
+ f"({decode_context_parallel_size}) exceeds the maximum "
1315
+ f"supported value ({max_dcp_size}) for "
1316
+ f"`--tensor-parallel-size` ({tensor_parallel_size}) and "
1317
+ f"{total_num_kv_heads} model KV heads."
1318
+ )
1319
1320
num_q_per_kv = total_num_attention_heads // total_num_kv_heads
1316
- assert num_q_per_kv % decode_context_parallel_size == 0, (
1317
- f"Total number of q per kv attn heads ({num_q_per_kv})"
1318
- " must be divisible by dcp world size when enable "
1319
- "decode context parallel for GQA "
1320
- f"({parallel_config.decode_context_parallel_size})."
1321
- )
1321
+ if num_q_per_kv % decode_context_parallel_size != 0:
1322
+ raise ValueError(
1323
+ "The model's number of query heads per KV head "
1324
+ f"({num_q_per_kv}) must be divisible by "
1325
+ "`--decode-context-parallel-size` "
1326
+ f"({decode_context_parallel_size}) for GQA/MQA."
1327
+ )
1328
1329
# torch_shm uses a single IPC queue to rank 0; DP>1 is
1330
# incompatible because API servers can't know which