Prhub

#38655 Fix Nano Nemotron VL regressions

原始 PR 作者 netanel-haber 合并时间 2026-04-03 15:22 文件变更 7 提交数 6 评论 12 代码增减 +84 / -52

执行摘要

修复 Nano Nemotron VL 模型的两个回归问题,避免配置深拷贝和 tokenizer 错误。

PR body 指出修复两个回归:

  1. 自 #37467 后,get_mamba_state_shape_from_config() 在 worker 启动时运行,深拷贝完整配置可能因活参数导致 BasevLLMParameter.new / torch.nn.Parameter.deepcopy 不匹配而失败。
  2. 避免在 metadata hot paths 中使用 get_hf_processor(),以防止 tokenizer RuntimeError: Already borrowed,这可能由 #34789 暴露。此外,移除 hacky 的 feature_size_cache 并添加模型到 HF_EXAMPLE_MODELS 注册表用于未来回归测试。

建议工程师精读此 PR,特别关注 nano_nemotron_vl.py 中的设计决策,如避免热路径中的处理器调用和使用配置替代提取器,这对多模态模型性能优化有借鉴意义。

讨论亮点

review 中,tomeras91 询问 supports_video 是否总为 True,作者 netanel-haber 确认 v2 和 v3 模型均支持视频。讨论聚焦于 audio_extractor 的使用,tomeras91 建议引入 supports_audio 属性并统一音频支持检查,作者在后续提交中实现了 sound_config。DarkLight1337 建议为模型创建单独的测试文件而非修改通用测试工具,作者采纳了该建议。最终决策包括避免在热路径调用处理器以提升性能。

实现拆解

实现拆解为多个模块:

  1. 在 nano_nemotron_vl.py 中,移除 copy 导入,将 supports_video 硬编码为 True,引入 sound_config 属性替代 audio_extractor,使用 num_tokens_per_image 替换 feature_size_cache。
  2. 在 parakeet.py 中,将 audio_length 方法改为静态,直接从配置计算长度。
  3. 在 radio.py 中,移除 _video_embedder_loaded 检查以简化视频支持逻辑。
  4. 在 transformers_utils/configs/parakeet.py 中,扩展 ExtractorConfig 以包含 hop_length。
  5. 在 tests/models/registry.py 中,添加 NemotronH_Nano_VL_V2 到 HF 示例模型注册表。
  6. 在 tests/models/utils.py 中,修改 dummy_hf_overrides 以正确处理 text_config 覆盖。
文件 模块 状态 重要度
vllm/model_executor/models/nano_nemotron_vl.py model_executor modified 8.0
vllm/model_executor/models/parakeet.py model_executor modified 5.0
vllm/model_executor/models/radio.py model_executor modified 4.0
tests/models/registry.py testing modified 3.0

关键符号

get_hf_processor supports_video supports_audio sound_config audio_length _get_mm_fields_config

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

评论区精华

supports_video 硬编码正确性 正确性

tomeras91 询问 supports_video 是否总是 True,netanel-haber 确认 v2 和 v3 模型均支持视频。

结论:接受硬编码为 True,因为模型定义支持视频。 · 已解决

音频支持检查重构 设计

tomeras91 建议统一音频支持检查,用 supports_audio 和 sound_config 替代 audio_extractor。

结论:作者实现了 sound_config 属性,并在后续提交中更新了相关逻辑。 · 已解决

测试方法分离 测试

DarkLight1337 建议为模型创建单独测试文件,而非修改通用测试工具。

结论:作者采纳建议,调整了测试策略。 · 已解决

风险与影响

技术风险包括:

  1. 移除 VllmConfig 深拷贝可能影响依赖此行为的其他代码路径,需确保无副作用。
  2. 音频处理逻辑变更(如使用 sound_config 替代 audio_extractor)可能引入兼容性问题,特别是对于旧配置。
  3. 测试注册表扩展可能增加 CI 执行时间,但通过最小化层数减轻。
  4. 移除 feature_size_cache 可能影响动态 tiler 的性能,但使用 num_tokens_per_image 更直接。

对用户影响:修复了多模态模型在高压并发场景下的崩溃,提升稳定性和可用性。对系统影响:优化元数据路径性能,避免不必要的处理器调用和深拷贝。对团队影响:增强回归测试覆盖,减少未来类似问题发生;代码重构使音频和视频支持逻辑更清晰。

配置 deep-copy 移除风险 音频处理逻辑变更 测试覆盖扩展潜在影响

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论