执行摘要
修复 SSM/Mamba 后端中填充块表条目的不一致性,使用块 0 替代 -1 对齐空块约定。
根据 PR body 和关联 Issue,动机是修复两个问题:Issue #33664 报告了 DeepSeek-V3.1 模型在 FP8 KV 缓存和高并发下的非法内存访问错误;Issue #35336 提出了重构请求,要求使 SSM 后端使用空块(块 0)而不是 -1 进行填充。PR body 引用 @WoosukKwon 的解释:'PAD_SLOT_ID is only used for slot mapping, not block tables. Also, block id 0 is already reserved for a special purpose. Let's use 0 instead.',旨在统一约定并修复潜在 bug。
建议 SSM/Mamba 后端开发者精读此 PR,关注填充约定的统一设计决策,如区分 PAD_SLOT_ID(用于槽映射)和 NULL_BLOCK_ID(用于块表),以及修复 C++ 内核中的潜在索引错误。对于涉及内核优化或 CUDA 图集成的工程师,值得仔细检查变更逻辑以避免回归。
在 review 中,tdoublep 提出了两个关键问题:
- 在
causal_conv1d.py中为什么仍需要导入PAD_SLOT_ID?MatthewBonanni 回复称其仍用于序列级填充(如程序调度),与块表填充区分。 - 在
selective_scan_fwd.cu中添加cache_enabled检查是否会影响早期返回?MatthewBonanni 解释这修复了一个潜在的索引错误(当cache_enabled时,cache_indices是 2D 张量),并恢复了 APC 的早期返回逻辑。
结论是这些变更正确,通过讨论澄清了设计决策和潜在 bug 修复。
参与讨论