这两个概念都与大模型推理框架(如 vLLM、SGLang)在用分页管理(PagedAttention)分配显存时的“页/块(Block)大小”密切相关。
1. Tail 浪费少(减少尾部内部碎片)
背景:显存是以固定大小的Block(内存页)分配的(比如一个 Block 规定存 16 个或 64 个 Token 的 KV Cache)。
什么是 Tail 浪费:用户的 Prompt 长度很难刚好是 Block 大小的整数倍。
举个例子:假设一个 Block 存64 个 Token。如果用户的请求正好是65 个 Token,框架就必须分配2 个 Block(总共能存 128 个 Token)。
此时第 2 个 Block 里只装了 1 个 Token,剩下的 63 个 Token 存储空间就被空置浪费了。这种序列末尾没装满的 Block 造成的空间闲置,就叫Tail 浪费(尾部碎片)。
“少”的意思:
如果把 Block 设得更小(如 16 个 Token),或者使用了MLA使得单 Token 占用的字节数极小,那么最后一个 Block 就算没装满,浪费的绝对字节数也极微小,显存利用率大幅提升。
2. Prefix 命中粒度细(更精细的前缀缓存复用)
背景:Prefix Caching(前缀缓存)的作用是让不同请求复用相同的 Prompt(比如 System Prompt、提示词模板或多轮对话历史),避免重复计算。
原理:框架通常以 Block 为单位去做哈希对比,只有整个 Block 内的数据完全一致才能算“命中缓存”。
粒度粗 vs 粒度细:
粒度粗(如 Block = 64):两个请求的前 63 个 Token 完全一样,但第 64 个 Token 不同。因为凑不齐一整个 64 尺寸的 Block,这 63 个 Token完全无法复用缓存(命中率为 0)。
粒度细(如 Block = 16,甚至 Token 级):前 63 个 Token 一样,就能直接打卡命中 3 个完整的 16-Token Block(前 48 个 Token 完全复用)。
核心优势:命中粒度越细,系统对各种微小差异、短 Prompt 复用的灵敏度就越高,Prefix Cache 的总体命中率和首字延迟(TTFT)优化就越显著。