vllm-project/vllm · error · ValueError

dspark_draft_topk is only supported by Qwen3DSparkModel

Error message

dspark_draft_topk is only supported by Qwen3DSparkModel

What it means

Raised when dspark_draft_topk is active (user-set or defaulted from hf_config) but the draft model's architectures list does not contain Qwen3DSparkModel. Only the Qwen3DSpark draft head implements the top-k restricted draft vocabulary, so other DSpark drafts reject the option.

Source

Thrown at vllm/config/speculative.py:1114

                    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,
                    )
                )
                self.draft_model_config.max_model_len = (
                    SpeculativeConfig._maybe_override_draft_max_model_len(
                        self.max_model_len,
                        self.draft_model_config.max_model_len,
                        self.target_model_config.max_model_len,
                    )

View on GitHub (pinned to c794754062)

Solutions

  1. Remove dspark_draft_topk from the config when the draft is not Qwen3DSparkModel
  2. Switch the draft model to a Qwen3DSparkModel checkpoint to use top-k drafting

Example fix

# before
speculative_config={"method": "dspark", "model": "my-k3-draft", "dspark_draft_topk": 4}
# after
speculative_config={"method": "dspark", "model": "my-k3-draft"}
Defensive patterns

Strategy: validation

Validate before calling

if topk is not None and "Qwen3DSparkModel" not in draft_config.architectures:
    raise ValueError("dspark_draft_topk requires a Qwen3DSparkModel draft")

Type guard

def supports_dspark_topk(draft_architectures: list[str]) -> bool:
    return "Qwen3DSparkModel" in draft_architectures

Prevention

When it happens

Trigger: speculative_config={'method': 'dspark', 'model': '<non-Qwen3DSpark draft>', 'dspark_draft_topk': 4}; or a K3DSparkModel draft whose checkpoint config carries a leftover dspark_draft_topk field.

Common situations: Pointing dspark_draft_topk at a custom/fine-tuned DSpark draft that is not based on Qwen3DSparkModel; config copied from a Qwen3 DSpark deployment and reused with another draft.

Related errors


AI-assisted analysis of vllm-project/vllm@c794754062 (2026-08-14). Data as JSON: /api/errors/42d0b9dfc54dd3e6. Report an issue: GitHub.