执行摘要
- 一句话:修复会话中多模态输入的内存清除和偏移调整,恢复视觉会话测试。
- 推荐动作:建议工程师精读
session_controller.py中的偏移调整逻辑和测试文件的变更,关注多模态输入在会话中的生命周期管理。
功能与动机
根据PR body,作者指出:'We can only clear multimodal inputs from the request if it's not part of any session. Otherwise, it may be reused later. - We need to adjust mm offsets if bos token is trimmed - Bring back Vision Sessions test using InternVL2'。这表明需要修复会话中多模态输入的处理错误和测试回归。
实现拆解
实现分为三个部分:1) 在scheduler_output_processor_mixin.py的process_batch_result_decode函数中添加条件req.session is None,防止清除会话中的多模态特征;2) 在session_controller.py的create_req函数中添加偏移调整逻辑,当BOS令牌被裁剪时,将mm_item.offsets每个元素减1;3) 在测试文件test_session_control.py中,将模型从'llava-onevision-qwen2-7b-ov'改为'OpenGVLab/InternVL2-2B',并简化输入处理,直接使用文本而非input_ids。
关键文件:
python/sglang/srt/managers/scheduler_output_processor_mixin.py(模块 scheduling): 防止错误清除会话中的多模态特征,确保特征重用
python/sglang/srt/managers/session_controller.py(模块 session management): 调整多模态偏移量以匹配BOS令牌裁剪,保证输入对齐
test/registered/sessions/test_session_control.py(模块 testing): 恢复并更新视觉会话测试,验证修复效果
关键符号:process_batch_result_decode, create_req, test_session_control
评论区精华
Review中没有详细讨论,只有mickqian的批准。但Issue评论中提到一个follow-up PR #21501,用于在会话关闭时释放多模态特征并加强偏移调整,表明本PR是基础修复的一部分。
风险与影响
- 风险:风险包括:偏移调整逻辑可能未覆盖所有情况,如offsets为空时;测试变更可能引入对InternVL2模型的依赖,影响其他测试;内存管理条件
req.session is None可能不够全面,例如会话状态变化时。需要确保这些修改不会引入回归错误。
- 影响:对用户影响:修复后,多模态会话将正常工作,避免特征丢失或偏移错误。对系统影响:提高多模态处理的稳定性和测试覆盖。对团队影响:恢复视觉会话测试,有助于后续开发。
- 风险标记:偏移调整潜在错误, 测试模型变更影响, 内存管理条件不完整
关联脉络
- PR #21501 Release mm features on session close and support multiple /rerun-ut specs: 作为本PR的后续修复,扩展了多模态特征在会话关闭时的内存释放和偏移调整逻辑。
参与讨论