模型 量化后速度 精度
量化后速度变慢
将不同的算子/layer 配置到CPU上运行,直到确实是哪个算子/layer 在NPU上出现速度问题
https://github.com/alibaba/MNN/issues/1269
Quantized model performance worse than float model performance?
There are three possible reasons:
- SSE / AVX2 Machine, the compute is int8 -> int16 -> int32, which is a little slow than float.
- ARM v8.2 Machine, the machine has twice float performance than quan without dot. Please comipile MNN with -DMNN_ARM82=true, then MNN will use sdot for better performance.
- For 2x2-7x7 float convolution, mnn can use winograd for better performance, currently quantized don't support winograd.
https://github.com/Tencent/ncnn/issues/1642
https://support.huawei.com/enterprise/zh/doc/EDOC1100234052/d92e2fbf
手动调优
调优流程
通过create_quant_config接口生成的config.json文件中的默认配置进行量化,若量化后的推理精度不满足要求,则可调整量化配置重复量化,直至精度满足要求。本节详细介绍手动调优流程,调整对象是训练后量化配置文件config.json中的参数,主要涉及3个阶段:
- 调整校准使用的数据量。
- 跳过量化某些层。
- 调整量化算法及参数。
具体步骤如下:
- 根据create_quant_config接口生成的默认配置进行量化。若精度满足要求,则调参结束,否则进行2。
- 手动修改batch_num,调整校准使用的数据量。
batch_num控制量化使用数据的batch数目,可根据batch大小以及量化需要使用的图片数量调整。通常情况下:
batch_num越大,量化过程中使用的数据样本越多,量化后精度损失越小;但过多的数据并不会带来精度的提升,反而会占用较多的内存,降低量化的速度,并可能引起内存、显存、线程资源不足等情况;因此,建议batch_num*batch_size为16或32(batch_size表示每个batch使用的图片数量)。
- 若按照2中的量化配置进行量化后,精度满足要求,则调参结束,否则进行4。
- 手动修改quant_enable,跳过量化某些层。
quant_enable可以指定该层是否量化,取值为true时量化该层,取值为false时不量化该层,将该层的配置删除也可跳过该层量化。
在整网精度不达标的时候需要识别出网络中的量化敏感层(量化后误差显著增大),然后取消对量化敏感层的量化动作,识别量化敏感层有两种方法:
- 依据网络模型结构,一般网络中首层、尾层以及参数量偏少的层,量化后精度会有较大的下降。
- 通过精度比对工具,逐层比对原始模型和量化后模型输出误差(例如以余弦相似度作为标准,需要相似度达到0.99以上),找到误差较大的层,优先对其进行回退。
- 若按照4中的量化配置进行量化后,精度满足要求,则调参结束,否则进行6。
- 手动修改activation_quant_params和weight_quant_params,调整量化算法及参数:
算法参数意义请参见配置文件及参数说明,算法说明请参见量化算法。
- 若按照6中的量化配置进行量化后,精度满足要求,则调参结束,否则表明量化对精度影响很大,不能进行量化,去除量化配置。
识别模型精度一般下降不多的,主要可以采用:
- 增大校准数据集,校准数据集需要具有代表性,可以表示预测数据的分布
- 调整离线量化中量化的op,比如减少量化op类型
- 改用量化训练方法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
2017-10-25 TCP/IP 协议分层