从零实现 LLM Inference:055. Prefix Cache Longest Prefix Reuse(longest prefix KV 复用)
prefix cache 之前只能 exact hit;这版做 longest-prefix 复用:命中“缓存 prompt 是新 prompt 的前缀”时直接挂载 KV blocks,然后用 decode(T=1) teacher-forcing 补齐 suffix。顺手把 paged-attn Triton ...
prefix cache 之前只能 exact hit;这版做 longest-prefix 复用:命中“缓存 prompt 是新 prompt 的前缀”时直接挂载 KV blocks,然后用 decode(T=1) teacher-forcing 补齐 suffix。顺手把 paged-attn Triton ...
prefix cache 之前用 prompt 字符串当 key;在 pretok 场景里,prompt 文本不同但 token ids 相同会导致 cache miss。改成优先用 prompt_token_ids tuple 作为 key,并加了一个 benchmark knob 复现/量化收益。
paged-attn + CUDA Graph decode 里,每步都在 torch.tensor(list) 然后 copy_ 到 GPU,既有分配也不是真正 non_blocking。改成复用 pinned host buffer + numpy view 直接写入,吞吐提升、TPOT 下降。
SchedulerManager 的 worker loop 里每个 token 都会进一次 lock 取 q/detok/state;改成每步 decode 批量抓取一次,减少 lock acquire/release 和热点 dict 访问。
之前 top_k+top_p 采样每步都会对整个 vocab 做 sort/gather,开销巨大。把采样改成直接在 sorted topk 空间里做 top-p + multinomial,并顺手把 top_k clamp 到 vocab size。