Prhub

#21849 [VLM]: allow Qwen3.5 models for encoder disaggregation

原始 PR 作者 Ratish1 合并时间 2026-04-07 02:07 文件变更 4 提交数 9 评论 20 代码增减 +190 / -3

执行摘要

修复 Qwen3.5 多模态模型在编码器分离中的验证错误,允许 EPD 部署。

根据 issue #21805,SGLang 运行时已支持 Qwen3.5 多模态模型,但编码器分离验证在服务器启动时错误地拒绝它们,阻碍了有效的 EPD 部署。根本原因是 server_args.py 中的架构允许列表未包含 Qwen3_5ForConditionalGeneration 和 Qwen3_5MoeForConditionalGeneration。

该 PR 值得精读,特别是 server_args.py 中的验证逻辑和测试设计,以了解编码器分离的架构支持和多模态模型集成模式。

讨论亮点

review 中主要讨论了三点:1) gemini-code-assist[bot] 建议将 ENCODER_DISAGGREGATION_MODEL_ARCH_CHOICES 从列表改为集合以提高效率,但未在 PR 中采纳;2) ShangmingCai 询问是否需要修改 qwen3_5.py,Ratish1 解释 Qwen3.5 继承自 Qwen3VL,EPD 标志已处理,因此无需额外改动;3) ZhengWG 建议在 CI 中跳过测试以减少流水线时间,Ratish1 响应并添加了 skipIf 装饰器。

实现拆解

实现包括三个关键改动:1) 在 python/sglang/srt/server_args.py 的 ENCODER_DISAGGREGATION_MODEL_ARCH_CHOICES 列表中添加 Qwen3.5 模型架构;2) 在 python/sglang/srt/disaggregation/encode_server.py 和 python/sglang/srt/multimodal/processors/qwen_vl.py 中更新模型类型检查以包含 qwen3_5 和 qwen3_5_moe;3) 在 test/registered/distributed/test_epd_disaggregation.py 中添加 TestEPDDisaggregationQwen35 测试类,验证图像和视频请求。

文件 模块 状态 重要度
python/sglang/srt/server_args.py 服务器参数处理 modified 8.0
python/sglang/srt/disaggregation/encode_server.py 编码器分离 modified 7.0
test/registered/distributed/test_epd_disaggregation.py 测试 modified 6.0

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

关键符号

_handle_encoder_disaggregation _process_mm_items get_mm_data

评论区精华

代码结构优化:列表 vs 集合 设计

gemini-code-assist[bot] 建议使用集合以提高成员测试效率

结论:未在 PR 中修改,可能留待未来优化 · 未解决

是否需要修改其他文件 正确性

ShangmingCai 询问是否需在 qwen3_5.py 中添加 encoder_only 和 language_only 支持

结论:Ratish1 解释 Qwen3.5 继承自 Qwen3VL,EPD 标志已处理,无需额外改动 · 已解决

测试优化:CI 跳过 测试

ZhengWG 建议在 CI 中标记测试为本地 only 以减少流水线时间

结论:Ratish1 更新测试添加 skipIf 装饰器 · 已解决

风险与影响

风险包括:1) 验证逻辑变更可能影响其他模型类型的兼容性,需确保允许列表完整;2) 新增测试依赖于本地环境,CI 中跳过可能降低持续验证覆盖率;3) 修改涉及多模态处理器,需确保视频元数据处理与现有模型一致。

对用户影响:Qwen3.5 模型现在可以用于编码器分离部署,提升多模态应用灵活性。对系统影响:扩展了 EPD 支持的模型范围,增强系统功能。对团队影响:需要维护新增的测试,并关注类似验证逻辑的更新。

验证逻辑变更 测试依赖本地环境

关联 Issue

#21805 [Bug] Qwen3_5ForConditionalGeneration is not supported for encoder disaggregation

完整报告

执行摘要

本 PR 修复了 Qwen3.5 多模态模型在编码器分离(EPD)部署中被错误拒绝的 bug,通过更新服务器参数验证列表和相关处理器逻辑,使 Qwen3.5 模型支持编码器分离,并添加了端到端测试验证。

功能与动机

根据 issue #21805,SGLang 运行时已支持 Qwen3.5 多模态模型,但服务器启动时编码器分离验证因允许列表过旧而失败,阻碍了有效的 EPD 部署。根本原因是 server_args.py 中的架构允许列表未包含 Qwen3.5 的模型类型。

实现拆解

  • 服务器参数验证:在 python/sglang/srt/server_args.pyENCODER_DISAGGREGATION_MODEL_ARCH_CHOICES 列表中添加 Qwen3_5ForConditionalGenerationQwen3_5MoeForConditionalGeneration
  • 编码器服务器逻辑:更新 python/sglang/srt/disaggregation/encode_server.pypython/sglang/srt/multimodal/processors/qwen_vl.py 中的模型类型检查,包含 qwen3_5qwen3_5_moe 以处理视频元数据。
  • 测试覆盖:在 test/registered/distributed/test_epd_disaggregation.py 中添加 TestEPDDisaggregationQwen35 测试类,验证图像和视频请求的 EPD 功能。

评论区精华

  • 代码结构优化:gemini-code-assist[bot] 建议将允许列表从列表改为集合以提高效率,但未在 PR 中采纳。

    "Since this collection is primarily used for membership testing, using a set would be more idiomatic and efficient."

  • 正确性验证:ShangmingCai 询问是否需要修改 qwen3_5.py,Ratish1 解释 Qwen3.5 继承自 Qwen3VL,EPD 标志已处理,因此无需额外改动。
  • 测试优化:ZhengWG 建议在 CI 中跳过测试以减少流水线时间,Ratish1 响应并添加了 skipIf 装饰器。

风险与影响

  • 技术风险:验证逻辑变更可能影响其他模型兼容性;新增测试在 CI 中跳过,可能降低持续验证覆盖率;多模态处理器修改需确保与现有模型行为一致。
  • 影响范围:用户现在可以使用 Qwen3.5 模型进行编码器分离部署,提升多模态应用灵活性;系统扩展了 EPD 支持的模型范围;团队需维护新增测试并关注类似更新。

关联脉络

与历史 PR 21921(异构 TP 测试和文档)和 22111(LTX2.3 模型支持)相关,展示了多模态模型集成和测试扩展的持续演进趋势。

参与讨论