DSpark KV 插入改走零查询头 KV-only 算子
值得精读,尤其是要改 KV cache 写入、融合内核或投机解码插入路径的工程师。 优先关注三处设计决策:一是用 `kNumHeadsQPadded == 0` 复用既有三条内核路径而不是新写 KV kernel,收益来自 RoPE 舍入与量化行为天然一致,代价是模板参数与网格逻辑要额外小心;二是把记录宽度从 Python 属性搬到 C++ 侧由 cache 张量形状推导,降低了与 attention 层属性命名的耦合;三是把输入校验从隐式约定改成 wrapper 里的 `STD_TORCH_CHECK`,让错误在算子入口立刻暴露。 阅读时要带着两个坑:网格选择在零查询头下的退化只在 >16k token 单次插入时显现,512/2048 token 的微基准会掩盖它;以及测试只对 dummy-query 基线做逐字节相等,不等于与模型参考实现数值等价。建议后续把与 #55654 重复的 uint8 API 收敛,并补一条 ≥ `NUM_TOKEN_CUTOFF` 的大 token 插入测试,以及 fp8 缺 scale、非法 dtype 的报错路径测试。
参与讨论