从零实现 LLM Inference:042. Triton KV Append(把 KV 写入从 4 个 op 合成 1 个 kernel)
decode 每层都要把 (k,v) 写进 KV cache。原来是 index_select + index_put 四连。先用一个 Triton kernel fuse 成一次写入,并加上 batch size gate,避免小 batch 退化。
decode 每层都要把 (k,v) 写进 KV cache。原来是 index_select + index_put 四连。先用一个 Triton kernel fuse 成一次写入,并加上 batch size gate,避免小 batch 退化。
decode 已经很快了但还不够?很多时候慢在 sampling:每步 B 次 .item() 会把 GPU pipeline 打散。把采样做成 batch,一步只同步一次。
decode 热路径里 kernel launch 太密?把一次 decode step 捕获成 CUDA Graph,replay 省掉大量 CPU dispatch。
把 paged-attn decode kernel 的 num_warps/num_stages 从“拍脑袋常量”变成 Triton autotune;结果在 decode 热路径里反而回退了。
paged decode 还在慢?很多时候瓶颈不在 attention,而是在每步 L*B 次的 KV 写入:做一个 batch fast-path,直接把 Python 循环砍掉。