前言
MindStudio 是昇腾(Ascend) AI 生态中的全流程开发工具链,为开发者提供开发 AI 所需的一站式开发环境,支持模型开发、算子开发以及应用开发三个主流程中的开发任务,依靠模型可视化、算力测试、IDE 本地仿真调试等功能。
一、MindX SDK 简介
MindX SDK 是针对具体行业应用提出的 AI 开发套件。
1、逻辑架构
二、MindX SDK开发方式
MindX SDK 通过 Stream 配置文件,Stream manager 可识别需要构建的 Element,及它们的连接关系,并启动业务流程。Stream manager 对外提供接口,用于向 Stream 发送数据和获取结果,令用户实现业务对接。
2.1、MindX SDK开发方式中涉及的名词解释
(1)stream:代表业务流程,可以通过 stream 配置文件
(2)Plugin:表示业务流程的基础模块
(3)Element:为一定数量的 Plugin 组合体
(4)Buffer:Element 之间的数据传输载体,可挂载元数据(Metadata),存放结构化数据或过程数据
(3)Stream manager:stream 配置文件指导 Stream manager 调度 Element,并启动业务流程,并对外提供接口,用于向 Steam 发送数据和获取结果,令用户实现业务对接
2.2、个人理解
Plugin 是业务开发中不可分(或者说不需要细分)的最小功能单元,用来实现基本的运算,比如,图片获取,图片解码和图像缩放等,而这三个步骤又可以统称为图像预处理,那么此时 3 个 Plugin 的组合就可以称为 1 个 Element,通过steam 配置的文件,规定了 Element 的时序流,Stream manager 则是具体的执行单元,通过构建 Element 搭建业务流程。
2.3、拓展
MindX SDK 这样的可视化开发方式,不禁让人想起了 Mathworks 公司推出的一款产品,没错,就是 Simulink,虽然 Simulink 在 AI 领域、IT 领域的名气可能不大,但是在工业领域,包括汽车、航空、工业自动化、大型建模、复杂逻辑、物理逻辑、信号处理等方面,Simulink 是必备的开发工具,是很多大型公司或企业的首选,比如NASA、洛克希德·马丁等。
接触过 Simulink 的同学,应该很快就能发现,MindX SDK 中 Plugin 其实对应 Simulink 的 Block;Element 对应 Subsystem;Stream manager 构建的结果对应 System。System 由 Subsystem 组成,Subsystem 又由基础的 Block 组成。
stream 类似于 Simulink 中的 stateflow,规定了 ‘System’、‘Subsystem’ 等的行为,但是后者使用状态机与流程图构建决策逻辑,如果从构建时序流的角度考虑,steam 若仅包含时序流的话,两者又可认为是不同的。
2.4、容易混淆的地方
一开始看到 Plugin,就想到了 VSCode 的 Plugin,一样的同学举个手,后面介绍说可以自己写 Plugin,其实不是补充软件功能的 Plugin,而是业务流程中的功能单元。在命名这一点,个人觉得 Simulink 还是更加科学一点,注意区分就好。
三、MindX SDK 应用开发
开发流程如下:
2.1、创建代码目录
用于存放代码文件,编译脚本、数据、模型文件等
2.2、确定业务流程&寻找合适插件
(1)根据业务功能,如目标检测、图像分类、属性识别等,将业务流程模块化
(2)根据功能需求,选择对应的插件,若无,可以开发自定义插件
2.3、准备推理模型
对于开源框架的网络模型,不能直接在昇腾 AI 处理器上做推理,需要先使用 ATC(Ascend Tensor Compiler)工具将开源框架的网络模型转换为适配昇腾 AI 处理器的离线模型(以 ‘.om’ 为后缀的文件)。
2.4、插件开发(可选)
当现有插件不能满足需求时,可以自己开发插件。
2.5、流程编排
按照业务功能,组合插件,创建 Stream 配置文件。
2.6、业务集成
创建 Stream,并进行输入/输出数据对接。
2.7、编译运行
MindX SDK 支持C\C++、Python,MindStudio 支持编译、本地/远程、运行/调试,MindStudio 的风格和 Pycharm 类似。