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