Optimize flash attention max seqlen computation in vision attention#47170
Open
ShareLer wants to merge 1 commit into
Open
Optimize flash attention max seqlen computation in vision attention#47170ShareLer wants to merge 1 commit into
ShareLer wants to merge 1 commit into
Conversation
Contributor
|
[For maintainers] Suggested jobs to run (before merge) run-slow: ernie4_5_vl_moe, exaone4_5, glm4v, glm4v_moe, glm_image, glm_ocr, hunyuan_vl, kimi_k25, minicpmv4_6, paddleocr_vl, qwen2_5_omni, qwen2_5_vl, qwen2_vl, qwen3_5, qwen3_5_moe, qwen3_asr |
Contributor
CI recapDashboard: View test results in Grafana |
vasqu
reviewed
Jul 8, 2026
vasqu
left a comment
Collaborator
There was a problem hiding this comment.
Imo totally valid and makes sense to avoid a per layer call
Only thing I would change design wise would be to move things to vision utils as well and make similar skips as when the kwarg already exists. cc @IlyasMoutawwakil @zucchini-nlp
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What does this PR do?
This PR optimizes Flash Attention variable-length paths by precomputing the maximum sequence length once at the model/encoder level after
cu_seqlensis built, then passing it down through blocks into each attention layer.Why
Previously, several vision/audio attention implementations recomputed:
inside every attention layer on every forward pass.
For Flash Attention varlen kernels, max_seqlen_q and max_seqlen_k are ultimately consumed as Python integer arguments. In eager mode, passing a 0-dimensional CUDA tensor can therefore move the scalar conversion to the Flash Attention / custom op boundary, which may introduce repeated device-to-host synchronization. For an N-layer encoder, this repeats the same max_seqlen computation and scalar conversion path in every layer.
What changed
Compute max_seqlen once in the model/encoder forward path when Flash Attention is requested.
Compute max_window_seqlen once for sliding-window variants.
Pass the precomputed values down through blocks into attention modules.
Keep the attention-level fallback without .item() for standalone attention calls, preserving previous behavior when max_seqlen is not provided.
Guard the computation behind is_flash_attention_requested, so non-Flash-Attention paths do not pay this cost.
Related
This is related to #44962 and the discussion in #44973. Instead of adding scalar conversion inside each attention layer, this PR lifts the computation to the model/encoder level where cu_seqlens is already available, reducing repeated per-layer work and avoiding repeated per-layer scalar conversions in the normal model forward path.
Experiment
Before
After
Code Agent Policy
The Transformers repo is currently being overwhelmed by a large number of PRs and issue comments written by
code agents. We are currently bottlenecked by our ability to review and respond to them. As a result,
we ask that new users do not submit pure code agent PRs at this time.
You may use code agents in drafting or to help you diagnose issues. We'd also ask autonomous "OpenClaw"-like agents
not to open any PRs or issues for the moment.
PRs that appear to be fully agent-written will probably be closed without review, and we may block users who do this
repeatedly or maliciously.
This is a rapidly-evolving situation that's causing significant shockwaves in the open-source community. As a result,
this policy is likely to be updated regularly in the near future. For more information, please read
CONTRIBUTING.md.Before submitting
Pull Request checks?
to it if that's the case.
Who can review?
cc @vasqu