Prhub

#44215 [Bugfix] Fix FunASR-Nano crash during initialization

原始 PR 作者 SunskyXH 合并时间 2026-06-08 11:00 文件变更 1 提交数 2 评论 1 代码增减 +4 / -0

执行摘要

修复 FunASR-Nano 初始化崩溃

在 vLLM >= 0.22 中,使用 FunASRForConditionalGeneration 模型(如 allendou/Fun-ASR-Nano-2512-vllm)启动服务时会立即崩溃,错误信息为 NotImplementedError: No language model found in FunASRForConditionalGeneration!。PR #39805 新增的 get_language_model() 调用用于 EPLB,但未对 FunASR 进行适配,导致初始化失败。此 PR 旨在修复该崩溃问题。

值得立即合并,属于关键 bug 修复。虽然改动很小,但体现了重要的接口契约问题:当框架新增对公共接口的调用时,需要确保所有实现该接口的模型都覆盖到。建议在文档或社区中提醒模型贡献者注意 get_language_model() 的适配。

讨论亮点

该 PR 获得了审核者 ywang96 的简单批准("Thanks for the fix!"),没有其他 review 讨论。PR body 中详细描述了根因分析,包括指出调用栈来自于 gpu_model_runner.load_model() 中的 get_language_model() 调用(PR #39805),且 FunASR 的语言模型存在于嵌套的 self.model.decoder 而非直接子模块。

实现拆解

  1. FunASRForConditionalGeneration 类中添加 get_language_model 方法:在 vllm/model_executor/models/funasr.py__init__ 方法之后、forward 方法之前插入。该方法返回 self.model.decoder,即 FunASR 内部的语言模型(Qwen3Model)。
  2. 遵守接口约定:该方法被标记为 SupportsMultiModal 接口的一部分,返回值类型为 torch.nn.Module,与现有框架中其它多模态模型的实现保持一致。
  3. 无其他代码变更:本次改动仅涉及单个文件,新增 4 行代码,删除 0 行,不改变任何现有逻辑或配置。
文件 模块 状态 重要度
vllm/model_executor/models/funasr.py 模型层 modified 6.19

关键符号

get_language_model

关键源码片段

vllm/model_executor/models/funasr.py data-contract

FunASR 模型主文件,在该文件中新增了 `get_language_model()` 方法以符合 `SupportsMultiModal` 接口约定,是本次修复的唯一变更文件。

def get_language_model(self) -> torch.nn.Module:
    # 实现 SupportsMultiModal 接口要求的方法。
    # EPLB(Expert Parallel Load Balancing)在初始化时调用此方法
    # 获取底层语言模型用于负载均衡。FunASR 的语言模型位于
    # self.model.decoder(Qwen3Model),而不是直接子模块。
    return self.model.decoder

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

风险极低。本次变更仅添加一个返回 self.model.decoder 的方法,不影响任何现有逻辑或性能。但需注意:如果未来 FunASR 模型结构发生变化(例如 self.model.decoder 被重命名或移除),该方法需要同步更新。

直接影响:修复所有使用 FunASRForConditionalGeneration 模型(如 Fun-ASR-Nano)的用户在 vLLM >= 0.22 上的启动崩溃问题,影响范围是一个特定模型系列。间接影响:无,因为新增方法仅被 EPLB 机制调用,而 EPLB 默认是关闭的(enable_eplb 需显式启用)。

特定模型修复

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论