From ceaeca0b9e2952e61fcf16577908ee24d8390474 Mon Sep 17 00:00:00 2001 From: Eric Zhang Date: Wed, 5 Aug 2026 21:20:02 -0400 Subject: [PATCH] [Fix] Vocab out of bounds in DSpark for Inkling-Small (#33748) --- .../dspark_components/dspark_worker_v2.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/python/sglang/srt/speculative/dspark_components/dspark_worker_v2.py b/python/sglang/srt/speculative/dspark_components/dspark_worker_v2.py index d5b1ec03b..0182c8082 100644 --- a/python/sglang/srt/speculative/dspark_components/dspark_worker_v2.py +++ b/python/sglang/srt/speculative/dspark_components/dspark_worker_v2.py @@ -124,12 +124,18 @@ class DSparkWorkerV2(BaseSpecWorker): self.draft_model = bundle.draft_model self._draft_sampler = None + # The mask token needs an embedding row, not a tokenizer entry, so bound it + # by the embedding width. A padded vocab reserves rows past the real tokens + # and drafts place the mask there (Inkling: 200058 real, 201024 padded). + target_model_config = self.target_worker.model_runner.model_config + target_vocab_size = ( + getattr(target_model_config.hf_text_config, "padded_vocab_size", None) + or target_model_config.vocab_size + ) runtime_config = resolve_runtime_config( draft_hf_config=self.draft_model_runner.model_config.hf_config, speculative_num_draft_tokens=server_args.speculative_num_draft_tokens, - target_vocab_size=int( - self.target_worker.model_runner.model_config.vocab_size - ), + target_vocab_size=int(target_vocab_size), ) self.gamma = runtime_config.gamma self.verify_num_draft_tokens = runtime_config.verify_num_draft_tokens