张小白带你体验MindSpore 1.1的新特性:PyNative模式

举报
张辉 发表于 2021/02/07 23:18:49 2021/02/07
【摘要】 本文介绍了MindSpore的新特性——PyNative模式。

注:本文是 https://bbs.huaweicloud.cn/forum/thread-104880-1-1.html 的整理版本。

为时两天的《1.23-1.24 | MindSpore第五期两日集训营》讲了不少关于MindSpore 1.1版本的新特性,张小白在MindSpore论坛做了一些野蛮操作,有成功的,也有失败的,其中关于MindSpore Lite 1.1的安装,已经分Windows源码安装( https://bbs.huaweicloud.cn/blogs/239829  )、Ubuntu源码安装( https://bbs.huaweicloud.cn/blogs/239830  )的2篇文字发出。而关于MindSpore 1.1.1,张小白也发了一篇Ubuntu docker安装的文字( https://bbs.huaweicloud.cn/blogs/241465  )。

现在集训营的作业也陆陆续续做得差不多了。张小白就分几个主题将剩下的文字发出吧。。

阅读本文的基础:

首先要对MindSpore和LENET网络等有个初步的认识,如果不了解的话,可参看张小白写的入门博客:

张小白带你快速体验MindSpore V1.0(For ubuntu 18.04)https://bbs.huaweicloud.cn/blogs/198324 

PyNative的讲解视频:https://www.bilibili.com/video/BV1Bv411s7aX 

PyNative模式简介:

PyNative模式是动态图模式,它与Graph模式的不同之处在于是在执行过程中建立计算图,而不是在执行前就做好。这种模式有助于调试神经网络模型。

Mindspore提供了对 PyNative模式与Graph模式一键切换的方式,非常方便。在下面的介绍中,大家应该能感受到这种方便。。

开发者可以通过在construct方法中打断点,查看调试信息。


实操过程:

在安装了MindSpore 1.1.0或者1.1.1 for Windows之后(具体安装方法可以参见 姐夫丁大大的论坛文字: https://bbs.huaweicloud.cn/forum/forum.php?mod=viewthread&tid=80567  张小白在姐夫的帖子后面有贴出具体的PyCharm的体验过程。。 ), 大家可以参照前面提到的 张小白带你快速体验MindSpore V1.0(For ubuntu 18.04) 博客的内容,依葫芦画瓢,使用PyCharm在Windows上完成LENET的训练。

具体做法如下:

首先我们使用graph_mode的传统模式跑完LENET训练:python train.py

image.png

历时402秒左右。

再将其一键切换到 PyNative模式:python train.py(从下图可以看出:仅需将context.set_context中的mode从context.GRAPH_MODE改为PYNATIVE_MODE即可)

image.png

image.png

跑完之后,历时约618秒左右,是原来的1.5倍。。

PyNative模式的好处就是可以在construct增加调试,我们来试一下几种增加调试的方法:

第一种方法:直接在construct中增加print语句:

image.png

可以看到相关信息已经被打印到终端。

第二种方式:使用pdb方式调试:

在lenet.py一开始增加import pdb

在construct所需要的断点处增加 pdb.set_trace()

python -m pdb train.py

image.png

此时打印x

image.png

。。。

image.png

查看调用堆栈

image.png

可以return后continue执行到第二个断点。

image.png

按q退出

image.png

第三种方式:使用PyCharm的调试功能进行调试:

除了使用pdb调试断点之外,还可以直接使用pyCharm工具进行断点调试。具体方法如下:

确认python console是否是自己所需要的python版本

image.png

是否有对应的mindspore安装

image.png

在train.py的执行配置界面设置相关的参数

image.png

在construct代码中使用pycharm的断点

image.png

启动PyCharm的DEBUG调试模式。

image.png

也可以在展开或者view相关的信息

image.png

也可以继续执行或者中断执行

image.png

如果是graph模式是不会跑到construct中去的。

总结一下:

PyNative模式是在执行的过程中才建立计算图,不像Graph模式那样预先构建好了计算图。它的优点就是能让用户很方便地去调试神经网络。尽管原理上来说PyNative模式比Graph模式要慢一点,但是MindSpore的大大们也可以通过一些比如ms_function等功能,通过图优化等技术提高PyNative模式的运行速度。

(全文完,谢谢阅读)

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。