鸿蒙OpenHarmony【AI服务开发之Neural Network Runtime设备接入】子系统

概述

功能简介

NNRt(Neural Network Runtime,神经网络运行时)是面向AI领域的跨芯片推理计算运行时,作为中间桥梁连通上层AI推理框架和底层加速芯片,实现AI模型的跨芯片推理计算。

NNRt开放了设备接口,芯片厂商通过设备接口将专有加速芯片接入NNRt,从而实现与OpenHarmony社区生态的对接。以下内容将介绍芯片如何接入NNRt。

基本概念

在开发前,开发者需要先了解以下概念,以便更好地理解全文内容:

  • HDI(Hardware Device Interface):OpenHarmony硬件设备接口,定义系统中跨进程通信的接口,实现服务间的跨进程通信。
  • IDL(Interface Description Language):接口描述语言,是HDI接口的语言格式。

约束与限制

  • 系统版本:OpenHarmony主干版本。
  • 开发环境:Ubuntu 18.04及以上。
  • 接入设备:具备AI计算能力的芯片。

运作机制

NNRt通过HDI接口实现与设备芯片的对接,由HDI接口实现跨进程通信。

图1 NNRt架构图

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

整个架构主要分为三层,AI应用在应用层,AI推理框架和NNRt在系统层,设备服务在芯片层。AI应用如果要使用AI专用加速芯片进行模型推理,需要经过AI推理框架和NNRt才能调用到底层AI专用加速芯片,NNRt就是负责适配底层各种AI专用加速芯片的中间层。NNRt开放了标准统一的HDI设备接口,众多AI专用加速芯片都可以通过HDI接口接入OpenHarmony。此外NNRt也开放了标准统一的接口对接上层各种AI推理框架。

程序运行时,AI应用、AI推理框架、NNRt都运行在用户进程中,底层AI芯片设备服务运行在HDI服务进程中。NNRt根据HDI接口实现了HDI Client,服务端也需要根据HDI接口实现HDI Service,两者通过OpenHarmony标准的HDF子系统实现跨进程通信。

开发指导

场景介绍

当需要将一款AI加速芯片接入NNRt的时候,可以参考下文。下文以RK3568芯片为例,展示RK3568 CPU如何通过NNRt的V2.0版本HDI接口接入NNRt,并完成AI模型推理。V1.0版本HDI接口接入NNRt的流程与此类似。

依赖说明:该教程展示的RK3568 CPU接入NNRt并没有真正实现CPU的驱动,而是借用了MindSpore Lite的runtime和CPU算子,因此会依赖MindSpore Lite的动态库以及头文件。实际开发时并不需要依赖MindSpore Lite的任何库或者头文件。

开发流程

AI专用加速芯片接入NNRt的整体流程如下:

图2 AI专用加速芯片接入NNRt流程

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

开发步骤

AI芯片设备HDI服务开发者具体可通过以下步骤实现AI专用加速芯片对接NNRt:

生成HDI头文件

开源社区下载OpenHarmony的代码,编译drivers_interface部件,生成HDI接口的头文件。

  1. 进入OpenHarmony源码根目录,编译NNRt的IDL接口文件(以RK3568产品为例):

    ./build.sh --product-name rk3568 –ccache --build-target drivers_interface_nnrt
    shell
    

    编译完成后,会在out/rk3568/gen/drivers/interface/nnrt/v2_0目录下生成C++类型的HDI头文件。若需要生成C类型的头文件,请在编译之前使用如下命令对drivers/interface/nnrt/v2_0/BUILD.gn文件中的language配置项进行设置。

    language = "c"
    

    生成头文件目录如下所示:

    out/rk3568/gen/drivers/interface/nnrt
    └── v2_0
        ├── drivers_interface_nnrt__libnnrt_proxy_2.0_external_deps_temp.json
        ├── drivers_interface_nnrt__libnnrt_stub_2.0_external_deps_temp.json
        ├── innrt_device.h                        # 设备接口头文件
        ├── iprepared_model.h                     # 编译AI模型对象头文件
        ├── libnnrt_proxy_2.0__notice.d
        ├── libnnrt_stub_2.0__notice.d
        ├── model_types.cpp                       # AI模型结构定义实现文件
        ├── model_types.h                         # AI模型结构定义头文件
        ├── nnrt_device_driver.cpp                # 设备驱动实现参考样例
        ├── nnrt_device_proxy.cpp
        ├── nnrt_device_proxy.h
        ├── nnrt_device_service.cpp               # 设备服务端实现参考样例
        ├── nnrt_device_service.h                 #
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值