Prhub

#38727 nano-nemotron-vl: get_mm_max_tokens_per_item for audio, video, image == seq_len

原始 PR 作者 netanel-haber 合并时间 2026-04-07 15:23 文件变更 1 提交数 5 评论 2 代码增减 +52 / -10

执行摘要

修改 Nano Nemotron VL 模型,将音频、视频、图像的 token 限制硬编码为序列长度以绕过配置接口限制。

根据PR body,动机是'Hardcode max_seq_len as the upper limit of mm items. This is a coarse way to currently sidestep the limits of the dummy audio-video profiling interface.',以支持动态FPS和最大帧数,并避免mmencoder缓存大小错误,因为当前配置接口无法处理use_audio_in_video等场景。

建议精读此PR以理解多模态模型中token限制处理的临时权衡,关注硬编码决策的上下文和gemini-code-assist[bot]指出的风险,对于涉及调度或多模态功能的开发有参考价值。

讨论亮点

review中,gemini-code-assist[bot]指出硬编码seq_len可能导致调度失败和不准确的token估计,尤其是在多项目提示中,例如如果请求包含图像和文本,token估计会超出模型容量。ywang96批准并评论'low risk hence force merging',表明团队接受了这种权衡,认为风险较低且变更紧急。

实现拆解

实现主要分为三部分:

1) 新增get_dummy_image_size_and_max_tokens方法,统一计算图像的最大token数和尺寸,支持动态tiler和静态配置;
2) 新增get_mm_max_tokens_per_item方法,为图像、视频、音频分别返回seq_len作为最大token数,并利用supports_audio和supports_video进行断言;
3) 修改get_dummy_mm_data方法,调用新增方法获取图像尺寸,简化逻辑并移除重复代码。

文件 模块 状态 重要度
vllm/model_executor/models/nano_nemotron_vl.py model_executor/models modified 6.0

关键符号

get_mm_max_tokens_per_item get_dummy_image_size_and_max_tokens

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

评论区精华

硬编码 seq_len 对调度和 token 估计的风险 正确性

gemini-code-assist[bot] 指出将 seq_len 分配给所有模态可能导致调度失败和 token 估计不准确,例如在多项目提示中造成过估计。

结论:PR 被批准,团队认为风险低且需快速修复,接受了硬编码作为临时解决方案。 · 已解决

风险与影响

技术风险包括:

1) 硬编码seq_len导致token过估计,可能使有效请求被错误拒绝(调度失败风险);
2) 缺少精确的模态间token分配计算,可能影响系统调度正确性和性能;
3) 在文件vllm/model_executor/models/nano_nemotron_vl.py的get_mm_max_tokens_per_item方法中,未考虑音频和视频的实际token需求,依赖后续优化。

对用户影响:避免了运行时缓存错误,提升了Nano Nemotron VL模型的多模态请求可用性,但可能引入请求调度不准确的风险。对系统影响:简化了多模态处理逻辑,提供临时解决方案以绕过配置限制,但牺牲了token估计的准确性,可能需后续重构。对团队影响:此变更作为快速修复,减少了调试时间,但需关注潜在调度问题并计划更精确的实现。

硬编码限制 调度失败风险 token 估计不准确

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论