尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
鸿蒙进阶——一文读懂Mindspore-NNRT-HDF工作流程
引言本文将从宏观上介绍华为MindSpore AI框架及其与NNRT(神经网络运行时)的协同工作方式。MindSpore作为AI推理框架通过NNRT实现模型在NPU等硬件上的高效推理。知识有限仅供参考一、Mindspore LiteMindSpore是华为自己开发的一套AI框架与Onnx、Pytorch、TensorFlow功能类似提供加载、推理、训练模型的功能简单说就是通过MIndSpore 你可以像使用SDK API 一样简单使用模型。1、模型加载首先需要将ms模型加载到Mindspore runtime中。这一步通常涉及到读取模型文件并将其解析成内部数据结构。2 、初始化在模型加载完成后需要进行一系列的初始化操作包括内存分配、算子注册等。这些操作是为了确保模型推理能够顺利进行。3、模型推理在初始化完成后就可以开始进行模型推理了。模型推理的核心是执行图中的各个算子Operator这些算子对应于深度学习模型中的各个层。Mindspore会根据模型的计算图依次执行各个算子完成模型的推理过程。二、MindSporeNNRT加载模型MindSpore 默认是运行在CPU的而有些模型运行在NPU、GPU等其他硬件上更高效因此NNRT 应运而生默认与MindSpore 强关联经由NNRT 就可以实现相关加载、推理操作运行在NPU 或者其他绑定的硬件之上。NNRTNeural Network RuntimeNNRt, 神经网络运行时是面向AI领域的跨芯片推理计算运行时作为中间桥梁连通上层AI推理框架和底层加速芯片实现AI模型的跨芯片推理计算。从AI推理框架 把指定的模型传递到指定的硬件完成相关AI 运算。从某种程度上说NNRT 也是有自己的一套内部的模型图AI推理框架可以调用NNRt的构图接口将推理框架的模型图转换为NNRt内部使用的模型图然后调用NNRt的编译和执行接口在NNRt底层对接的AI加速硬件上进行模型推理。该方式可以实现无感知的跨AI硬件推理但是首次加载模型速度较慢。AI推理框架和应用开发者也可以无需调用NNRt构图接口直接使用某款具体硬件对应的离线模型在NNRt上执行模型推理。该方式仅能实现在特定AI硬件上执行推理但是首次加载模型速度较快。更多详情参见OpenAtom OpenHarmony NNRT 。NNRt目前支持常用算子56个不过NNRt的算子并没有具体实现仅作为内部模型图的元素对接底层AI硬件具体算子实现其实是在AI硬件驱动中。1、NNRT 架构在线构图AI推理框架需要调用NNRt的构图接口将推理框架的模型图转换为NNRt内部模型图。而系统内置的MindSpore Lite推理框架具体可参考Mindspore Lite 通过MindIR模型图对接NNRt。由于MindIR模型图和NNRt内部模型图格式兼容因此MindSpore Lite无需调用NNRt的构图接口即可对接NNRt。模型编译NNRt内部模型图或离线模型文件需要通过NNRt的编译接口在底层AI硬件驱动上编译为硬件相关的模型对象后续就可以在该硬件上执行模型推理。模型推理基于已编译的模型对象创建执行器设置推理的输入和输出张量然后在AI硬件上执行模型推理。内存管理推理的输入和输出张量需要包含对应的数据内存该模块负责在AI硬件驱动上申请共享内存并赋给张量并在张量销毁时释放对应共享内存。通过AI硬件驱动上的共享内存可以实现输入和输出数据的“零拷贝”提升推理性能。设备管理负责展示NNRt对接的AI硬件信息并提供了选择AI硬件的功能。模型缓存已编译的模型对象写成模型缓存格式保存在文件或一段内存中。在下一次编译模型时可以直接从文件或内存形式的模型缓存中加载大幅提升编译速度。离线模型推理除了支持通过构图接口构造模型图NNRt也支持直接使用AI硬件相关的模型文件简称为离线模型进行推理。应用开发者使用AI硬件厂商提供的模型转换器将原始训练模型转换为AI硬件对应的离线模型文件并将它部署在应用程序中在应用运行期间通过NNRt的离线模型编译接口传入。离线模型仅能在对应AI硬件上编译和推理无法支持跨AI硬件兼容。但由于离线模型和硬件直接相关因此编译速度通常很快。NNRT 工作前所有的设备都会被映射为其内部的HDI Device概念又称为后端并把其对应的句柄缓存起来 当 NeuralNetworkRuntime 需要使用已注册的后端比如在运行神经网络模型时选择合适的硬件加速器时它会查询内部注册表找到已注册的后端实例HDI Device 是通过宏展开与静态变量初始化机制自动完成注册工作的。换言之就是把HDI服务的句柄保存到NNRT框架中的BackendManager单例中。在HDIDeviceV2_0Creator()方法中会调用V2_0::INnrtDevice::Get()方法获取V2_0::INnrtDevice实例这个实例就是底层推理设备的抽象实例句柄后续调用推理等流程都是通过该实例句柄调用的。V2_0::INnrtDevice::Get()实现在//out/f8pro/gen/drivers/interface/nnrt/v2_0/innrt_device.h 编译时默认生成的HDI服务中的静态接口目的是获取HDI服务的句柄。最终我们是通过这个句柄调用到NnrtDeviceService里的API进而调用到相关硬件的能力。Device——HDIDeviceV2_0——INnrtDevicePreparedModel——HDIPreparedModelV2_0——PreparedModelService三、Mindspore 实现NNRT 接口Mindspore 通过Delegate 机制来支持NNRT它首先抽象了一个Kernel 基类对象然后不同的设备对应的不同的子类在进行AI运算时指定对应的子类。1、模型加载流程(整体数据的流向)2、推理流程四、HDFOpenHarmony 系统 HDF 驱动框架主要由驱动基础框架、驱动程序、驱动配置文件和驱动接口这四个部分组成。HDF_INIT(g_sampleDriverEntry); 系统内核自动调用的一个宏驱动入口对象注册到HDF框架会调用HDF_INIT函数将驱动入口地址注册到HDF框架。HDF 驱动基础框架提供统一的硬件资源管理,驱动加载管理以及设备节点管理等功能。驱动框架采用的是主从模式设计,由Device Manager 和 Device Host 组成。Device Manager 提供了统一的驱动管理,Device Manager 启动时根据 Device Information 提供驱动设备信息加载相应的驱动Device Host,并控制 Host 完成驱动的加载。Device Host 提供驱动运行的环境,同时预置 Host Framework与 Device Manager 进行协同,完成驱动加载和调用。根据业务的需求Device Host 可以有多个实例。简而言之就是以统一的架构完成驱动和设备的匹配、加载工作。Device Host ,不同的应用场景或者不同的设备类型的比如说Input Host、Display Host、USB等等驱动程序实现驱动具体的功能,每个驱动由一个或者多个驱动程序组成,每个驱动程序都对应着一个 Driver Entry驱动入口。Driver Entry 主要完成驱动的初始化和驱动接口绑定功能。图中蓝色部分就是Driver程序本身。structHdfDriverEntryg_nnrtdeviceDriverEntry{.moduleVersion1,.moduleNamennrt,.BindHdfNnrtDeviceDriverBind,.InitHdfNnrtDeviceDriverInit,.ReleaseHdfNnrtDeviceDriverRelease,};驱动配置文件.hcs 主要由设备信息(Device Information)和设备资源(Device Resource)组成。Device Information 完成设备信息的配置。如配置接口发布策略,驱动加载的方式动态加载或静态加载、优先级加载等Device Resource 完成设备资源的占有配置。如GPIO 管脚、寄存器等资源信息的配置。驱动接口 HDI(Hardware Driver interface)提供标准化的接口定义和实现,驱动框架提供 IO Service 和 IO Dispatcher 机制,使得不同部署形态下驱动接口趋于形式致。简而言之就是给用户层提供的接口层。五、uhdf和nnrt的通信nnrt/Framework部位作为Client端角色——通过IPC——Proxy——通过IPC——Stup。Stup的载体是nnrt_device_service即Host 服务进程驱动程序的载体是xxx_device_driver.cpphdf_core 最终会被编译为一个可执行文件会被多次调用用于加载so和拉起进程Host 进程Host服务是nnrt_device_service、Stup、nnrt_device_driver的六、HDI和IDLHDI 是一套与硬件设备通信的PC 框架而IDL 就是HDI文件使用的语法格式HDI 框架经过编译后就自动生成一套C/S 架构的IPC 通信模块而NNRT 就是通过HDI 接口与硬件设备芯片IPC通信。HDIHardware Device InterfaceOpenHarmony硬件设备接口定义系统中跨进程通信的接口实现服务间的跨进程通信。IDLInterface Description Language接口描述语言是HDI接口的语言格式HDI服务发布是基于用户态HDF驱动框架所以需要实现一个驱动入口七、NNRT HOSTNNRT HOST 本质上就一个HDI 服务为NNRT的接口的实现。该接口标准华为已经定义清楚由IDL 文件描述。位于drivers/peripheral/nnrt/下是通过HDF 机制由系统启动时自动拉起的对应的进程名称为nnrt_host作为一个部件依附于hdf子系统下的。
RELATED

相关推荐

小米官网仿写:前端能力全链路压力测试实战指南

小米官网仿写:前端能力全链路压力测试实战指南

1. 项目概述:为什么一个官网仿写能成为前端学习的“照妖镜”“小米官网仿写部分代码实训报告”——这行字看起来平平无奇,像是某所高校计算机系大二学生的课程作业标题。但在我带过几十期前端实训、审阅过上千份学生作品后,我敢说&#xff1a…

📅 2026/10/14 5:35:07
ponytail skill与插件使用指南:从选型到上手全流程

ponytail skill与插件使用指南:从选型到上手全流程

1. 从“ponytail”这个热词说起:它到底指什么第一次看到“ponytail”被当成技术词来搜,我其实愣了一下。字面意思就是马尾辫,一个再日常不过的发型词,怎么会跟“skill”“插件”“如何使用”这些词绑在一起冲上热搜?后…

📅 2026/10/14 5:35:07
图解PINN(物理信息神经网络)

图解PINN(物理信息神经网络)

目录 1.介绍 2.模型核心 3.工作示例 4.总结 1.介绍 PINN 是“Physics-Informed Neural Networks”(物理信息神经网络)的缩写,是一种结合了深度学习和物理知识的机器学习模型,主要用于求解偏微分方程(PDE&#xff…

📅 2026/10/14 5:30:07
MORE NEWS

更多资讯

📰

计及调峰主动性的风光水火储多能互补调度与Matlab实现

风光水火储多能系统互补调度,是我这些年接触过的电力系统优化课题里最常被问到的一类。很多人拿着题目时第一反应是“把五类电源写进目标函数,加约束,跑一个优化就完事”,但真正动手之后才发现,模型写出来容易&#xf…

📰

3DMax插件实战:从场景散布到冲突排查的完整指南

说实话,刚入行那几年,我对3DMax插件是有偏见的,总觉得那是“有收费账号才能玩”的东西,自己老老实实建模不也一样能出图。直到有一次要赶一个室外绿地项目,几百棵树加几千丛灌木,我手动复制到凌晨两点&…

📰

通达信Level2数据解析:逐笔成交与主力资金流实战指南

简介:这是一份面向职业交易员与进阶投资者的通达信Level2数据实战指南代码包,围绕深度行情、逐笔成交、资金流向分析和盘口异动预警等核心功能,重点解决Level2数据不会看、看得慢、用不深的问题,帮助识别主力资金真实动向、识别虚…

📰

有关大数据,看这一篇就够了!

大数据并非全新事物,谷歌搜索早已是典型应用。随着数字化普及,数据量激增,其价值逐渐显现。普拉达通过RFID追踪试衣间数据,优化产品;中国用遥感卫星估算粮食产量,突破传统统计局限。这些案例说明&#xff0…

📰

Boring Notch 技术指南:把 MacBook 刘海变成音乐控制中心、日历与系统 HUD

桌面应用 【免费下载链接】boring.notch TheBoringNotch: Not so boring notch That Rocks 🎸🎶 项目地址: https://gitcode.com/gh_mirrors/bor/boring.notch 点击查看 免费下载 Boring Notch(仓库 boring.notch)是一…

📰

深度解析无线鼠标蓝牙芯片封装:技术演进与封测行业新机遇

无线鼠标蓝牙芯片封装的技术核心与行业痛点 无线鼠标作为外设市场渗透率最高的品类之一,其核心组件蓝牙芯片的封装技术正经历从传统向高度集成化的转型。无线鼠标蓝牙芯片封装的关键挑战在于如何在小尺寸、低功耗与高稳定性之间取得平衡。蓝牙芯片通常需要集成射频前…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬