在地平线 J6 平台,当前模型在转换&编译过程中,会生成 quantized.bc 和 hbm 两种定点模型,其中:
hbm 用于板端部署,在 x86 端的指令仿真推理速度比较慢
quantized.bc 主要用于 x86 端的仿真,其数值输出在无 CPU 算子的前提下理论和 hbm 保持 bit 一致
为在服务器端加速量化模型的精度初测,本文分享了测试过程依赖、脚本、实施流程和参考测试结果,供小伙伴们参考~
如何使用GPU运行hbir
- 安装 libdnn(Docker默认不安装):whl 包位于 OE 包 package/host/ai_toolchain 路径下
- 修改 session 的执行后端:
如何使用CPU运行hbir
当前 hbir 默认 CPU 运行(对应session后端为ONEDNN),其中,每个算子默认使用 16 线程进行加速,也支持通过环境变量进行修改(通常用于限制CPU资源来控制成本):
用户还可以通过多进程的策略进一步提升仿真效率
测试数据获取和测试
测试脚本准备
模型下载 | 验证对比 |
download_model.sh fetch_model_list.sh resolve_ai_benchmark_qat.sh | batch_diff.sh infer_script.py |
测试过程:
下载BC文件(记得修改脚本中的版本信息)
fetch_model_list.sh -> download_models.sh
下载hbm文件
resolve_ai_benchmark_qat.sh
执行性能测试(修改脚本batch_diff.sh中的模型目录,然后执行,其中会自动调用infer_script.py)
- ./batch_diff.sh
func.session.backend设置项可以是:
"":禁用加速,普通的CPU计算。
"HBDNN":使用GPU加速
"oneDNN":使用CPU的avx512指令集等加速oneDNN使用cpu的avx512指令集,针对CPU推理过程进行了优化加速,如果CPU支持avx512指令集,应该会有较好的加速效果的。
检查CPU是否支持avx512指令集的方法:执行grep avx512 /proc/cpuinfo如果输出结果中包含avx512说明CPU支持avx512指令集;
注意事项
因版本差异,该测试流程和数据在J6_V3.0.31版本测试,测试结果仅供参考。v3.2.0和v3.2.5版本因策略调整,暂不提供加速功能; V3.7.0加速功能正常使用,用户可以自己测试性能。
