Prhub

#32914 [ROCm][perf] Shuffle KV cache to use paged_attention_common

原始 PR 作者 samutamm 合并时间 2026-04-01 11:30 文件变更 2 提交数 23 评论 40 代码增减 +89 / -4

执行摘要

使用 paged_attention_common 优化 ROCm shuffle KV 缓存,提升 Qwen 模型性能。

根据PR body描述,对于Qwen/Qwen3-235B-A22B-Instruct-2507-FP8模型,当前VLLM_ROCM_SHUFFLE_KV_CACHE_LAYOUT=1在小并发下表现比=0更差,PR通过使用aiter的paged_attention_common(见https://github.com/ROCm/aiter/pull/1821)修复此问题,以提升性能。

建议技术管理者和工程师精读此PR,重点关注paged_attention_common的动态路由设计、标志保留决策以及临时张量的内存管理。对于涉及ROCm性能调优或注意力内核开发的工程师,此PR提供了内核选择策略和兼容性权衡的实例。

讨论亮点

review中核心讨论包括:

  1. tjtanaa询问是否移除VLLM_ROCM_SHUFFLE_KV_CACHE_LAYOUT标志,samutamm和tuukkjs指出paged_attention_common不支持滑动窗口等特性,决定保留标志以维持兼容性;
  2. gemini-code-assist[bot]指出代码冗余和死代码问题,在提交中修复;
  3. tjtanaa报告Qwen3.5-397B模型正确性问题,tuukkjs解释pa_fwd_asm仅支持head_dim=128,需后续PR 39192修复;
  4. tuukkjs分享性能测试结果,显示paged_attention_common在所有测试模型上均有收益。

实现拆解

实现分为两个关键文件:

  1. 在vllm/_aiter_ops.py中添加静态方法paged_attention_common,封装aiter的同名函数,并跳过装饰器以允许显式后端选择;
  2. 在vllm/v1/attention/backends/rocm_aiter_fa.py的forward函数中,当启用shuffle kv cache时,改用rocm_aiter_ops.paged_attention_common替代rocm_aiter_ops.pa_fwd_asm,涉及创建临时张量(tmp_out、exp_sums、max_logits)和调整参数传递。
文件 模块 状态 重要度
vllm/_aiter_ops.py attention backend modified 7.0
vllm/v1/attention/backends/rocm_aiter_fa.py attention backend modified 8.0

关键符号

paged_attention_common forward

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

评论区精华

是否移除 VLLM_ROCM_SHUFFLE_KV_CACHE_LAYOUT 标志 设计

tjtanaa 询问是否简化代码路径,但 samutamm 和 tuukkjs 指出 paged_attention_common 不支持滑动窗口,且其他优化如 rope+kvcache 融合与 shuffle 布局不兼容。

结论:决定保留标志以维持兼容性和灵活性,避免破坏现有功能。 · 已解决

Qwen3.5 模型正确性问题 正确性

tjtanaa 报告 Qwen3.5-397B 模型在启用 shuffle 时输出错误,tuukkjs 分析 pa_fwd_asm 仅支持 head_dim=128,需在 aiter 中添加路由逻辑。

结论:问题部分解决,后续 PR 39192 计划修复,但当前 PR 仍存在模型兼容性风险。 · partially resolved

代码冗余和死代码清理 style

gemini-code-assist[bot] 指出变量重定义和 isinstance 检查死代码,建议优化代码清晰度。

结论:在提交中修复了冗余和死代码,提升代码质量。 · 已解决

风险与影响

技术风险包括:

  1. 回归风险:对于head_dim不为128的模型(如Qwen3.5),paged_attention_common可能路由到不支持的内核,导致输出错误;
  2. 兼容性风险:paged_attention_common与滑动窗口注意力不兼容,需保留环境变量标志,可能影响其他优化如rope+kvcache融合;
  3. 性能不确定性:动态路由阈值(如num_seqs * num_heads_per_gpu > 2 * cu_num)可能需针对不同硬件调整;
  4. 依赖风险:依赖于aiter库的特定版本或提交,升级需谨慎测试。

影响范围:

  1. 用户:使用ROCm平台并启用shuffle kv cache的用户将看到性能提升,尤其是Qwen模型,测试显示吞吐量改善最高达13.4%;
  2. 系统:改进注意力计算效率,减少延迟,但可能引入对特定模型的支持限制;
  3. 团队:需关注后续正确性修复(如PR 39192),并可能影响跨平台优化工作。影响程度中等,主要局限于ROCm后端。
模型兼容性问题 缺少滑动窗口支持 依赖外部库

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论