5.16. Model debugger
PopRT提供了精度定位工具 Model debugger
帮助用户定位精度问题, 可用于对比 ONNX 模型或 TensorFlow pb 模型的精度, 以及打印和修改指定的 ONNX 模型.
5.16.1. 使用方法
Model debugger 工具位置: model_debugger.py .
Model debugger 提供了三组子命令 compare
, print
, modify
分别用于模型之间的对比, ONNX 模型信息打印以及 ONNX 模型修改.
子命令以及支持的参数解释如下:
子命令 compare
: 比较源模型和目标模型之间的精度.
--src_model
: 指定源模型路径, 使用--dst_model
来指定第二个模型进行精度比较.--src_backend
: 指定运行源模型所采用的 backend, 支持tensorflow
,onnxruntime
以及poprt
, 默认缺省值为onnxruntime
.--dst_model
: 指定目标模型路径.--dst_backend
: 指定运行目标模型所采用的 backend, 支持tensorflow
,onnxruntime
以及poprt
, 默认缺省值为poprt
.--compare_method
: 指定比较方法. 使用,
分隔多个方法, 可以是mse, rmse, mae, mape, r2
中的一个或者多个.--input_data
: 为每个输入张量指定输入数据. 它可以是numpy文件的路径, 也可以是zeros, ones, rand
中的一个字符串.--mark_outputs
: 标记要比较的张量名称, 使用,
分隔不同的张量. 如果指定为"all"
, 则会比较所有可能的张量.--mark_io_mapping
: 指定输入和输出映射, 以比较在源模型和目标模型中具有不同命名的同一张量的结果.
--dump_data
: 将要对比的张量数据转储到本地文件.
--dump_dir
: 保存转储数据的目录.
子命令: modify
: 使用指定的操作修改输入模型.
--src_model
或--model
: 指定源模型路径.--update
: 使用key=value
映射更新权重, 其中key
是权重名称,value
可以是numpy文件的路径, 也可以是zeros, ones, rand
中的一个字符串.--extract
: 将子图提取到模型中. 使用--extract input_names=in_name output_names=out_name
来提取in_name
和out_name
之间的子图.--sort
: 对模型进行拓扑排序.--output_model
: 保存修改后的模型的路径.
子命令 print
: 打印输入模型.
--src_model
或--model
: 指定源模型路径.--level
: 设置打印级别, 选项为model
,graph
,node
和tensor
.--name
: 匹配要打印的张量或节点的指定名称.
5.16.2. 使用示例
以下是一些使用示例:
# 比较两个ONNX模型的精度
python model_debugger.py compare --src_model model1.onnx --dst_model model2.onnx --input_data input=rand --mark_outputs all
# 比较ONNX模型和TensorFlow pb模型的精度
python model_debugger.py compare --src_model model.onnx --src_backend onnxruntime --dst_model model.pb --dst_backend tensorflow --input_data x:0=rand --compare_method mse,rmse,mae --dump_data --dump_dir temp_output
# 提取指定输入(Conv_output_0)和输出(Mul_output_0)之间的子图
python model_debugger.py modify --src_model model.onnx --extract input_names=Conv_output_0 output_names=Mul_output_0 --output_model extracted.onnx
# 更新指定权重的值
python model_debugger.py modify --src_model model.onnx --update onnx::Conv_770=zeros
# 打印指定权重
python model_debugger.py print --src_model model.onnx --name onnx::Conv_770
# 打印模型的图
python model_debugger.py print --src_model ./debug_tools_dev/extracted.onnx --level graph