执行摘要
修复 NemotronH 混合模型 PCG 禁用问题,实现高达 10.5% 的吞吐量提升。
PR body 指出:'Piecewise CUDA graph (PCG) was previously disabled for NemotronH models because the layer detection logic required all layers to use standard GQA attention. NemotronH is a hybrid architecture (4 Attention + 24 Mamba + 24 MLP across 52 layers) where all sublayers use a mixer attribute instead of self_attn, causing the detection to fail.' Issue 评论中用户 he-weiwen 报告 PCG 未成功启用,作者 vedantjh2 解释层跳过问题并指向此修复。
建议技术管理者和工程师精读此 PR,重点关注 split op 的设计如何平衡 CUDA graph 捕获和动态形状处理,以及 layer_id 对齐策略在混合架构中的通用性。代码变更虽小,但涉及底层优化和兼容性权衡。
讨论焦点包括:
- 条件检查:zminglei 建议使用
if forward_batch.forward_mode.is_extend() and get_forward_context() is not None:对齐其他代码,但作者最终采用is_in_piecewise_cuda_graph()以简化。 - Mamba 形状处理:zminglei 询问为什么只有 Mamba 需要特殊形状处理;作者解释在 CUDA graph 重放时,Mamba 因内部断言需要切片,而 Attention 自然处理填充,切片必须在 split op 内部进行以满足
torch.compile的静态形状要求。 - attention_layers 存储逻辑:zminglei 质疑存储
None的必要性;作者说明这是为了与layer_id索引对齐,确保混合架构中每个位置正确映射;Oasis-Git 支持此设计,认为对其他模型应该安全。
参与讨论