markdown [问题] Atlas300性能和精度误差实验
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了markdown [问题] Atlas300性能和精度误差实验相关的知识,希望对你有一定的参考价值。
1. om模型验证时,没有工具,需要每个model对应去创建graph保存结果,再去和caffe工程对比。(解决,自己写工具,但是不高效)检测模型0.1误差下达到83.3%相似度,识别模型0.01误差下92.1%
2. mindstudio不适合开发,cmake重构工程(解决)
3. 升级SDK后,sample报错,graph init fail,后替换main文件解决
4. Deconvolution group>1时转换om报错,重新用回Upsample层(解决)
4. 量化时,网络中存在Upsample层量化失败(未解决)
5. 单Engine多model(后提供资料解决)
6. 突然断电,导致npu-smi无法找到npu card,报错drv_dcmi(未解决,直接重装)[dcmi_drv_api.c, 2879, dcmi_get_card_num_list]: not init.
Failed to get card number.
7. 性能测试,多分支和小输入网络速度明显变慢,例如116x116正常在1ms以内。
8. log不能调level要将某个配置文件中的ulimit屏蔽掉
9. deviceStartResult_ failed, engine init failed。引擎类名错误或者没有找到om模型等graph.config错误导致设备打开结果失败。
10. 程序卡死找原因,可能是没有输入图像导致引擎卡死。Init卡死写成**“==”**ai_model_manager_ = std::make_shared<hiai::AIModelManager>();
11. return SendSentinelImage();如果是Sentinel图像记得要return,防止往下执行。后续因为没有图像而出错,会卡顿一段直接跳过后续图像结束。
12. 记得清理里推理引擎输入输出容器,否则导致推理引擎tensor shape不匹配 input_data_vec_.clear();output_data_vec_.clear();
13. HIAIEngineFactory create null engine。由于graph.config中引擎名字不是对应的引擎类名。
14. /etc/slog.config 将zip_switch=0可以不加密log
15. 参数如果没有从host传到device要查看是否cereal序列化参数漏了。
16. **一级检测CenterNet还有问题**
17. 测试性能时在MindStudioLog中关闭system Log
18. 接收arg参数是要用局部变量,不然性能会很差。(最终原因:device发送到host端耗时,如果不传image buffer,时间为32ms,否则80ms)
19. 测试模型一致性时使用NoAIPP模型和Raw数据(由cnet.py脚本生成)推理保存二进制与caffe比较
20. 解码jpeg图片时,FFD0结束符后多出一串字符导致重复解码异常bug,更新so后部分图像解码返回-1错误(待解决)。
21. 700万图片334张以后内存蹦了(未解决)
22. device不传解码后图像到host端,耗时从251ms减少到152ms
23. decode申请输入输出buf,手动管理内存,耗时从152ms减少到133.618ms
24. 一级检测resize复用decode buf,输出Init里面初始化,不拷贝,耗时从133.618ms减少到123.846ms
25. 二级检测同样改动,123.846ms减少到120.894ms
26. 8T= 4K(4096 MAC) X 2(双核) X 1G(频率1GHz)
27. 看来看去也就那么几个建议能节省大页内存:一是申请大块内存和地址偏移来替代频繁的小块内存申请(因为dvpp对齐可能会放大);二是使用智能指针避免释放不及时和内存泄露;三是之前说的,在业务流程中找到瓶颈,看处理慢的engine能不能用多线程或拆分engine来提升;最后就是当以上三种策略还是4G内存不足,有一个增加拷贝开销的方案来节约4G空间内存。其实4G空间的内存是DVPP模块需要的,其他模块不需要,例如模型推理,后处理等。可以把DVPP的输出拷贝到普通内存里面(模型推理的输入用HIAI_DMalloc申请内存也就可以满足零拷贝了),此方法带来的拷贝性能开销需要综合全局考虑。
| 模型验证 | 相似度(误差0.1) | 0.01 | 0.001 |
| ----------------------------- | ----------------- | ------ | ------ |
| Recognize | 93.33% | 92.76% | 90.83% |
| ObjectDetectStageCentG320x384 | 99.71% | 92.01% | 87.35% |
| ObjectDetectStageV160x128 | 100% | 87.69% | 24.88% |
| Network(bATCH=1) | Ascend310(fp16) | ASCEND310(INT8) |
| ------------------------- | --------------- | ---------------------- |
| YOLOv3_288x320 | 7.783ms | int8报错upsample层引起 |
| CenterNet_320x384 | 17.653ms | 同上 |
| VehiclePlateAlignCH_16x56 | 0.797ms | 0.844ms |
| VehiclePlateNameCH_48x168 | 1.105ms | 1.096ms |
| PedestrianGlobal_116x116 | 4.536ms | 4.979ms |
| | cv_imread vs dvpp_nv21ToBgr | CV_Resize VS Dvpp_Resize |
| :--: | :-------------------------: | ------------------------ |
| 0.1 | 99.6989% | 88.4587% |
| 0.08 | 99.209% | 84.9902% |
| 0.06 | 94.3766% | 77.6725% |
| 0.04 | 64.5752% | 57.2087% |
| 0.02 | 34.4401% | 32.0052% |
| 0.01 | 15.7666% | 15.7324% |
| | | |
以上是关于markdown [问题] Atlas300性能和精度误差实验的主要内容,如果未能解决你的问题,请参考以下文章
markdown Atlas300实验:模型验证caffe_npu推理误差