图解 · 运行过程 · 工程取舍

GQA/MQA:减少的是K/V组数

动态图解约 1 千字1 组分步图解

为什么查询头数没变,缓存却可以变小?

动态图解 · O01

GQA/MQA:减少的是K/V组数

为什么查询头数没变,缓存却可以变小?

多名接收者可以共用一套提供者表示;查询仍有不同的比较方式。减少K/V组数让每个位置要保存的历史内容变少,但模型结构也发生了变化,不能期待任意已有模型不经适配就得到完全一样的输出。

Hq查询头数量。
HkvKey/Value的组数。
头宽度每个头里的一排特征有多长。

输入与适用条件:独立资源计数:2层、批1、序列4、4个查询头、每头宽2、每数2字节;只改K/V组数4→2→1。

1 / 4 · MHA:每个查询头有自己的K/V

第1步,共4步

窄屏可左右滑动图形,或点击“放大图形”。文字解释紧随图后。

GQA/MQA:减少的是K/V组数:MHA:每个查询头有自己的K/VQ头0查询保持4组Q头1查询保持4组Q头2查询保持4组Q头3查询保持4组KV组0该组的K与VKV组1该组的K与VKV组2该组的K与VKV组3该组的K与V只计KV数组:2×层2×批1×长度4×KV头4×宽度2×字节2 = 256字节

共享的是K/V组,不是取消查询头,也不是给旧模型随意少算几个头。结构改变通常需要匹配的模型训练或转换方案。

Hq=4;Hkv=4;KV=256 bytes

默认静止。用“下一步”看完解释再继续;播放到最后一步自动停止。键盘聚焦播放器后,可用左右键逐步查看、空格播放/暂停。图中颜色辅助区分,含义同时用文字注明。

逐步说明与计算记录

以下解释全部展开,与播放器使用同一份数据;不是另换输入的第二个算例。

1.MHA:每个查询头有自己的K/V

共享的是K/V组,不是取消查询头,也不是给旧模型随意少算几个头。结构改变通常需要匹配的模型训练或转换方案。

Hq=4;Hkv=4;KV=256 bytes

2.GQA:每两个查询头共享一组K/V

共享的是K/V组,不是取消查询头,也不是给旧模型随意少算几个头。结构改变通常需要匹配的模型训练或转换方案。

Hq=4;Hkv=2;KV=128 bytes

3.MQA:所有查询头共享一组K/V

共享的是K/V组,不是取消查询头,也不是给旧模型随意少算几个头。结构改变通常需要匹配的模型训练或转换方案。

Hq=4;Hkv=1;KV=64 bytes

4.减小缓存,不保证原输出逐位不变

GQA/MQA改变模型结构和参数关系。不能把它和保持相同数学注意力的FlashAttention混为一谈;质量需要针对模型任务重新验证。

为什么需要

长序列或多并发时KV内存和读取带宽压力很大。

怎样实现

使用训练/适配好的分组查询架构,并让运行时按正确组映射读取。

可能的代价与误解

可能改变质量;若实现物理复制共享K/V,实际内存收益会被抵消。

如何判断是否做对

分别验证组映射、内存实占、任务质量和速度;不能只看理论字节数。

输入关键词即可检索。

↑ ↓ 选择 Enter 打开Esc 关闭 · 仅本地搜索

阅读设置

阅读设置仅保存在本机浏览器,不上传任何数据。