# @ohos.ai.mindSporeLite (端侧AI框架)
MindSpore Lite 是一个轻量化、高性能的端侧AI引擎,提供了标准的模型推理和训练接口,内置通用硬件高性能算子库,原生支持Neural Network Runtime Kit使能AI专用芯片加速推理,助力打造全场景智能应用。
本模块主要介绍MindSpore Lite AI引擎支持模型端侧推理/训练的相关能力。
> **说明:**
>
> - 本模块首批接口从API version 10开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。示例代码使用模型均为MindSpore端侧模型。
>
> - 本模块接口仅可在Stage模型下使用。
## 导入模块
```ts
import { mindSporeLite } from '@kit.MindSporeLiteKit';
```
## mindSporeLite.loadModelFromFile
loadModelFromFile(model: string, callback: Callback<Model>): void
从完整路径加载输入模型用于推理。使用callback异步回调。
**系统能力:** SystemCapability.AI.MindSporeLite
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ------------------------- | ---- | ------------------------ |
| model | string | 是 | 模型的完整输入路径。 |
| callback | Callback<[Model](#model)> | 是 | 回调函数。返回模型对象。 |
**示例:**
```ts
let modelFile : string = '/path/to/xxx.ms';
mindSporeLite.loadModelFromFile(modelFile, (mindSporeLiteModel : mindSporeLite.Model) => {
let modelInputs : mindSporeLite.MSTensor[] = mindSporeLiteModel.getInputs();
console.info(modelInputs[0].name);
})
```
## mindSporeLite.loadModelFromFile
loadModelFromFile(model: string, context: Context, callback: Callback<Model>): void
从完整路径加载输入模型用于推理。使用callback异步回调。
**系统能力:** SystemCapability.AI.MindSporeLite
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ----------------------------------- | ---- | ---------------------- |
| model | string | 是 | 模型的完整输入路径。 |
| context | [Context](#context) | 是 | 运行环境的配置信息。 |
| callback | Callback<[Model](#model)> | 是 | 回调函数。返回模型对象。 |
**示例:**
```ts
let context: mindSporeLite.Context = {};
context.target = ['cpu'];
let modelFile : string = '/path/to/xxx.ms';
mindSporeLite.loadModelFromFile(modelFile, context, (mindSporeLiteModel : mindSporeLite.Model) => {
let modelInputs : mindSporeLite.MSTensor[] = mindSporeLiteModel.getInputs();
console.info(modelInputs[0].name);
})
```
## mindSporeLite.loadModelFromFile
loadModelFromFile(model: string, context?: Context): Promise<Model>
从完整路径加载输入模型用于推理。使用Promise异步函数。
**系统能力:** SystemCapability.AI.MindSporeLite
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ------- | ------------------- | ---- | --------------------------------------------- |
| model | string | 是 | 模型的完整输入路径。 |
| context | [Context](#context) | 否 | 运行环境的配置信息。默认使用CpuDevice初始化。 |
**返回值:**
| 类型 | 说明 |
| ------------------------- | ---------------------------- |
| Promise<[Model](#model)> | Promise对象。返回Model对象。 |
**示例:**
```ts
let modelFile = '/path/to/xxx.ms';
mindSporeLite.loadModelFromFile(modelFile).then((mindSporeLiteModel : mindSporeLite.Model) => {
let modelInputs : mindSporeLite.MSTensor[] = mindSporeLiteModel.getInputs();
console.info(modelInputs[0].name);
})
```
## mindSporeLite.loadModelFromBuffer
loadModelFromBuffer(model: ArrayBuffer, callback: Callback<Model>): void
从内存加载输入模型用于推理。使用callback异步回调。
**系统能力:** SystemCapability.AI.MindSporeLite
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ------------------------- | ---- | ------------------------ |
| model | ArrayBuffer | 是 | 包含模型的内存。 |
| callback | Callback<[Model](#model)> | 是 | 回调函数。返回模型对象。 |
**示例:**
```ts
import { mindSporeLite } from '@kit.MindSporeLiteKit';
import { common } from '@kit.AbilityKit';
let modelFile = '/path/to/xxx.ms';
getContext(this).resourceManager.getRawFileContent(modelFile).then((buffer : Uint8Array) => {
let modelBuffer = buffer.buffer;
mindSporeLite.loadModelFromBuffer(modelBuffer, (mindSporeLiteModel : mindSporeLite.Model) => {
let modelInputs : mindSporeLite.MSTensor[] = mindSporeLiteModel.getInputs();
console.info(modelInputs[0].name);
})
})
```
## mindSporeLite.loadModelFromBuffer
loadModelFromBuffer(model: ArrayBuffer, context: Context, callback: Callback<Model>): void
从内存加载输入模型用于推理。使用callback异步回调。
**系统能力:** SystemCapability.AI.MindSporeLite
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ----------------------------------- | ---- | ---------------------- |
| model | ArrayBuffer | 是 | 包含模型的内存。 |
| context | [Context](#context) | 是 | 运行环境的配置信息。 |
| callback | Callback<[Model](#model)> | 是 | 回调函数。返回模型对象。 |
**示例:**
```ts
import { resourceManager } from '@kit.LocalizationKit';
import { GlobalContext } from '../GlobalContext';
import { mindSporeLite } from '@kit.MindSporeLiteKit';
import { common } from '@kit.AbilityKit';
let modelFile = '/path/to/xxx.ms';
export class Test {
value:number = 0;
foo(): void {
GlobalContext.getContext().setObject("value", this.value);
}
}
let globalContext= GlobalContext.getContext().getObject("value") as common.UIAbilityContext;
globalContext.resourceManager.getRawFileContent(modelFile).then((buffer : Uint8Array) => {
let modelBuffer = buffer.buffer;
let context: mindSporeLite.Context = {};
context.target = ['cpu'];
mindSporeLite.loadModelFromBuffer(modelBuffer, context, (mindSporeLiteModel : mindSporeLite.Model) => {
let modelInputs : mindSporeLite.MSTensor[] = mindSporeLiteModel.getInputs();
console.info(modelInputs[0].name);
})
})
```
## mindSporeLite.loadModelFromBuffer
loadModelFromBuffer(model: ArrayBuffer, context?: Context): Promise<Model>
从内存加载输入模型用于推理。使用Promise异步函数。
**系统能力:** SystemCapability.AI.MindSporeLite
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ------- | ------------------- | ---- | --------------------------------------------- |
| model | ArrayBuffer | 是 | 包含模型的内存。 |
| context | [Context](#context) | 否 | 运行环境的配置信息。默认使用CpuDevice初始化。 |
**返回值:**
| 类型 | 说明 |
| ------------------------------- | ---------------------------- |
| Promise<[Model](#model)> | Promise对象。返回Model对象。 |
**示例:**
```ts
import { resourceManager } from '@kit.LocalizationKit';
import { GlobalContext } from '../GlobalContext';
import { mindSporeLite } from '@kit.MindSporeLiteKit';
import { common } from '@kit.AbilityKit';
let modelFile = '/path/to/xxx.ms';
export class Test {
value:number = 0;
foo(): void {
GlobalContext.getContext().setObject("value", this.value);
}
}
let globalContext = GlobalContext.getContext().getObject("value") as common.UIAbilityContext;
globalContext.resourceManager.getRawFileContent(modelFile).then((buffer : Uint8Array) => {
let modelBuffer = buffer.buffer;
mindSporeLite.loadModelFromBuffer(modelBuffer).then((mindSporeLiteModel : mindSporeLite.Model) => {
let modelInputs : mindSporeLite.MSTensor[] = mindSporeLiteModel.getInputs();
console.info(modelInputs[0].name);
})
})
```
## mindSporeLite.loadModelFromFd
loadModelFromFd(model: number, callback: Callback<Model>): void
从文件描述符加载输入模型用于推理。使用callback异步回调。
**系统能力:** SystemCapability.AI.MindSporeLite
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ----------------------------------- | ---- | ---------------------- |
| model | number | 是 | 模型的文件描述符。 |
| callback | Callback<[Model](#model)> | 是 | 回调函数。返回模型对象。 |
**示例:**
```ts
import { fileIo } from '@kit.CoreFileKit';
let modelFile = '/path/to/xxx.ms';
let file = fileIo.openSync(modelFile, fileIo.OpenMode.READ_ONLY);
mindSporeLite.loadModelFromFd(file.fd, (mindSporeLiteModel : mindSporeLite.Model) => {
let modelInputs : mindSporeLite.MSTensor[] = mindSporeLiteModel.getInputs();
console.info(modelInputs[0].name);
})
```
## mindSporeLite.loadModelFromFd
loadModelFromFd(model: number, context: Context, callback: Callback<Model>): void
从文件描述符加载输入模型用于推理。使用callback异步回调。
**系统能力:** SystemCapability.AI.MindSporeLite
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ----------------------------------- | ---- | ---------------------- |
| model | number | 是 | 模型的文件描述符。 |
| context | [Context](#context) | 是 | 运行环境的配置信息。 |
| callback | Callback<[Model](#model)> | 是 | 回调函数。返回模型对象。 |
**示例:**
```ts
import { fileIo } from '@kit.CoreFileKit';
let modelFile = '/path/to/xxx.ms';
let context : mindSporeLite.Context = {};
context.target = ['cpu'];
let file = fileIo.openSync(modelFile, fileIo.OpenMode.READ_ONLY);
mindSporeLite.loadModelFromFd(file.fd, context, (mindSporeLiteModel : mindSporeLite.Model) => {
let modelInputs : mindSporeLite.MSTensor[] = mindSporeLiteModel.getInputs();
console.info(modelInputs[0].name);
})
```
## mindSporeLite.loadModelFromFd
loadModelFromFd(model: number, context?: Context): Promise<Model>
从文件描述符加载输入模型用于推理。使用Promise异步函数。
**系统能力:** SystemCapability.AI.MindSporeLite
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ------- | ------------------- | ---- | --------------------------------------------- |
| model | number | 是 | 模型的文件描述符。 |
| context | [Context](#context) | 否 | 运行环境的配置信息。默认使用CpuDevice初始化。 |
**返回值:**
| 类型 | 说明 |
| ------------------------- | ---------------------------- |
| Promise<[Model](#model)> | Promise对象。返回Model对象。 |
**示例:**
```ts
import { fileIo } from '@kit.CoreFileKit';
let modelFile = '/path/to/xxx.ms';
let file = fileIo.openSync(modelFile, fileIo.OpenMode.READ_ONLY);
mindSporeLite.loadModelFromFd(file.fd).then((mindSporeLiteModel: mindSporeLite.Model) => {
let modelInputs: mindSporeLite.MSTensor[] = mindSporeLiteModel.getInputs();
console.info(modelInputs[0].name);
})
```
## mindSporeLite.loadTrainModelFromFile12+
loadTrainModelFromFile(model: string, trainCfg?: TrainCfg, context?: Context): Promise<Model>
根据路径加载训练模型文件。使用Promise异步回调。
**系统能力:** SystemCapability.AI.MindSporeLite
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ----------------------- | ---- | ---------------------------------------------- |
| model | string | 是 | 模型的完整输入路径。 |
| trainCfg | [TrainCfg](#traincfg12) | 否 | 模型训练配置。默认值为TrainCfg各属性默认值。 |
| context | [Context](#context) | 否 | 运行环境的配置信息。默认使用CpuDevice初始化。 |
**返回值:**
| 类型 | 说明 |
| ------------------------ | -------------------- |
| Promise<[Model](#model)> | Promise对象。返回Model对象。 |
**示例:**
```ts
let modelFile = '/path/to/xxx.ms';
mindSporeLite.loadTrainModelFromFile(modelFile).then((mindSporeLiteModel : mindSporeLite.Model) => {
let modelInputs : mindSporeLite.MSTensor[] = mindSporeLiteModel.getInputs();
console.info(modelInputs[0].name);
})
```
## mindSporeLite.loadTrainModelFromBuffer12+
loadTrainModelFromBuffer(model: ArrayBuffer, trainCfg?: TrainCfg, context?: Context): Promise<Model>
从内存缓冲区加载训练模型。使用Promise异步回调。
**系统能力:** SystemCapability.AI.MindSporeLite
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ----------------------- | ---- | --------------------------------------------- |
| model | ArrayBuffer | 是 | 包含训练模型的内存。 |
| trainCfg | [TrainCfg](#traincfg12) | 否 | 模型训练配置。默认值为TrainCfg各属性默认值。 |
| context | [Context](#context) | 否 | 运行环境的配置信息。默认使用CpuDevice初始化。 |
**返回值:**
| 类型 | 说明 |
| ------------------------ | -------------------- |
| Promise<[Model](#model)> | Promise对象。返回Model对象。 |
**示例:**
```ts
import { resourceManager } from '@kit.LocalizationKit'
let modelFile = 'xxx.ms';
let resMgr: resourceManager.ResourceManager = getContext().getApplicationContext().resourceManager;
resMgr.getRawFileContent(modelFile).then(modelBuffer => {
mindSporeLite.loadTrainModelFromBuffer(modelBuffer.buffer).then((mindSporeLiteModel: mindSporeLite.Model) => {
console.info("MSLITE trainMode: ", mindSporeLiteModel.trainMode);
})
})
```
## mindSporeLite.loadTrainModelFromFd12+
loadTrainModelFromFd(model: number, trainCfg?: TrainCfg, context?: Context): Promise<Model>
从文件描述符加载训练模型文件。使用Promise异步回调。
**系统能力:** SystemCapability.AI.MindSporeLite
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ----------------------- | ---- | --------------------------------------------- |
| model | number | 是 | 训练模型的文件描述符。 |
| trainCfg | [TrainCfg](#traincfg12) | 否 | 模型训练配置。默认值为TrainCfg各属性默认值。 |
| context | [Context](#context) | 否 | 运行环境的配置信息。默认使用CpuDevice初始化。 |
**返回值:**
| 类型 | 说明 |
| ------------------------ | ---------------------------- |
| Promise<[Model](#model)> | Promise对象。返回Model对象。 |
**示例:**
```ts
import { fileIo } from '@kit.CoreFileKit';
let modelFile = '/path/to/xxx.ms';
let file = fileIo.openSync(modelFile, fileIo.OpenMode.READ_ONLY);
mindSporeLite.loadTrainModelFromFd(file.fd).then((mindSporeLiteModel: mindSporeLite.Model) => {
console.info("MSLITE trainMode: ", mindSporeLiteModel.trainMode);
});
```
## mindSporeLite.getAllNNRTDeviceDescriptions12+
getAllNNRTDeviceDescriptions() : NNRTDeviceDescription[]
获取NNRt中的所有设备描述。
**系统能力:** SystemCapability.AI.MindSporeLite
**返回值:**
| 类型 | 说明 |
| --------------------------------------------------- | ---------------------- |
| [NNRTDeviceDescription](#nnrtdevicedescription12)[] | NNRt设备描述信息数组。 |
**示例:**
```ts
let allDevices = mindSporeLite.getAllNNRTDeviceDescriptions();
if (allDevices == null) {
console.error('MS_LITE_LOG: getAllNNRTDeviceDescriptions is NULL.');
}
```
## Context
定义运行环境的配置信息。
### 属性
**系统能力:** SystemCapability.AI.MindSporeLite
| 名称 | 类型 | 只读 | 可选 | 说明 |
| ------ | ------------------------- | ---- | ---- | ------------------------------------------------------------ |
| target | string[] | 否 | 是 | 配置目标后端。可选'cpu','nnrt',默认'cpu'。 |
| cpu | [CpuDevice](#cpudevice) | 否 | 是 | CPU后端设备选项。只有当target包含'cpu'时,才能设置此属性。默认值为CpuDevice各属性默认值。 |
| nnrt | [NNRTDevice](#nnrtdevice) | 否 | 是 | NNRt后端设备选项。只有当target包含'nnrt'时,才能设置此属性。默认值为NNRTDevice各属性默认值。 |
**示例:**
```ts
let context: mindSporeLite.Context = {};
context.target = ['cpu','nnrt'];
```
## CpuDevice
CPU后端设备选项。
### 属性
**系统能力:** SystemCapability.AI.MindSporeLite
| 名称 | 类型 | 只读 | 可选 | 说明 |
| ---------------------- | ----------------------------------------- | ---- | ---- | ------------------------------------------------------------ |
| threadNum | number | 否 | 是 | 设置运行时的线程数,默认值:2。 |
| threadAffinityMode | [ThreadAffinityMode](#threadaffinitymode) | 否 | 是 | 设置运行时的CPU绑核策略模式,默认值为不绑核:mindSporeLite.ThreadAffinityMode.NO_AFFINITIES。 |
| threadAffinityCoreList | number[] | 否 | 是 | 设置运行时的CPU绑核列表,设置绑核策略模式后使能,当绑核策略模式为mindSporeLite.ThreadAffinityMode.NO_AFFINITIES时,绑核列表为空。列表中的数字代表核的序号。默认值:[]。 |
| precisionMode | string | 否 | 是 | 设置是否使能**Float16推理模式**,设置为'preferred_fp16'代表使能半精度推理,其余设置情况均为不支持,默认设置'enforce_fp32'表示不使能半精度推理。 |
**Float16推理模式**: Float16又称半精度,它使用16比特表示一个数。Float16推理模式表示推理的时候用半精度进行推理。
**示例:**
```ts
let context: mindSporeLite.Context = {};
context.cpu = {};
context.target = ['cpu'];
context.cpu.threadNum = 2;
context.cpu.threadAffinityMode = 0;
context.cpu.precisionMode = 'preferred_fp16';
context.cpu.threadAffinityCoreList = [0, 1, 2];
```
## ThreadAffinityMode
设置运行时的CPU绑核策略模式,有效值为0-2,0为默认不绑核,1为绑大核,2为绑中核。
**系统能力:** SystemCapability.AI.MindSporeLite
| 名称 | 值 | 说明 |
| ------------------ | ---- | ------------ |
| NO_AFFINITIES | 0 | 不绑核。 |
| BIG_CORES_FIRST | 1 | 绑大核优先。 |
| LITTLE_CORES_FIRST | 2 | 绑中核优先。 |
## NNRTDevice
Neural Network Runtime表示神经网络运行时,简称NNRt。作为中间桥梁,连通上层 AI 推理框架和底层加速芯片,实现 AI 模型的跨芯片推理计算。MindSpore Lite 可配置NNRt后端。
### 属性
**系统能力:** SystemCapability.AI.MindSporeLite
| 名称 | 类型 | 只读 | 可选 | 说明 |
| ----------------------------- | ----------------------------------- | ---- | ------------------------ | ------------------------ |
| deviceID12+ | bigint | 否 | 是 | NNRt设备ID。默认值为0。 |
| performanceMode12+ | [PerformanceMode](#performancemode12) | 否 | 是 | NNRt设备的工作性能模式。默认值为PERFORMANCE_NONE。 |
| priority12+ | [Priority](#priority12) | 否 | 是 | NNRt推理任务优先级。默认值为PRIORITY_MEDIUM。 |
| extensions12+ | [Extension](#extension12)[] | 否 | 是 | NNRt设备的扩展配置。默认为空。 |
## PerformanceMode12+
NNRt设备的工作性能模式枚举。
**系统能力:** SystemCapability.AI.MindSporeLite
| 名称 | 值 | 说明 |
| ------------------- | ---- | ------------------- |
| PERFORMANCE_NONE | 0 | 无特殊设置。 |
| PERFORMANCE_LOW | 1 | 低功耗模式。 |
| PERFORMANCE_MEDIUM | 2 | 功耗-性能均衡模式。 |
| PERFORMANCE_HIGH | 3 | 高性能模式。 |
| PERFORMANCE_EXTREME | 4 | 极致性能模式。 |
## Priority12+
NNRt推理任务优先级枚举。
**系统能力:** SystemCapability.AI.MindSporeLite
| 名称 | 值 | 说明 |
| --------------- | ---- | -------------- |
| PRIORITY_NONE | 0 | 无优先级偏好。 |
| PRIORITY_LOW | 1 | 低优先级任务。 |
| PRIORITY_MEDIUM | 2 | 中优先级任务。 |
| PRIORITY_HIGH | 3 | 高优先级任务。 |
## Extension12+
定义NNRt设备的扩展信息。
### 属性
**系统能力:** SystemCapability.AI.MindSporeLite
| 名称 | 类型 | 只读 | 可选 | 说明 |
| ------------------- | ----------- | ---- | ---- | ---------------- |
| name12+ | string | 否 | 否 | 扩展名称。 |
| value12+ | ArrayBuffer | 否 | 否 | 包含扩展的内存。 |
## NNRTDeviceDescription12+
NNRt设备信息描述,包含设备ID,设备名称等信息。
**系统能力:** SystemCapability.AI.MindSporeLite
### deviceID
deviceID() : bigint
获取NNRt设备ID。
**系统能力:** SystemCapability.AI.MindSporeLite
**返回值:**
| 类型 | 说明 |
| ------ | ------------ |
| bigint | NNRt设备ID。 |
**示例:**
```ts
let allDevices = mindSporeLite.getAllNNRTDeviceDescriptions();
if (allDevices == null) {
console.error('getAllNNRTDeviceDescriptions is NULL.');
}
let context: mindSporeLite.Context = {};
context.target = ["nnrt"];
context.nnrt = {};
for (let i: number = 0; i < allDevices.length; i++) {
console.info(allDevices[i].deviceID().toString());
}
```
### deviceType
deviceType() : NNRTDeviceType
获取NNRt设备类型。
**系统能力:** SystemCapability.AI.MindSporeLite
**返回值:**
| 类型 | 说明 |
| ----------------------------------- | -------------- |
| [NNRTDeviceType](#nnrtdevicetype12) | NNRt设备类型。 |
**示例:**
```ts
let allDevices = mindSporeLite.getAllNNRTDeviceDescriptions();
if (allDevices == null) {
console.error('getAllNNRTDeviceDescriptions is NULL.');
}
let context: mindSporeLite.Context = {};
context.target = ["nnrt"];
context.nnrt = {};
for (let i: number = 0; i < allDevices.length; i++) {
console.info(allDevices[i].deviceType().toString());
}
```
### deviceName
deviceName() : string
获取NNRt设备名称。
**系统能力:** SystemCapability.AI.MindSporeLite
**返回值:**
| 类型 | 说明 |
| ------ | -------------- |
| string | NNRt设备名称。 |
**示例:**
```ts
let allDevices = mindSporeLite.getAllNNRTDeviceDescriptions();
if (allDevices == null) {
console.error('getAllNNRTDeviceDescriptions is NULL.');
}
let context: mindSporeLite.Context = {};
context.target = ["nnrt"];
context.nnrt = {};
for (let i: number = 0; i < allDevices.length; i++) {
console.info(allDevices[i].deviceName().toString());
}
```
## NNRTDeviceType12+
NNRt设备类型枚举。
**系统能力:** SystemCapability.AI.MindSporeLite
| 名称 | 值 | 说明 |
| ---------------------- | ---- | ----------------------------------- |
| NNRTDEVICE_OTHERS | 0 | 设备类型不属于以下3种,则属于其它。 |
| NNRTDEVICE_CPU | 1 | CPU设备。 |
| NNRTDEVICE_GPU | 2 | GPU设备。 |
| NNRTDEVICE_ACCELERATOR | 3 | 特定的加速设备。 |
## TrainCfg12+
端侧训练相关参数的配置文件。
### 属性
**系统能力:** SystemCapability.AI.MindSporeLite
| 名称 | 类型 | 只读 | 可选 | 说明 |
| ------------------------------- | ----------------------------------------- | ---- | ---- | ------------------------------------------------------------ |
| lossName12+ | string[] | 否 | 是 | 损失函数的名称列表。默认值为["loss_fct", "_loss_fn", "SigmoidCrossEntropy"]。 |
| optimizationLevel12+ | [OptimizationLevel](#optimizationlevel12) | 否 | 是 | 端侧训练的网络优化等级。默认值为O0。 |
**示例:**
```ts
let cfg: mindSporeLite.TrainCfg = {};
cfg.lossName = ["loss_fct", "_loss_fn", "SigmoidCrossEntropy"];
cfg.optimizationLevel = mindSporeLite.OptimizationLevel.O0;
```
## OptimizationLevel12+
端侧训练的网络优化等级枚举。
**系统能力:** SystemCapability.AI.MindSporeLite
| 名称 | 值 | 说明 |
| ---- | ---- | ---------------------------------------------------------- |
| O0 | 0 | 无优化等级。 |
| O2 | 2 | 将网络转换为float16, 保持批量归一化层和损失函数为float32。 |
| O3 | 3 | 将网络转换为float16, 包括批量归一化层。 |
| AUTO | 4 | 根据设备选择优化等级。 |
## QuantizationType12+
量化类型信息,有效值为0-2。
**系统能力:** SystemCapability.AI.MindSporeLite
| 名称 | 值 | 说明 |
| ------------ | ---- | ---------- |
| NO_QUANT | 0 | 不做量化。 |
| WEIGHT_QUANT | 1 | 权重量化。 |
| FULL_QUANT | 2 | 全量化。 |
## Model
模型实例。描述Model对象的属性和方法。
下例API示例中都需先使用[loadModelFromFile()](#mindsporeliteloadmodelfromfile)、[loadModelFromBuffer()](#mindsporeliteloadmodelfrombuffer)、[loadModelFromFd()](#mindsporeliteloadmodelfromfd)中的任一方法获取到Model实例,再通过此实例调用对应方法。
### 属性
**系统能力:** SystemCapability.AI.MindSporeLite
| 名称 | 类型 | 只读 | 可选 | 说明 |
| -------------------------- | ------- | ---- | ---- | ------------------------------------------------------------ |
| learningRate12+ | number | 否 | 是 | 训练模型的学习率。默认值从加载的模型中读取。 |
| trainMode12+ | boolean | 否 | 是 | 模型是否为训练模式。true表示训练模式,false表示非训练模式。如果是训练模型,trainMode默认是true;如果是推理模型,trainMode默认是false。 |
### getInputs
getInputs(): MSTensor[]
获取模型的输入用于推理。
**系统能力:** SystemCapability.AI.MindSporeLite
**返回值:**
| 类型 | 说明 |
| ----------------------- | ------------------ |
| [MSTensor](#mstensor)[] | 返回MSTensor对象。 |
**示例:**
```ts
let modelFile = '/path/to/xxx.ms';
mindSporeLite.loadModelFromFile(modelFile).then((mindSporeLiteModel : mindSporeLite.Model) => {
let modelInputs : mindSporeLite.MSTensor[] = mindSporeLiteModel.getInputs();
console.info(modelInputs[0].name);
})
```
### predict
predict(inputs: MSTensor[], callback: Callback<MSTensor[]>): void
执行推理模型。使用callback异步回调。需要确保调用时模型对象不被资源回收。
**系统能力:** SystemCapability.AI.MindSporeLite
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ------ | ----------------------- | ---- | -------------------------- |
| inputs | [MSTensor](#mstensor)[] | 是 | 模型的输入列表。MSTensor对象。 |
| callback | Callback<[MSTensor](#mstensor)[]> | 是 | 回调函数。返回MSTensor对象。 |
**示例:**
```ts
import { resourceManager } from '@kit.LocalizationKit';
import { GlobalContext } from '../GlobalContext';
import { mindSporeLite } from '@kit.MindSporeLiteKit';
import { common } from '@kit.AbilityKit';
export class Test {
value:number = 0;
foo(): void {
GlobalContext.getContext().setObject("value", this.value);
}
}
let globalContext = GlobalContext.getContext().getObject("value") as common.UIAbilityContext;
let inputName = 'input_data.bin';
globalContext.resourceManager.getRawFileContent(inputName).then(async (buffer : Uint8Array) => {
let modelBuffer = buffer.buffer;
let modelFile : string = '/path/to/xxx.ms';
let mindSporeLiteModel : mindSporeLite.Model = await mindSporeLite.loadModelFromFile(modelFile);
let modelInputs : mindSporeLite.MSTensor[] = mindSporeLiteModel.getInputs();
modelInputs[0].setData(modelBuffer);
mindSporeLiteModel.predict(modelInputs, (mindSporeLiteTensor : mindSporeLite.MSTensor[]) => {
let output = new Float32Array(mindSporeLiteTensor[0].getData());
for (let i = 0; i < output.length; i++) {
console.info(output[i].toString());
}
})
})
```
### predict
predict(inputs: MSTensor[]): Promise<MSTensor[]>
执行推理模型,返回推理结果。使用Promise异步回调。需要确保调用时模型对象不被资源回收。
**系统能力:** SystemCapability.AI.MindSporeLite
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ------ | ----------------------- | ---- | ------------------------------ |
| inputs | [MSTensor](#mstensor)[] | 是 | 模型的输入列表。MSTensor对象。 |
**返回值:**
| 类型 | 说明 |
| ----------------------- | ---------------------- |
| Promise<[MSTensor](#mstensor)[]> | Promise对象。返回MSTensor对象列表。 |
**示例:**
```ts
import { resourceManager } from '@kit.LocalizationKit';
import { GlobalContext } from '../GlobalContext';
import { mindSporeLite } from '@kit.MindSporeLiteKit';
import { common } from '@kit.AbilityKit';
export class Test {
value:number = 0;
foo(): void {
GlobalContext.getContext().setObject("value", this.value);
}
}
let globalContext = GlobalContext.getContext().getObject("value") as common.UIAbilityContext;;
let inputName = 'input_data.bin';
globalContext.resourceManager.getRawFileContent(inputName).then(async (buffer : Uint8Array) => {
let modelBuffer = buffer.buffer;
let modelFile = '/path/to/xxx.ms';
let mindSporeLiteModel : mindSporeLite.Model = await mindSporeLite.loadModelFromFile(modelFile);
let modelInputs : mindSporeLite.MSTensor[] = mindSporeLiteModel.getInputs();
modelInputs[0].setData(modelBuffer);
mindSporeLiteModel.predict(modelInputs).then((mindSporeLiteTensor : mindSporeLite.MSTensor[]) => {
let output = new Float32Array(mindSporeLiteTensor[0].getData());
for (let i = 0; i < output.length; i++) {
console.info(output[i].toString());
}
})
})
```
### resize
resize(inputs: MSTensor[], dims: Array<Array<number>>): boolean
重新设置张量大小。
**系统能力:** SystemCapability.AI.MindSporeLite
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ------ | --------------------- | ---- | ----------------------------- |
| inputs | [MSTensor](#mstensor)[] | 是 | 模型的输入列表。 |
| dims | Array<Array<number>> | 是 | 需要修改的目标张量大小。 |
**返回值:**
| 类型 | 说明 |
| ------- | ------------------------------------------------------------ |
| boolean | 返回是否设置成功的结果。true表示重新设置张量大小成功;false表示重新设置张量大小失败。 |
**示例:**
```ts
let modelFile = '/path/to/xxx.ms';
mindSporeLite.loadModelFromFile(modelFile).then((mindSporeLiteModel : mindSporeLite.Model) => {
let modelInputs : mindSporeLite.MSTensor[] = mindSporeLiteModel.getInputs();
let new_dim = new Array([1,32,32,1]);
mindSporeLiteModel.resize(modelInputs, new_dim);
})
```
### runStep12+
runStep(inputs: MSTensor[]): boolean
单步训练模型,仅用于端侧训练。
**系统能力:** SystemCapability.AI.MindSporeLite
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ------ | ----------------------- | --- | -------- |
| inputs | [MSTensor](#mstensor)[] | 是 | 模型的输入列表。 |
**返回值:**
| 类型 | 说明 |
| ------- | ------------------------------------------------------------ |
| boolean | 返回单步训练模型是否成功的结果。true表示单步训练模型成功,false表示单步训练模型失败。 |
**示例:**
```ts
let modelFile = '/path/to/xxx.ms';
mindSporeLite.loadTrainModelFromFile(modelFile).then((mindSporeLiteModel: mindSporeLite.Model) => {
mindSporeLiteModel.trainMode = true;
const modelInputs = mindSporeLiteModel.getInputs();
let ret = mindSporeLiteModel.runStep(modelInputs);
if (ret == false) {
console.error('MS_LITE_LOG: runStep failed.')
}
})
```
### getWeights12+
getWeights(): MSTensor[]
获取模型的所有权重,仅用于端侧训练。
**系统能力:** SystemCapability.AI.MindSporeLite
**返回值:**
| 类型 | 说明 |
| ----------------------- | ---------- |
| [MSTensor](#mstensor)[] | 返回模型的权重张量。 |
**示例:**
```ts
import { resourceManager } from '@kit.LocalizationKit';
let resMgr: resourceManager.ResourceManager = getContext().getApplicationContext().resourceManager;
let modelFile = 'xxx.ms';
resMgr.getRawFileContent(modelFile).then((modelBuffer) => {
mindSporeLite.loadTrainModelFromBuffer(modelBuffer.buffer.slice(0)).then((mindSporeLiteModel: mindSporeLite.Model) => {
mindSporeLiteModel.trainMode = true;
const weights = mindSporeLiteModel.getWeights();
for (let i = 0; i < weights.length; i++) {
let printStr = weights[i].name + ", ";
printStr += weights[i].shape + ", ";
printStr += weights[i].dtype + ", ";
printStr += weights[i].dataSize + ", ";
printStr += weights[i].getData();
console.info("MS_LITE weights: ", printStr);
}
})
})
```
### updateWeights12+
updateWeights(weights: MSTensor[]): boolean
更新模型的权重,仅用于端侧训练。
**系统能力:** SystemCapability.AI.MindSporeLite
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ------- | ----------------------- | ---- | -------------- |
| weights | [MSTensor](#mstensor)[] | 是 | 权重张量列表。 |
**返回值:**
| 类型 | 说明 |
| ------- | ------------------------------------------------------------ |
| boolean | 返回是否更新权重成功的结果。true表示更新权重成功,false表示更新权重失败。 |
**示例:**
```ts
import { resourceManager } from '@kit.LocalizationKit';
let resMgr: resourceManager.ResourceManager = getContext().getApplicationContext().resourceManager;
let modelFile = 'xxx.ms';
resMgr.getRawFileContent(modelFile).then((modelBuffer) => {
mindSporeLite.loadTrainModelFromBuffer(modelBuffer.buffer.slice(0)).then((mindSporeLiteModel: mindSporeLite.Model) => {
mindSporeLiteModel.trainMode = true;
const weights = mindSporeLiteModel.getWeights();
let ret = mindSporeLiteModel.updateWeights(weights);
if (ret == false) {
console.error('MS_LITE_LOG: updateWeights failed.')
}
})
})
```
### setupVirtualBatch12+
setupVirtualBatch(virtualBatchMultiplier: number, lr: number, momentum: number): boolean
设置虚拟批次用于训练,仅用于端侧训练。
**系统能力:** SystemCapability.AI.MindSporeLite
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ---------------------- | ------ | ---- | ---------------------------------------------------- |
| virtualBatchMultiplier | number | 是 | 虚拟批次乘法器,当设置值小于1时,表示禁用虚拟batch。 |
| lr | number | 是 | 学习率。 |
| momentum | number | 是 | 动量。 |
**返回值:**
| 类型 | 说明 |
| ------- | ------------------------------------------------------------ |
| boolean | 返回是否设置虚拟批次成功的结果。true表示设置虚拟批次成功,false表示设置虚拟批次失败。 |
**示例:**
```ts
import { resourceManager } from '@kit.LocalizationKit';
let resMgr: resourceManager.ResourceManager = getContext().getApplicationContext().resourceManager;
let modelFile = 'xxx.ms';
resMgr.getRawFileContent(modelFile).then((modelBuffer) => {
mindSporeLite.loadTrainModelFromBuffer(modelBuffer.buffer.slice(0)).then((mindSporeLiteModel: mindSporeLite.Model) => {
mindSporeLiteModel.trainMode = true;
let ret = mindSporeLiteModel.setupVirtualBatch(2,-1,-1);
if (ret == false) {
console.error('MS_LITE setupVirtualBatch failed.')
}
})
})
```
### exportModel12+
exportModel(modelFile: string, quantizationType?: QuantizationType, exportInferenceOnly?: boolean, outputTensorName?: string[]): boolean
导出训练模型,仅用于端侧训练。
**系统能力:** SystemCapability.AI.MindSporeLite
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ------------------- | --------------------------------------- | ---- | ------------------------------------------------------------ |
| modelFile | string | 是 | 导出模型的文件路径。 |
| quantizationType | [QuantizationType](#quantizationtype12) | 否 | 量化类型,默认为NO_QUANT。 |
| exportInferenceOnly | boolean | 否 | 是否只导出推理模型。true表示只导出推理模型,false表示导出训练和推理两个模型。默认为true。 |
| outputTensorName | string[] | 否 | 设置导出模型的输出张量的名称。默认为空字符串数组,表示全量导出。 |
**返回值:**
| 类型 | 说明 |
| ------- | ------------------------------------------------------------ |
| boolean | 返回是否导出训练模型成功的结果。true表示导出训练模型成功,false表示导出训练模型失败。 |
**示例:**
```ts
let modelFile = '/path/to/xxx.ms';
let newPath = '/newpath/to';
mindSporeLite.loadTrainModelFromFile(modelFile).then((mindSporeLiteModel: mindSporeLite.Model) => {
mindSporeLiteModel.trainMode = true;
let ret = mindSporeLiteModel.exportModel(newPath + "/new_model.ms", mindSporeLite.QuantizationType.NO_QUANT, true);
if (ret == false) {
console.error('MS_LITE exportModel failed.')
}
})
```
### exportWeightsCollaborateWithMicro12+
exportWeightsCollaborateWithMicro(weightFile: string, isInference?: boolean, enableFp16?: boolean, changeableWeightsName?: string[]): boolean;
导出供**micro推理**使用的模型权重,仅用于端侧训练。
**micro推理**:MindSpore Lite针对MCUs(MicroControllerUnits)部署硬件后端,提供了一种超轻量Micro AI部署解决方案,离线阶段直接将模型生成轻量化代码,不再需要在线解析模型和图编译。
**系统能力:** SystemCapability.AI.MindSporeLite
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| --------------------- | -------- | ---- | ------------------------------------------------------------ |
| weightFile | string | 是 | 权重文件路径。 |
| isInference | boolean | 否 | 是否从推理模型中导出权重。true表示从推理模型中导出权重,目前只支持`true`,默认为true。 |
| enableFp16 | boolean | 否 | 浮点权重是否以float16格式保存。true表示以float16格式保存,false表示不以float16格式保存。默认为false。 |
| changeableWeightsName | string[] | 否 | 设置可变权重的名称。默认为空字符串数组。 |
**返回值:**
| 类型 | 说明 |
| ------- | ------------------------------------------------------------ |
| boolean | 返回是否导出供micro推理使用的模型权重成功的结果。true表示导出供micro推理使用的模型权重成功,false表示导出供micro推理使用的模型权重失败。 |
**示例:**
```ts
let modelFile = '/path/to/xxx.ms';
let microWeight = '/path/to/xxx.bin';
mindSporeLite.loadTrainModelFromFile(modelFile).then((mindSporeLiteModel: mindSporeLite.Model) => {
let ret = mindSporeLiteModel.exportWeightsCollaborateWithMicro(microWeight);
if (ret == false) {
console.error('MSLITE exportWeightsCollaborateWithMicro failed.')
}
})
```
## MSTensor
模型张量实例。描述MSTensor对象的属性和方法。它与数组和矩阵非常相似,是MindSpore Lite网络运算中的基本数据结构。
下例API示例中都需先使用[getInputs()](#getinputs)获取到MSTensor实例,再通过此实例调用对应方法。
### 属性
**系统能力:** SystemCapability.AI.MindSporeLite
| 名称 | 类型 | 只读 | 可选 | 说明 |
| ---------- | --------------------- | ---- | ---- | ---------------------- |
| name | string | 否 | 否 | 张量的名称。 |
| shape | number[] | 否 | 否 | 张量的维度数组。 |
| elementNum | number | 否 | 否 | 张量的维度数组的长度。 |
| dataSize | number | 否 | 否 | 张量的数据的长度。 |
| dtype | [DataType](#datatype) | 否 | 否 | 张量的数据类型。 |
| format | [Format](#format) | 否 | 否 | 张量的数据排布方式。 |
**示例:**
```ts
let modelFile = '/path/to/xxx.ms';
mindSporeLite.loadModelFromFile(modelFile).then((mindSporeLiteModel : mindSporeLite.Model) => {
let modelInputs : mindSporeLite.MSTensor[] = mindSporeLiteModel.getInputs();
console.info(modelInputs[0].name);
console.info(modelInputs[0].shape.toString());
console.info(modelInputs[0].elementNum.toString());
console.info(modelInputs[0].dtype.toString());
console.info(modelInputs[0].format.toString());
console.info(modelInputs[0].dataSize.toString());
})
```
### getData
getData(): ArrayBuffer
获取张量的数据。
**系统能力:** SystemCapability.AI.MindSporeLite
**返回值:**
| 类型 | 说明 |
| ----------- | -------------------- |
| ArrayBuffer | 返回张量的数据指针。 |
**示例:**
```ts
import { resourceManager } from '@kit.LocalizationKit';
import { GlobalContext } from '../GlobalContext';
import { mindSporeLite } from '@kit.MindSporeLiteKit';
import { common } from '@kit.AbilityKit';
export class Test {
value:number = 0;
foo(): void {
GlobalContext.getContext().setObject("value", this.value);
}
}
let globalContext = GlobalContext.getContext().getObject("value") as common.UIAbilityContext;
let inputName = 'input_data.bin';
globalContext.resourceManager.getRawFileContent(inputName).then(async (buffer : Uint8Array) => {
let inputBuffer = buffer.buffer;
let modelFile = '/path/to/xxx.ms';
let mindSporeLiteModel : mindSporeLite.Model = await mindSporeLite.loadModelFromFile(modelFile);
let modelInputs : mindSporeLite.MSTensor[] = mindSporeLiteModel.getInputs();
modelInputs[0].setData(inputBuffer);
mindSporeLiteModel.predict(modelInputs).then((mindSporeLiteTensor : mindSporeLite.MSTensor[]) => {
let output = new Float32Array(mindSporeLiteTensor[0].getData());
for (let i = 0; i < output.length; i++) {
console.info(output[i].toString());
}
})
})
```
### setData
setData(inputArray: ArrayBuffer): void
设置张量的数据。
**系统能力:** SystemCapability.AI.MindSporeLite
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ---------- | ----------- | ---- | ---------------------- |
| inputArray | ArrayBuffer | 是 | 张量的输入数据缓冲区。 |
**示例:**
```ts
import { resourceManager } from '@kit.LocalizationKit';
import { GlobalContext } from '../GlobalContext';
import { mindSporeLite } from '@kit.MindSporeLiteKit';
import { common } from '@kit.AbilityKit';
export class Test {
value:number = 0;
foo(): void {
GlobalContext.getContext().setObject("value", this.value);
}
}
let globalContext = GlobalContext.getContext().getObject("value") as common.UIAbilityContext;
let inputName = 'input_data.bin';
globalContext.resourceManager.getRawFileContent(inputName).then(async (buffer : Uint8Array) => {
let inputBuffer = buffer.buffer;
let modelFile = '/path/to/xxx.ms';
let mindSporeLiteModel : mindSporeLite.Model = await mindSporeLite.loadModelFromFile(modelFile);
let modelInputs : mindSporeLite.MSTensor[] = mindSporeLiteModel.getInputs();
modelInputs[0].setData(inputBuffer);
})
```
## DataType
张量的数据类型。
**系统能力:** SystemCapability.AI.MindSporeLite
| 名称 | 值 | 说明 |
| ------------------- | ---- | ------------------- |
| TYPE_UNKNOWN | 0 | 未知类型。 |
| NUMBER_TYPE_INT8 | 32 | 保持Int8的类型。 |
| NUMBER_TYPE_INT16 | 33 | 保持Int16的类型。 |
| NUMBER_TYPE_INT32 | 34 | 保持Int32的类型。 |
| NUMBER_TYPE_INT64 | 35 | 保持Int64的类型。 |
| NUMBER_TYPE_UINT8 | 37 | 保持UInt8的类型。 |
| NUMBER_TYPE_UINT16 | 38 | 保持UInt16的类型。 |
| NUMBER_TYPE_UINT32 | 39 | 保持UInt32的类型。 |
| NUMBER_TYPE_UINT64 | 40 | 保持UInt64的类型。 |
| NUMBER_TYPE_FLOAT16 | 42 | 保持Float16的类型。 |
| NUMBER_TYPE_FLOAT32 | 43 | 保持Float32的类型。 |
| NUMBER_TYPE_FLOAT64 | 44 | 保持Float64的类型。 |
## Format
张量的数据排布方式。
**系统能力:** SystemCapability.AI.MindSporeLite
| 名称 | 值 | 说明 |
| -------------- | ---- | --------------------- |
| DEFAULT_FORMAT | -1 | 未知数据排布方式。 |
| NCHW | 0 | 数据排布方式为NCHW。 |
| NHWC | 1 | 数据排布方式为NHWC。 |
| NHWC4 | 2 | 数据排布方式为NHWC4。 |
| HWKC | 3 | 数据排布方式为HWKC。 |
| HWCK | 4 | 数据排布方式为HWCK。 |
| KCHW | 5 | 数据排布方式为KCHW。 |