hb_verifier工具

hb_verifier 是一致性验证工具,支持进行onnx模型之间、onnx模型与hbir模型、hbir模型与hbir模型之间的余弦相似度对比, bc与Hbm模型之间的输出一致性对比。

余弦相似度表示不同阶段量化模型之间的一致性,余弦相似度越接近1,说明对比的两个量化模型的输出越接近。

一致性对比则会打印对比模型的输出一致性信息,包括输出名称、一致性、不一致元素数量、最大绝对误差、最大相对误差。

支持范围

  • Fbc代表浮点hbir模型。

  • Qbc代表定点hbir模型。

对比模型对比场景模型是否来自 hb_compile输入数据要求
Onnx vs Onnx余弦相似度对比不关注一份原始数据
Onnx vs Fbc余弦相似度对比不关注一份原始数据
Onnx vs Qbc
余弦相似度对比
一份原始数据
Onnx vs Qbc余弦相似度对比一份原始数据
一份 runtime 数据
Fbc vs Qbc余弦相似度对比
一份原始数据
Fbc vs Qbc余弦相似度对比
一份原始数据
一份 runtime 数据
Qbc vs Hbm输出一致性对比一份 runtime 数据
Qbc vs Hbm输出一致性对比一份 runtime 数据

使用方式

# onnx vs bc
hb_verifier -m ${model.onnx},${model.bc} \ 
            -i ${raw_input_data_1.npy}

# fbc vs qbc
hb_verifier -m ${float_model.bc},${quantized_model.bc} \ 
            -i ${raw_input_data_1.npy} \
            -i ${runtime_input_data_1.npy}

# multi input model verification for onnx vs bc
hb_verifier -m ${model.onnx},${model.bc} \ 
            -i ${raw_input_data_1.npy},${raw_input_data_2.npy}

# multi input model verification for fbc vs qbc not from hb_compile
hb_verifier -m ${model.bc},${model.bc} \ 
            -i ${raw_input_data_1.npy},${raw_input_data_2.npy}
            -i ${runtime_input_data_1.npy},${runtime_input_data_2.npy}

命令行参数

参数名称参数说明
-h, --help显示帮助信息。
--version显示版本并退出。
-m, --model

指定模型输入,支持ONNX模型(*.onnx)、HBIR模型(*.bc)文件、HBM模型(*.hbm)文件。
两个模型地址之间用“,”分割:-m model1,model2

-i, --input

指定推理测试时使用的数据,仅支持*.npy文件。
多输入模型添加输入数据有以下两种传参方式,多个数据之间用“,”分割:

  • input_name1:input_data_1.npy,input_name2:input_data_2.npy, …
  • input_data_1.npy,input_data_2.npy…
如需输入两份不同模型所需的数据,请使用两个-i参数传入。

注意

  • 输入数据输入需要包含前处理操作,即色彩转换/mean/scale等配置需在准备输入时在外部完成。
  • 如无特殊要求,原始数据使用校准数据集作为输入即可,runtime数据需要与定点模型的输入保持一致
  • 输入数据的名称顺序需要与模型实际输入一致。

-c, --compare_digits设置比较推理结果的数值精确度(即比较数值小数点后的位数),若不进行指定则工具会默认比较至小数点后五位。

参考使用场景样例

  1. ONNX模型与ONNX模型之间进行余弦相似度对比。

以模型优化阶段模型 optimized_float_model.onnx 与模型校准阶段模型 calibrated_model.onnx 为例:

hb_verifier -m googlenet_optimized_float_model.onnx,googlenet_calibrated_model.onnx -i input.npy 
  1. ONNX模型与HBIR模型之间进行余弦相似度对比。

以模型优化阶段模型 optimized_float_model.onnx 与模型量化阶段定点模型 quantized_model.bc 为例:

hb_verifier -m googlenet_optimized_float_model.onnx,googlenet_quantized_model.bc -i input.npy
  1. HBIR模型与HBM模型之间进行输出一致性对比。

以模型量化阶段定点模型 quantized_model.bc 与模型编译阶段模型 googlenet.hbm为例:

hb_verifier -m googlenet_quantized_model.bc,googlenet.hbm -i runtime_input.npy

输出内容说明

余弦相似度对比

所对比模型的余弦相似度信息会打印在终端内,如下示例所示:

+-----------------------------------+----------------------------+-------------------+
| NodeName                          | TensorName                 | ConsineSimilarity |
+-----------------------------------+----------------------------+-------------------+
| Conv_0                            | 365                        | 0.999978          |
| Relu_2                            | 367                        | 0.999976          |
| MaxPool_3                         | 368                        | 0.999901          |
| Conv_4                            | 369                        | 0.999112          |
| Relu_6                            | 371                        | 0.999212          |
| ...                               | ...                        | ...               |
| Conv_189                          | 554                        | 0.984707          |
| Relu_191                          | 556                        | 0.989554          |
| Concat_192                        | 557                        | 0.989221          |
| GlobalAveragePool_193             | 558                        | 0.995896          |
| Gemm_195                          | transposed_replaced_output | 0.995836          |
| Gemm_195_transpose_output_reshape | output                     | 0.995836          |
+-----------------------------------+----------------------------+-------------------+

其中:

  • NodeName代表算子名称。

  • TensorName代表该算子的第一个输出的Tensor名称。

  • ConsineSimilarity代表计算出的余弦相似度。

输出一致性对比

+------------+-------------+---------------------+--------------+--------------+
| OutputName | Consistency | Mismatched Elements | Max Abs Diff | Max Rel Diff |
+------------+-------------+---------------------+--------------+--------------+
| output     | True        | 0/1000 (0.00%)      | 0.0          | 0.0          |
+------------+-------------+---------------------+--------------+--------------+

其中:

  • OutputName代表输出名称。

  • Consistency代表该输出是否一致。

  • Mismatched Elements 代表不一致元素数量和占比。

  • Max Abs Diff 代表最大绝对误差。

  • Max Rel Diff 代表最大相对误差。