Prhub

#22073 [Feature] Adding Qwen3-asr Model Support

原始 PR 作者 adityavaid 合并时间 2026-04-07 13:27 文件变更 10 提交数 12 评论 36 代码增减 +571 / -11

执行摘要

为 SGLang 添加 Qwen3-ASR 模型支持,扩展其自动语音识别能力。

PR 动机源于 Issue #22025,该问题要求支持 Qwen3-ASR 模型,以丰富 SGLang 的自动语音识别能力。PR body 中明确指出:“This PR adds support so users can serve Qwen3-ASR via the existing /v1/audio/transcriptions endpoint”,旨在通过复用现有端点简化模型部署。

建议技术管理者和工程师精读此 PR,重点关注以下设计决策:配置嵌套结构的处理、模型权重复用策略、以及多模态处理器集成模式。同时,注意 review 中提出的代码重复和插件机制问题,可作为后续重构的参考点。

讨论亮点

Review 中的核心讨论包括:

  • 设计简化:AgainstEntropy 建议直接注册配置类,作者 adityavaid 采纳并简化了代码。
  • 代码健壮性:JustinTong0323 指出配置 fallback 可能导致危险,建议显式错误处理;作者添加了警告。
  • 代码重复:JustinTong0323 提到 _get_feat_extract_output_lengths 公式在 encode_server.py 中重复,存在同步风险,作者计划后续重构。
  • 插件机制:mickqian 和 JustinTong0323 均指出 serving_transcription.py 中的硬编码逻辑难以维护,建议使用策略模式或适配器,作者引用相关 PR #22181 作为后续解决方案。
    结论:大部分问题已通过修改解决,但代码结构和插件机制留作未来优化。

实现拆解

实现方案按模块拆解:

  1. 配置模块:新增 qwen3_asr.py 定义 Qwen3ASRConfigQwen3ASRThinkerConfig,处理嵌套配置结构。
  2. 模型模块:新增 qwen3_asr.py 实现 Qwen3ASRForConditionalGeneration,重用现有音频编码器和语言模型组件。
  3. 处理器模块:新增 qwen3_asr.py 实现 Qwen3ASRProcessor,处理音频特殊令牌和多模态数据。
  4. 服务器模块:修改 serving_transcription.py 添加模型检测逻辑,针对 Qwen3-ASR 构建特定提示词和后处理。
  5. 集成模块:更新 model_config.py 将 Qwen3-ASR 加入音频模型列表,并修改 encode_server.py 适配特征提取公式。
  6. 测试与文档:新增手动测试文件并更新支持模型文档。
文件 模块 状态 重要度
python/sglang/srt/configs/qwen3_asr.py configs added 8.0
python/sglang/srt/models/qwen3_asr.py models added 9.0
python/sglang/srt/multimodal/processors/qwen3_asr.py multimodal added 7.0
python/sglang/srt/entrypoints/openai/serving_transcription.py server modified 8.0
python/sglang/srt/configs/model_config.py configs modified 7.0

关键符号

Qwen3ASRForConditionalGeneration Qwen3ASRProcessor is_audio_understandable_model _detect_model_family _postprocess_qwen3_asr

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

评论区精华

配置设计简化 设计

AgainstEntropy 建议直接注册 Qwen3ASRConfig 而无需包装类,作者采纳后简化了代码。

结论:作者修改配置类,移除冗余装饰器,提高可读性。 · 已解决

代码重复与同步风险 设计

JustinTong0323 指出 _get_feat_extract_output_lengths 公式在 config 和 encode_server.py 中重复,可能导致音频嵌入对齐错误。

结论:作者确认风险,计划作为后续重构任务,以保持 PR 焦点。 · pending

插件机制与代码结构 设计

mickqian 和 JustinTong0323 批评 serving_transcription.py 中的硬编码模型检测逻辑,建议使用策略模式或适配器分离模型特定代码。

结论:作者引用 PR #22181 作为正在进行的重构,将处理此问题,当前 PR 暂留 TODO 注释。 · pending

风险与影响

技术风险具体包括:

  1. 回归风险:修改 model_config.py 中的 is_audio_understandable_model 逻辑可能影响 Whisper 等其他音频模型的正确检测,需确保兼容性。
  2. 性能风险:新增模型加载和推理可能增加服务器内存和计算开销,尤其在大并发场景下。
  3. 兼容性风险:Qwen3-ASR 需要 --trust-remote-code 参数,可能引入依赖不稳定性或安全漏洞。
  4. 代码维护风险serving_transcription.py 中的模型特定逻辑硬编码,增加后续扩展复杂度;公式重复在 qwen3_asr.pyencode_server.py 中,若不一致会导致音频嵌入对齐错误。

影响评估:

  • 用户影响:用户可以通过 SGLang 服务 Qwen3-ASR 模型进行语音转录,支持多语言,提升功能多样性;文档更新提供了清晰的使用指南。
  • 系统影响:扩展了 SGLang 的多模态支持范围,增强了自动语音识别能力;服务器端点 /v1/audio/transcriptions 现在支持两种模型家族(Whisper 和 Qwen3-ASR)。
  • 团队影响:新增代码需维护,设计讨论揭示了架构改进方向(如插件化),促进了团队对多模态集成的技术洞察。
模型特定逻辑硬编码 公式重复风险 配置 fallback 风险 依赖外部代码

关联 Issue

#22025 [model] support qwen3-asr

完整报告

参与讨论