vllm-project/vllm · error · ValueError
dspark_draft_topk must be between 1 and the draft vocabulary
Error message
dspark_draft_topk must be between 1 and the draft vocabulary size ({draft_vocab_size}) What it means
Raised inside the dspark branch when the resolved dspark_draft_topk (from the CLI/config or the draft hf_config) falls outside [1, draft_vocab_size], where draft_vocab_size is hf_config.draft_vocab_size if present, else hf_config.vocab_size. The top-k logits slice must reference real vocabulary rows, so out-of-range k is rejected before the draft worker is built.
Source
Thrown at vllm/config/speculative.py:1106
if self.dspark_draft_topk is not None and self.method != "dspark":
raise ValueError("dspark_draft_topk is only supported by DSpark")
dspark_draft_topk = None
if self.method == "dspark":
hf_config = self.draft_model_config.hf_config
dspark_draft_topk = self.dspark_draft_topk
if dspark_draft_topk is None:
dspark_draft_topk = getattr(
hf_config, "dspark_draft_topk", None
)
if dspark_draft_topk is not None:
draft_vocab_size = (
getattr(hf_config, "draft_vocab_size", None)
or hf_config.vocab_size
)
if not 1 <= dspark_draft_topk <= draft_vocab_size:
raise ValueError(
"dspark_draft_topk must be between 1 and the "
f"draft vocabulary size ({draft_vocab_size})"
)
if (
"Qwen3DSparkModel"
not in self.draft_model_config.architectures
):
raise ValueError(
"dspark_draft_topk is only supported by "
"Qwen3DSparkModel"
)
hf_config.dspark_draft_topk = dspark_draft_topk
self.draft_tensor_parallel_size = (
SpeculativeConfig._verify_and_get_draft_tp(
self.target_parallel_config,
self.draft_tensor_parallel_size,
self.draft_model_config.hf_config,View on GitHub (pinned to c794754062)
Solutions
- Set dspark_draft_topk to a value in [1, draft_vocab_size]; check the draft config's vocab_size/draft_vocab_size first
- If the bad value comes from the checkpoint's hf_config, override it explicitly in speculative_config
- Lower the value to a conventional small k (e.g. 1-10) which is the intended usage]
Example fix
# before
speculative_config={"method": "dspark", "model": "...", "dspark_draft_topk": 200000} # draft vocab 152k
# after
speculative_config={"method": "dspark", "model": "...", "dspark_draft_topk": 8} Defensive patterns
Strategy: validation
Validate before calling
draft_vocab = getattr(hf_config, "draft_vocab_size", None) or hf_config.vocab_size
if not 1 <= topk <= draft_vocab:
raise ValueError(f"dspark_draft_topk={topk} outside [1, {draft_vocab}]") Type guard
def is_valid_dspark_topk(topk: int, draft_vocab_size: int) -> bool:
return 1 <= topk <= draft_vocab_size Prevention
- Read draft_vocab_size/draft_vocab_size from the draft config.json before choosing top-k
- Clamp user-supplied top-k to the vocabulary range in your serving-layer config validator
When it happens
Trigger: Setting dspark_draft_topk to 0, a negative number, or a value larger than the draft model's vocab (e.g. 200000 against a 152k vocab draft); or a draft checkpoint whose embedded dspark_draft_topk exceeds its own vocab_size after tokenizer remapping.
Common situations: Tuning top-k for acceptance-rate vs. cost without checking the draft head size; mixing a large-vocab top-k value copied from a different model family.
Related errors
- dspark_draft_topk is only supported by Qwen3DSparkModel
- target_model_config must be present for dspark
- MLA DSpark does not currently support decode context paralle
- dspark_draft_topk is only supported by DSpark
- Adaptive verification only supported with DSpark
AI-assisted analysis of vllm-project/vllm@c794754062 (2026-08-14).
Data as JSON: /api/errors/d994c654dc5bf15c.
Report an issue: GitHub.