1. 引言
在学习《0基础学习地平线J6 QAT量化感知训练》后,会发现有qat.bc与quantized.bc是以前在其他地方没接触过的:
qat.bc:相比于qat_model,多了一步查表算子定点化的操作,精度与qat_model可能会存在微小的差异。
quantized.bc:模型中浮点算子转换成定点算子,浮点参数全部转换为定点参数,这种转换后的模型称之为quantized_model /定点模型 / 量化模型。
两个模型可以简单称之为bc模型,不知道有没有这样的一问:
在什么场景下需要推理这两个模型?
这两个模型如何推理?
推理速度怎么样?
这篇文章来一起看一下。
2. 为什么要推理bc模型
首先要理解,只有在进行精度分析时才会推理bc模型。特别是在定位精度问题时,可以通过推理不同的bc模型,来定位模型出现精度问题的位置,继而缩小排查范围。
此外,在缺少开发板时,可以使用quantized.bc推理来临时仿真板端hbm推理的结果,它俩在定点部分可以做到比特一致。
3. 单进程 多线程测速bc
bc模型的推理,需要在PC服务器端使用CPU或GPU进行,推荐使用CPU进行推理。评测bc模型速度的示例代码如下:
实现了对多个模型的批量推理测试,并记录平均推理耗时。
通过限制线程数、预热次数、随机输入张量等,保证了测试的稳定性和公平性,代码中同时提供CPU与GPU推理示例,推荐使用CPU推理。
最终统计每个模型的推理性能。
4. 多进程测速 bc
代码使用 Python 的 multiprocessing 模块,通过多进程的方式对存储在目录 model_dir 中的多个 .bc 模型文件进行推理测试,统计每个模型的平均推理耗时。
每个模型的推理任务分配给一个独立的进程,并最终汇总输出推理性能。
和第 3 节一样,有对线程数的限制,确保在多线程环境中推理的稳定性,避免多线程过多导致资源争抢、过载等问题。

