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_nameout_name 之间的子图.

  • --sort: 对模型进行拓扑排序.

  • --output_model: 保存修改后的模型的路径.

子命令 print: 打印输入模型.

  • --src_model--model: 指定源模型路径.

  • --level: 设置打印级别, 选项为 model, graph, nodetensor.

  • --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