精度对比工具

精度对比工具用于比较Lyngor和第三方框架模型的结果误差。

精度对比工具支持2种模式:

  • 单层对比:基于多层对比工具逐层推理结果,逐数进行误差比对。

  • 多层对比:基于模型中1个或多个层次,进行误差比对。

备注

  • 如需比对结果误差,推荐先使用多层对比工具定位到出错的层;

  • 如需定位问题原因,推荐使用单层对比进行逐数定位。

单层对比

命令

compare single

参数说明

参数

含义

-l

--left

基于多层对比工具输出用于比较精度的结果文件 (numpy的导出格式)。

【数据类型】STR

【是否必选】是

-r

--right

基于多层对比工具输出用于比较精度的结果文件 (numpy的导出格式)。

【数据类型】STR

【是否必选】是

-o

--output_file

用于指定输出文件(csv)的保存路径。

【数据类型】STR

【是否必选】否

【默认取值】当前目录 ./compare_single_result.csv

输入示例

compare single -l ./compare_result/apu_resnet_v1_50_logits_BiasAdd:0.npy -r ./compare_result/resnet_v1_50_logits_BiasAdd:0.npy

输出示例

compare_single_result.csv

Index

Position

Left Result

Right Result

Absolute

Relative

0

0000

0.1

0.2

0

0

1

0001

0.1

0.2

0

0

2

0002

0.1

0.2

0

0

3

0010

0.1

0.2

0

0

输出说明

选项

说明

Index

序号。

Position

数据位置。

Left Result

-l 中对应位置数据。

Right Result

-r 中对应位置数据。

Absolute

绝对值误差。

Relative

相对误差。

多层对比

命令

compare multi

参数说明

参数

含义

-f

--framework

用于指定模型的框架类型。

【数据类型】ENUM

【取值范围】

  • Tensorflow

  • Keras_tf

  • Onnx

  • ONNX

  • Caffe

  • Mxnet

  • PaddlePaddle:直接编译。

  • PaddleONNX:Paddle模型转换为ONNX模型后再进行编译 (仅支持Python 3.6)

【是否必选】否

【默认取值】Tensorflow

-n

--output_nodes

用于设置输出node的名称,可指定任意层。

【数值类型】STR

【取值范围】一个或多个模型中实际存在的层的名字

【是否必选】否

【默认取值】None

【配置说明】

  • -f 参数设置为 Tensorflow / Onnx / ONNX / Caffe / MNXet 时,可选设置本 参数。

  • -f 参数设置为 Caffe 时,需指定 nodetop 参数,而非 name

  • nodeall 时,代表所有可输出的层, 目前只支持ONNX/Caffe。

-o

--output

用于指定输出文件路径。

【数据类型】STR

【取值范围】文件存储的路径

【是否必选】否

【默认取值】 compare_result 文件夹

-i

--input

模型的输入配置,默认为None。

【数据类型】STR

【取值范围】JSON格式的参数或JSON文件路径

【JSON参数格式】

{'input':(1,224,224,3), 'input1':[(1,224,224,3),
'float16']}

【JSON文件格式】

{
   'input1':{
      "shape":[1,2,3],
      "data":[1,2,3,4,5,6],
      "dtype":'int32'
   },
   'input2':{
      "shape":[1,2,3],
      "data":[1,2,3,4,5,6],
      "dtype":'int32'
   }
}

【是否必选】是

备注

inputs可以为JSON格式的输入描述信息也 可以是具体的JSON文件。

-m

--model

用于指定待编译的模型。

【数据类型】STR

【取值范围】实际存在的相对路径或绝对路径

【是否必选】否

【默认值】None

-w

--weight

用于指定权重路径。

【数据类型】STR

【取值范围】支持相对路径和绝对路径

【是否必选】否

【配置说明】

  • 当-f参数设置为MXNet时,须设置本参数。

  • 当-f参数设置为Caffe时,可选设置本参数。

【默认取值】None

-a

--is_analysis

用于设置是否分析结果。

【数据类型】BOOL

【是否必选】否

【默认取值】False

输入示例

compare multi -m lyngor_sample/models/tensorflow/resnet_v1_50.pb -i lyngor_sample/data/resnet/resnet50_data.json -n resnet_v1_50/predictionsresnet_v1_50/logits/BiasAdd -a -o ./compare_result
compare multi -m lyngor_sample/models/tensorflow/resnet_v1_50.pb -i "{'input':[(1,224,224,3),'float32']}" -n resnet_v1_50/predictions resnet_v1_50/logits/BiasAdd -a -o ./compare_result

结果文件

结果文件主要包含3类文件:框架结果数据、Lyngor结果数据和结果分析表格(可选)。

  • 框架Golden输出: output\_${name}.npy

  • APU模拟库或芯片输出: apu_output\_${name}.npy

  • 其中name为节点名称, name 中有 / 的话会替换成 _

  • 结果一般以欧式距离小于等于0.02为主要指标,其它为辅助参考。

输出示例

all_result.csv

Name

euclidean distance

cosine similarity

max absolute

standard deviation

T distance

output1

0.2

0.2

0.2

(0.1,0.2)

0.2

output2

0.2

0.2

0.2

(0.1,0.2)

0.2

输出说明

选项

说明

Name

模型输出名字,每一行代表一个模型输出。

euclidean_distance

欧式距离计算结果。

结果分布在 \(\mathbf{\lbrack 0, +}\mathbf{\infty}\mathbf{)}\) 范围内,越接近0误差越小。

cosine_similarity

余弦相似度计算结果。

结果分布在 \(\mathbf{\lbrack}\mathbf{-}\mathbf{1,1)}\) 范围内,越接近1误差越小。

max_absolute

最大绝对误差计算结果。

结果分布在 \(\mathbf{\lbrack 0, +}\mathbf{\infty}\mathbf{)}\) 范围内,越接近0误差越小。

standard_deviation

标准差计算结果。

结果分布在 \(\mathbf{\lbrack 0, +}\mathbf{\infty}\mathbf{)}\) 范围内,越接近0误差越小。

T_distance

Lyngor内部定义计算结果。

结果分布在 \(\mathbf{\lbrack 0, +}\mathbf{\infty}\mathbf{)}\) 范围内,越接近0误差越小。