1.MindSpore特性
动静态图
- 目前主流的深度学习框架的执行模式有两种,分别为静态图模式和动态图模式。
- 静态图模式下,程序在编译执行时先生成神经网络的图结构,然后再执行图中涉及的计算操作。因此,在静态图模式下,编译器利用图优化等技术对执行图进行更大程度的优化,从而获得更好的执行性能,有助于规模部署和跨平台运行。
- 动态图模式下,程序按照代码的编写顺序执行,在执行正向过程中根据反向传播的原理,动态生成反向执行图。这种模式下,编译器将神经网络中的各个算子逐一下发执行,方便用户编写和调试神经网络模型。
MindSpore静态图
- 在MindSpore中,静态图模式又被称为Graph模式,可以通过set_context设置成静态图模式。
- set_context(mode=GRAPH_MODE),默认模式。
- 在Graph模式下,MindSpore通过源码转换的方式,将Python的源码转换成IR(MindIR),再在此基础上进行相关的图优化,最终在硬件设备上执行优化后的图。
- 使用Graph模式时,需要使用nn.Cell类并且在construct函数中编写执行代码,或者调用@ms_function装饰器。
- Graph模式是基于MindIR进行编译优化的。
- 静态图模式比较适合网络固定且需要高性能的场景。在静态图模式下,基于图优化、计算图整图下沉等技术,编译器可以针对图进行全局的优化,因此在静态图下能获得较好的性能,但是执行图是从源码转换而来,因此在静态图下不是所有的Python语法都能支持。
- nn.Cell类,是构建所有网络的基类,也是网络的基本单元,定义网络结构是需要继承该类,具体使用可以参考课程后面的应用案例部分。
- ms_function是MindSpore中提供的用于加速动态图执行效率的工具。
MindSpore静态图使用

MindSpore动态图
- 在MindSpore中,动态图模式又被称为PyNative模式,可以通过set_context设置:
- set_context(mode=PYNATIVE_MODE)。
- 在PyNative模式下,用户可以使用完整的PythonAPI,此外针对使用MindSpore提供的API时,框架会根据用户选择的硬件平台(Ascend,GPU,CPU),将算子API的操作在对应的硬件平台上执行,并返回相应的结果。

- 通过前端的PythonAPI,调用到框架层,最终到相应的硬件设备上进行计算。
- 在PyNative下执行正向过程完全是按照Python的语法进行执行。
- 拓展:在PyNative下是基于Tensor进行实现反向传播的,我们在执行正向过程中,将所有应用于Tensor的操作记录下来,并针对每个操作求取其反向,并将所有反向过程串联起来形成整体反向传播图(简称反向图)。最终,将反向图在设备上进行执行计算出梯度。
MindSpore动态图使用

动静统一
- 当前在业界支持动态图和静态图两种模式,动态图通过解释执行,具有动态语法亲和性,表达灵活;静态图使用jit编译优化执行,偏静态语法,在语法上有较多限制。动态图和静态图的编译流程不一致,语法约束不一致。
- MindSpore针对动态图和静态图模式,首先统一API表达,在两种模式下使用相同的API;其次统一动态图和静态图的底层微分机制。

- 在MindSpore中,我们可以通过控制模式输入参数来切换执行使用动态图还是静态图。但是,由于在静态图下,对于Python语法有所限制,因此从动态图切换成静态图时,需要符合静态图的语法限制,才能正确使用静态图来进行执行。
MindIR
- 中间表示(IR)是程序编译过程中介于源语言和目标语言之间的程序表示,以方便编译器进行程序分析和优化,
- MindSpore使用的是一种基于图表示的函数式IR,即MindIR,其最核心的目的是服务于自动微分变换,采用了接近于ANF函数式的语义。
- 借助于MindIR,可以帮助实现一次训练多处部署,实现端云互通。
- MindIR是MindSpore提供的中间表达形式,可以帮助大家实现一次训练多处部署,实现端云互通。简单来说,就是你可以在Ascend、GPU、CPU硬件平台上训练生成MindIR格式的模型,然后快速部署到手机端、推理服务器等环境上,体验到MindSpore的全场景能力。
- MindIR通过统一的算子IR定义,消除了不同后端的模型差异,大家可以基于同一个模型文件在端、边、云不同平台上进行协同任务。
- 中间表示(intermediaterepresentation,IR)指编译器对于源程序进行扫描后生成的内部表示,代表源程序的语义和语法结构,编译器的各个阶段都在IR上进行分析或优化变换,因而它对编译器的整体结构、效率和健壮性都有着极大的影响。中间表示对提高编译器的可移植性以及代码生成起到关键作用,在编译器的研究中,应该设计一种结构良好的中间表示,这种中间表示应在适当的抽象层次上,向上能支持多语言的映射,向下能适应多平台转换且易于进行各种优化
MindIR实例

- 打开MindIR,它是一种基于图表示的函数式IR,定义了可扩展的图结构以及算子的IR表示,它存储了MindSpore基础数据结构,包括计算图、参数权重等。
异构并行训练
- 异构并行训练方法是通过分析图上算子内存占用和计算密集度,将内存消耗巨大或适合CPU逻辑处理的算子切分到CPU子图,将内存消耗较小计算密集型算子切分到硬件加速器子图,框架协同不同子图进行网络训练,使得处于不同硬件且无依赖关系的子图能够并行进行执行的过程。

- 计算流程:
- 用户设置网络执行的后端(device);
- 用户设置特定算子执行后端;
- 框架根据计算图算子标志进行切图。
- 框架调度不同后端执行子图。
- 当前典型使用异构并行计算的场景有:优化器异构、Embedding异构、PS异构。
MindSpore开发组件
MindSpore推理部署流程
- 在MindSpore上训练出来的模型文件,可通过Serving部署在云服务中执行,也可用过Lite执行在服务器、端侧等设备上。同时Lite支持通过独立工具convert进行模型的离线优化,实现推理时框架的轻量化以及模型执行高性能的目标。

- MindSpore抽象各个硬件下的统一算子接口,因此,在不同硬件环境下,网络模型的编程代码可以保持一致。同时加载相同的模型文件,在MindSpore支持的各个不同硬件上均能有效执行推理。推理考虑到大量用户使用C++/C编程方式,因此提供了C++的推理编程接口,相关编程接口在形态上与Python接口的风格较接近。
MindSpore Serving
- MindSporeServing是一个轻量级、高性能的服务模块,旨在帮助MindSpore开发者在生产环境中高效部署在线推理服务。
- 有三种方式可以访问MindSporeServing服务:
- 基于gRPC接口访问Serving服务;
- 基于RESTful接口访问Serving服务;
- Serving的Servable提供推理服务:
- 推理服务来源于单模型;
- 推理服务来源于多模型组合。

MindSpore Lite
- MindSporeLite是一个极速、极智、极简的AI引擎,使能全场景智能应用,为用户提供端到端的解决方案,帮助用户使能AI能力。
- MindSpore Lite分为离线模块和在线模块两个部分。

- 离线模块:
- 3rdModelParsers:将第三方模型转换为统一的MindIR,其中第三方模型包括
- TensorFlow、TensorFlow Lite、Caffe 1.0和ONNx模型。
- MindIR:MindSpore端云统一的IR。
- Optimizer:基于IR进行图优化,如算子融合、常量折叠等。
- Quantizer:训练后量化模块,支持权重量化、激活值量化等训练后量化手段。
- benchmark:测试性能以及调试精度的工具集。
- Micro CodeGen:针对IoT场景,将模型直接编译为可执行文件的工具。
- 在线模块:
- Training/InferenceAPIs:端云统一的C++/Java训l练推理接口。
- MindRTLite:轻量化的在线运行时,支持异步执行。
- MindDataLite:用于端侧数据处理。
- Delegate:用于对接专业Al硬件引l擎的代理。
- Kernels:内置的高性能算子库,提供CPU、GPU和NPU算子。
- LearningStrategies:端侧学习策略,如迁移学习。
MindInsight
MindInsight是MindSpore的可视化调试调优工具。利用MindInsight,可以可视化地查看训练过程、优化模型性能、调试精度问题。还可以通过MindInsight提供的命令行方便地搜索超参,迁移模型。

MindSpore Vision
- MindSporeVision是一个开源的基于MindSpore框架的计算机视觉研究工具箱,工具所涉及的任务主要包括分类、检测(开发中)、视频(开发中)和3D(开发中)。MindSporeVision旨在通过提供易用的接口来帮助复现现有的经典模型并开发自己的新模型。

- 提供的高级功能包括:
- 分类:建立在引擎系统上的深层神经网络工作流程。
- 主干网络:ResNet和MobileNet等模型的基础主干网络。
- 引擎:用于模型训练的回调函数。
- 数据集:面向各个领域的丰富的数据集接口。
- 工具:丰富的可视化接口和IO(输入/输出)接口。
MindSpore Reinforcement
- MindSporeReinforcement是一个开源的强化学习框架,支持使用强化学习算法对agent进行分布式训练。Reinforcement为编写强化学习算法提供了简洁的API抽象,它将算法与具体的部署和执行过程解耦,包括加速器的使用、并行度以及跨节点的计算调度。

MindSpore Federated
- 联邦学习是一种加密的分布式机器学习技术,其支持机器学习的各参与方在不直接共享本地数据的前提下,共建AI模型。MindSporeFederated是一款开源联邦学习框架,支持面向干万级无状态终端设备的商用化部署。

其他组件
- MindQuantum:MindSpore开源深度学习框架和HiQ量子计算云平台开发的通用量子计算框架,支持多种量子神经网络的训练和推理。
- MindSporeProbability:MindSpore概率编程提供了贝叶斯学习和深度学习"无缝"融合的框架,旨在为用户提供完善的概率学习库,用于建立概率模型和应用贝叶斯推理。
- MindSpore Golden Stick:模型压缩算法集。
- ......
- MindSporeGoldenStick除了提供丰富的模型压缩算法外,一个重要的设计理念是针对业界种类繁多的模型压缩算法,提供给用户一个尽可能统一且简洁的体验,降低用户的算法应用成本。