# MindSpore Lite调用macBert模型报错

**1. 系统环境**

硬件环境\(Ascend/GPU/CPU\): Ascend/GPU/CPU

软件环境: MindSpore 版本: 2.2.10

执行模式（静态图/动态图）： 不限

Python 版本: 3.8

操作系统平台: linux

**2. 报错信息**

2.1 问题描述

使用机型：华为META60

场景：导出MacBert模型，用鸿蒙的MindSpore Lite 调用模型执行推理，代码如下：

2.2 报错信息

```
E     signal_chain_handler call 2 rd sigchain action for signal: 11 sca_sigaction=5b31a4d874 noreturn=0 FREEZE_signo_11 thread_list_lock_status:-1 tl_lock_count=0 tl_lock_waiters=0 tl_lock_tid_fail=-1 tl_lock_count_tid=-1 
E     [mindspore/lite/src/litert/kernel/cpu/fp16/cast_fp16.cc:102] DoCast# Unsupported output data type 30 
E     [mindspore/lite/src/litert/kernel/cpu/fp16/cast_fp16.cc:102] DoCast# Unsupported output data type 30 
E     [mindspore/lite/src/litert/lite_kernel.cc:133] Execute# run kernel failed, name: /bert/Cast_1 
E     [mindspore/lite/src/executor/sub_graph_kernel.cc:473] Execute# run kernel failed, name: /bert/Cast_1 
E     [mindspore/lite/src/litert/lite_mindrt.cc:48] RunOpData# run kernel failed, name: CpuFP16SubGraph3_7 
E     signal_chain_handler call usr sigaction for signal: 11 sig_action.sa_sigaction=00000000B5217330 
E     [mindspore/lite/src/litert/mindrt_executor.cc:334] Run# MindrtRun failed 
E     [mindspore/lite/src/litert/lite_session.cc:887] RunGraph# RunGraph failed : -1 
E     [mindspore/lite/src/litert/cxx_api/model/model_impl.cc:525] Predict# Run graph failed. 
E     signal_chain_handler call 2 rd sigchain action for signal: 11 sca_sigaction=5b31a4d874 noreturn=0 FREEZE_signo_11 thread_list_lock_status:-1 tl_lock_count=0 tl_lock_waiters=0 tl_lock_tid_fail=-1 tl_lock_count_tid=-1 
```

2.3 脚本信息

```
auto inputs = OH_AI_ModelGetInputs(model);

int n1 = 1;
int n2 = 8;
OH_AI_ShapeInfo *shape_infos = new OH_AI_ShapeInfo[3];
shape_infos[0].shape_num = 2;
shape_infos[0].shape[0] = n1;
shape_infos[0].shape[1] = n2;
shape_infos[1].shape_num = 2;
shape_infos[1].shape[0] = n1;
shape_infos[1].shape[1] = n2;
shape_infos[2].shape_num = 2;
shape_infos[2].shape[0] = n1;
shape_infos[2].shape[1] = n2;
auto modelResizeInputs = OH_AI_ModelResize(model, inputs, shape_infos, 3);
auto ret = FillInputTensor(inputs, input_data);
auto predict_ret = OH_AI_ModelPredict(model, inputs, &outputs, nullptr, nullptr);
if (predict_ret != OH_AI_STATUS_SUCCESS) {
    OH_AI_ModelDestroy(&model);
    LOGE("MS_LITE_ERR: MSLite Predict error.\n");
    return OH_AI_STATUS_LITE_ERROR;
}
```

**3. 根因分析**

从报错来提示分析是cast算子不支持从fp16直接转bool类型。

**4. 解决方案**

看代码只支持转int64，int32，loat32, float16。修改网络先转换成float32 然后再转bool类型https://gitee.com/mindspore/mindspore/blob/master/mindspore/lite/src/litert/kernel/cpu/fp16/cast\_fp16.cc

```
    switch (output_data_type) {
      case kNumberTypeInt64:
        Float16ToInt64(reinterpret_cast<float16_t *>(input_data) + offset,
                       reinterpret_cast<int64_t *>(output_data) + offset, data_num);
        break;
      case kNumberTypeInt32:
        Float16ToInt32(reinterpret_cast<float16_t *>(input_data) + offset,
                       reinterpret_cast<int32_t *>(output_data) + offset, data_num);
        break;
      case kNumberTypeFloat32:
        Float16ToFloat32(reinterpret_cast<float16_t *>(input_data) + offset,
                         reinterpret_cast<float *>(output_data) + offset, data_num);
        break;
      case kNumberTypeFloat16:
        memcpy(reinterpret_cast<float16_t *>(output_data) + offset, reinterpret_cast<float16_t *>(input_data) + offset,
               data_num * sizeof(float16_t));
        break;
      default:
        MS_LOG(ERROR) << "Unsupported output data type " << output_data_type;
        return RET_ERROR;
    }
```

