SOPHON SDK模型转换的常见问题

1. 模型转换失败怎么办

  • 检查命令行输入参数有没有错误,这个一般会有打印提示;
  • 不支持的算子需要使用BMLang或者OKKernel开发,也可以联系FAE来解决;
  • 如果是pytorch模型,是不是没有做trace?
  • 使用转换工具编译模型时,设置环境变量export BMCOMPILER_STAT_ERR=1,然后加上–v 4,保存更详细的日志,提供给我方技术人员进一步排查;
  • 有时转换失败是因为误差比对超过了允许的阈值而导致编译过程中断,目前比对误差阈值设置为误差在0.01之内,但也不排除有些模型有很多的累加或除法操作,由于尾差累计导致超出这个范围;可以加上–cmp False关闭比对,最终到业务层面上验证转换后的模型精度是否符合要求;
  • 2.7.0以后的sdk可以通过BMCOMPILER_STAT_ERR=1,来看每层的数据相似度,个别超过误差不会中断完整编译过程。

2. 如何使用BMLang开发自定义的算子

BMLang是算能科技面向用户推出的针对BM168x TPU的一套高级编程接口库,使得用户可以快速的基于TPU硬件开发自定义算子,甚至整个神经网络。

BMLang的基本元素是:张量数据(bmlang::Tensor)和计算操作(bmlang::Operator)。用户需要使用bmlang::Tensor和bmlang::Operation来编写C++代码,然后在程序最后使用bmlang::compile或bmlang::compile_with_check来生成TPU可以运行的二进制文件BModel,与普通网络编译产生的BModel文件一样,依赖于BMRuntime接口载入与执行。

3. 是否支持模型的在线编译

不支持,模型编译的过程特别耗时。因此采用了离线编译生成BModel,在线推理时直接加载BModel运行的方式。

4. fp32模型的输出和原始模型输出差异比较大怎么办

  • 对于两个模型采用同样的输入,看看输出是否一致,比如输入都是用全部是0.1的矩阵,填充input tensor的内存空间,然后做推理,比较输出数据的差异;
  • 设置 export BMRT_SAVE_IO_TENSORS=1,运行bmruntime的时候会输出两个文件 input_ref_data.dat.bmrt和output_ref_data.dat.bmrt,用这个和理想的输入输出作对比排查;比较数据时尽量使用二进制比较,不要通过打印的数据比较,因为打印的输入格式不一样,也会导致数据显示不一样。

5. YOLOv3的darknet模型先转为caffe模型后再转为fp32bmodel,模型输出和原始模型输出存在偏差?

darknet模型转caffe模型过程中可能存在偏差,建议直接用darknet模型转为fp32bmodel。将YOLOv3的darknet模型直接转为bmodel,推理结果没有偏差。

6. 使用bmnetd编译Darknet出现段错误Unknown error 27620053?

编译模型段错误时,检查xxx.cfg文件,如果在windows系统下保存或修改过,由于和linux系统对换行符表示不同,会导致解析出错引起段错误,可以用命令转换:dos2unix xxx.cfg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值