本题要求实现一个带容量上限 K 的 KV Cache 管理器,核心操作是在插入新 token 时,若缓存超出容量则淘汰注意力分数最低的 token(分数相同则淘汰位置编号较小者),并在查询时按位置升序输出所有缓存项。
需要维护两种检索需求:
在大语言模型(LLM)的自回归推理中,KV Cache 用于缓存历史 token 的 Key 和 Value 张量,其显存占用随序列长度线性增长。为支持长上下文,工业界采用动态稀疏策略:设定容量上限 K,仅保留注意力分数最高的 K 个 token,超出时淘汰分数最低者。
任务描述
实现一个稀疏 KV Cache 管理器,支持:
1.ADD:插入新 token 的 KV 对,附带注意力分数
第一行:K(整数,1≤K≤100000),最大缓存容量
N(整数,1≤N≤100000),操作数量
接下来N 行,每行为以下两种格式之一:
ADD pos score [key_line] [value_line]
QUERY
ADD 操作:
若插入后触发剪枝(缓存大小由 K 变为K+1 后淘汰一个),输出一行:PRUNED pos(pos 为被淘汰的位置编号)
若未触发剪枝,无输出
QUERY 操作:
第一行输出当前缓存中的 token数量 M
接下来 M组,每组3 行: pos score
k1 k2 k3 k4
v1 v2 v3 v4
按 pos 严格升序排列
输入
3 7
ADD 0 5.0
1.0 2.0 3.0 4.0
0.1 0.2 0.3 0.4
ADD 1 2.0
2.0 2.0 2.0 2.0
0.5 0.5 0.5 0.5
ADD 2 8.0
3.0 3.0 3.0 3.0
0.9 0.9 0.9 0.9
QUERY
ADD 3 6.0
4.0 4.0 4.0 4.0
0.0 0.0 0.0 0.0
QUERY
ADD 4 9.0
5.0 5.0 5.0 5.0
1.0 1.0 1.0 1.0
输出
3
0 5.0
1.0 2.0 3.0 4.0
0.1 0.2 0.3 0.4
1 2.0
2.0 2.0 2.0 2.0
0.5 0.5 0.5 0.5
2 8.0
3.0 3.0 3.0 3.0
0.9 0.9 0.9 0.9
PRUNED 1
3
0 5.0
1.0 2.0 3.0 4.0
0.1 0.2 0.3 0.4
2 8.0
3.0 3.0 3.0 3.0
0.9 0.9 0.9 0.9
3 6.0
4.0 4.0 4.0 4.0
0.0 0.0 0.0 0.0
PRUNED 0
说明
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册