3、高效的数据编解码操作,使得用户可以对数据操作无感知。
4、可以灵活控制数据切分的分区大小,实现分布式数据处理。
静态图模式比较适合网络固定且需要高性能的场景。在静态图模式下,基于图优化、
计算图整图下沉等技术,编译器可以针对图进行全局的优化,因此在静态图下能获得
较好的性能,但是执行图是从源码转换而来,因此在静态图下不是所有的
Python
语法
都能支持。
nn.Cell
类,是构建所有网络的基类,也是网络的基本单元,定义网络结构是需要继承
该类,具体使用可以参考课程后面的应用案例部分。
ms_function
是
MindSpore
中提供的用于加速动态图执行效率的工具。
通过前端的
Python API
,调用到框架层,最终到相应的硬件设备上进行计算。
在
PyNative
下执行正向过程完全是按照
Python
的语法进行执行。
拓展:在
PyNative
下是基于
Tensor
进行实现反向传播的,我们在执行正向过程中,将
所有应用于
Tensor
的操作记录下来,并针对每个操作求取其反向,并将所有反向过程
串联起来形成整体反向传播图(简称反向图)。最终,将反向图在设备上进行执行计
算出梯度。
在
MindSpore
中,我们可以通过控制模式输入参数来切换执行使用动态图还是静态图。
但是,由于在静态图下,对于
Python
语法有所限制,因此从动态图切换成静态图时,
需要符合静态图的语法限制,才能正确使用静态图来进行执行。
MindIR
是
MindSpore
提供的中间表达形式,可以帮助大家实现一次训练多处部署,实
现端云互通。简单来说,就是你可以在
Ascend
、
GPU
、
CPU
硬件平台上训练生成
MindIR
格式的模型,然后快速部署到手机端、推理服务器等环境上,体验到
MindSpore
的全场景能力。
MindIR
通过统一的算子
IR
定义,消除了不同后端的模型差异,大家可以基于同一个模
型文件在端、边、云不同平台上进行协同任务。
中间表示
( intermediate representation
,
IR)
指编译器对于源程序进行扫描后生成
的内部表示,代表源程序的语义和语法结构,编译器的各个阶段都在
IR
上进行分析或
优化变换,因而它对编译器的整体结构、效率和健壮性都有着极大的影响。中间表示
对提高编译器的可移植性以及代码生成起到关键作用,在编译器的研究中,应该设计
一种结构良好的中间表示,这种中间表示应在适当的抽象层次上,向上能支持多语言
的映射,向下能适应多平台转换且易于进行各种优化
打开
MindIR
,它是一种基于图表示的函数式
IR
,定义了可扩展的图结构以及算子的
IR
表示,它存储了
MindSpore
基础数据结构,包括计算图、参数权重等。
当前典型使用异构并行计算的场景有:优化器异构、
Embedding
异构、
PS
异构
MindSpore
抽象各个硬件下的统一算子接口,因此,在不同硬件环境下,网络模型的
编程代码可以保持一致。同时加载相同的模型文件,在
MindSpore
支持的各个不同硬
件上均能有效执行推理。 推理考虑到大量用户使用
C++/C
编程方式,因此提供了
C++
的推理编程接口,相关编程接口在形态上与
Python
接口的风格较接近。
3rd Model Parsers: 将第三方模型转换为统一的
MindIR
,其中第三方模型包括
TensorFlow、
TensorFlow Lite
、
Caffe 1.0
和
ONNX
模型。
MindIR: MindSpore端云统一的
IR
。
Optimizer: 基于
IR
进行图优化,如算子融合、常量折叠等。
Quantizer: 训练后量化模块,支持权重量化、激活值量化等训练后量化手段。
benchmark: 测试性能以及调试精度的工具集。
Micro CodeGen: 针对
IoT
场景,将模型直接编译为可执行文件的工具。
Training/Inference APIs: 端云统一的
C++/Java
训练推理接口。
MindRT Lite: 轻量化的在线运行时,支持异步执行。
Delegate: 用于对接专业
AI
硬件引擎的代理。
Kernels: 内置的高性能算子库,提供
CPU
、
GPU
和
NPU
算子。
Learning Strategies: 端侧学习策略,如迁移学习。
https://www.mindspore.cn/mindinsight/docs/zh-CN/r1.7/index.html
主干网络: ResNet
和
MobileNet
等模型的基础主干网络。
工具:
丰富的可视化接口和
IO(
输入
/
输出
)
接口。
MindSpore Golden Stick
除了提供丰富的模型压缩算法外,一个重要的设计理念是针
对业界种类繁多的模型压缩算法,提供给用户一个尽可能统一且简洁的体验,降低用
户的算法应用成本。
云环境相较于本地环境提供了充足的算力和存储空间,是开发过程中一个较好的选择。
此次应用所使用的是开源数据集,所以不需要对数据集本身做太多处理。如果使用的
数据是收集的相关业务数据,还需要对数据做清洗和整理等操作。
mindspore.dataset.vision
:
此模块用于图像数据增强,包
括
c_transforms
和
py_transforms
两个子模块。
c_transforms
是使用
C++ OpenCv
开发的高性能图像增强模块。
py_transforms
是使用
Python Pillow
开发的图像增强
模块。
mindspore.dataset.text
:此模块用于文本数据增强,包括
transforms
和
utils
两个
子模块。
▫ transforms
是一个高性能文本数据增强模块,支持常见的文本数据增强处理。
▫ utils
提供了一些文本处理的工具方法。
mindspore.dataset.audio
:
此模块用于音频数据增强,包括
transforms
和
utils
两个
子模块。
transforms
是一个高性能音频数据增强模块,支持常见的音频数据增强操
作。
utils
提供了一些音频处理的工具方法。
在
MindSpore
中,自定义网络结构、损失函数等可以通过继承对应的父类来快速创建。
具体函数及类的使用请参看
MindSpore
文档:
https://www.mindspore.cn/docs/zh
CN/r1.7/index.html
。
MindSpore
中神经网络的基本构成单元为
nn.Cell
。模型或神经网络层应当继承该基类。
基类的成员函数
construct
是定义要执行的计算逻辑,所有继承类都必须重写此方法。
训练网络模型的过程中,实际上我们希望保存中间和最后的结果,用于微调(
fine
tune
)和后续的模型部署和推理。且当模型过于庞大时,需要边训练边保存。
第二种保存方式首先需要初始化一个
CheckpointConfig
类对象,用来设置保存策略。
▫ save_checkpoint_steps
表示每隔多少个
step
保存一次。
▫ keep_checkpoint_max
表示最多保留
CheckPoint
文件的数量。
▫ prefix
表示生成
CheckPoint
文件的前缀名。
▫ directory
表示存放文件的目录。
创建一个
ModelCheckpoint
对象把它传递给
model.train
方法,就可以在训练过程中使
用
CheckPoint
功能了。
由于移动端算力不足问题,需要考虑模型的大小和计算量。