kindlingai/gr8 是一个从头用 CUDA 编写的推理引擎,目标是让完整的 GLM-5.3 模型在 3~6 台 DGX Spark(GB10) 上运行。2026 年 11 月 7 日的提交 e231adb("GLM-5.3-Flash: context-parallel KV (#384) (#414)")为该引擎的 GLM-5.3-Flash 构建加入了上下文并行 KV(context-parallel KV)。该提交在 31 个文件中新增 1,353 行、删除 171 行,CUDA kernel、运行时和文档一并发生了变化。
上下文并行 KV 是把 KV 缓存页(以 64 行为单位)分摊到多个 rank 上存储,使每个 rank 不必复制完整上下文、只持有其中一部分的方案。在 Flash 构建中默认值为 0,因此必须用 EXTRA_ENV=GR8_CP=1 开启;最前面的 R 个 token(GR8_CP_R)会复制到全部 12 个 attention binding,之后的页则按 (pos / 64) % TP 规则只放在某一个 rank 上。超过 R 的解码在每个 DSA layer 上分五个阶段进行:只放入本 rank 负责的行,只对自己的池打分、每行保留前 512 个,然后把候选 all-gather,并与复制路径的列表做比特级一致的合并。接着收集被吸收的 query,按 head group 计算部分 attention,按 rank 顺序做 log-sum-exp 合并,然后进行 value projection。FLASH.md 写明:列表和缓存字节与复制路径相同,但输出并非比特级一致,因为合并求和的顺序不同。
不过该功能仍然处于实验阶段。在 Flash 构建中,针对 CP binding 的 prefill 仍会被拒绝,Flash prefill 在低于 R 的长度下仍走复制路径。m4sim 在 --prefill 时会拒绝超过 R 的提示词。MTP layer 照旧持有完整的 KV,checkpoint 只保存每个 rank 负责的 11 个 DSA layer 页,且条目格式升级为 3,旧格式(2)的条目会被丢弃。文档说明目前尚无在集群上测得的结果。附带了一个在单张 GPU 上与复制路径做对比的测试(engine/tests/test_flash_cp.cu),但在多 rank 下运行的吞吐与精度差异并未记录。若要用 Flash 服务长上下文,现在看来以观望为宜。