vllm - ✅(Solved) Fix [Bug]: Worse EAGLE3 acceptance rates on MRV2 [1 pull requests, 1 comments, 1 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
vllm-project/vllm#40551Fetched 2026-04-22 07:43:52
View on GitHub
Comments
1
Participants
1
Timeline
6
Reactions
0
Participants
Timeline (top)
labeled ×2subscribed ×2commented ×1mentioned ×1

Fix Action

Fix / Workaround

============================== CPU Info

Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Address sizes: 46 bits physical, 48 bits virtual Byte Order: Little Endian CPU(s): 24 On-line CPU(s) list: 0-23 Vendor ID: GenuineIntel Model name: Intel(R) Core(TM) Ultra 9 285K CPU family: 6 Model: 198 Thread(s) per core: 1 Core(s) per socket: 24 Socket(s): 1 Stepping: 2 CPU(s) scaling MHz: 131% CPU max MHz: 4600.0000 CPU min MHz: 800.0000 BogoMIPS: 7372.80 Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault ssbd ibrs ibpb stibp ibrs_enhanced tpr_shadow flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid rdt_a rdseed adx smap clflushopt clwb intel_pt sha_ni xsaveopt xsavec xgetbv1 xsaves split_lock_detect user_shstk avx_vnni lam wbnoinvd dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp hwp_pkg_req hfi vnmi umip pku ospke waitpkg gfni vaes vpclmulqdq rdpid bus_lock_detect movdiri movdir64b fsrm md_clear serialize arch_lbr ibt flush_l1d arch_capabilities Virtualization: VT-x L1d cache: 768 KiB (20 instances) L1i cache: 1.3 MiB (20 instances) L2 cache: 40 MiB (12 instances) L3 cache: 36 MiB (1 instance) NUMA node(s): 1 NUMA node0 CPU(s): 0-23 Vulnerability Gather data sampling: Not affected Vulnerability Ghostwrite: Not affected Vulnerability Indirect target selection: Not affected Vulnerability Itlb multihit: Not affected Vulnerability L1tf: Not affected Vulnerability Mds: Not affected Vulnerability Meltdown: Not affected Vulnerability Mmio stale data: Not affected Vulnerability Old microcode: Not affected Vulnerability Reg file data sampling: Not affected Vulnerability Retbleed: Not affected Vulnerability Spec rstack overflow: Not affected Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl Vulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization Vulnerability Spectre v2: Mitigation; Enhanced / Automatic IBRS; IBPB conditional; PBRSB-eIBRS Not affected; BHI BHI_DIS_S Vulnerability Srbds: Not affected Vulnerability Tsa: Not affected Vulnerability Tsx async abort: Not affected Vulnerability Vmscape: Mitigation; IBPB before exit to userspace

PR fix notes

PR #40656: [Bugfix] Fix EAGLE3 acceptance rate regression on MRV2 when draft head does not use aux hidden states

Description (problem / solution / changelog)

Purpose

Fixes #40551 -- degraded EAGLE3 acceptance rates on MRV2 when using draft heads that do not rely on auxiliary hidden states (e.g. nvidia/gpt-oss-120b-Eagle3-v2).

Root cause

Some EAGLE3 draft heads set eagle_config["use_aux_hidden_state"] = False in their HuggingFace config to indicate they consume only the last target-model hidden state, the same way EAGLE-1 does, rather than the concatenated multi-layer auxiliary states.

In MRV1 (vllm/v1/worker/gpu_model_runner.py) this flag is already respected:

if self.speculative_config.method == "eagle3":
    self.use_aux_hidden_state_outputs = (
        self.drafter.eagle3_use_aux_hidden_state   # reads the config flag
    )

In MRV2 (vllm/v1/worker/gpu/model_runner.py) the same flag was missing and the runner unconditionally set:

if self.speculative_config.method == "eagle3":
    self.use_aux_hidden_state_outputs = True   # always True

When use_aux_hidden_state_outputs=True the target model is instrumented to return auxiliary hidden states and set_eagle3_aux_hidden_state_layers is called. The speculator's propose then sees a non-empty aux_hidden_states list and calls model.combine_hidden_states(torch.cat(aux_hidden_states, dim=-1)). For heads where use_aux_hidden_state=False, combine_hidden_states returns its input unchanged, so the draft model receives a tensor that is 3x the expected hidden size -- completely wrong activations and consequently poor acceptance rates.

Fix

Add get_eagle3_use_aux_hidden_state_from_config to eagle3_utils.py (mirrors the logic already in SpecDecodeBaseProposer._get_eagle3_use_aux_hidden_state_from_config used by MRV1) and use it in the MRV2 model runner to set use_aux_hidden_state_outputs conditionally.

Test Plan

pytest tests/v1/worker/test_eagle3_utils.py -v

Test Result

tests/v1/worker/test_eagle3_utils.py::TestGetEagle3UseAuxHiddenStateFromConfig::test_returns_true_when_no_eagle_config PASSED
tests/v1/worker/test_eagle3_utils.py::TestGetEagle3UseAuxHiddenStateFromConfig::test_returns_true_when_use_aux_hidden_state_key_missing PASSED
tests/v1/worker/test_eagle3_utils.py::TestGetEagle3UseAuxHiddenStateFromConfig::test_returns_true_when_explicitly_true PASSED
tests/v1/worker/test_eagle3_utils.py::TestGetEagle3UseAuxHiddenStateFromConfig::test_returns_false_when_explicitly_false PASSED
tests/v1/worker/test_eagle3_utils.py::TestGetEagle3UseAuxHiddenStateFromConfig::test_returns_true_when_no_draft_model_config PASSED
tests/v1/worker/test_eagle3_utils.py::TestGetEagle3UseAuxHiddenStateFromConfig::test_returns_true_when_spec_config_none PASSED

6 passed in 0.05s

Changed files

  • tests/v1/worker/test_eagle3_utils.py (added, +89/-0)
  • vllm/v1/worker/gpu/model_runner.py (modified, +11/-2)
  • vllm/v1/worker/gpu/spec_decode/eagle/eagle3_utils.py (modified, +24/-0)

Code Example

Collecting environment information...
==============================
        System Info
==============================
OS                           : Ubuntu 24.04.4 LTS (x86_64)
GCC version                  : (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0
Clang version                : 18.1.3 (1ubuntu1)
CMake version                : version 3.28.3
Libc version                 : glibc-2.39

==============================
       PyTorch Info
==============================
PyTorch version              : 2.11.0+cu130
Is debug build               : False
CUDA used to build PyTorch   : 13.0
ROCM used to build PyTorch   : N/A
XPU used to build PyTorch    : N/A

==============================
      Python Environment
==============================
Python version               : 3.12.3 (main, Mar  3 2026, 12:15:18) [GCC 13.3.0] (64-bit runtime)
Python platform              : Linux-6.17.0-20-generic-x86_64-with-glibc2.39
    
==============================
       CUDA / GPU Info
==============================
Is CUDA available            : True
CUDA runtime version         : 13.1.115
CUDA_MODULE_LOADING set to   : 
GPU models and configuration : GPU 0: NVIDIA RTX PRO 6000 Blackwell Workstation Edition
Nvidia driver version        : 580.126.16
cuDNN version                : Could not collect
HIP runtime version          : N/A
MIOpen runtime version       : N/A
Is XNNPACK available         : True

==============================
          CPU Info
==============================
Architecture:                            x86_64
CPU op-mode(s):                          32-bit, 64-bit
Address sizes:                           46 bits physical, 48 bits virtual
Byte Order:                              Little Endian
CPU(s):                                  24
On-line CPU(s) list:                     0-23
Vendor ID:                               GenuineIntel
Model name:                              Intel(R) Core(TM) Ultra 9 285K
CPU family:                              6
Model:                                   198
Thread(s) per core:                      1
Core(s) per socket:                      24
Socket(s):                               1
Stepping:                                2
CPU(s) scaling MHz:                      131%
CPU max MHz:                             4600.0000
CPU min MHz:                             800.0000
BogoMIPS:                                7372.80
Flags:                                   fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault ssbd ibrs ibpb stibp ibrs_enhanced tpr_shadow flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid rdt_a rdseed adx smap clflushopt clwb intel_pt sha_ni xsaveopt xsavec xgetbv1 xsaves split_lock_detect user_shstk avx_vnni lam wbnoinvd dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp hwp_pkg_req hfi vnmi umip pku ospke waitpkg gfni vaes vpclmulqdq rdpid bus_lock_detect movdiri movdir64b fsrm md_clear serialize arch_lbr ibt flush_l1d arch_capabilities
Virtualization:                          VT-x
L1d cache:                               768 KiB (20 instances)
L1i cache:                               1.3 MiB (20 instances)
L2 cache:                                40 MiB (12 instances)
L3 cache:                                36 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-23
Vulnerability Gather data sampling:      Not affected
Vulnerability Ghostwrite:                Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Old microcode:             Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; usercopy/swapgs barriers and __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; Enhanced / Automatic IBRS; IBPB conditional; PBRSB-eIBRS Not affected; BHI BHI_DIS_S
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Mitigation; IBPB before exit to userspace

==============================
Versions of relevant libraries
==============================
[pip3] flashinfer-python==0.6.8.post1
[pip3] numpy==2.2.6
[pip3] nvidia-cublas==13.1.0.3
[pip3] nvidia-cublas-cu12==12.8.4.1
[pip3] nvidia-cuda-cupti==13.0.85
[pip3] nvidia-cuda-cupti-cu12==12.8.90
[pip3] nvidia-cuda-nvrtc==13.0.88
[pip3] nvidia-cuda-nvrtc-cu12==12.8.93
[pip3] nvidia-cuda-runtime==13.0.96
[pip3] nvidia-cuda-runtime-cu12==12.8.90
[pip3] nvidia-cudnn-cu12==9.10.2.21
[pip3] nvidia-cudnn-cu13==9.19.0.56
[pip3] nvidia-cudnn-frontend==1.18.0
[pip3] nvidia-cufft==12.0.0.61
[pip3] nvidia-cufft-cu12==11.3.3.83
[pip3] nvidia-cufile==1.15.1.6
[pip3] nvidia-cufile-cu12==1.13.1.3
[pip3] nvidia-curand==10.4.0.35
[pip3] nvidia-curand-cu12==10.3.9.90
[pip3] nvidia-cusolver==12.0.4.66
[pip3] nvidia-cusolver-cu12==11.7.3.90
[pip3] nvidia-cusparse==12.6.3.3
[pip3] nvidia-cusparse-cu12==12.5.8.93
[pip3] nvidia-cusparselt-cu12==0.7.1
[pip3] nvidia-cusparselt-cu13==0.8.0
[pip3] nvidia-cutlass-dsl==4.5.0.dev0
[pip3] nvidia-cutlass-dsl-libs-base==4.5.0.dev0
[pip3] nvidia-ml-py==13.595.45
[pip3] nvidia-nccl-cu12==2.27.5
[pip3] nvidia-nccl-cu13==2.28.9
[pip3] nvidia-nvjitlink==13.0.88
[pip3] nvidia-nvjitlink-cu12==12.8.93
[pip3] nvidia-nvshmem-cu12==3.4.5
[pip3] nvidia-nvshmem-cu13==3.4.5
[pip3] nvidia-nvtx==13.0.85
[pip3] nvidia-nvtx-cu12==12.8.90
[pip3] pyzmq==27.1.0
[pip3] torch==2.11.0
[pip3] torch_c_dlpack_ext==0.1.5
[pip3] torchaudio==2.11.0
[pip3] torchvision==0.26.0
[pip3] transformers==4.57.6
[pip3] triton==3.6.0
[conda] Could not collect

==============================
         vLLM Info
==============================
ROCM Version                 : Could not collect
vLLM Version                 : 0.19.2rc1.dev89+g6fbec8ed4.d20260421 (git sha: 6fbec8ed4, date: 20260421)
vLLM Build Flags:
  CUDA Archs: Not Set; ROCm: Disabled; XPU: Disabled
GPU Topology:
        GPU0    CPU Affinity    NUMA Affinity   GPU NUMA ID
GPU0     X      0-23    0               N/A

Legend:

  X    = Self
  SYS  = Connection traversing PCIe as well as the SMP interconnect between NUMA nodes (e.g., QPI/UPI)
  NODE = Connection traversing PCIe as well as the interconnect between PCIe Host Bridges within a NUMA node
  PHB  = Connection traversing PCIe as well as a PCIe Host Bridge (typically the CPU)
  PXB  = Connection traversing multiple PCIe bridges (without traversing the PCIe Host Bridge)
  PIX  = Connection traversing at most a single PCIe bridge
  NV#  = Connection traversing a bonded set of # NVLinks

==============================
     Environment Variables
==============================
PYTORCH_NVML_BASED_CUDA_CHECK=1
TORCHINDUCTOR_COMPILE_THREADS=1
TORCHINDUCTOR_CACHE_DIR=/tmp/torchinductor_bchislett

---

export VLLM_USE_V2_MODEL_RUNNER=1
python3 -m \
    vllm.entrypoints.cli.main serve Qwen/Qwen3-8B --port 9000 --speculative-config '{"method": "eagle3", "model": "RedHatAI/Qwen3-8B-speculator.eagle3", "num_speculative_tokens": 7}' --max-num-batched-tokens 32768

---

============ Serving Benchmark Result ============
Successful requests:                     80        
Failed requests:                         0         
Benchmark duration (s):                  5.20      
Total input tokens:                      6078      
Total generated tokens:                  20478     
Request throughput (req/s):              15.38     
Output token throughput (tok/s):         3936.20   
Peak output token throughput (tok/s):    1840.00   
Peak concurrent requests:                80.00     
Total token throughput (tok/s):          5104.49   
---------------Time to First Token----------------
Mean TTFT (ms):                          149.95    
Median TTFT (ms):                        165.88    
P99 TTFT (ms):                           171.82    
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          17.57     
Median TPOT (ms):                        17.85     
P99 TPOT (ms):                           19.84     
---------------Inter-token Latency----------------
Mean ITL (ms):                           42.26     
Median ITL (ms):                         43.45     
P99 ITL (ms):                            47.16     
---------------Speculative Decoding---------------
Acceptance rate (%):                     20.25     
Acceptance length:                       2.42      
Drafts:                                  8478      
Draft tokens:                            59346     
Accepted tokens:                         12018     
Per-position acceptance (%):
  Position 0:                            64.11     
  Position 1:                            38.28     
  Position 2:                            19.20     
  Position 3:                            9.58      
  Position 4:                            5.38      
  Position 5:                            3.26      
  Position 6:                            1.96      
==================================================

---

============ Serving Benchmark Result ============
Successful requests:                     80        
Failed requests:                         0         
Benchmark duration (s):                  5.52      
Total input tokens:                      6078      
Total generated tokens:                  20480     
Request throughput (req/s):              14.50     
Output token throughput (tok/s):         3713.23   
Peak output token throughput (tok/s):    1760.00   
Peak concurrent requests:                80.00     
Total token throughput (tok/s):          4815.23   
---------------Time to First Token----------------
Mean TTFT (ms):                          150.72    
Median TTFT (ms):                        158.25    
P99 TTFT (ms):                           163.40    
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          18.54     
Median TPOT (ms):                        19.03     
P99 TPOT (ms):                           20.94     
---------------Inter-token Latency----------------
Mean ITL (ms):                           43.19     
Median ITL (ms):                         44.41     
P99 ITL (ms):                            47.75     
---------------Speculative Decoding---------------
Acceptance rate (%):                     19.13     
Acceptance length:                       2.34      
Drafts:                                  8755      
Draft tokens:                            61285     
Accepted tokens:                         11726     
Per-position acceptance (%):
  Position 0:                            62.01     
  Position 1:                            35.96     
  Position 2:                            17.89     
  Position 3:                            9.11      
  Position 4:                            4.65      
  Position 5:                            2.65      
  Position 6:                            1.67      
==================================================

---

============ Serving Benchmark Result ============
Successful requests:                     80        
Failed requests:                         0         
Benchmark duration (s):                  5.33      
Total input tokens:                      6078      
Total generated tokens:                  20480     
Request throughput (req/s):              15.01     
Output token throughput (tok/s):         3841.50   
Peak output token throughput (tok/s):    1920.00   
Peak concurrent requests:                80.00     
Total token throughput (tok/s):          4981.58   
---------------Time to First Token----------------
Mean TTFT (ms):                          149.59    
Median TTFT (ms):                        145.43    
P99 TTFT (ms):                           193.27    
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          17.22     
Median TPOT (ms):                        17.61     
P99 TPOT (ms):                           19.61     
---------------Inter-token Latency----------------
Mean ITL (ms):                           41.06     
Median ITL (ms):                         42.36     
P99 ITL (ms):                            45.77     
---------------Speculative Decoding---------------
Acceptance rate (%):                     19.92     
Acceptance length:                       2.39      
Drafts:                                  8556      
Draft tokens:                            59892     
Accepted tokens:                         11931     
Per-position acceptance (%):
  Position 0:                            63.78     
  Position 1:                            37.76     
  Position 2:                            18.45     
  Position 3:                            9.22      
  Position 4:                            5.15      
  Position 5:                            3.13      
  Position 6:                            1.94      
==================================================

---

============ Serving Benchmark Result ============
Successful requests:                     80        
Failed requests:                         0         
Benchmark duration (s):                  10.13     
Total input tokens:                      6078      
Total generated tokens:                  20472     
Request throughput (req/s):              7.90      
Output token throughput (tok/s):         2021.33   
Peak output token throughput (tok/s):    1520.00   
Peak concurrent requests:                80.00     
Total token throughput (tok/s):          2621.45   
---------------Time to First Token----------------
Mean TTFT (ms):                          3184.57   
Median TTFT (ms):                        3184.66   
P99 TTFT (ms):                           3189.30   
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          23.89     
Median TPOT (ms):                        24.70     
P99 TPOT (ms):                           27.02     
---------------Inter-token Latency----------------
Mean ITL (ms):                           51.58     
Median ITL (ms):                         52.95     
P99 ITL (ms):                            59.16     
---------------Speculative Decoding---------------
Acceptance rate (%):                     16.69     
Acceptance length:                       2.17      
Drafts:                                  9447      
Draft tokens:                            66129     
Accepted tokens:                         11034     
Per-position acceptance (%):
  Position 0:                            58.63     
  Position 1:                            31.46     
  Position 2:                            13.56     
  Position 3:                            6.69      
  Position 4:                            3.38      
  Position 5:                            1.96      
  Position 6:                            1.12      
==================================================
RAW_BUFFERClick to expand / collapse

Your current environment

<details> <summary>The output of <code>python collect_env.py</code></summary>
Collecting environment information...
==============================
        System Info
==============================
OS                           : Ubuntu 24.04.4 LTS (x86_64)
GCC version                  : (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0
Clang version                : 18.1.3 (1ubuntu1)
CMake version                : version 3.28.3
Libc version                 : glibc-2.39

==============================
       PyTorch Info
==============================
PyTorch version              : 2.11.0+cu130
Is debug build               : False
CUDA used to build PyTorch   : 13.0
ROCM used to build PyTorch   : N/A
XPU used to build PyTorch    : N/A

==============================
      Python Environment
==============================
Python version               : 3.12.3 (main, Mar  3 2026, 12:15:18) [GCC 13.3.0] (64-bit runtime)
Python platform              : Linux-6.17.0-20-generic-x86_64-with-glibc2.39
    
==============================
       CUDA / GPU Info
==============================
Is CUDA available            : True
CUDA runtime version         : 13.1.115
CUDA_MODULE_LOADING set to   : 
GPU models and configuration : GPU 0: NVIDIA RTX PRO 6000 Blackwell Workstation Edition
Nvidia driver version        : 580.126.16
cuDNN version                : Could not collect
HIP runtime version          : N/A
MIOpen runtime version       : N/A
Is XNNPACK available         : True

==============================
          CPU Info
==============================
Architecture:                            x86_64
CPU op-mode(s):                          32-bit, 64-bit
Address sizes:                           46 bits physical, 48 bits virtual
Byte Order:                              Little Endian
CPU(s):                                  24
On-line CPU(s) list:                     0-23
Vendor ID:                               GenuineIntel
Model name:                              Intel(R) Core(TM) Ultra 9 285K
CPU family:                              6
Model:                                   198
Thread(s) per core:                      1
Core(s) per socket:                      24
Socket(s):                               1
Stepping:                                2
CPU(s) scaling MHz:                      131%
CPU max MHz:                             4600.0000
CPU min MHz:                             800.0000
BogoMIPS:                                7372.80
Flags:                                   fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault ssbd ibrs ibpb stibp ibrs_enhanced tpr_shadow flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid rdt_a rdseed adx smap clflushopt clwb intel_pt sha_ni xsaveopt xsavec xgetbv1 xsaves split_lock_detect user_shstk avx_vnni lam wbnoinvd dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp hwp_pkg_req hfi vnmi umip pku ospke waitpkg gfni vaes vpclmulqdq rdpid bus_lock_detect movdiri movdir64b fsrm md_clear serialize arch_lbr ibt flush_l1d arch_capabilities
Virtualization:                          VT-x
L1d cache:                               768 KiB (20 instances)
L1i cache:                               1.3 MiB (20 instances)
L2 cache:                                40 MiB (12 instances)
L3 cache:                                36 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-23
Vulnerability Gather data sampling:      Not affected
Vulnerability Ghostwrite:                Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Old microcode:             Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; usercopy/swapgs barriers and __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; Enhanced / Automatic IBRS; IBPB conditional; PBRSB-eIBRS Not affected; BHI BHI_DIS_S
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Mitigation; IBPB before exit to userspace

==============================
Versions of relevant libraries
==============================
[pip3] flashinfer-python==0.6.8.post1
[pip3] numpy==2.2.6
[pip3] nvidia-cublas==13.1.0.3
[pip3] nvidia-cublas-cu12==12.8.4.1
[pip3] nvidia-cuda-cupti==13.0.85
[pip3] nvidia-cuda-cupti-cu12==12.8.90
[pip3] nvidia-cuda-nvrtc==13.0.88
[pip3] nvidia-cuda-nvrtc-cu12==12.8.93
[pip3] nvidia-cuda-runtime==13.0.96
[pip3] nvidia-cuda-runtime-cu12==12.8.90
[pip3] nvidia-cudnn-cu12==9.10.2.21
[pip3] nvidia-cudnn-cu13==9.19.0.56
[pip3] nvidia-cudnn-frontend==1.18.0
[pip3] nvidia-cufft==12.0.0.61
[pip3] nvidia-cufft-cu12==11.3.3.83
[pip3] nvidia-cufile==1.15.1.6
[pip3] nvidia-cufile-cu12==1.13.1.3
[pip3] nvidia-curand==10.4.0.35
[pip3] nvidia-curand-cu12==10.3.9.90
[pip3] nvidia-cusolver==12.0.4.66
[pip3] nvidia-cusolver-cu12==11.7.3.90
[pip3] nvidia-cusparse==12.6.3.3
[pip3] nvidia-cusparse-cu12==12.5.8.93
[pip3] nvidia-cusparselt-cu12==0.7.1
[pip3] nvidia-cusparselt-cu13==0.8.0
[pip3] nvidia-cutlass-dsl==4.5.0.dev0
[pip3] nvidia-cutlass-dsl-libs-base==4.5.0.dev0
[pip3] nvidia-ml-py==13.595.45
[pip3] nvidia-nccl-cu12==2.27.5
[pip3] nvidia-nccl-cu13==2.28.9
[pip3] nvidia-nvjitlink==13.0.88
[pip3] nvidia-nvjitlink-cu12==12.8.93
[pip3] nvidia-nvshmem-cu12==3.4.5
[pip3] nvidia-nvshmem-cu13==3.4.5
[pip3] nvidia-nvtx==13.0.85
[pip3] nvidia-nvtx-cu12==12.8.90
[pip3] pyzmq==27.1.0
[pip3] torch==2.11.0
[pip3] torch_c_dlpack_ext==0.1.5
[pip3] torchaudio==2.11.0
[pip3] torchvision==0.26.0
[pip3] transformers==4.57.6
[pip3] triton==3.6.0
[conda] Could not collect

==============================
         vLLM Info
==============================
ROCM Version                 : Could not collect
vLLM Version                 : 0.19.2rc1.dev89+g6fbec8ed4.d20260421 (git sha: 6fbec8ed4, date: 20260421)
vLLM Build Flags:
  CUDA Archs: Not Set; ROCm: Disabled; XPU: Disabled
GPU Topology:
        GPU0    CPU Affinity    NUMA Affinity   GPU NUMA ID
GPU0     X      0-23    0               N/A

Legend:

  X    = Self
  SYS  = Connection traversing PCIe as well as the SMP interconnect between NUMA nodes (e.g., QPI/UPI)
  NODE = Connection traversing PCIe as well as the interconnect between PCIe Host Bridges within a NUMA node
  PHB  = Connection traversing PCIe as well as a PCIe Host Bridge (typically the CPU)
  PXB  = Connection traversing multiple PCIe bridges (without traversing the PCIe Host Bridge)
  PIX  = Connection traversing at most a single PCIe bridge
  NV#  = Connection traversing a bonded set of # NVLinks

==============================
     Environment Variables
==============================
PYTORCH_NVML_BASED_CUDA_CHECK=1
TORCHINDUCTOR_COMPILE_THREADS=1
TORCHINDUCTOR_CACHE_DIR=/tmp/torchinductor_bchislett
</details>

🐛 Describe the bug

I ran MT-Bench with Temp=0 and Temp=1 and got better acceptance rates using MRV1 than MRV2. I would expect the opposite given the improvements to draft-prob-aware sampling in MRV2.

launch script:

export VLLM_USE_V2_MODEL_RUNNER=1
python3 -m \
    vllm.entrypoints.cli.main serve Qwen/Qwen3-8B --port 9000 --speculative-config '{"method": "eagle3", "model": "RedHatAI/Qwen3-8B-speculator.eagle3", "num_speculative_tokens": 7}' --max-num-batched-tokens 32768

MRV1 Temp=0

============ Serving Benchmark Result ============
Successful requests:                     80        
Failed requests:                         0         
Benchmark duration (s):                  5.20      
Total input tokens:                      6078      
Total generated tokens:                  20478     
Request throughput (req/s):              15.38     
Output token throughput (tok/s):         3936.20   
Peak output token throughput (tok/s):    1840.00   
Peak concurrent requests:                80.00     
Total token throughput (tok/s):          5104.49   
---------------Time to First Token----------------
Mean TTFT (ms):                          149.95    
Median TTFT (ms):                        165.88    
P99 TTFT (ms):                           171.82    
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          17.57     
Median TPOT (ms):                        17.85     
P99 TPOT (ms):                           19.84     
---------------Inter-token Latency----------------
Mean ITL (ms):                           42.26     
Median ITL (ms):                         43.45     
P99 ITL (ms):                            47.16     
---------------Speculative Decoding---------------
Acceptance rate (%):                     20.25     
Acceptance length:                       2.42      
Drafts:                                  8478      
Draft tokens:                            59346     
Accepted tokens:                         12018     
Per-position acceptance (%):
  Position 0:                            64.11     
  Position 1:                            38.28     
  Position 2:                            19.20     
  Position 3:                            9.58      
  Position 4:                            5.38      
  Position 5:                            3.26      
  Position 6:                            1.96      
==================================================

MRV1 Temp=1

============ Serving Benchmark Result ============
Successful requests:                     80        
Failed requests:                         0         
Benchmark duration (s):                  5.52      
Total input tokens:                      6078      
Total generated tokens:                  20480     
Request throughput (req/s):              14.50     
Output token throughput (tok/s):         3713.23   
Peak output token throughput (tok/s):    1760.00   
Peak concurrent requests:                80.00     
Total token throughput (tok/s):          4815.23   
---------------Time to First Token----------------
Mean TTFT (ms):                          150.72    
Median TTFT (ms):                        158.25    
P99 TTFT (ms):                           163.40    
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          18.54     
Median TPOT (ms):                        19.03     
P99 TPOT (ms):                           20.94     
---------------Inter-token Latency----------------
Mean ITL (ms):                           43.19     
Median ITL (ms):                         44.41     
P99 ITL (ms):                            47.75     
---------------Speculative Decoding---------------
Acceptance rate (%):                     19.13     
Acceptance length:                       2.34      
Drafts:                                  8755      
Draft tokens:                            61285     
Accepted tokens:                         11726     
Per-position acceptance (%):
  Position 0:                            62.01     
  Position 1:                            35.96     
  Position 2:                            17.89     
  Position 3:                            9.11      
  Position 4:                            4.65      
  Position 5:                            2.65      
  Position 6:                            1.67      
==================================================

MRV2 Temp=0

============ Serving Benchmark Result ============
Successful requests:                     80        
Failed requests:                         0         
Benchmark duration (s):                  5.33      
Total input tokens:                      6078      
Total generated tokens:                  20480     
Request throughput (req/s):              15.01     
Output token throughput (tok/s):         3841.50   
Peak output token throughput (tok/s):    1920.00   
Peak concurrent requests:                80.00     
Total token throughput (tok/s):          4981.58   
---------------Time to First Token----------------
Mean TTFT (ms):                          149.59    
Median TTFT (ms):                        145.43    
P99 TTFT (ms):                           193.27    
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          17.22     
Median TPOT (ms):                        17.61     
P99 TPOT (ms):                           19.61     
---------------Inter-token Latency----------------
Mean ITL (ms):                           41.06     
Median ITL (ms):                         42.36     
P99 ITL (ms):                            45.77     
---------------Speculative Decoding---------------
Acceptance rate (%):                     19.92     
Acceptance length:                       2.39      
Drafts:                                  8556      
Draft tokens:                            59892     
Accepted tokens:                         11931     
Per-position acceptance (%):
  Position 0:                            63.78     
  Position 1:                            37.76     
  Position 2:                            18.45     
  Position 3:                            9.22      
  Position 4:                            5.15      
  Position 5:                            3.13      
  Position 6:                            1.94      
==================================================

MRV2 Temp=1

============ Serving Benchmark Result ============
Successful requests:                     80        
Failed requests:                         0         
Benchmark duration (s):                  10.13     
Total input tokens:                      6078      
Total generated tokens:                  20472     
Request throughput (req/s):              7.90      
Output token throughput (tok/s):         2021.33   
Peak output token throughput (tok/s):    1520.00   
Peak concurrent requests:                80.00     
Total token throughput (tok/s):          2621.45   
---------------Time to First Token----------------
Mean TTFT (ms):                          3184.57   
Median TTFT (ms):                        3184.66   
P99 TTFT (ms):                           3189.30   
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          23.89     
Median TPOT (ms):                        24.70     
P99 TPOT (ms):                           27.02     
---------------Inter-token Latency----------------
Mean ITL (ms):                           51.58     
Median ITL (ms):                         52.95     
P99 ITL (ms):                            59.16     
---------------Speculative Decoding---------------
Acceptance rate (%):                     16.69     
Acceptance length:                       2.17      
Drafts:                                  9447      
Draft tokens:                            66129     
Accepted tokens:                         11034     
Per-position acceptance (%):
  Position 0:                            58.63     
  Position 1:                            31.46     
  Position 2:                            13.56     
  Position 3:                            6.69      
  Position 4:                            3.38      
  Position 5:                            1.96      
  Position 6:                            1.12      
==================================================

Before submitting a new issue...

  • Make sure you already searched for relevant issues, and asked the chatbot living at the bottom right corner of the documentation page, which can answer lots of frequently asked questions.

extent analysis

TL;DR

The issue can be addressed by investigating the differences in speculative decoding configurations between MRV1 and MRV2, specifically focusing on the impact of temperature settings on acceptance rates.

Guidance

  1. Compare speculative decoding configurations: Investigate the differences in speculative decoding settings between MRV1 and MRV2, including the speculative-config parameter in the launch script.
  2. Analyze temperature settings: Examine the effect of temperature settings (Temp=0 and Temp=1) on acceptance rates in both MRV1 and MRV2, and consider how these settings might be interacting with the speculative decoding configurations.
  3. Review acceptance rate calculations: Verify that the acceptance rate calculations are correct and consistent between MRV1 and MRV2, to ensure that the observed differences are not due to calculation discrepancies.
  4. Investigate draft-prob-aware sampling: Since MRV2 is expected to have improvements in draft-prob-aware sampling, investigate how this feature is being utilized and whether it is functioning as expected.
  5. Check for version-specific issues: Consider whether the issue might be specific to the version of the model runner or other dependencies being used, and whether updating or changing versions could resolve the issue.

Example

No specific code example is provided, as the issue appears to be related to configuration and usage rather than a code-level problem.

Notes

The issue seems to be related to the interaction between temperature settings, speculative decoding configurations, and the improvements in draft-prob-aware sampling in MRV2. Further investigation is needed to determine the root cause of the observed differences in acceptance rates.

Recommendation

Apply a workaround by adjusting the speculative decoding configurations and temperature settings to better match the expected behavior of MRV2, and monitor the results to see if the acceptance rates improve as expected.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING

vllm - ✅(Solved) Fix [Bug]: Worse EAGLE3 acceptance rates on MRV2 [1 pull requests, 1 comments, 1 participants]