Back Home

GitHub Repo

vLLM Community Reports CPU Sampling Bias; Fixed Random Table May Make Some Tokens Unselectable

A reproduction test with a large vocabulary suggests that the vLLM V1 CPU sampler may deviate from the model’s original probability distribution. The issue involves a fixed Gumbel random table; the impact on real models and an official fix remain to be confirmed.

Cepice · CC BY-SA 4.0 · Image source
zh-Hant

On October 2, the vLLM community reported a CPU inference correctness issue: the V1 sampler uses a fixed random table that may cause generated results to deviate from the probability distribution output by the model. The report includes reproduction code for both the core layer and the engine layer, with tests covering Linux x86_64 and Apple M1 Pro. The evidence currently comes from a specified commit on the main branch, so it cannot be taken to mean that all released versions are affected. Issue report

The author says fused_gumbel_argmax gets perturbations from a fixed Gumbel table containing 2²⁰ elements. Each time, it uses a seed to determine a starting point, then takes consecutive values according to token index. This limits the random combinations for an entire vocabulary row to finite windows of the same table. The author enumerated all windows and, using a manually configured Zipf distribution over 151,936 tokens, found that 79,078 tokens with nonzero theoretical probability never won. Together, they account for about 3.75% of the original distribution’s probability mass. Test method and results

The engine-level test used a small Llama with random weights. A custom logits processor fixed the distribution at each step, and the test then issued 20,000 single-token requests. V1 did not select any of the tokens mentioned above, while Model Runner V2 selected them 768 times, close to the theoretical expectation of 749. This is an artificial experiment designed to isolate sampler behavior; it does not show that half the vocabulary in real models is permanently unavailable, or that generation quality declines by a fixed amount. End-to-end comparison

The official design document provides context on the two paths: Model Runner V2 uses a Triton Gumbel kernel that generates stateless random numbers inside the kernel based on a seed, and avoids explicitly constructing the full softmax. The official configuration code also requires Triton for V2, so deployers should first confirm platform support and the actual execution path; switching to V2 should not be treated as a universal solution. Design document, configuration validation

For engineering teams, this report is a reminder that sampling tests should cover real vocabulary sizes and tail probabilities, rather than checking only whether outputs are fluent. The author notes that existing chi-squared tests capped the vocabulary at 100 tokens and did not catch this case. Areas to watch include whether large-vocabulary statistical tests are added upstream, how random number generation is adjusted, and the correctness and performance of any fix across CPU platforms. Maintainers still need to confirm the full scope of the impact. Testing blind spots and potential fixes

Sources

  1. vLLM issue #59724:SM120 後端下 MTP 草稿接受率為零
  2. vLLM 官方推測解碼文件
  3. vLLM Issue #59786:V1 CPU Gumbel 採樣偏差與重現程式
  4. vLLM 0.30.0 Model Runner V2 Design Document
  5. vLLM 配置文件:Model Runner V2 的 Triton 相容性驗證