vllm - 💡(How to fix) Fix [Feature]: Pre-ViT visual token pruning for VLMs (PixelPrune) [2 comments, 2 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#39708Fetched 2026-04-15 06:20:48
View on GitHub
Comments
2
Participants
2
Timeline
7
Reactions
1
Timeline (top)
commented ×2mentioned ×2subscribed ×2labeled ×1

Fix Action

Fix / Workaround

VLMs for document understanding and GUI interaction require high-resolution image inputs, imposing heavy computational burden on both the Vision Encoder and the LLM. These domains typically exhibit significant pixel-level redundancy (e.g., white margins, uniform backgrounds), yet all patches still go through the full computation pipeline.

PixelPrune (arXiv: 2604.00886) identifies these redundant patches via predictive coding and removes them from the ViT input, accelerating the entire VLM pipeline end-to-end. The method introduces no additional modules and does not alter the internal computation of the ViT or LLM, making it straightforward to integrate into production serving stacks. On document understanding benchmarks, it maintains model accuracy in a fully training-free setting.

I have integrated PixelPrune into vLLM 0.18.0 via monkey-patching, covering modifications to the processor pipeline and support for pruned-input computation in the vision encoder (Qwen3-VL, Qwen3.5-VL). Would the vLLM team be interested in native support for this feature? I am happy to contribute a PR.

RAW_BUFFERClick to expand / collapse

🚀 The feature, motivation and pitch

VLMs for document understanding and GUI interaction require high-resolution image inputs, imposing heavy computational burden on both the Vision Encoder and the LLM. These domains typically exhibit significant pixel-level redundancy (e.g., white margins, uniform backgrounds), yet all patches still go through the full computation pipeline.

PixelPrune (arXiv: 2604.00886) identifies these redundant patches via predictive coding and removes them from the ViT input, accelerating the entire VLM pipeline end-to-end. The method introduces no additional modules and does not alter the internal computation of the ViT or LLM, making it straightforward to integrate into production serving stacks. On document understanding benchmarks, it maintains model accuracy in a fully training-free setting.

Results on Qwen3-VL (training-free, document understanding, τ=0 exact matching):

ModelMethodOCRBenchDocVQAInfoVQAChartQAAI2DMML-DocolmOCRAvg
Retain ratio66.1%70.1%76.7%73.1%69.2%50.3%56.9%
Qwen3-VL-2BFull86.992.772.378.876.628.148.969.2
PixelPrune87.392.071.577.075.826.548.068.3
Qwen3-VL-4BFull88.194.879.582.982.836.754.074.1
PixelPrune88.094.779.282.481.736.353.873.7
Qwen3-VL-8BFull90.695.783.183.482.738.054.775.5
PixelPrune90.495.582.882.982.838.254.375.3

Retain ratios are content-adaptive per benchmark (50–77%), reflecting domain-specific pixel redundancy. Also validated on Qwen3.5 (2B/4B/9B) with ≤0.8% Avg gap.

Inference efficiency (Qwen3-VL-2B, batch size 1, H20 GPU):

DatasetRetainFLOPs SpeedupTTFT SpeedupKV Cache Saving
MMLongBench-Doc (multi-page)50.3%3.5×3.0×45%
ScreenSpot Pro Sci. (single-page)26.2%6.6×4.2×63%

I have integrated PixelPrune into vLLM 0.18.0 via monkey-patching, covering modifications to the processor pipeline and support for pruned-input computation in the vision encoder (Qwen3-VL, Qwen3.5-VL). Would the vLLM team be interested in native support for this feature? I am happy to contribute a PR.

Alternatives

No response

Additional context

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 user has successfully integrated PixelPrune into vLLM 0.18.0 via monkey-patching and is seeking native support for this feature.

Guidance

  • Review the provided code changes in qwen3_vl_vllm.py and qwen3_5_vllm.py to understand the modifications made to the processor pipeline and vision encoder.
  • Evaluate the performance benefits of PixelPrune, as demonstrated in the provided benchmarks, to determine its potential value for native support.
  • Consider the user's offer to contribute a PR for native support and discuss potential next steps for integration.
  • Investigate the compatibility of PixelPrune with different vLLM versions and configurations to ensure seamless integration.

Example

No code example is provided as the issue does not require a specific code snippet to understand the request.

Notes

The user has already implemented PixelPrune via monkey-patching, which may have limitations or potential issues. Native support would likely provide a more robust and maintainable solution.

Recommendation

Apply workaround by reviewing and potentially merging the user's PR for native PixelPrune support, as it has shown promising results in reducing computational burden and maintaining model accuracy.

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 - 💡(How to fix) Fix [Feature]: Pre-ViT visual token pruning for VLMs (PixelPrune) [2 comments, 2 participants]