张小白带你体验MindSpore 1.1的新特性: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
历时402秒左右。
再将其一键切换到 PyNative模式:python train.py(从下图可以看出:仅需将context.set_context中的mode从context.GRAPH_MODE改为PYNATIVE_MODE即可)
跑完之后,历时约618秒左右,是原来的1.5倍。。
PyNative模式的好处就是可以在construct增加调试,我们来试一下几种增加调试的方法:
第一种方法:直接在construct中增加print语句:
可以看到相关信息已经被打印到终端。
第二种方式:使用pdb方式调试:
在lenet.py一开始增加import pdb
在construct所需要的断点处增加 pdb.set_trace()
python -m pdb train.py
此时打印x
。。。
查看调用堆栈
可以return后continue执行到第二个断点。
按q退出
第三种方式:使用PyCharm的调试功能进行调试:
除了使用pdb调试断点之外,还可以直接使用pyCharm工具进行断点调试。具体方法如下:
确认python console是否是自己所需要的python版本
是否有对应的mindspore安装
在train.py的执行配置界面设置相关的参数
在construct代码中使用pycharm的断点
启动PyCharm的DEBUG调试模式。
也可以在展开或者view相关的信息
也可以继续执行或者中断执行
如果是graph模式是不会跑到construct中去的。
总结一下:
PyNative模式是在执行的过程中才建立计算图,不像Graph模式那样预先构建好了计算图。它的优点就是能让用户很方便地去调试神经网络。尽管原理上来说PyNative模式比Graph模式要慢一点,但是MindSpore的大大们也可以通过一些比如ms_function等功能,通过图优化等技术提高PyNative模式的运行速度。
(全文完,谢谢阅读)
- 点赞
- 收藏
- 关注作者
评论(0)