# @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.loadTrainModelFromFile<sup>12+</sup> 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.loadTrainModelFromBuffer<sup>12+</sup> 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.loadTrainModelFromFd<sup>12+</sup> 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.getAllNNRTDeviceDescriptions<sup>12+</sup> 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 | åç§° | 类型 | åªè¯» | å¯é€‰ | 说明 | | ----------------------------- | ----------------------------------- | ---- | ------------------------ | ------------------------ | | deviceID<sup>12+</sup> | bigint | å¦ | 是 | NNRt设备ID。默认值为0。 | | performanceMode<sup>12+</sup> | [PerformanceMode](#performancemode12) | å¦ | 是 | NNRt设备的工作性能模å¼ã€‚默认值为PERFORMANCE_NONE。 | | priority<sup>12+</sup> | [Priority](#priority12) | å¦ | 是 | NNRt推ç†ä»»åŠ¡ä¼˜å…ˆçº§ã€‚é»˜è®¤å€¼ä¸ºPRIORITY_MEDIUM。 | | extensions<sup>12+</sup> | [Extension](#extension12)[] | å¦ | 是 | NNRt设备的扩展é…置。默认为空。 | ## PerformanceMode<sup>12+</sup> NNRtè®¾å¤‡çš„å·¥ä½œæ€§èƒ½æ¨¡å¼æžšä¸¾ã€‚ **系统能力:** SystemCapability.AI.MindSporeLite | åç§° | 值 | 说明 | | ------------------- | ---- | ------------------- | | PERFORMANCE_NONE | 0 | æ— ç‰¹æ®Šè®¾ç½®ã€‚ | | PERFORMANCE_LOW | 1 | 低功耗模å¼ã€‚ | | PERFORMANCE_MEDIUM | 2 | 功耗-性能å‡è¡¡æ¨¡å¼ã€‚ | | PERFORMANCE_HIGH | 3 | 高性能模å¼ã€‚ | | PERFORMANCE_EXTREME | 4 | æžè‡´æ€§èƒ½æ¨¡å¼ã€‚ | ## Priority<sup>12+</sup> NNRt推ç†ä»»åŠ¡ä¼˜å…ˆçº§æžšä¸¾ã€‚ **系统能力:** SystemCapability.AI.MindSporeLite | åç§° | 值 | 说明 | | --------------- | ---- | -------------- | | PRIORITY_NONE | 0 | æ— ä¼˜å…ˆçº§å好。 | | PRIORITY_LOW | 1 | 低优先级任务。 | | PRIORITY_MEDIUM | 2 | ä¸ä¼˜å…ˆçº§ä»»åŠ¡ã€‚ | | PRIORITY_HIGH | 3 | 高优先级任务。 | ## Extension<sup>12+</sup> 定义NNRt设备的扩展信æ¯ã€‚ ### 属性 **系统能力:** SystemCapability.AI.MindSporeLite | åç§° | 类型 | åªè¯» | å¯é€‰ | 说明 | | ------------------- | ----------- | ---- | ---- | ---------------- | | name<sup>12+</sup> | string | å¦ | å¦ | 扩展å称。 | | value<sup>12+</sup> | ArrayBuffer | å¦ | å¦ | åŒ…å«æ‰©å±•的内å˜ã€‚ | ## NNRTDeviceDescription<sup>12+</sup> 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()); } ``` ## NNRTDeviceType<sup>12+</sup> NNRt设备类型枚举。 **系统能力:** SystemCapability.AI.MindSporeLite | åç§° | 值 | 说明 | | ---------------------- | ---- | ----------------------------------- | | NNRTDEVICE_OTHERS | 0 | 设备类型ä¸å±žäºŽä»¥ä¸‹3ç§ï¼Œåˆ™å±žäºŽå…¶å®ƒã€‚ | | NNRTDEVICE_CPU | 1 | CPU设备。 | | NNRTDEVICE_GPU | 2 | GPU设备。 | | NNRTDEVICE_ACCELERATOR | 3 | ç‰¹å®šçš„åŠ é€Ÿè®¾å¤‡ã€‚ | ## TrainCfg<sup>12+</sup> 端侧è®ç»ƒç›¸å…³å‚æ•°çš„é…置文件。 ### 属性 **系统能力:** SystemCapability.AI.MindSporeLite | åç§° | 类型 | åªè¯» | å¯é€‰ | 说明 | | ------------------------------- | ----------------------------------------- | ---- | ---- | ------------------------------------------------------------ | | lossName<sup>12+</sup> | string[] | å¦ | 是 | æŸå¤±å‡½æ•°çš„å称列表。默认值为["loss_fct", "_loss_fn", "SigmoidCrossEntropy"]。 | | optimizationLevel<sup>12+</sup> | [OptimizationLevel](#optimizationlevel12) | å¦ | 是 | 端侧è®ç»ƒçš„网络优化ç‰çº§ã€‚默认值为O0。 | **示例:** ```ts let cfg: mindSporeLite.TrainCfg = {}; cfg.lossName = ["loss_fct", "_loss_fn", "SigmoidCrossEntropy"]; cfg.optimizationLevel = mindSporeLite.OptimizationLevel.O0; ``` ## OptimizationLevel<sup>12+</sup> 端侧è®ç»ƒçš„网络优化ç‰çº§æžšä¸¾ã€‚ **系统能力:** SystemCapability.AI.MindSporeLite | åç§° | 值 | 说明 | | ---- | ---- | ---------------------------------------------------------- | | O0 | 0 | æ— ä¼˜åŒ–ç‰çº§ã€‚ | | O2 | 2 | 将网络转æ¢ä¸ºfloat16, ä¿æŒæ‰¹é‡å½’一化层和æŸå¤±å‡½æ•°ä¸ºfloat32。 | | O3 | 3 | 将网络转æ¢ä¸ºfloat16, 包括批é‡å½’一化层。 | | AUTO | 4 | æ ¹æ®è®¾å¤‡é€‰æ‹©ä¼˜åŒ–ç‰çº§ã€‚ | ## QuantizationType<sup>12+</sup> é‡åŒ–类型信æ¯ï¼Œæœ‰æ•ˆå€¼ä¸º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 | åç§° | 类型 | åªè¯» | å¯é€‰ | 说明 | | -------------------------- | ------- | ---- | ---- | ------------------------------------------------------------ | | learningRate<sup>12+</sup> | number | å¦ | 是 | è®ç»ƒæ¨¡åž‹çš„å¦ä¹ çŽ‡ã€‚é»˜è®¤å€¼ä»ŽåŠ è½½çš„æ¨¡åž‹ä¸è¯»å–。 | | trainMode<sup>12+</sup> | 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); }) ``` ### runStep<sup>12+</sup> 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.') } }) ``` ### getWeights<sup>12+</sup> 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); } }) }) ``` ### updateWeights<sup>12+</sup> 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.') } }) }) ``` ### setupVirtualBatch<sup>12+</sup> 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.') } }) }) ``` ### exportModel<sup>12+</sup> 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.') } }) ``` ### exportWeightsCollaborateWithMicro<sup>12+</sup> 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。 |