6.6.2. 常见故障处理

本章节为您介绍在使用地平线X5工具链产品时,您可能遇到的一些异常故障现象。针对这些故障,我们为您提供对应故障的可能原因及通用解决建议,方便您快速定位问题及解决故障。

6.6.2.1. hb_mapper checker 常见故障

背景信息:模型检查命令( hb_mapper checker

在实际工程中,由于并非所有浮点模型均能够转为量化模型,因此在转换之前需要进行一次检查,这个check过程,会完成一遍模型转换的过程, 但是对于比较耗时的步骤,进行了简化处理。该命令在完成模型的检查后,会输出检查结果和OP在设备上的部署情况。

故障场景:以下为在使用 hb_mapper checker 时常见的故障场景:

1.故障现象一:

ERROR The shape of model input:input is [xxx] which has dimensions of 0.
Please specify input-shape parameter.

故障可能原因:发生此故障的原因可能是模型输入为动态shape。

解决建议:针对此故障,您可使用参数 --input-shape "input_name input_shape" 来指定输入节点的shape信息。

2.故障现象二:

ERROR HorizonRT not support these cpu operators: {op_type}

故障可能原因:发生此故障的原因可能是使用的CPU算子为地平线不支持的CPU算子。

解决建议:针对此故障,您可以根据我们提供的算子支持列表中的内容对算子进行替换;若不被支持的CPU算子为模型核心算子,请您联系地平线对此进行开发评估。

3.故障现象三:

Unsupported op {op_type}

故障可能原因:发生此故障的原因可能是使用的BPU算子为地平线不支持的BPU算子。

解决建议:针对此故障,若模型整体性能可满足需要,您可以忽略该日志;若模型整体性能不能达到您的预期,您可以根据我们提供的算子支持列表中的内容对算子进行替换。

4.故障现象四:

ERROR nodes:['{op_type}'] are specified as domain:xxx, which are not supported by official onnx.
Please check whether these ops are official onnx ops or defined by yourself

故障可能原因:发生此故障的原因可能是使用的自定义算子为地平线不支持的自定义算子。

解决建议:针对此故障,您可以根据我们提供的算子支持列表中的内容对算子进行替换或参考 地平线开发者论坛-自定义算子开发 中的内容完成自定义CPU算子注册。

6.6.2.2. hb_mapper makertbin常见故障

背景信息:模型编译命令( hb_mapper makertbin

该命令根据配置文件和模型的种类,会生成ONNX量化模型以及仿真上板情况的runtime模型。

故障场景:以下为在使用 hb_mapper makertbin 时常见的故障场景:

1.故障现象一:

Layer {op_name}
  xxx expect data shape range:[[xxx][xxx]], but the data shape is [xxx]
Layer {op_name}
  Tensor xxx expects be n dimensions, but m provided

故障可能原因:发生此故障的原因可能是,{op_name}算子超过支持限制被回退到CPU计算。

解决建议:针对此故障,若CPU算子带来的性能损耗您可接受,则无需关注该信息;若性能不能达到您的要求,您可以根据我们提供的算子支持列表中的内容将该op修改至BPU可支持的范围。

2.故障现象二:

ERROR There is an error in pass: {op_name}. Error message:xxx

故障可能原因:发生此故障的原因可能是,{op_name}算子优化失败。

解决建议:针对此故障,请您将模型以及.log文件收集好后提供给地平线技术人员进行分析处理。

3.故障现象三:

Error There is an error in pass:constant_folding.
Error message: Could not find an implementation for the node {op_name}

故障可能原因:发生此故障的原因可能是该算子onnxruntime暂未支持。

解决建议:针对此故障,您可以根据我们提供的算子支持列表中的内容对算子进行替换,如不被支持的算子为核心算子,请您联系地平线对此进行开发评估。

4.故障现象四:

Start to parse the onnx model
core dump

故障可能原因:发生此故障的原因可能是模型解析失败(可能是导出模型时只为一个output/input节点指定了name)。

解决建议:针对此故障,建议您重新导出onnx并确认其有效性(导出onnx模型时不指定output/input name,或者依次为每个output/input节点指定名称)。

5.故障现象五:

Start to calibrate/quantize the model
core dump

Start to compile the model
core dump

故障可能原因:发生此故障的原因可能是模型量化/编译失败。

解决建议:针对此故障,请您将模型以及.log文件收集好后提供给地平线技术人员进行分析处理。

6.故障现象六:

ERROR model conversion faild: Inferred shape and existing shape differ in dimension x: (n) vs (m)

故障可能原因:发生此故障的原因可能是onnx模型的输入shape非法,或者是工具优化pass有误。

解决建议:针对此故障,请您确保onnx模型的有效性,若onnx模型可正常推理,请将模型提供给地平线技术人员进行分析处理。

7.故障现象七:

WARNING got unexpected input/output/sumin threshold on conv {op_name}! value: xxx

故障可能原因:发生此故障的原因可能是数据预处理有误,或该节点weight值太小/太大。

解决建议:针对此故障,请您检查数据预处理是否有误;我们建议您使用BN算子优化数据分布。

8.故障现象八:

ERROR hbdk-cc compile hbir model failed with returncode -n

故障可能原因:发生此故障的原因可能是模型编译失败。

解决建议:针对此故障,请您将模型以及.log文件收集好后提供给地平线技术人员进行分析处理。

9.故障现象九:

ERROR {op_type}  only support 4 dim input

故障可能原因:发生此故障的原因可能是工具链暂不支持该op输入维度为非四维。

解决建议:针对此故障,我们建议您将该op输入维度调整为四维输入。

10.故障现象十:

ERROR {op_type} Not support this attribute/mode=xxx

故障可能原因:发生此故障的原因可能是工具链暂不支持op的该属性。

解决建议:针对此故障,您可以根据我们提供的算子支持列表中的内容进行替换或联系地平线对此进行开发评估。

11.故障现象十一:

ERROR There is no node can execute on BPU in this model,
please make sure the model has at least one conv node which is supported by BPU.

故障可能原因:发生此故障的原因可能是模型中没有可量化的BPU节点。

解决建议:针对此故障,请您确保onnx模型的有效性,且模型中至少使用了一个conv;若前述条件均已满足,请您将模型以及.log文件收集好后提供给地平线技术人员进行分析处理。

12.故障现象十二:

ERROR The opset version of the onnx model is n, only model with opset_version 10/11 is supported

故障可能原因:发生此故障的原因可能是模型opset版本超出工具链支持限制。

解决建议:针对此故障,请您重新导出模型,确保opset_version=10或者11。

13.故障现象十三:

在使用run_on_bpu后转换报错。

故障可能原因:发生此故障的原因可能是目前暂不支持将该算子run_on_bpu。

解决建议:run_on_bpu暂仅支持指定模型中Relu/Softmax/Reshape/pooling(maxpool、avgpool等)算子以及CPU*+Transpose组合(可通过声明Transpose节点名称,将CPU*+Transpose都运行在BPU上,CPU*特指BPU支持的op), 若满足前述条件但仍run_on_bpu失败,请您联系地平线技术人员对此进行分析处理;若不满足前述条件,可联系地平线技术人员对此进行开发评估。

14.故障现象十四:

ERROR unsupported model: BAYES-E not support excute one model on 2core simultaneously now

故障可能原因:发生此故障的原因是X5目前暂不支持编译双核模型。

解决建议:针对此故障,建议您将yaml配置文件中的core_num设置为1。

15.故障现象十五:

ERROR : There is an ERROR during shape inference,···,The error model has been saved as shape_inference_fail.onnx

故障可能原因:发生此故障的原因可能是模型非法或工具解析失败。

解决建议:请您将 .log 文件及生成的 shape_inference_fail.onnx 提供给地平线技术人员进行原因分析。

6.6.2.3. hb_model_modifier常见故障

背景信息hb_model_modifier 工具用于对指定的runtime模型中输入端的Transpose、Quantize节点和输出端的Transpose、Dequantize、DequantizeFilter、Cast、Reshape、Softmax节点进行删除操作, 并将删除节点的信息存放在BIN模型中,可以通过 hb_model_info 进行查看。

故障场景:以下为在使用 hb_model_modifier 时常见的故障场景:

故障现象:

ERROR Can not find value info {op_name}

故障可能原因:该问题为地平线已知问题,于OE1.1.14版本进行了修复。

解决建议:针对此故障,请您完整更新OE开发包或将horizon-tc-ui升级至1.7.8。

6.6.2.4. hb_verifier常见故障

背景信息hb_verifier 工具是用于对指定的定点模型和runtime模型进行结果验证的工具。

若您使用工具前指定了图片,则 hb_verifier 工具会使用指定图片进行定点模型推理、runtime模型板端和X86端模拟器上的推理,并对结果进行两两比较, 给出是否通过的结论(此过程支持自选,您可以根据需要选择进行对比的内容)。

若您在使用工具前未指定图片,则 hb_verifier 工具会默认使用随机生成的tensor数据进行推理。

故障场景:以下为在使用 hb_verifier 时常见的故障场景:

故障现象:

ERROR Quanti onnx and Arm result Strict check FAILED

故障可能原因:发生此故障的原因可能是模型一致性比对失败。

解决建议:针对此故障,请您将模型提供给地平线技术人员进行分析处理。

6.6.2.5. hb_onnxruntime常见故障

背景信息hb_onnxruntime 主要是用于onnx模型推理的类。

故障场景:以下为在使用 hb_onnxruntime 时常见的故障场景:

1.故障现象一:

ERROR [ONNXRuntimeError] : 2:INVALID_ARGUMENT : Unexpected input data type.
Actual: (N11onnxruntime17PrimitiveDataTypexxx), expected: (N11onnxruntime17PrimitiveDataTypexxx)

故障可能原因:发生此故障的原因可能是输入数据格式与模型不匹配。

解决建议:针对此故障,一般来说浮点onnx模型的输入格式为float32,量化后模型输入格式为int8。可使用可视化工具查看onnx模型input节点的属性。

2.故障现象二:

[libprotobuf FATAL google/protobuf/stubs/common.cc:83] This program was compiled against version 3.6.1 of the Protocol Buffer runtime library,
which is not compatible with the installed version on (3.19.4).

故障可能原因:发生此故障的原因可能是torch使用的protobuf版本和horizon使用的protobuf版本有冲突,需要在torch前import。

解决建议:针对此故障,您可以将from horizon_tc_ui import HB_ONNXRuntime放在第一行import。import其他API出现相同报错也同等适用。

6.6.2.6. libDNN常见故障

背景信息libDNN 主要是用于地平线模型的推理库。

故障场景:以下为在使用 libDNN 时常见的故障场景:

1.故障现象一:

(common.h:79): HR:ERROR: op_name:xxx invalid attr key xxx

故障可能原因:发生此故障的原因可能是libDNN暂不支持该op的某个属性(后续我们将逐步把算子约束前移至模型转换阶段提醒)。

解决建议:针对此故障,您可以根据我们提供的算子支持列表中的内容进行替换或联系地平线对此进行开发评估。

2.故障现象二:

(hb_dnn_ndarray.cpp:xxx): data type of ndarray do not match specified type. NDArray dtype_: n, given:m

故障可能原因:发生此故障的原因可能是libDNN暂不支持该输入类型(后续我们将逐步把算子约束前移至模型转换阶段提醒)。

解决建议:针对此故障,您可以根据我们提供的算子支持列表中的内容进行替换或联系地平线对此进行开发评估。

3.故障现象三:

(validate_util.cpp:xxx):tensor aligned shape size is xxx , but tensor hbSysMem memSize is xxx,
tensor hbSysMem memSize should >= tensor aligned shape size!

故障可能原因:发生此故障的原因可能是输入数据申请内存不足。

解决建议:针对此故障,由于使用hrt_model_exec model_info查看模型input节点的aligned shape,是按aligned shape*size_of(tensor type)来申请内存空间的。 此处我们建议:若您的libDNN版本高于1.5.4b,建议直接使用hbDNNTensorProperties.alignedByteSize来申请内存空间,若您的libDNN版本低于1.5.4b版本则直接使用aligned shape*size_of(tensor type)来申请内存空间。

4.故障现象四:

(bpu_model_info.cpp:xxx): HR:ERROR: hbm model input feature names must be equal to graph node input names

故障可能原因:该问题为地平线已知问题,属于hb_model_modifer工具已知问题,已于OE1.1.14版本进行了修复。

解决建议:针对此故障,请您完整更新OE开发包或将horizon-tc-ui升级至1.7.8版本。