已开启
[Question|问题咨询]: vllm #2
lileizheng创建于 5月12日
5月12日 修改了issue 的描述
lileizheng
5月16日 评论:
5月16日 评论:
【概念】numel() 的含义
【讲解】
numel() = number of elements = 元素数量
torch.tensor([]).numel() # 0 (空张量)
torch.tensor([1, 2, 3]).numel() # 3 (3个元素)
torch.zeros(4, 5).numel() # 20 (4×5=20个元素)


lileizheng
5月20日 评论:
5月20日 评论:
Welcome to ask questions and discuss with other members.
问题描述
【概念】为什么不同前缀的 block 不能共享缓存
【讲解】
关键点:block 存储的不是 token_ids,而是 KV cache!
KV cache 依赖完整上下文:
【图解】
请求A: [今,天,天] → [气,很,好] → [我,们,出]
↓
KV_cache_A = f([今,天,天] + [气,很,好])
请求B: [昨,天,天] → [气,不,好] → [我,们,出]
↓
KV_cache_B = f([昨,天,天] + [气,不,好])
虽然 token_ids 都是 我,们,出,但:
【错误共享的后果】
如果请求B 复用了 KV_cache_A:
请求B 用了基于 [今,天,天,气,很,好] 的 KV cache
↓
Attention 计算时混入了错误的历史信息
↓
生成结果语义错误
【比喻】
像两个人回答"我们要去哪?":
同样的"我们出去玩吧",但后续回复完全不同!block 缓存的是"后续回复的倾向",不能混用。
【总结】所以pageattention存储block的时候一定要前缀一样才能共享缓存