#59110·vllm

[错误]: NixlConnector 在静默模式下误读具有分割 K/V 位置的 KV 页面(ROCm AITER shuffle、ROCM_ATTN、B12X)

作者: ztang2370创建于 2026年9月29日更新于 2026年9月29日
标签rocm

** 总结。对于异构 TP,NixlConnector 假定每个注意力 KV 页面的块都是以头部为首的,即为 [H, N, 2*D]。它的握手也无法看到页面内字节的排列方式。某些后端则将 K 和 V 分别存储在页面中的两个单独槽中。这导致了两个默默无闻的读取错误: 1. 使用混合布局的 ROCm AITER 引擎可以与标准引擎配对。解码器随后会读取混乱的 K/V,但不会出现错误。 2. 对于任何具有分割 K/V 槽的后端,异构 TP 会将每个页面分割为 K 和 V,而不是按头部进行分割。 ** 背景。在 #29887 中,VLLM_ROCM_SHUFFLE_KV_CACHE_LAYOUT=1,ROCM_AITER_FA 将每个块的 K 存储为 [H, D/x, N, x],其 V 为 [H, N/x, D, x],其中 x = 16 // element_size(writer)。自 #52849 以来,页面被发布为两个头部槽:K 为所有头部,然后 V 为所有头部(customize_spec)。ROCM_ATTN(规范)和 B12X(规范)以相同方式发布两个槽。 ** 1. NIXL 将混合页面视为标准页面。没有任何 NIXL 可比较的方法可以区分它们: - get_name() 返回 "FLASH_ATTN",适用于混合 AITER、未混合 AITER 和 CUDA FlashAttention(AITER,CUDA)。 - 这三者都解析为 NIXL 请求的 LBHNC 布局。它们还具有相同的页面大小、块长度和块步长。 - 没有 兼容性哈希因子反映混合设置。 - CUDA 的 vllm_version 相同。

内容来源: vllm-project/vllm