HBRuntime推理库

HBRuntime是地平线提供的一套x86端模型推理库,支持对常用训练框架直接导出的ONNX原始模型、地平线工具链进行PTQ转换过程中产出的各阶段ONNX模型以及地平线工具链转换过程中产出的HBIR(*.bc)模型和HBM(*.hbm)模型进行推理,使用流程如下图所示:

model_inference

使用方法及说明

使用HBRuntime进行模型推理时,参考使用方法如下:

import numpy as np
# 加载地平线依赖库
from horizon_tc_ui.hb_runtime import HBRuntime

# 准备模型运行的输入,此处`input.npy`为处理好的数据
data = np.load("input.npy")    
# 加载模型文件,根据实际模型进行设置
# ONNX模型
sess = HBRuntime("model.onnx")
# HBIR模型
sess = HBRuntime("model.bc")
# HBM模型
sess = HBRuntime("model.hbm")
# 获取输入&输出节点名称
input_names = sess.input_names
output_names = sess.output_names

# 准备输入数据,根据实际输入类型和layout进行准备,配置格式要求为字典形式,输入名称和输入数据组成键值对
# 如模型仅有一个输入
input_feed = {input_names[0]: data}
# 如模型有多个输入
input_feed = {input_names[0]: data1, input_names[1]: data2}
# 进行模型推理,推理的返回值是一个list,依次与output_names指定名称一一对应
output = sess.run(output_names, input_feed)
注解
  • output_names:用于配置输出名称,支持配置为None或自定义配置,如无特殊要求,这里我们推荐您设置为None。

    • 如配置为None,工具内部会读取模型内的输出节点信息并按解析的顺序给出推理结果。

    • 如自定义配置,可以配置全量或部分output_name,且支持修改输出顺序。则推理完成后,会按您配置的输出名称和顺序返回输出。

  • input_feed:用于配置模型运行的输入,需要按照输入类型和layout进行准备。配置格式要求为字典形式,输入名称和输入数据组成键值对。

此外,HBRuntime支持您在使用时查看模型属性信息,支持查看如下模型属性信息。例如如想打印查看模型输入数量,参考方法:print(f"input_num: {sess.input_num}")

model_attribute说明
input_num模型输入数量
output_num模型输出数量
input_names模型输入名称
output_names模型输出名称
input_types模型输入数据类型
output_types模型输出数据类型
input_shapes模型输入shape
output_shapes模型输出shape

使用示例参考

下方针对ONNX模型推理和HBIR模型推理两种使用场景,分别为您提供HBRuntime的使用示例参考。

ONNX模型推理

小技巧

在GPU Docker中下进行ONNX模型的推理,会自动采用GPU加速,效率更高。

使用HBRuntime加载ONNX模型推理的基本流程如下所示,这份示例代码适用于所有ONNX模型的推理,根据不同模型的输入类型和layout要求准备数据即可:

import numpy as np
# 加载地平线依赖库
from horizon_tc_ui.hb_runtime import HBRuntime

# 准备模型运行的输入,此处`input.npy`为处理好的数据
data = np.load("input.npy")  
# 加载模型文件
sess = HBRuntime("model.onnx")
# 获取模型输入节点信息
input_names = sess.input_names

# 假设此模型只有一个输入,开始模型推理
output = sess.run(None, {input_names[0]: data})

HBIR模型推理

使用HBRuntime加载HBIR模型推理的基本流程如下所示,这份示例代码适用于HBIR模型的推理,根据模型的输入类型和layout要求准备数据即可:

import numpy as np
# 加载地平线依赖库
from horizon_tc_ui.hb_runtime import HBRuntime

# 准备模型运行的输入,此处`input.npy`为处理好的数据
data = np.load("input.npy")  
# 加载模型文件
sess = HBRuntime("model.bc")
# 获取模型输入节点信息
input_names = sess.input_names

# 假设此模型只有一个输入,开始模型推理
output = sess.run(None, {input_names[0]: data})

HBM模型推理

使用HBRuntime加载HBM模型推理的基本流程如下所示,这份示例代码适用于HBM模型的推理,根据模型的输入类型和layout要求准备数据即可:

import numpy as np
# 加载地平线依赖库
from horizon_tc_ui.hb_runtime import HBRuntime

# 准备模型运行的输入,此处`input.npy`为处理好的数据
data = np.load("input.npy")  
# 加载模型文件
sess = HBRuntime("model.hbm")
# 获取模型输入节点信息
input_names = sess.input_names

# 假设此模型只有一个输入,开始模型推理
output = sess.run(None, {input_names[0]: data})