OpenVINO开发小组
直播中

远风

10年用户 1155经验值
擅长:MEMS/传感技术 模拟技术 存储技术
私信 关注
[问答]

无法运行Whisper Asr GenAI OpenVINO™ Notebook怎么解决?


  • 冉小 声说-asr-genai OpenVINO™笔记本。
  • 遇到的错误: Port for tensor name cache_position was not found.

回帖(2)

王俊

2025-6-25 14:56:31
  降级 变形金刚版本到 4.45。
pip install -q -U "transformers==4.45" --extra-index-url https://download.pytorch.org/whl/cpu
举报

张国厚

2025-6-27 18:13:09

要解决运行 Whisper ASR GenAI OpenVINO™ Notebook 时遇到的 Port for tensor name cache_position was not found 错误,请按照以下步骤排查:




1. 检查模型版本兼容性



  • 问题原因:新版本的 Whisper 模型(如 large-v3)在解码器中使用了 cache_position 输入节点,但某些 OpenVINO 版本或转换脚本可能未正确支持该节点。

  • 解决方案

    • 确认使用的 Whisper 模型版本(如 openai/whisper-large-v3)。

    • 如果使用 v2 或更早版本,此问题通常不会出现。尝试降级模型版本:
      model_id = "openai/whisper-large-v2"  # 替换为v2或更早版本





2. 重新转换模型并显式指定输入



  • 问题原因:自动转换时可能遗漏了 cache_position 节点。


  • 解决方案
    在转换模型时手动指定输入名称,确保包含所有必需的输入节点:


     from optimum.intel import OVModelForSpeechSeq2Seq

    # 转换模型时显式传递输入名称
    model = OVModelForSpeechSeq2Seq.from_pretrained(
         model_id,
         export=True,
         input_names=["input_features", "decoder_input_ids", "decoder_attention_mask", "cache_position"]
    )
    model.save_pretrained("ov_model_dir")


    • 注意:如果转换失败,请检查 Hugging Face 的 config.json 是否包含 cache_position 输入定义。






3. 更新 OpenVINO 和 Optimum 库



  • 问题原因:旧版本库可能缺乏对最新模型节点的支持。

  • 解决方案
    升级到最新版本:
     pip install --upgrade openvino optimum-intel
    # 如果使用OpenVINO Notebooks环境,确保更新完整:
    !pip install -r requirements.txt  # 在notebook中运行




4. 验证模型输入/输出节点



  • 解决方案
    使用 Netron 工具检查转换后的模型(.xml 文件),确认是否存在 cache_position 输入节点:

    • 打开模型文件:ov_model_dir/openvino_model.xml

    • 如果节点缺失,说明转换过程有问题(需退回第 2 步显式指定)。

    • 如果节点存在,检查代码中推理时的输入字典是否包含了 cache_position(见下一步)。





5. 修改推理代码



  • 问题原因:推理时未提供 cache_position 输入值。


  • 解决方案
    在生成推理结果的代码中,初始化并传递 cache_position 张量


     import torch
    import numpy as np

    # 初始化 cache_position (示例值,根据实际输入长度调整)
    input_length = 30  # 输入特征的长度
    cache_position = torch.arange(input_length, device=device)  # 设备需与模型一致
    cache_position = np.expand_dims(cache_position.numpy(), axis=0)

    # 在推理输入字典中加入 cache_position
    inputs = {
         "input_features": audio_features,
         "decoder_input_ids": decoder_input_ids,
         "decoder_attention_mask": decoder_attention_mask,
         "cache_position": cache_position  # 添加此行
    }
    outputs = model(**inputs)





6. 尝试 OpenVINO 官方修复分支



  • 访问 OpenVINO Notebooks 的 GitHub 仓库:

    • 检查 Issues 是否有类似问题。

    • 尝试切换到修复分支(如有):
      git checkout fix/whisper-cache-position  # 示例分支名,需替换为实际分支





7. 临时绕过方案(不推荐)


如果问题仍无法解决,临时修改模型配置(需重新加载模型):


   # 加载模型后,覆盖 config 删除 cache_position 要求
   model.config.use_cache = False  # 禁用缓存(可能影响精度)
   # 或直接修改输入列表
   model.model.inputs = [i for i in model.model.inputs if i.get_any_name() != "cache_position"]



总结步骤优先级



  1. 降级模型到 v2 版本 → 2. 更新库并显式转换模型 → 3. 修改推理代码添加输入



关键点:此错误通常由模型结构变化与库版本不匹配引起。重点确保转换时包含 cache_position 节点,并在推理时正确初始化其值。


举报

更多回帖

发帖
×
20
完善资料,
赚取积分