部署量化模型后,有时需要将 CPU 和 GPU 上的仿真结果与 DPU 上的输出值进行比对。
您可使用 vai_q_onnx 的 dump_model API 随 quantized_model 一起转储仿真结果:
import vai_q_onnx
# This function dumps the simulation results of the quantized model,
# including weights and activation results.
vai_q_onnx.dump_model(
model,
dump_data_reader=None,
output_dir='./dump_results',
dump_float=False)
- model
- 已量化的模型的文件路径。
- dump_data_reader
- 用于转储的数据读取器。它会为原始模型生成输入。
- output_dir
- string。表示转储结果的保存目录。成功执行此函数后,会在 output_dir 中生成转储结果。
- dump_float
- Boolean。用于判定是否转储权重和激活结果的浮点值。
注释: dump_data_reader 的 batch_size 应设为 1 以便进行 DPU 调试。
成功执行此命令后,会在 output_dir 中生成转储结果。每个量化节点的权重和激活结果分别以 *.bin 和 *.txt 格式保存。
如果该节点输出未经量化,例如,softmax 节点,那么浮点激活结果会以 *_float.bin 和 *_float.txt 格式来保存,前提输出是“save_float”设为 True。
下表显示了转储结果的示例。
批次数量 | 是否量化 | 节点名称 | 已保存的文件 |
---|---|---|---|
1 | 是 | resnet_v1_50_conv1 |
{output_dir}/dump_results/quant_resnet_v1_50_conv1.bin {output_dir}/dump_results/quant_resnet_v1_50_conv1.txt |
2 | 是 | resnet_v1_50_conv1_weights |
{output_dir}/dump_results/quant_resnet_v1_50_conv1_weights.bin {output_dir}/dump_results/quant_resnet_v1_50_conv1_weights.txt |
2 | 否 | resnet_v1_50_softmax |
{output_dir}/dump_results/quant_resnet_v1_50_softmax_float.bin {output_dir}/dump_results/quant_resnet_v1_50_softmax_float.txt |