【MindStudio 训练营第一季】MindStudio 可视化 AI 应用开发体验随笔
MindStudio
MindStudio 提供一站式 AI 开发环境,依靠工具与性能调优,采用插件化扩展机制,打造高效、便捷的全流程开发工具链。目前最新版本是 5.0.RC3,发布于 2022 年 20 月,对应的昇腾社区版本:6.0.RC1。新增众多特性,这里主要介绍两个我非常感兴趣的分析迁移和。
分析迁移
X2MindSpore 工具新增已验证支持的 PyTorch 模型 49 个,TensorFlow 1.x 模型 20 个,TensorFlow 2.x 模型 20 个。
X2MindSpore 工具中 TensorFlow1.x 新增支持混合精度迁移,TensorFlow2.x 新增支持分布式迁移。
X2MindSpore 工具初步支持动态图迁移至静态图模式(包括 PyTorch 框架下 ResNet 系列和 BiT 系列的模型)。
调试调优
Profiling 性能分析
Profiling 支持集群场景性能数据展示(Analysis Summary 界面新增集群场景解析结果、新增 Cluster Iteration Analysis 和 Data Preparation 界面)。
Profiling 性能分析 Merge Reports 支持指定输入目录的 PROF_XXX 目录的父目录为任意目录,以及输出目录为任意目录。
精度比对
精度比对工具新增支持新增 npy 与 npy 文件之间的精度比对功能。
精度比对工具新增支持 dump 数据文件转换为 npy 数据文件功能。
精度比对工具整网比对结果新增 Show Model 功能、散点分布图字段说明增加点击联动高亮以及结果增加 OpType 字段。
专家系统工具
专家系统工具 soc_version 新增支持 Ascend310P1 平台。
专家系统工具新增性能调优一键式闭环功能。
专家系统工具新增知识库模板功能。
专家系统工具自有知识库配置新增支持 Python App 工程。
AI Core Error 分析工具
AI Core Error 分析工具增加 remote run 配置模式。
Beta 特性 AutoML 工具
HPO 任务支持 fully_train,并在可视化任务界面查看 fully_train 结果。
HPO 任务可视化任务界面新增展示已搜索到的超参值。
总的来说,MindStudio 提供开发者在 AI 开发所需的一站式开发环境,支持模型开发
、应用开发
以及算子开发
三个主流程中的开发任务。依靠模型可视化、算力测试、IDE 本地仿真调试等功能,MindStudio 能够帮助开发者在一个工具上就能高效便捷地完成 AI 应用开发。MindStudio 功能框架如图下图所示。
在异构计算架构中, 昇腾 AI 处理器与 CPU 通过 PCIe 总线连接在一起来协同工作:
Host
:CPU 所在位置称为主机端(Host),是指与昇腾 AI 处理器所在硬件设备相连接的 x86_64 服务器、aarch64 服务器或者 WindowsPC,利用昇腾 AI 处理器提供的 NN(Neural-Network)计算能力完成业务。如上图中的开发平台层。
Device
:是指安装了昇腾 AI 处理器的硬件设备,利用 PCIe 接口与服务器连接,为服务器提供 NN 计算能力。如上图中的芯片层。
对于 Ascend RC 产品形态,昇腾 AI 处理器所在硬件设备与之相连接的 ARM 服务器合设,统称为 Host。
应用开发
一般来说,MindStudio 支持AscendCL
和MindX SDK
来进行应用开发。说到二者的区别,简单来讲,MindX SDK
可以视为AscendCL
的封装版,进一步简化开发。而AscendCL
是对昇腾 AI 处理器通用的开发语言,更接近硬件底层。这里我们介绍MindX SDK
。
MindX SDK
前提说明
MindX SDK 当前适用于 UbuntuOS、CentOS、EulerOS、LinxOS、KylinOS 等系统。
目前 MindStudio 仅支持 MindX SDK 中的 mxManufacture 和 mxVision,暂不支持 mxIndex。
MindX SDK 运行依赖 Python 3.9,请在安装 CANN 前确保 Python 3.9 已安装,并完成 Python 3.9 的环境变量配置。
逻辑框架
MindX SDK 致力于简化异腾 AI 处理器推理业务开发过程,降低使用异腾 A 处理器开发的门槛。
插件化开发模式
提供丰富的插件库
支持自定义插件开发
开发方式
通过 Stream 配置文件,Stream manager 可识别需要构建的 Element,及它们的连接关系,并启动业务流程。Stream manager 对外提供接口,用于向 Stream 发送数据和获取结果,令用户实现业务对接。
Plugin 表示业务流程的基础模块,通过 Element 的串接构建 Stream。Buffer 内部挂载解码后的视频/图像数据,是 Element 间传递的数据结构,也可挂载元数据(Metadata),存放结构化数据 (如目标检测结果) 或过程数据 (如缩放后的图像)。
开发流程
我们先来看看 AI 应用开发的典型推理业务流程,如下图所示,先通过目标检测获取目标坐标,然后通过图像分类识别目标属性。流程中有两次图像缩放的操作,两者主要区别在于设置的缩放宽高参数不同。
下面,我们看看基于 MindStudio 完成上述流程是怎么做的。使用 MindStudio 开发和运行推理业务步骤如图所示,其中“深入开发”为 SDK 高级特性,用户可以视情况选择执行。
确定业务流程。
根据业务的功能如目标检测、图像分类、属性识别等,将业务流程进行模块化。
寻找合适插件。
首先根据已有 SDK 插件的功能描述和规格限制来匹配业务功能。当 SDK 提供的插件无法满足功能需求时,用户可以开发自定义插件(可参见插件开发、《mxManufacture 用户指南》或《mxVision 用户指南》的“已有插件介绍”与“插件开发介绍”章节。)。
准备推理模型文件与数据集。
根据插件的实际应用场景,添加用于推理的模型文件和数据集。(加载的模型路径中不能有空格。)
(1) 转换模型。
在添加模型文件前,请参见模型转换将第三方模型转换为适配昇腾 AI 处理器的离线模型(*.om 文件)。SDK 样例工程的模型转换请参见SDK样例工程使用指导中的步骤 4 至 6。模型转换具体指导与相关参数设置请参见《ATC工具使用指南》。
(2) 添加模型文件。
请用户将准备好的模型文件上传到应用工程中用户自定义目录下。
(3) 准备推理数据。
准备推理所用数据,并上传到应用工程文件目录下。
流程编排。
请参见可视化流程编排、《mxManufacture 用户指南》或《mxVision 用户指南》的“流程编排介绍”与“数据流程介绍”章节。
业务集成。
编写 C++程序或 Python 程序,调用业务流管理的 API(MxStreamManager),先进行初始化,再加载业务流配置文件(*.pipeline),然后根据 stream 配置文件中的 StreamName 往指定 Stream 获取输出数据,最后销毁 Stream。
可用 API 请参见《mxManufacture 用户指南》或《mxVision 用户指南》的“API 参考(C++)”章节与“API 参考(Python)”章节。
编译与运行应用。
请参见编译与运行应用工程。
说明
MindX SDK 昇腾应用工程支持 Profiling 功能,具体可参见性能分析。
基于 MIndX SDK 开发应用
1. 创建代码目录
在开发应用前,先创建目录存放代码文件、编译脚本测试图片数据、模型文件等。
Mindstudio 提供工程模板,包含推荐的工程目录结构,Cmake 工程模板等。
2. 确定业务流程 &寻找合适插件
根据业务的功能如目标检测、图像分类、属性识别等,将业务流程进行模块化。
首先根据已有插件功能描述和规格限制来匹配业务功能,当已有插件无法满足功能需求时,用户可以开发自定义插件。
3. 准备推理模型
对于开源框架的网络模型,不能直接在异腾 AI 处理器上做推理,需要先使用 ATC (Ascend TensorCompiler)工具将开源框架的网络模型转换为适配异腾 AI 处理器的离线模型 (*.om 文件)。
Mindstudio 提供图形化界面,引导用户快速完成模型转换。同时提供模型可视化能力,帮助用户了解模型内部结构。
4. 插件开发(可选)
当现有插件无法满足需求时,开发人员还可以自定义插件,灵活扩展原生 MindX SDK 的能力。
MindStudio 提供 MindX SDK 插件模板,开发者可聚焦于业务逻辑实现,同时支持动态插件扫描功能新增插件直接加入插件库中用于流程编排。
5. 流程编排
不同于传统代码流程式开发模式 MindX SDK 应用开发,采用模块化设计理念,将业务流程中的各个功能单元封装成独立插件,通过插件串接和参数配置,形成流程编排 Pipeline 配置文件,可快速构建推理业务。
MindStudio 提供可视化流程编排通过“拖拉拽”和界面配置即可完成主体业务流程开发,配合少量的代码,拉起流管理器,加载上述配置文件,完成业务执行。
6. 业务集成
对于开源框架的网络模型,不能直接在异腾 A 处理器上做推理,需要先使用 ATC (Ascend Tensor Compiler) 工具将开源框架的网络模型转换为适配异腾 AI 处理器的离线模型 (*.om 文件)。
7. 编译运行调试
MindStudio 支持 C/C++、Python 语言,除基础的语法高亮、自动补产外 Mindstudio 支持编译、本地/远程 运行/调试能力。
案例实践
1. 基于Yolov4和SCN的情绪识别应用
功能描述: 该样例主要是使用 MindX SDK 实现现实场景下的情绪识别功能。
https://www.hiascend.com/zh/developer/mindx-sdk/case-studies/35480513-5d01-4531-ad83-a51ee10309c8
2. 基于face mask detection的目标检测应用
功能描述: 该样例主要是使用 MindX SDK 实现识别图片中的人是否佩戴口罩的功能。
https://www.hiascend.com/zh/developer/mindx-sdk/case-studies/b6eea89b-971a-40f3-b0f7-3ad11c40959a
版权声明: 本文为 InfoQ 作者【Angel Wings】的原创文章。
原文链接:【http://xie.infoq.cn/article/601973d20013bcaec76ea095e】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论