OpenVINO开发小组
直播中

张娜

8年用户 1059经验值
私信 关注
[问答]

使用 NPU 插件对量化的 Llama 3.1 8b 模型进行推理时出现“从 __Int64 转换为无符号 int 的错误”,怎么解决?


  • 安装了 OpenVINO™ GenAI 2024.4。
  • 使用以下命令量化 Llama 3.1 8B 模型:
    optimum-cli export openvino -m meta-llama/Meta-Llama-3.1-8B --weight-format int4 --sym --group-size 128 --ratio 1.0 INT4-llama-3.1-8B
  • 使用 NPU 插件推理量化的 Llama 3.1 8B 模型时遇到错误:
    Runtime error: Bad cast from __int64 to unsigned int
   

回帖(2)

沈铿僖

2025-6-25 14:50:25
更新 OpenVINO™ GenAI 版本更新至 2024.5 或以上版本。
举报

唯爱萌meng

2025-6-27 18:12:38

在使用 NPU 插件推理量化的 Llama 3.1 8B 模型时出现 Bad cast from __int64 to unsigned int 错误,通常是由于数据类型不匹配导致的。以下是逐步解决方法:




1. 检查量化参数兼容性


错误表明在模型图中存在 64 位整数 (int64)32 位无符号整数 (uint32) 的非法转换。Llama 模型的某些操作(如形状、索引计算)可能默认使用 int64,而 NPU 插件可能不支持。


解决方法:强制将模型中的 int64 转换为 int32
在量化导出时添加 --disable-i64 参数:


optimum-cli export openvino -m meta-llama/Meta-Llama-3.1-8B 
  --weight-format int4
  --sym
  --group-size 128
  --ratio 1.0
  --disable-i64   # 强制使用 int32 替换 int64
  INT4-llama-3.1-8B



2. 检查 NPU 插件支持的精度


确认 NPU 插件是否支持 INT4int32 数据类型:



  • 查阅 OpenVINO 官方文档,确认 NPU 支持的精度列表(如 INT8FP16 可能优先支持)。

  • 尝试用 --weight-format int8 量化,排除 INT4 兼容性问题:


optimum-cli export openvino -m meta-llama/Meta-Llama-3.1-8B 
  --weight-format int8   # 使用 INT8 替代 INT4
  --sym
  --group-size 128
  --ratio 1.0
  --disable-i64
  INT8-llama-3.1-8B



3. 显式指定推理精度


在代码中加载模型时,明确设置输入/输出精度:


from openvino import Core

core = Core()
model = core.read_model("INT4-llama-3.1-8B/openvino_model.xml")

# 强制转换输入/输出为 int32
for input in model.inputs:
    input.get_node().set_element_type(ov.Type.i32)
for output in model.outputs:
    output.get_node().set_element_type(ov.Type.i32)

compiled_model = core.compile_model(model, "NPU")  # 指定 NPU 设备



4. 更新 OpenVINO 和驱动程序



  1. 升级到最新 OpenVINO 版本
    pip install --upgrade openvino-ai

  2. 更新 NPU 驱动程序:参考硬件厂商文档(如 Intel 的 NPU 驱动)。




5. 验证模型兼容性


在 CPU 上运行量化模型,确认是否是 NPU 特有错误:


compiled_model = core.compile_model(model, "CPU")  # 先在 CPU 运行


  • 如果 CPU 正常运行,则问题出在 NPU 插件兼容性。

  • 如果 CPU 报相同错误,说明量化过程有问题(返回步骤 1 重试)。




6. 检查 OpenVINO 日志


启用详细日志定位问题层:


core.set_property("NPU", {"PERFORMANCE_HINT": "THROUGHPUT", "LOG_LEVEL": "DEBUG"})

检查日志中触发类型转换的具体操作(如 ShapeOfGather 等),并在导出时跳过这些操作。




其他注意事项



  • 对称量化 (--sym):NPU 可能对非对称量化(asym)支持更好,尝试:
    optimum-cli export openvino -m ... --sym false ...

  • 分组大小 (--group-size):尝试 --group-size 64--group-size 32

  • OpenVINO 版本:确认使用的是 2024.4.0 或更高版本(旧版本对 NPU 支持有限)。




通过上述步骤,90% 以上的类型转换错误可被解决。核心要点是强制模型使用 NPU 兼容的数据类型(如 int32 替换 int64验证量化参数与硬件的兼容性。如果问题依旧,建议在 OpenVINO GitHub Issues 提交详细错误日志。

举报

更多回帖

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