接口说明
type_define.h
type_define.h中定义了DLLite-Micro组件中涉及的返回码,根据返回码的内容可以对照了解异常的内容。
表 1 type_define中定义的常量
常量名称
|
说明
|
常量值
|
ReturnCode
|
接口运行结果返回值
|
SUCCESS: 运行成功
UNKNOWN: 未知错误发生
INVALID_PARAM: 参数错误
INVALID_POINTER: 空指针
REGISTER_REPEATED: 重复注册
REGISTER_EXCEED_NUM_LIMIT: 特性注册次数超出限制
UNREGISTER_WITH_TASK: 任务未注销
DESTROY_WITH_TASK: 销毁模型推理实例时,仍有任务正在运行,无法释放资源
LOAD_EXCEED_NUM_LIMIT: 超出最大数量限制
LOAD_EXCEED_MEM_LIMIT: 超出内存限制
LOAD_REPEATED: 重复加载
LOAD_NOT_EXECUTED: 加载错误
UNLOAD_MODEL_NOT_EXIST: 所指定卸载的模型不存在
UNLOAD_MODEL_WITH_TASK: 卸载正在推理的模型
UNLOAD_REPEATED: 模型重复卸载
UNLOAD_HAS_EXECUTED: 已经执行模型卸载
INVOKE_NOT_EXISTED_MODEL: 推理的模型不存在
INVOKE_TENSOR_NOT_MATCH: 输入的Tensor不符合模型要求
UNSUPPORTED_API: 当前版本不支持的接口
SERVER_BINDER_NOT_INIT: 任务调度服务Binder未初始化(预留返回值,暂未使用)
EMPTY_RESOURCE: 资源空缺
INVALID_MODEL_FILE: 模型文件错误
FAILED_TO_GET_RESOURCE: 资源获取错误
|
model_config.h
表 2 model_config中定义的结构
结构体名称
|
说明
|
属性
|
IOTensor
|
IOTensor用于存储AI推理框架输入输出的数据。DLLite-Micro接收用户传入的数据,以IOTensor的类型透传给底层推理框架进行推理,推理结果同样以IOTensor类型进行输出。
|
string name: tensor名称
TensorType type: tensor类型
TensorLayout layout: tensor排布
std::vector<size_t> shape: tensor各维度大小
std::pair<void*, size_t> buffer: <数据,占用大小>
|
表 3 TensorType tensor数据类别枚举值
定义
|
值
|
含义
|
UINT8
|
0
|
8位无符号整型
|
INT8
|
1
|
8位有符号整型
|
INT16
|
2
|
16位有符号整型
|
UINT32
|
3
|
32位无符号整型
|
INT32
|
4
|
32位有符号整型
|
FLOAT
|
7
|
单精度浮点型
|
FLOAT16
|
8
|
半精度浮点型
|
INT64
|
9
|
64位有符号整型
|
UINT16
|
10
|
16位无符号整型
|
表 4 TensorLayout tensor排布枚举值
定义
|
值
|
含义
|
NONE
|
-1
|
无数据排布
|
NCHW
|
0
|
NCHW数据排布
|
NHWC
|
1
|
NHWC数据排布
|
HWKC
|
5
|
HWKC数据排布
|
HWCK
|
6
|
HWCK数据排布
|
KCHW
|
7
|
KCHW数据排布
|
CKHW
|
8
|
CKHW数据排布
|
KHWC
|
9
|
KHWC数据排布
|
CHWK
|
10
|
CHWK数据排布
|
NC4HW4
|
11
|
NC4HW4数据排布
|
NCHWC8
|
2
|
NCHWC8数据排布
|
ROW_MAJOR
|
3
|
行优先排布
|
LSTM_MTK
|
4
|
LSTM_MTK数据排布
|
表 5 InferFrameworkType 底层推理框架类型枚举值
定义
|
值
|
含义
|
INFER
|
-1
|
未指定基础推理框架
|
MINDSPORE
|
0
|
Mindspore推理框架
|
表 6 ModelConfig公有变量
变量名
|
变量解释
|
std::string modelName_
|
模型名称。
|
std::string modelPath_
|
模型结构文件路径。
|
std::string weightPath_
|
模型权重文件路径。weightSeparateFlag_为true时,需要单独提供模型权重文件;weightSeparateFlag_为false,此项为空。
|
bool weightSeparateFlag_
|
权重分离标识。在ARM32A架构平台,DLLite-Micro采用模型结构和权重分离的形式保存模型;在ARM32M架构平台,权重不分离存储。默认值为true。
|
表 7 ModelConfig类接口
接口名
|
接口说明
|
参数说明
|
ReturnCode CheckModelConfig() const
|
检查模型配置文件
返回值:
SUCCESS 模型配置文件检查成功
INVALID_PARAM 无效的推理模型参数
EMPTY_RESOURCE 模型配置文件为空
INVALID_MODEL_FILE 无效的模型配置文件
|
NA
|
feature_interpreter.h
表 8 feature_interpreter定义的结构体
结构体名称
|
说明
|
属性
|
VersionInfo
|
版本信息
|
string version: DLLite-Micro版本号
vector<string> frameworkInfos: 推理框架列表
|
FrameworkInfo
|
框架信息
|
string version: 推理框架版本号
string option: 预留字段,不使用时为空串
|
FeatureConfig
|
特性配置信息,featureName不可重复
|
string featureName: 特性名称(必选)
|
表 9 FeatureInterpreter类提供的接口
接口名
|
接口说明
|
参数说明
|
static ReturnCode GetVersion(VersionInfo& versionInfo)
|
获取版本信息
返回值:
SUCCESS 获取版本信息成功
|
VersionInfo& versionInfo: 版本信息
|
static std::vector<std::string>GetFeatureNameList()
|
获取所有已注册的特征实例命名的名称列表
返回值:特征实例命名名称列表,返回一个vector<std::string>对象,存储所有已注册的特征实例的命名名称;按注册顺序存储;Vector中的featureName不存在重复的名称。
|
NA
|
static std::shared_ptr<FeatureInterpreter>
GetFeatureInterpreterByFeatureName(const std::string &featureName)
|
根据传入的特征实例命名获取对应的特征实例。
返回值:featureInterpreter特征实例,使用方通过特征实例管理模型推理实例。
nullptr:
featureName不在特征实例 List中
|
const std::string &featureName: 要获取特征实例的特征命名名称
|
static ReturnCode GetFrameworkInfo(const std::string &frameworkName, FrameworkInfo& frameworkInfo)
|
获取框架信息
返回值:
SUCCESS 获取框架信息成功
INVALID_PARAM 无效的框架信息参数
|
const std::string &frameworkName: 要查询的推理框架名称
FrameworkInfo& frameworkInfo: 查询到的推理框架信息
|
static std::shared_ptr<ModelInterpreter>
GetModelInterpreterByModelName(const std::string &modelName)
|
根据传入的模型推理实例命名获取对应的模型推理实例
返回值:modelInterpreter模型推理实例。
返回nullptr的情况:
modelName不在推理实例List中;
|
const std::string &modelName: 模型推理实例命名名称
|
static std::vector<std::string>GetModelNameList()
|
获取所有已创建的模型推理实例命名的名称列表
返回值:模型推理实例命名名称列表,返回一个vector<std::string>对象,存储所有已创建的模型推理实例的命名名称;按注册顺序存储;Vector中的modelName不存在重复的名称。
|
NA
|
static std::shared_ptr<FeatureInterpreter> RegisterFeature(const FeatureConfig& featureConfig)
|
向DLLite-Micro控制面注册特性信息,初始化配置,设置featureName(不可重复)。返回后续调用所使用的实例化管理类。featureInterpreter
返回值:featureInterpreter特征实例,使用方通过特征实例管理模型推理实例。
返回nullptr的情况:
- featureName长度超过上限(最大256)
- 注册数量达到上限(每个进程8个)
- featureName已被注册
|
const FeatureConfig& featurConfig: 应用配置信息,包括特性名称(featureName)
|
static ReturnCode UnregisterFeature(std::shared_ptr<FeatureInterpreter> &featureInterpreter)
|
向DLLite-Micro控制面板反注册特性信息,并释放相关资源。
返回值:
SUCCESS 反注册特性信息成功
UNKNOWN 特征实例数量为0
INVALID_POINTER 无效的featureInterpreter实例化
INVALID_PARAM 此特征实例不在特征实例list中
|
std::shared_ptr<FeatureInterpreter> &featureInterpreter: 注册时获得的应用推理管理类
|
std::shared_ptr<ModelInterpreter> CreateModelInterpreter(const ModelConfig &modelConfig)
|
获取模型的推理实例,同一个模型可以生成多个推理实例。
返回值:modelInterpreter 模型推理实例。如果为nullptr则创建失败,否则创建成功。通过返回的ModelInterpreter指针可以继续调用其load、invoke等方法,该实例所包含接口见后续接口。
返回nullptr的情况:
- modelName长度超过上限(最大256)
- modelName为空
- modelPath长度达到最大上限(最大256)
- weightPath长度达到最大上限(最大256)
- 模型大小超过300KB
- 模型为空文件
- 创建数量达到上限(每个特征实例16个)
- modelName已被创建使用
|
const ModelConfig &modelConfig: 模型配置信息
|
ReturnCode DestroyModelInterpreter (std::shared_ptr<ModelInterpreter>& modelInterpreter)
|
销毁所传入的推理实例,释放相应资源。
返回值:
SUCCESS 销毁模型推理实例成功
INVALID_PARAM 无效的推理模型实例
|
std::shared_ptr<ModelInterpreter>& modelInterpreter:待销毁的模型推理实例
|
model_interpreter.h
表 10 model_interpreter中定义的常量
常量名称
|
说明
|
常量值
|
IOFlag
|
IO标志枚举值
|
INPUT
OUTPUT
|
表 11 ModelInterpreter类接口
接口名
|
接口说明
|
参数说明
|
ReturnCode Load()
|
加载模型。轻量级框架是纯C化的模型,模型实际上是.so库;加载模型动态库,创建会话,获取模型输入输出Tensor信息。
返回值:
SUCCESS 加载模型成功
LOAD_REPEATED 模型已被加载
INVALID_POINTER 空指针
|
NA
|
ReturnCode Unload()
|
卸载模型,释放输入/输出推理内存资源
返回值:
SUCCESS 模型卸载成功
UNLOAD_REPEATED 模型已卸载
INVALID_POINTER 空指针
|
NA
|
ReturnCode CreateTensors(std::vector<IOTensor>& tensors, IOFlag flag)
|
创建Tensor并申请内存
返回值:
SUCCESS 创建Tensor并申请内存成功
LOAD_NOT_EXECUTED 模型未加载
INVALID_PARAM 无效的输入/输出标识
|
std::vector<IOTensor> &tensors: 待创建的tensor
IOFlag flag: 输入/输出标识
(此接口当前版本暂不支持,后续版本中完善功能。当前版本返回ReturnCode::UNSUPPORTED_API)
|
ReturnCode DestroyTensors(std::vector<IOTensor>& tensors)
|
释放创建的Tensors资源
返回值:
SUCCESS 释放Tensors资源成功
LOAD_NOT_EXECUTED 模型未加载
|
std::vector<IOTensor> &tensors: 待释放的tensor
(此接口当前版本暂不支持,后续版本中完善功能。当前版本返回ReturnCode::UNSUPPORTED_API)
|
ReturnCode GetTensors(std::vector<IOTensor> &tensors, IOFlag flag) const
|
获取Tensor信息
返回值:
SUCCESS 获取Tensor信息成功
INVALID_POINTER 空指针
INVALID_PARAM 无效的输入/输出标识
|
std::vector<IOTensor> &tensors: 待创建的tensor
IOFlag flag: 输入/输出标识
|
ReturnCode Invoke(std::vector<IOTensor> &inputs, std::vector<IOTensor> &outputs) const
|
对inputs中的输入数据进行推理,并将推理结果通过输出至outputs。
返回值:
SUCCESS 推理成功
LOAD_NOT_EXECUTED 模型未加载
INVALID_POINTER 空指针
|
std::vector<IOTensor> &inputs: 输入tensor
std::vector<IOTensor> &outputs: 输出tensor
|