常见问题
导入问题
导入Lyngor库失败
问题描述
在执行 import lyngor
命令导入Lyngor库文件时报错。错误信息如下:
tvm._ffi.base.LynCError:
lyngor.exception.LynException:ErrCode-6000:C_FUNCTION_ERR
其中, ErrCode-6000:C_FUNCTION_ERR
显示为C++函数运行错误。
解决办法
Python中导入Lyngor时提示.so文件不存在
问题描述
安装Lyngor后,在Python中执行 import lyngor
命令时报错。错误信息示例如下:

原因分析
Lyngor需要与LynSDK配套使用,如果没有安装LynSDK会报错xx文件不存在。
解决办法
执行 dpkg -l | grep lynsdk
命令,查询LynSDK信息,确认已安装LynSDK,
且LynSDK版本满足当前Lyngor版本的前提条件。具体说明参见 前提条件 。

如果没有安装LynSDK,或者LynSDK版本不满足当前Lyngor版本的前提条件,需要安装适当版本的LynSDK。 具体操作说明参见《灵汐产品快速入门》。
模型编译问题
模型编译时单独编译卷积层报错:Verify ‘coreVectorPair.size() >0’ failed
问题描述
使用Lyngor进行模型编译时,单独编译卷积层报错。错误信息如下:

原因分析
Lyngor进行模型编译时,经过卷积后的输出超出限制。
解决办法
为避免输入输出超限,可以将 lyngor.DLModel.load
的 in_type
和 out_type
参数设置为 float16
,以减少其大小。
模型编译时将nn.BatchNorm2d作为网络的最后输出时报错
问题描述
使用Lyngor进行模型编译时,将 nn.BatchNorm2d
作为网络的最后输出,编译时报错。错误信息为:
TypeError:'Call' object does not support indexing

解决办法
方法1:在BN层后放一个激活层。
方法2:将输入结果reshape一下。
Pytorch模型推理问题
torch.jit.trace相关限制
在解析Pytorch模型时,Lyngor使用了Pytorch的 torch.jit.trace
接口。该接口自身的限制在使用
Lyngor时同样存在。大致包括以下几个方面。
模型输入输出
模型的输入和输出需要是仅含 torch.Tensor
的列表或者元组。
None可以作为模型中算子参数 nn.Parameter
的默认值,但不可以作为模型的输入、输出和输入接口的默认值。
控制流
对控制流(例如if-else)支持较差。 torch.jit.trace
接口只会在被调用时,根据trace接口的输入来记录
一次模型的运行流程,此时模型内由输入决定的控制流只会被记录一条分支。因此,如果你的模型中包含分支,
那么模型运行时任何由输入决定的控制流只会被trace保留一个分支(保留哪一个分支由trace的输入决定)。
模型结构
torch.jit.trace
接口记录模型时,仅支持符合Pytorch自定义模型规范的模型,并且会从模型的forward
方法开始记录。
因此,使用Lyngor前,需先确保你的模型符合规范(继承 torch.nn.Module
并以forward方法作为模型入口),
具体参考Pytorch官方自定义模型流程:Modules
— PyTorch 1.10.0
documentation
其他操作说明
推理模式
用Lyngor推理时,会将模型设置为推理模式以冻结像BatchNorm,Dropout之类算子的参数。所以当模型中包含相关 算子时,相同输入数据的运行结果会和不冻结参数模式有出差别。
使用的冻结方法: your_module.eval()
或者 your_module.train(False)
;这里your_module是
torch.nn.Module
类型。参考:torch.nn.Module.eval
apply方法
Pytorch框架的模型不支持模型中算子使用算子对应的静态类的apply方法,可修改为对应的 forward()
函数,
并移除所有的@staticmethod装饰器。
引入模型相关的源码
编译时找不到模型对应的类或模块,则需要引入模型相关的源码。
具体引入操作:需要在使用 model_compile
前,把模型源码文件所在路径提前加到 PYTHONPATH
中。
示例如下:
# 一行命令:
export PYTHONPATH=/toolchain/pytorch_models/efficientnet_lite/:$PYTHONPATH
&&
model_compile -m ./middle.pth -f Pytorch -t apu --input_nodes 'data' --input_shapes "1,3,224,224" --output_nodes "fc"
模型 middle.pth
对应源码类在文件 /toolchain/pytorch_models/efficientnet_lite/efficientnet.py
中,
所以将路径 /toolchain/pytorch_models/efficientnet_lite/
添加到 PYTHONPATH
中。