鸿蒙进阶——Mindspore Lite AI框架源码解读之模型加载详解(一)
文章大纲引言一、模型加载概述二、核心数据结构三、模型加载核心流程引言Mindspore 是一款华为开发开源的AI推理框架而Mindspore Lite则是华为为了适配在移动终端设备上运行专门定制的版本使得我们可以在OpenHarmony快速实现模型加载和推理等功能模型加载则是利用 Mindspore Lite 进行推理任务的首要步骤它犹如打开智能应用大门的钥匙精准且高效地将预训练模型导入到运行环境中为后续的推理计算奠定坚实基础。无论是在移动端的智能应用开发还是边缘计算设备的智能任务处理Mindspore Lite 加载模型的能力都直接影响着整个系统的运行效率与智能化表现值得我们深入探究其原理、流程与优化策略接下来就重点解读核心API 及其流程。本文非Mindspore入门科普文需要具备一定的Mindspore 知识。一、模型加载概述加载的本质就是把模型从文件Buffer 转为Mindspore 后续推理时所需要的模型的相关对象。CPU 方式直接加载的话就是直接通过本地设备的CPU完成这些工作这些作为推理的输入直接使用而通过NNRT 的话就是在CPU完成这第一步加载后再把转换完成后的输出作为输入通过Delegate 模式再次进行转换转为NNRT 所需要的模型的相关对象再把这些NNRT的对象通过NNRT传递到NNRT HOST 进而传递到NPU中进行运算。二、核心数据结构Model 由LiteGraph 呈现LiteGraph 保存着所有的Tensor列表、Node列表、SubGrapha列表和输出、输入的索引LiteGraph 包含着Node、和SubGrapha相当于所有的子结构信息都保存到LiteGraph中每个子结构只保存各自的索引数据计算后再通过索引从LiteGraph中获取得到对应的数据。图由多个Node构成每一个Node 承担一个运算操作。比如一个计算图有两个节点NodeA执行加法操作和NodeB执行乘法操作输入来自NodeA的输出NodeA 输出张量生成的索引将被记录在output_indices_ 表示这个节点的输出Tensor,NodeB 就使用NodeA 的输出索引作为输入以便获取计算所需的数据。structMS_APILiteGraph{structNode{std::string name_;std::string op_type_;intnode_type_;constvoid*primitive_nullptr;std::shared_ptrvoidbase_operator_nullptr;std::vectoruint32_tinput_indices_;std::vectoruint32_toutput_indices_;intquant_type_;intdevice_type_-1;};structSubGraph{std::string name_;std::vectoruint32_tinput_indices_;std::vectoruint32_toutput_indices_;std::vectoruint32_tnode_indices_;std::vectoruint32_ttensor_indices_;};std::string name_;std::string version_;std::vectoruint32_tinput_indices_;std::vectoruint32_toutput_indices_;std::vectormindspore::schema::Tensor*all_tensors_;std::vectorNode*all_nodes_;std::vectorSubGraph*sub_graphs_;std::stringToString()const;};structMS_APIModel{LiteGraph graph_;char*bufnullptr;size_t buf_size_0;LiteModelType model_type_mindspore::lite::ModelType_MSLite;void*deobfnullptr;/// \brief Static method to create a Model pointer.staticModel*Import(constchar*model_buf,size_t size);/// \brief Static method to create a Model pointer.staticModel*Import(constchar*filename);/// \brief method to export model to file.staticintExport(Model*model,constchar*filename);/// \brief method to export model to buffer.staticintExport(Model*model,char*buf,size_t*size);/// \brief Free meta graph temporary buffervirtualvoidFree()0;/// \brief Free all temporary buffer.EG: nodes in the model.virtualvoidDestroy()0;/// \brief Model destruct, free all memoryvirtual~Model()default;};Struct LiteGraph{structNode{std::string name_;std::string op_type_;intnode_type_;constvoid*primitive_nullptr;std::shared_ptrvoidbase_operator_nullptr;std::vectoruint32_tinput_indices_;std::vectoruint32_toutput_indices_;intquant_type_;intdevice_type_-1;};structSubGraph{std::string name_;std::vectoruint32_tinput_indices_;std::vectoruint32_toutput_indices_;std::vectoruint32_tnode_indices_;std::vectoruint32_ttensor_indices_;};std::string name_;std::string version_;std::vectoruint32_tinput_indices_;std::vectoruint32_toutput_indices_;std::vectormindspore::schema::Tensor*all_tensors_;std::vectorNode*all_nodes_;std::vectorSubGraph*sub_graphs_;std::stringToString()const;}classMS_APILiteModel:publicModel{...}三、模型加载核心流程未完待续…

相关新闻

libwebsockets 极简 HTTP 服务器示例:一个程序灵活切换 libuv / libev / libevent 等事件循环后端

libwebsockets 极简 HTTP 服务器示例:一个程序灵活切换 libuv / libev / libevent 等事件循环后端

后端网络通信 【免费下载链接】libwebsockets canonical libwebsockets.org networking library 项目地址: https://gitcode.com/gh_mirrors/li/libwebsockets 点击查看 免费下载 导读 lws-minimal-http-server-eventlib 是 libwebsockets 仓库中一个极具代表性的…

2026/10/14 1:52:15 阅读更多 →
如何快速跑通 MaterializeYourApp:老 Android 项目构建避坑指南(jcenter弃用解决方案)

如何快速跑通 MaterializeYourApp:老 Android 项目构建避坑指南(jcenter弃用解决方案)

【免费下载链接】MaterializeYourApp Example of a Material App for Android 项目地址: https://gitcode.com/gh_mirrors/ma/MaterializeYourApp 点击查看 免费下载 MaterializeYourApp 是一个经典的 Android Material Design 示例应用,完整演示了 Nav…

2026/10/14 1:52:15 阅读更多 →
软件开发项目履约保证金的风险与应对策略

软件开发项目履约保证金的风险与应对策略

1. 项目背景与行业现状在软件开发行业,履约保证金已经成为许多项目招标过程中的标配要求。最近接洽的一个企业级ERP系统开发项目,甲方明确要求参与竞标的开发团队需缴纳合同金额20%的履约保证金。这让我不得不重新审视这个行业普遍存在却鲜少被深入讨论的…

2026/10/14 1:51:15 阅读更多 →

最新新闻

Flutter scratch_space鸿蒙适配实战与性能优化

Flutter scratch_space鸿蒙适配实战与性能优化

1. 项目背景与核心价值在跨平台开发领域,Flutter因其高效的渲染性能和丰富的生态体系已成为移动端开发的主流选择之一。而scratch_space作为Flutter生态中专注于临时构建空间管理的三方库,在资源隔离和任务协同方面表现出色。但随着鸿蒙系统的崛起&#…

2026/10/14 2:37:27 阅读更多 →
Java 企业级工具类全家桶-83-RSA非对称加解密与签名工具类

Java 企业级工具类全家桶-83-RSA非对称加解密与签名工具类

📋 目录 一、工具类功能二、所需环境三、方法与调用示例(按需调用)四、工具类源码(可直接复制) 一、工具类功能 公钥加密私钥解密、私钥签名公钥验签,加密固定 RSA-OAEP(SHA-256&#xff0c…

2026/10/14 2:37:27 阅读更多 →
Java 企业级工具类全家桶-43-List转Map工具类

Java 企业级工具类全家桶-43-List转Map工具类

📋 目录 一、工具类功能二、所需环境三、方法与调用示例(按需调用)四、工具类源码(可直接复制) 一、工具类功能 一次遍历把集合摊成 Map,按键分组、按键分组并只抽取某个属性、一个键只对应一个值三种形…

2026/10/14 2:37:27 阅读更多 →
基于 STM32 的智能拐杖设计与 Proteus 仿真+源码

基于 STM32 的智能拐杖设计与 Proteus 仿真+源码

基于 STM32 的智能拐杖设计与 Proteus 仿真实现摘要我国视力障碍人群数量庞大,老龄化进程加速又使老年出行安全问题日益突出。传统盲杖功能单一,仅能提供触地探路的机械辅助,无法感知前方悬空障碍、积水坑洼与远距离障碍物,更缺乏…

2026/10/14 2:37:27 阅读更多 →
SUMO TraCI函数调用深度解析:从轮询到订阅的性能优化实战

SUMO TraCI函数调用深度解析:从轮询到订阅的性能优化实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 2:37:27 阅读更多 →
LLM_端到端自动驾驶

LLM_端到端自动驾驶

EAI:Embodied Artificial Intelligent,E2E:End to End,LLM:Large Language Mode 端到端自动驾驶专题:多模态输入融合、开源框架、头部企业与性能对比核心定义:端到端自动驾驶分为两类 纯端到端&…

2026/10/14 2:36:26 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →