《轻松上手开源框架MindSpore》是机器之心与华为昇腾学院联合开设的系列公开课,于 4 月 23 日正式开课,共有超过 2000 名同学一起完成了 6 期课程的学习。我们在 3 周时间里,系统讲述了 MindSpore 的整体架构、自动并行与分布式部署特性、图引擎、端到端代码调用流程、容器化部署与运行、模型健壮性评估工具与可视化工具使用指南等内容。
为了帮助大家更好的完成后续学习,我们对本次系列课程的全部内容做了编辑与汇总,供大家参考。
全程回顾1:课程视频
第一课介绍 MindSpore 整体架构、MindExpression 模块涉及的自动并行与分布式部署特性并通过demo实操演示MindSpore的auto-parallel特性。
第二课介绍昇腾芯片的特性、MindSpore 中 GraphEngine 如何适配昇腾做整图下沉以及 GraphEngine 提供的底层 debug 工具如何帮助开发者便捷使用。
第三课从源码角度来剖析 MindSpore 端到端的调用流程,同时以 CPU 算子开发为例展示 MindSpore 的算子开发流程。
第四课介绍从无到有配置容器环境、学习编写自定义 K8s CRD 的方法、完成简单的任务 yaml 文件编写以及了解如何启动、监控维护任务 pod。
第五课介绍AI模型对抗样本攻击和防御原理、MindSpore模型健壮性评估工具和特性并通过一组demo介绍其使用方法。
第六课介绍MindSpore可视化工具的主要功能与架构设计,并通过demo演示如何使用MindInsight进行训练信息追踪和调试。
GitHub:https://github.com/mindspore-ai
全程回顾2:精选问答
在课程直播后,我们设置了数个项目实践作业,小伙伴们在实践过程中和讲师在群里进行了大量讨论和交流,我们也为完成优秀的同学送出了书籍《深度学习与MindSpore实践》。
在每期课程直播的 QA 环节中,有近 40 个问题被大家广泛提到,所以我们再次做了精选与汇总,供大家在观看视频回放与日常学习时参考。
Q:切分是平均切分吗? 如果是 5 个分四份会怎样?
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」,即可一次性下载。