从架构讲解到实践指南,这是一份值得收藏的MindSpore上手教程

《轻松上手开源框架MindSpore》机器之心华为昇腾学院联合开设的系列公开课,于 4 月 23 日正式开课,共有超过 2000 名同学一起完成了 6 期课程的学习。我们在 3 周时间里,系统讲述了 MindSpore 的整体架构、自动并行与分布式部署特性、图引擎、端到端代码调用流程、容器化部署与运行、模型健壮性评估工具与可视化工具使用指南等内容。

为了帮助大家更好的完成后续学习,我们对本次系列课程的全部内容做了编辑与汇总,供大家参考。


全程回顾1:课程视频

第一课:MindSpore分布式自动并行训练

第一课介绍 MindSpore 整体架构、MindExpression 模块涉及的自动并行与分布式部署特性并通过demo实操演示MindSpore的auto-parallel特性。

第二课:MindSpore中GraphEngine浅析

第二课介绍昇腾芯片的特性、MindSpore 中 GraphEngine 如何适配昇腾做整图下沉以及 GraphEngine 提供的底层 debug 工具如何帮助开发者便捷使用。

第三课:MindSpore代码流程分析

第三课从源码角度来剖析 MindSpore 端到端的调用流程,同时以 CPU 算子开发为例展示 MindSpore 的算子开发流程。

第四课:k8s MindSpore Operator介绍

第四课介绍从无到有配置容器环境、学习编写自定义 K8s CRD 的方法、完成简单的任务 yaml 文件编写以及了解如何启动、监控维护任务 pod。

第五课:MindSpore模型健壮性评估工具

第五课介绍AI模型对抗样本攻击和防御原理、MindSpore模型健壮性评估工具和特性并通过一组demo介绍其使用方法。

第六课:MindSpore可视化工具使用指南

第六课介绍MindSpore可视化工具的主要功能与架构设计,并通过demo演示如何使用MindInsight进行训练信息追踪和调试。

大家在观看回放中如果遇到问题,可以关注 MindSpore 的 gitee 和 github,随时提 issue,官方人员将及时为大家解答:
  • Gitee:https://gitee.com/mindspore
  • GitHub:https://github.com/mindspore-ai

全程回顾2:精选问答

在课程直播后,我们设置了数个项目实践作业,小伙伴们在实践过程中和讲师在群里进行了大量讨论和交流,我们也为完成优秀的同学送出了书籍《深度学习与MindSpore实践》。 

 
 

在每期课程直播的 QA 环节中,有近 40 个问题被大家广泛提到,所以我们再次做了精选与汇总,供大家在观看视频回放与日常学习时参考。


第一课QA

Q:切分是平均切分吗? 如果是 5 个分四份会怎样?

首先就是在切分方式这里,其实是有并行切分的约束的,比如说它的维度的数据和计算资源其实是需要均匀切分,是以 2 为基,也就是说指定的切分策略中的数字必须都是 2 的倍数。另外像刚刚提到的,如果无法均分的问题,其实在框架中我们是会做校验的,如果是出现了没有办法均分的张量排布模型,我们会在校验中直接报错。
Q:需要什么硬件支持呢?自己的笔记本电脑是否可以来执行网络?
目前来说的话笔记本电脑或者有 GPU 的环境都可以通过 docker 镜像来简单试用,至于自动并行的特性,对 CPU 和 GPU 的支持还在完善中。我们推荐用户在昇腾芯片上使用自动并行,作为普通用户的话,可以关注我们的开源社区,可以去申请 MindSpore 开发者体验环境进行试用。
Q:效率具体上有多大提升?有对照数据吗
在开源社区我们公布了 Cifar10 数据集的训练性能数据。对于自动并行特性的话,和业界横向对比的数据还在测试收集中,目前公布的性能数据,是基于 mindspore+昇腾芯片,和其他的并行模式做的比较。从刚刚展示的表格中其实可以看到,自动并行在大分类数的情况下相比数据并行模式性能有比较大的提升。
Q:讲一下 pipeline 并行?
在我们的框架规划图上是可以看到是有提到 pipeline 并行这个概念的,是自动并行特性其中的一个规划方向。pipeline 并行,也就是我们刚刚提到的层间模型并行的概念,需要把模型按层切分到多个卡上,如果让用户手动实现对开发者来说难度非常大,需要考虑性能、内存、通信、训练效果等问题,我们期望通过框架完成模型按层自动切分到卡上的目标。
Q:请问数据并行是 allreduce 实现吗?
数据并行,在 MindSpore 中是用集合通信这个方式来实现的。利用到了 AllReduce 操作完成的梯度聚合部分,BroadCast 完成的是参数初始化的广播操作。

第二课QA
Q:循环下沉是什么?
循环下沉是在on-device执行的基础上更进一步的一个技巧,意图进一步建校host侧和device侧之间的交互次数。一般情况下,我们习惯于每个step都返回一个结果,循环下沉是控制每隔多少个step返回一次结果,缺省的配置是一个epoch返回一次结果,这样每个epoch里,host侧和device侧只需要进行一次数据交互即可。
Q:FusionOP是定义在device上么?
FusionOP对应的具体算子是有其算子实现的,存储在算子信息库中,融合出fusionOP的过程是在host侧的CPU上完成,运行此FusionOP是在device上。
Q:profiling只能在昇腾上用吗?
只能在升腾上使用。 
Q:profiling有op的开始时间吗?
profiling是记录下op开始和结束的时间,以此计算算子耗时。
Q:数据dump是能dump出来什么数据?
通过配置可以dump出任何存在在网络中的数据,每一个算子的输入输出,每一个parameter的值和梯度都可以被dump下来。

Q:算子在不同的加速器上的调度策略什么?
在图准备阶段会根据代价函数进行算子引擎分配,在流分配阶段也会充分考虑不同算子之间的并行计算可能,具体指定每个算子的执行引擎。
Q:GE是mindspore中和硬件交互的?
是的,GE专门负责和Ascend芯片交互。
Q:310不能做训练么?
310只能做推理,MindSpore训练好后的模型,将其固化为pb格式后,可以部署到310芯片上进行推理。
Q:如何自定义升腾芯片支持的op呢?
提供了Tensor Boost Engine这个工具来支持自定义op。Ascend芯片的算子需要用一种cce格式的代码编写,需要显式指定内存搬运操作,极为复杂,使用tbe工具,只需调用其python接口完成算子逻辑定义,即可生成可运行在Ascend上的自定义算子。

第三课QA
Q:怎么导出 Atlas200dk 可用模型?
我理解 Atlas200dk 如果是用昇腾 310 芯片的话,当我们选择 GEIR 格式做模型导出的时候,系统会导出支持昇腾 310 推理的模型,这种情况就能满足这位同学提到的导出 Atlas 200dk 可用模型的要求。
Q:MindSpore 什么时候支持 win10?
很高兴地向大家宣布,MindSpore CPU 版本当前已经支持在 win10 系统中安装。我本地的环境就是 win10 系统,上面安装了 MindSpore;如果大家想了解 MindSpore CPU 版本在 win10 系统上的具体安装步骤,可以查阅 MindSpore 官网教程(https://www.mindspore.cn/tutorial/zh-CN/master/advanced_use/mindspore_cpu_win_install.html)进行尝试。
Q:使用 MS 建立训练模型代码能有多简单?
除去网络的定义,MindSpore 提供了 Model 类的接口,大多数场景只需几行代码就可完成模型训练。当然我没有尝试过使用 TF 或 PyTorch 最简单用几行实现模型的训练,但我在开始接触 MindSpore 的时候感觉已经很简单了。
Q:ModelArts 中能使用 MS?
大家可以查阅 MindSpore 官网教程(https://www.mindspore.cn/tutorial/zh-CN/master/advanced_use/use_on_the_cloud.html),教程中详细展示了用户如何使用 ModelArts 来做 MindSpore 的模型训练。
Q:ModelArts 中能编译测试 CPU 算子?
当前 ModelArts 只提供了 Ascend910 环境,因而不支持 CPU 算子的编译测试。
Q:MindSpore 对 GPU 的支持怎么样了?有具体的 Roadmap 吗?
当前 MindSpore modelzoo 中有部分模型已经支持 GPU 的训练和推理,其他模型也在不断地进行完善;在分布式并行训练方面,MindSpore 当前支持 GPU 多卡的训练。至于具体的 Roadmap, 大家可以访问 MindSpore 官网(https://www.mindspore.cn/docs/zh-CN/master/roadmap.html)和项目 Release notes(https://gitee.com/mindspore/mindspore/blob/master/RELEASE.md)进行查阅。

第四课QA
Q:和 docker 类似吗?
Docker 是一个容器应用引擎,开发者可以打包他们的应用及依赖到一个容器之中进行发布;Kubernetes 是一个开源的容器集群管理系统,可以实现容器集群的自动化部署、扩容和维护等功能。
其实 Kubernetes 整体上来说它是属于容器编排的软件,Docker 其实自己也有自带的容器编排系统,叫 Swarm,或者其他的一些管理系统比如 Mesos,但是因为 Kubernetes 整体的生态非常成功,所以在开源容器编排系统里面,Kubernetes 几乎成为了一个事实标准。
Q:新版本可以体验了吗?有哪些更新?
MindSpore 新版本是 4 月 30 号发布 0.2.0-alpha 版本,当天就能够上线了,大家可以在官网或者我们的公众号上来查看我们的新闻或者 release note。我们的介绍短视频也同步更新到 B 站、抖音的官方账号。

第五课QA
Q:为什么要用sign函数?

Q:增加防御算法后精度会降低?

不一定。防御算法用了对抗训练的方式,生成对抗样本加入原始数据集中,一起训练模型,得到的模型参数和单纯用原始数据集的模型参数是有一点差异,这个差异,可能使得在测试集上的精度发生变化,可能减少,也可能增加。

Q:增加防御算法对训练时间的影响?

用不用对抗训练的差别是,对抗训练在正常的模型训练过程中增加了生成对抗样本的步骤,所以训练时增加的计算开销在于生成对抗样本,用不同的攻击算法,时间开销不同,如果用FGSM这种简单的攻击算法,增加的时间是很少的,如果用CW这种比较强的攻击方法,时间开销就会大一些。具体选用哪种攻击算法,需要用户根据自己的需求,综合时间开销和安全性需求,选择一个合适的攻击算法。

Q:增加对抗训练过程,对推理时间会造成什么影响?

对推理没有影响,模型训练完了之后,跟正常的模型是一样的,所以推理时间和原来的模型推理时间是一样的。 

Q:对抗训练时使用的对抗样本和防御后测试时使用的对抗样本一样吗?

不一样。训练、测试时用的对抗样本生成方法可以一样,也可以不一样。 

Q:与cleverhans有什么区别?

MindArmour和Cleverhans的出发点是一致,都是要做模型的对抗样本安全的研究。从提供的特性来讲,MindArmour做的更全面一些,包括了对抗样本的生成、检测、模型的防御、对抗攻防的评估模块,还有通过fuzzing方式对模型进行鲁棒性测试的模块。

第六课QA

Q:momentum 是 SGD?

momentum 是 SGD 的优化方法,主要思想是引入一个积攒历史梯度的信息动量,来加速 SGD。我认为它主要解决了 SGD 的两个问题,一个是随机梯度的方法引入的噪声,另一个是 SGD 在收敛过程中,和我们想要的梯度相比,会有比较大的摆动。

当前 mindspore 提供既提供了 SGD,又提供了 momentum

Q:和 TensorBoard 有什么区别?

我认为主要的区别有以下几点:

从设计思路上来说,TensorBoard 主要以插件化的形式来进行构建,它的好处是开发比较方便,功能解耦比较清楚。开发一个新功能,可以很快在 TensorBoard 添加一个新的页签。但是我认为这种模式存在的缺点是不停的添加单个的功能,缺乏总体的使用引导,指导用户怎样去一步一步调网络。MindInsight 在设计上是希望给用户提供网络调试和调优的方法论,可以看到 MindInsight 的入口是从训练列表开始的,点击某个训练后,希望给用户很清晰的指引:在调试调优的某个阶段遇到某个问题时,应该使用哪个功能。

从组件上来说,我认为 MindInsight 现在有一些特色功能是 TensorBoard 不具备的,比如说像溯源,数据图的展示等等。当然 MindInsight 现在还在比较快速的构建和开发中,会陆续上线很多新的组件。

从生态上来说,TensorBoard 和 Tensorflow 目前主要是服务于 GPU/TPU 的,MindInsight 和 MindSpore 则需要适配 Ascend 芯片。芯片的不同会导致在功能上的差异,比如 Profiling,MindInsight 需要考虑数据下沉等训练场景的性能展示。

Q:mindspore 支持动态图吗?

MindSpore 目前是支持动态图的,我们称这种执行模式叫 Pynative,怎样使用动态图模式进行训练和调试可以参考第三讲的内容。MindInsight 后续会 release Debugger 组件,我们可以使用 Pynative 模式调试脚本,图模式执行时如果出现异常可以使用 MindInsight 的 Debugger 调试。

Q:数据溯源那里说明所有训练都是同样的数据吗?

在刚才的讲解视频中,我们看到的数据溯源显示的是一条直线,说明训练任务都使用了相同的数据 pipeline 流程。如果用户发现可能是因为某个数据增强操作导致训练异常,改变了数据增强操作,两次训练的差别就会体现在数据溯源中。

Q:目前还有其他 profile 方式吗?

目前在 Ascend 芯片训练或者推理,可以使用 run 包中的组件进行 profile,但是使用起来会需要一些配置项,结果解析需要依靠脚本完成。MindInsight 会首先基于 Ascend 芯片提供易用的 profile 能力和结果展示,然后逐步把能力迁移到 GPU 和 CPU。

Q:nvprof 可以配合 mindspore 吗?

我个人没有尝试过,但是从原理推断应该是可以的;如果有感兴趣的同学可以进行尝试,我们可以在群组讨论。

Q:训练中间层可视化?

如果中间层可视化是指的是计算图的中间层信息,可以使用 MindInsight 中的计算图可视组件进行查看。可以点开计算图,找到感兴趣的层,查看节点的名称、type 等信息;

如果中间层可视化指的是中间层权重的变化趋势,可以使用 HistogramSummary 算子进行记录,并使用 MindInsight 参数分布图功能查看;

如果中间层可视化指训练时想看到中间层的计算结果,pynative 模式可以配合 pdb 等在算子执行返回时直接查看,图模式可以依赖 MindInsight 后续 release 的 Debugger 进行查看。Debugger 可以在某个 step 执行完成后暂停训练,用户可以在计算图上找到感兴趣的中间层,点击节点查看对应的算子输出。

Q:mindinsight 目前可以在云上用吗?

MindInsight 作为一个 python package,天然支持在云上使用;我们后续会提供云上场景的官方支持和说明。

Q:minsight 可以输出优化后的图吗?

是可以的,summary 文件中记录的计算图是 MindSpore 前端优化后的图,如果想查看更多阶段的图,可以在 context 中打开 save_graphs 开关,这样可以得到一些不同优化阶段的计算图文件(后缀名为.pb),可以在 MindInsight 中将这些计算图可视化。

Q:将来能给个加载 GE 图的例子吗?

目前加载 GE 图 (ge_ir.proto) 的功能还处在试用阶段,功能成熟后我们会考虑开源,届时会给出对应的文档。

全程回顾3:课程PPT

限于文章篇幅,本次课程的全部 PPT 请大家关注公众号「MindSpore」,回复关键词「PPT」,即可一次性下载。


工程教程深度学习框架MindSpore华为
1
相关数据
华为机构

华为创立于1987年,是全球领先的ICT(信息与通信)基础设施和智能终端提供商,致力于把数字世界带入每个人、每个家庭、每个组织,构建万物互联的智能世界。目前华为有19.4万员工,业务遍及170多个国家和地区,服务30多亿人口。

https://www.huawei.com/cn/
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

权重技术

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。

调度技术

调度在计算机中是分配工作所需资源的方法。资源可以指虚拟的计算资源,如线程、进程或数据流;也可以指硬件资源,如处理器、网络连接或扩展卡。 进行调度工作的程序叫做调度器。调度器通常的实现使得所有计算资源都处于忙碌状态,允许多位用户有效地同时共享系统资源,或达到指定的服务质量。 see planning for more details

TensorBoard技术

一个信息中心,用于显示在执行一个或多个 TensorFlow 程序期间保存的摘要信息。

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

收敛技术

在数学,计算机科学和逻辑学中,收敛指的是不同的变换序列在有限的时间内达到一个结论(变换终止),并且得出的结论是独立于达到它的路径(他们是融合的)。 通俗来说,收敛通常是指在训练期间达到的一种状态,即经过一定次数的迭代之后,训练损失和验证损失在每次迭代中的变化都非常小或根本没有变化。也就是说,如果采用当前数据进行额外的训练将无法改进模型,模型即达到收敛状态。在深度学习中,损失值有时会在最终下降之前的多次迭代中保持不变或几乎保持不变,暂时形成收敛的假象。

规划技术

人工智能领域的「规划」通常是指智能体执行的任务/动作的自动规划和调度,其目的是进行资源的优化。常见的规划方法包括经典规划(Classical Planning)、分层任务网络(HTN)和 logistics 规划。

张量技术

张量是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数,这些线性关系的基本例子有内积、外积、线性映射以及笛卡儿积。其坐标在 维空间内,有 个分量的一种量,其中每个分量都是坐标的函数,而在坐标变换时,这些分量也依照某些规则作线性变换。称为该张量的秩或阶(与矩阵的秩和阶均无关系)。 在数学里,张量是一种几何实体,或者说广义上的“数量”。张量概念包括标量、矢量和线性算子。张量可以用坐标系统来表达,记作标量的数组,但它是定义为“不依赖于参照系的选择的”。张量在物理和工程学中很重要。例如在扩散张量成像中,表达器官对于水的在各个方向的微分透性的张量可以用来产生大脑的扫描图。工程上最重要的例子可能就是应力张量和应变张量了,它们都是二阶张量,对于一般线性材料他们之间的关系由一个四阶弹性张量来决定。

逻辑技术

人工智能领域用逻辑来理解智能推理问题;它可以提供用于分析编程语言的技术,也可用作分析、表征知识或编程的工具。目前人们常用的逻辑分支有命题逻辑(Propositional Logic )以及一阶逻辑(FOL)等谓词逻辑。

对抗训练技术

对抗训练涉及两个模型的联合训练:一个模型是生成器,学习生成假样本,目标是骗过另一个模型;这另一个模型是判别器,通过对比真实数据学习判别生成器生成样本的真伪,目标是不要被骗。一般而言,两者的目标函数是相反的。

对抗样本技术

对抗样本是一类被设计来混淆机器学习器的样本,它们看上去与真实样本的几乎相同(无法用肉眼分辨),但其中噪声的加入却会导致机器学习模型做出错误的分类判断。

动量技术

优化器的一种,是模拟物理里动量的概念,其在相关方向可以加速SGD,抑制振荡,从而加快收敛

机器之心机构

机器之心,成立于2014年,是国内最具影响力、最专业、唯一用于国际品牌的人工智能信息服务与产业服务平台。目前机器之心已经建立起涵盖媒体、数据、活动、研究及咨询、线下物理空间于一体的业务体系,为各类人工智能从业者提供综合信息服务和产业服务。

https://www.jiqizhixin.com/
生成对抗技术

生成对抗是训练生成对抗网络时,两个神经网络相互博弈的过程。两个网络相互对抗、不断调整参数,最终目的是使判别网络无法判断生成网络的输出结果是否真实。

找到机构
推荐文章
暂无评论
暂无评论~