举报
要解决运行 Whisper ASR GenAI OpenVINO™ Notebook 时遇到的 Port for tensor name cache_position was not found 错误,请按照以下步骤排查:
large-v3)在解码器中使用了 cache_position 输入节点,但某些 OpenVINO 版本或转换脚本可能未正确支持该节点。openai/whisper-large-v3)。model_id = "openai/whisper-large-v2" # 替换为v2或更早版本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")config.json 是否包含 cache_position 输入定义。 pip install --upgrade openvino optimum-intel
# 如果使用OpenVINO Notebooks环境,确保更新完整:
!pip install -r requirements.txt # 在notebook中运行.xml 文件),确认是否存在 cache_position 输入节点:ov_model_dir/openvino_model.xmlcache_position(见下一步)。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)git checkout fix/whisper-cache-position # 示例分支名,需替换为实际分支如果问题仍无法解决,临时修改模型配置(需重新加载模型):
# 加载模型后,覆盖 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"]总结步骤优先级:
关键点:此错误通常由模型结构变化与库版本不匹配引起。重点确保转换时包含
cache_position节点,并在推理时正确初始化其值。
举报
更多回帖