目录
MindSpore教程文档:MindSpore。
MindSpore代码:GitHub - mindspore-ai/mindspore和mindspore - gitee。
昇腾论坛:昇腾论坛 (hiascend.com)。
昇思MindSpore
一个全场景深度学习框架。
易开发:API友好、调试难度低
高效执行:计算效率、数据预处理效率和分布式训练效率
全场景:同时支持云、边缘以及端侧场景
总体架构如图所示:
各模块之间的配合关系如图所示,其中端云统一IR定义了网络的逻辑结构和算子的属性,将MindIR格式的模型文件与硬件平台解耦,实现一次训练多次部署,通过IR把模型导出到不同的模块执行推理。
特点
-
提供Python编程范式,简化AI编程。
-
提供动态图和静态图统一的编码方式,静态图模式训练性能较高,但难以调试。动态图模式相较于静态图模式虽然易于调试,但难以高效执行。昇思MindSpore增加了静态图和动态图的可兼容性,无需开发多套代码,仅变更一行代码便可切换动态图/静态图模式。
动态图模式:设置
set_context(mode=PYNATIVE_MODE)
。静态图模式:设置
set_context(mode=GRAPH_MODE)
。 -
采用AI和科学计算融合编程,使用户聚焦于模型算法的数学原生表达。
在支持AI模型训练推理编程的基础上,扩展支持灵活自动微分编程能力,支持对函数、控制流表达情况下的微分求导和各种如正向微分、高阶微分等高级微分能力的支持,用户可基于此实现科学计算常用的微分函数编程表达,从而支持AI和科学计算融合编程开发。
-
分布式训练原生。MindSpore统一了单机和分布式训练的编码方式,开发者无需编写复杂的分布式策略,在单机代码中添加少量代码即可实现分布式训练。
设置
set_auto_parallel_context(parallel_mode=ParallelMode.AUTO_PARALLEL)
即可自动建立代价模型,为用户选择一种较优的并行模式。
层次结构
昇思MindSpore向用户提供了3个不同层次的API,如图所示。高阶API提供了更好的封装性,低阶API提供更好的灵活性,中阶API兼顾灵活及封装,满足不同领域和层次的开发者需求。
-
High-Level Python API
第一层为高阶API,在中阶API上又提供了训练推理的管理、混合精度训练、调试调优等高级接口,方便用户控制整网的执行流程和实现神经网络的训练推理及调优。例如用户使用Model接口,指定要训练的神经网络模型和相关的训练设置,对神经网络模型进行训练。
-
Medium-Level Python API
第二层为中阶API,其封装了低阶API,提供网络层、优化器、损失函数等模块,用户可通过中阶API灵活构建神经网络和控制执行流程,快速实现模型算法逻辑。例如用户可调用Cell接口构建神经网络模型和计算逻辑,通过使用Loss模块和Optimizer接口为神经网络模型添加损失函数和优化方式,利用Dataset模块对数据进行处理以供模型的训练和推导使用。
-
Low-Level Python API
第三层为低阶API,主要包括张量定义、基础算子、自动微分等模块,用户可使用低阶API轻松实现张量定义和求导计算。例如用户可通过Tensor接口自定义张量,使用grad接口计算函数在指定处的导数。
华为昇腾AI全栈介绍
昇腾AI全栈如下图所示:
每个模块的作用:
-
昇腾应用使能:华为各大产品线基于MindSpore提供的AI平台或服务能力
-
MindSpore:支持端、边、云独立的和协同的统一训练和推理框架
-
CANN:昇腾芯片使能、驱动层。
-
计算资源:昇腾系列化IP、芯片和服务器
快速入门
一个简单的代码实现,使用Mnist数据集,识别预测手写数字。
使用mindspore.dataset
中的数据变换进行预处理。使用map对图像数据及标签进行变换处理,将输入的图像缩放为1/255,根据均值0.1307和标准差值0.3081进行归一化处理,然后将处理好的数据集打包为大小为64的batch,最后,用 create_tuple_iterator 或create_dict_iterator 数据集迭代器访问。
网络构建。用户自定义网络时,继承nn.Cell
类并重写__init__
方法和construct
方法即可。其中__init__
包含所有网络层的定义,construct
中包含数据的变换过程。
模型训练。先初始化损失函数和优化器,然后定义正向计算函数,使用value_and_grad获得梯度函数,定义训练函数,使用set_train设置为训练模式,执行正向计算、反向传播和参数优化。同时,定义测试函数,获得模型的评估结果。
最后,用mindspore.save_checkpoint
保存模型参数,用于模型预测推理。
预测推理结果如图所示。