Skip to content

[bugfix]Qwen2.5VL accurate question#6975

Merged
zzzzwwjj merged 2 commits intovllm-project:mainfrom
tanhaoan333:maoyan
Mar 4, 2026
Merged

[bugfix]Qwen2.5VL accurate question#6975
zzzzwwjj merged 2 commits intovllm-project:mainfrom
tanhaoan333:maoyan

Conversation

@tanhaoan333
Copy link
Copy Markdown
Collaborator

@tanhaoan333 tanhaoan333 commented Mar 4, 2026

What this PR does / why we need it?

The attention mechanism in the ViT model architecture of Qwen2.5VL consists of two parts and does not support using cache to pass sequence lengths.

Does this PR introduce any user-facing change?

remove seq_lens_cache

How was this patch tested?

Signed-off-by: tanhaoan333 <tanhaoan@huawei.com>
Signed-off-by: tanhaoan333 <tanhaoan@huawei.com>
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Mar 4, 2026

👋 Hi! Thank you for contributing to the vLLM Ascend project. The following points will speed up your PR merge:‌‌

  • A PR should do only one thing, smaller PRs enable faster reviews.
  • Every PR should include unit tests and end-to-end tests ‌to ensure it works and is not broken by other future PRs.
  • Write the commit message by fulfilling the PR description to help reviewer and future developers understand.

If CI fails, you can run linting and testing checks locally according Contributing and Testing.

@gemini-code-assist
Copy link
Copy Markdown
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request refactors the sequence length handling within the MmEncoderAttention module. It streamlines the process by removing a layer-specific caching mechanism and simplifying variable naming, aiming to improve code clarity and maintainability in how sequence lengths are managed for attention calculations.

Highlights

  • Removed layer_index attribute: The self.layer_index attribute, previously derived from the prefix in the constructor, has been removed from the MmEncoderAttention class.
  • Refactored sequence length handling: The logic for handling CPU sequence lengths (seq_lens_cpu_cache) has been simplified. The conditional update based on self.layer_index == 0 and the use of a global variable have been removed, streamlining the process for generating cu_seqlens and seq_lens_cpu.
  • Renamed sequence length variable: The variable seq_lens_cpu_cache has been renamed to seq_lens_cpu within the forward_oot method for improved clarity and consistency after the refactoring.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Changelog
  • vllm_ascend/ops/mm_encoder_attention.py
    • Removed the layer_index attribute from the class initialization.
    • Simplified the logic for generating and using CPU sequence lengths by removing a global cache and layer-specific condition.
    • Renamed the internal variable for CPU sequence lengths from seq_lens_cpu_cache to seq_lens_cpu.
Activity
  • No specific activity (comments, reviews, or progress updates) has been recorded for this pull request yet.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@tanhaoan333 tanhaoan333 changed the title Maoyan [bugfix]Qwen2.5VL accurate question Mar 4, 2026
Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request refactors AscendMMEncoderAttention by removing the caching mechanism for seq_lens_cpu. While this simplifies the code by removing a global variable and layer-specific logic, it may introduce a performance regression by performing a device-to-host copy on every layer's forward pass if cu_seqlens is on the NPU. I've added a comment with a high severity to address this potential performance issue.

Comment on lines +105 to +107
if cu_seqlens is None:
cu_seqlens = torch.arange(0, (bsz + 1) * q_len, step=q_len, dtype=torch.int32, device="cpu")
seq_lens_cpu = torch.diff(cu_seqlens).to("cpu")
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

The caching mechanism for seq_lens_cpu has been removed. The original implementation used a global cache (seq_lens_cpu_cache) and updated it only for the first layer (layer_index == 0) to avoid repeated and potentially expensive device-to-host copies of cu_seqlens on every layer. The original comment at lines 27-35 highlighted that this was a performance optimization.

The new implementation computes seq_lens_cpu = torch.diff(cu_seqlens).to("cpu") on every call to forward_oot. If cu_seqlens resides on the NPU, this will introduce a device-to-host copy for each layer, which could cause a performance regression.

If cu_seqlens is now guaranteed to be on the CPU, this change is acceptable. However, the comment on line 104 ("Directly use seq_lens cpu cache to avoid d2h copy.") is now misleading and should be removed or updated. Otherwise, please consider restoring the caching logic to prevent performance degradation.

@realliujiaxu realliujiaxu added ready read for review ready-for-test start test by label for PR labels Mar 4, 2026
@MengqingCao MengqingCao added ready read for review and removed ready read for review labels Mar 4, 2026
@MengqingCao MengqingCao added ready-for-test start test by label for PR and removed ready-for-test start test by label for PR labels Mar 4, 2026
@zzzzwwjj zzzzwwjj merged commit f8315f5 into vllm-project:main Mar 4, 2026
110 of 132 checks passed
845473182 pushed a commit to 845473182/vllm-ascend that referenced this pull request Mar 5, 2026
…to qwen3next_graph

* 'main' of https://github.com/vllm-project/vllm-ascend: (40 commits)
  [Feature] Add docs of batch invariance and make some extra operators patch (vllm-project#6910)
  [bugfix]Qwen2.5VL accurate question (vllm-project#6975)
  [CI] Add DeepSeek-V3.2 large EP nightly ci (vllm-project#6378)
  [Ops][BugFix] Fix RoPE shape mismatch for mtp models with flashcomm v1 enabled (vllm-project#6939)
  [bugfix]fix file not found error in nightly of single-node (vllm-project#6976)
  [Bugfix] Fix the acceptance rates dorp issue when applying eagle3 to QuaRot model (vllm-project#6914)
  [CI] Enable auto upgrade e2e estimated time for auto-partition suites (vllm-project#6840)
  [Doc][Misc] Fix msprobe_guide.md documentation issues (vllm-project#6965)
  [Nightly][Refactor]Migrate nightly single-node model tests from `.py` to `.yaml` (vllm-project#6503)
  [BugFix] Improve GDN layer detection for multimodal models (vllm-project#6941)
  [feat]ds3.2 pcp support mtp and chunkprefill (vllm-project#6917)
  [CPU binding] Implement global CPU slicing and improve IRQ binding for Ascend NPUs (vllm-project#6945)
  [Triton] Centralize Ascend extension op dispatch in triton_utils (vllm-project#6937)
  [csrc][bugfix] Add compile-time Ascend950/910_95 compatibility for custom ops between CANN8.5 and 9.0 (vllm-project#6936)
  [300I][Bugfix] fix unquant model weight nd2nz error (vllm-project#6851)
  [doc] fix supported_models (vllm-project#6930)
  [CI] nightly test timeout (vllm-project#6912)
  [CI] Upgrade CANN to 8.5.1 (vllm-project#6897)
  [Model]Add Qwen3-Omni quantization Ascend NPU adaptation and optimization (vllm-project#6828)
  [P/D][v0.16.0]Adapt to RecomputeScheduler in vLLM 0.16.0 (vllm-project#6898)
  ...
LCAIZJ pushed a commit to LCAIZJ/vllm-ascend that referenced this pull request Mar 7, 2026
### What this PR does / why we need it?
The attention mechanism in the ViT model architecture of Qwen2.5VL
consists of two parts and does not support using cache to pass sequence
lengths.
### Does this PR introduce _any_ user-facing change?
remove seq_lens_cache
### How was this patch tested?

- vLLM version: v0.16.0
- vLLM main:
vllm-project/vllm@15d76f7

---------

Signed-off-by: tanhaoan333 <tanhaoan@huawei.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

module:ops ready read for review ready-for-test start test by label for PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants