执行摘要
修复 RoBERTa 模型在 CUDA 图模式下位置 ID 累积导致的崩溃问题。
修复所有RoBERTa-based embedding模型在CUDA图启用时的崩溃问题,当请求次数达到约max_position_embeddings / 2时,服务器因Assertion 'index out of bounds: 0 <= tmp25 < 8194' failed.而崩溃。根因是gpu_model_runner中persistent GPU buffer self.positions的padding区域未在每次请求中重置,RoBERTa模型的replace_roberta_positions函数对全tensor进行in-place position_ids += padding_idx + 1操作,导致padding区域位置ID累积最终越界。
建议工程师精读此PR,理解CUDA图模式下tensor重用和模型特定逻辑的交互。重点关注设计决策:选择在model runner中修复而非模型层,以预防未来类似bug。变更虽小,但揭示了优化场景下的微妙陷阱,值得学习以增强代码健壮性。
review中,gemini-code-assist[bot]认可修复逻辑正确、目标明确且测试充分;Isotr0py表示合理并批准。但在关联Issue评论中,Isotr0py提到PR #37884可能是不涉及model runner的更好修复。作者yanghui1-arch反驳称此PR能预防未来使用类似position_ids += offset逻辑的模型出现相同问题。最终此PR被合并,表明在model runner中修复的方案被采纳,以提供更通用的防护。
参与讨论