Skip to content

Instantly share code, notes, and snippets.

@hewumars
Last active March 31, 2020 11:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hewumars/39422b39e18e8b7add5b6c0633463885 to your computer and use it in GitHub Desktop.
Save hewumars/39422b39e18e8b7add5b6c0633463885 to your computer and use it in GitHub Desktop.
  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层(解决)

  5. 量化时,网络中存在Upsample层量化失败(未解决)

  6. 单Engine多model(后提供资料解决)

  7. 突然断电,导致npu-smi无法找到npu card,报错drv_dcmi(未解决,直接重装)[dcmi_drv_api.c, 2879, dcmi_get_card_num_list]: not init. Failed to get card number.

  8. 性能测试,多分支和小输入网络速度明显变慢,例如116x116正常在1ms以内。

  9. log不能调level要将某个配置文件中的ulimit屏蔽掉

  10. deviceStartResult_ failed, engine init failed。引擎类名错误或者没有找到om模型等graph.config错误导致设备打开结果失败。

  11. 程序卡死找原因,可能是没有输入图像导致引擎卡死。Init卡死写成**“==”**ai_model_manager_ = std::make_sharedhiai::AIModelManager();

  12. return SendSentinelImage();如果是Sentinel图像记得要return,防止往下执行。后续因为没有图像而出错,会卡顿一段直接跳过后续图像结束。

  13. 记得清理里推理引擎输入输出容器,否则导致推理引擎tensor shape不匹配 input_data_vec_.clear();output_data_vec_.clear();

  14. HIAIEngineFactory create null engine。由于graph.config中引擎名字不是对应的引擎类名。

  15. /etc/slog.config 将zip_switch=0可以不加密log

  16. 参数如果没有从host传到device要查看是否cereal序列化参数漏了。

  17. 一级检测CenterNet还有问题

  18. 测试性能时在MindStudioLog中关闭system Log

  19. 接收arg参数是要用局部变量,不然性能会很差。(最终原因:device发送到host端耗时,如果不传image buffer,时间为32ms,否则80ms)

  20. 测试模型一致性时使用NoAIPP模型和Raw数据(由cnet.py脚本生成)推理保存二进制与caffe比较

  21. 解码jpeg图片时,FFD0结束符后多出一串字符导致重复解码异常bug,更新so后部分图像解码返回-1错误(待解决)。

  22. 700万图片334张以后内存蹦了(未解决)

  23. device不传解码后图像到host端,耗时从251ms减少到152ms

  24. decode申请输入输出buf,手动管理内存,耗时从152ms减少到133.618ms

  25. 一级检测resize复用decode buf,输出Init里面初始化,不拷贝,耗时从133.618ms减少到123.846ms

  26. 二级检测同样改动,123.846ms减少到120.894ms

  27. 8T= 4K(4096 MAC) X 2(双核) X 1G(频率1GHz)

  28. 看来看去也就那么几个建议能节省大页内存:一是申请大块内存和地址偏移来替代频繁的小块内存申请(因为dvpp对齐可能会放大);二是使用智能指针避免释放不及时和内存泄露;三是之前说的,在业务流程中找到瓶颈,看处理慢的engine能不能用多线程或拆分engine来提升;最后就是当以上三种策略还是4G内存不足,有一个增加拷贝开销的方案来节约4G空间内存。其实4G空间的内存是DVPP模块需要的,其他模块不需要,例如模型推理,后处理等。可以把DVPP的输出拷贝到普通内存里面(模型推理的输入用HIAI_DMalloc申请内存也就可以满足零拷贝了),此方法带来的拷贝性能开销需要综合全局考虑。

  29. JPEGD解码出来的图片是nv21,经过DVPP crop resize以后编程nv12。VDEC解码出来的图片是hfbc,经过DVPP转换成nv12

  30. VDEC会缓存5帧,除非设置isEOS标志再调用vdecctl才会把剩下所有帧都输出。解码错误不会进入回调函数。

  31. Ascend310 device侧使用的编译是GCC: (Do-Compiler V100R001C00B002) 7.3.0.

  32. omg --mode=1 --om=XXX.om --json=./xxx.json 模型转换成json

  33. VPC分非8K和8K缩放,8K仅能缩放不能ROI,而且缩放比例都需要满足宽高[32,16]倍率

  34. Host侧数据进入device侧如果不拷贝到DVPP_DMalloc空间VPC不能使用。(不适用DVPP解码时必须拷贝一次)

  35. device侧容器一定要注意不能越界(下标越界),可能导致崩溃行之前的打印信息都无法输出,引起查找难度。

  36. 网络授权服务端需要sudo service firewalld stop和setenforce 0之后才能执行,返回0表示开启成功

模型验证 相似度(误差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%
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment