从零实现 LLM Inference:057. Batched KV COW(shared block 的 append_token_batch fast path)
prefix cache 复用会让 decode 的最后一个 KV block refcount>1;之前 append_token_batch 直接退化成逐 request 的 append_token + copy-on-write,CPU/GPU overhead 都很明显。这版把 COW clone...
prefix cache 复用会让 decode 的最后一个 KV block refcount>1;之前 append_token_batch 直接退化成逐 request 的 append_token + copy-on-write,CPU/GPU overhead 都很明显。这版把 COW clone...
055 做了 longest-prefix reuse,但 longest-prefix 查询还是 O(N) 扫描;这版用 token trie 替换掉 scan,把 cache miss 的 longest-prefix 查找从 ms 级降到 us 级,减少 scheduler CPU overhead。
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 下降。