执行摘要
修复 TRTLLM ragged MLA 预填充的数值问题,通过修改 merge_attn_states 处理无上下文 tokens。
根据PR body的描述,移除run_prefill_context_chunk_trtllm_ragged的output和workspace_buffer预填充,因为该内核“只读取和写入有历史的tokens”,空缓冲区可能导致“没有上下文的tokens出现数值问题”。因此,需要修改merge_attn_states来感知这一区别。
建议技术管理者和工程师精读此PR,重点关注:
1) merge_attn_states内核的修改如何优雅处理无上下文tokens,避免数值问题。
2) review中讨论的安全和正确性风险,特别是torch.empty的使用场景和参数验证。
3) 性能优化技巧,如使用CPU端tensor避免同步开销。
review中核心讨论包括:
1) 安全漏洞:gemini-code-assist[bot]指出使用torch.empty替代torch.zeros可能导致未初始化GPU内存泄漏(security风险),作者evezhier回应merge_attn_states已修改来处理。
2) 参数误用:gemini-code-assist[bot]批评prefill_tokens_with_context被错误地用作token索引阈值而非请求计数(correctness风险),但上下文未显示具体修复。
3) 正确性边缘情况:gemini-code-assist[bot]提到Triton内核在p_lse和s_lse均为-inf时可能产生NaN,而CUDA内核已处理(design权衡)。
4) 性能影响:pavanimajety询问是否因额外逻辑导致性能下降,evezhier澄清无退化,因旧代码路径保持不变。
5) 优化建议:LucasWilkinson建议使用CPU端tensor避免设备到主机同步,evezhier采纳并创建prefill_query_start_loc_cpu以提升性能。
参与讨论