📚 The doc issue
Environment
vLLM version: 0.20.1
Launch method: vllm serve
GPU: single GPU via CUDA_VISIBLE_DEVICES=0
Model under test: gemma-4-E2B-it
Speculative config: assistant model via google/gemma-4-E2B-it-assistant
Relevant docs currently show Gemma 4 assistant-model speculative decoding examples, and the Gemma 4 recipe presents this as a supported usage path.
Reproduction
I tried to run Gemma 4 assistant speculative decoding on vllm==0.20.1 with the following command:
CUDA_VISIBLE_DEVICES=0 vllm serve google/gemma-4-E2B-it
--host 0.0.0.0
--port 8002
--tensor-parallel-size 1
--max-model-len 8192
--speculative-config '{"model": "google/gemma-4-E2B-it-assistant", "num_speculative_tokens": 4}'
The attached runtime log shows the full startup sequence and failure during engine initialization.
Expected
Based on the current Gemma 4 documentation, I expected the documented assistant-model speculative decoding path to start successfully, or at minimum for the documentation to clearly state that this path is not supported on the latest stable PyPI release.
Actual
Engine initialization fails with the following error:
NotImplementedError: Speculative Decoding with draft models or parallel drafting does not support multimodal models yet
The log shows that vLLM resolves the Gemma 4 target model, initializes speculative decoding, and then aborts because the draft-model speculative path rejects multimodal models.
More specifically, the failure occurs after the engine is created with:
speculative_config=SpeculativeConfig(method='draft_model', model='google/gemma-4-E2B-it-assistant', num_spec_tokens=4)
and then terminates in llm_base_proposer.py with the multimodal restriction.
Why this is confusing
This is especially confusing because I am already using speculative decoding successfully in production with the following Qwen3.5-4B configuration:
CUDA_VISIBLE_DEVICES=0 vllm serve Qwen/Qwen3.5-4B
--served-model-name Qwen3.5-4B
--host 0.0.0.0
--port 8002
--tensor-parallel-size 1
--dtype bfloat16
--max-model-len 131072
--block-size 16
--gpu-memory-utilization 0.9
--max-num-seqs 2
--max-num-batched-tokens 4096
--enable-prefix-caching
--prefix-caching-hash-algo sha256
--speculative-config '{"model":"Qwen/Qwen3.5-4B","num_speculative_tokens":2}'
From a user perspective, this makes the current behavior look inconsistent. The issue is not that “speculative decoding is generally unavailable,” but that the documented Gemma 4 assistant path appears available while failing on the latest stable version with a multimodal restriction. The speculative decoding docs also distinguish between draft-model speculation and other speculation paths, which makes this difference important to document clearly.
Request
Please clarify the following:
- Is Gemma 4 assistant speculative decoding officially supported on stable vllm==0.20.1?
- If not, can the Gemma 4 recipe page explicitly warn that the documented command does not work on the latest stable PyPI release?
- If support currently requires nightly or a specific Docker image, can you provide a minimal reproducible example for that exact supported environment?
- Can you document clearly how the Gemma 4 assistant speculative path differs from currently working speculative configurations that users may already be running?
At the moment, the main issue is not only support status, but also that the current documentation and actual stable-runtime behavior do not line up clearly enough for users.
Suggest a potential alternative/fix
No response
Before submitting a new issue...
📚 The doc issue
Environment
vLLM version: 0.20.1
Launch method: vllm serve
GPU: single GPU via CUDA_VISIBLE_DEVICES=0
Model under test: gemma-4-E2B-it
Speculative config: assistant model via google/gemma-4-E2B-it-assistant
Relevant docs currently show Gemma 4 assistant-model speculative decoding examples, and the Gemma 4 recipe presents this as a supported usage path.
Reproduction
I tried to run Gemma 4 assistant speculative decoding on vllm==0.20.1 with the following command:
CUDA_VISIBLE_DEVICES=0 vllm serve google/gemma-4-E2B-it
--host 0.0.0.0
--port 8002
--tensor-parallel-size 1
--max-model-len 8192
--speculative-config '{"model": "google/gemma-4-E2B-it-assistant", "num_speculative_tokens": 4}'
The attached runtime log shows the full startup sequence and failure during engine initialization.
Expected
Based on the current Gemma 4 documentation, I expected the documented assistant-model speculative decoding path to start successfully, or at minimum for the documentation to clearly state that this path is not supported on the latest stable PyPI release.
Actual
Engine initialization fails with the following error:
NotImplementedError: Speculative Decoding with draft models or parallel drafting does not support multimodal models yet
The log shows that vLLM resolves the Gemma 4 target model, initializes speculative decoding, and then aborts because the draft-model speculative path rejects multimodal models.
More specifically, the failure occurs after the engine is created with:
speculative_config=SpeculativeConfig(method='draft_model', model='google/gemma-4-E2B-it-assistant', num_spec_tokens=4)
and then terminates in llm_base_proposer.py with the multimodal restriction.
Why this is confusing
This is especially confusing because I am already using speculative decoding successfully in production with the following Qwen3.5-4B configuration:
CUDA_VISIBLE_DEVICES=0 vllm serve Qwen/Qwen3.5-4B
--served-model-name Qwen3.5-4B
--host 0.0.0.0
--port 8002
--tensor-parallel-size 1
--dtype bfloat16
--max-model-len 131072
--block-size 16
--gpu-memory-utilization 0.9
--max-num-seqs 2
--max-num-batched-tokens 4096
--enable-prefix-caching
--prefix-caching-hash-algo sha256
--speculative-config '{"model":"Qwen/Qwen3.5-4B","num_speculative_tokens":2}'
From a user perspective, this makes the current behavior look inconsistent. The issue is not that “speculative decoding is generally unavailable,” but that the documented Gemma 4 assistant path appears available while failing on the latest stable version with a multimodal restriction. The speculative decoding docs also distinguish between draft-model speculation and other speculation paths, which makes this difference important to document clearly.
Request
Please clarify the following:
At the moment, the main issue is not only support status, but also that the current documentation and actual stable-runtime behavior do not line up clearly enough for users.
Suggest a potential alternative/fix
No response
Before submitting a new issue...