建议使用以下浏览器,以获得最佳体验。 IE 9.0+以上版本 Chrome 31+ 谷歌浏览器 Firefox 30+ 火狐浏览器
请选择 进入手机版 | 继续访问电脑版
设置昵称

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

确定
我再想想
选择版块
标签
您还可以添加5个标签
  • 没有搜索到和“关键字”相关的标签
  • 云产品
  • 解决方案
  • 技术领域
  • 通用技术
  • 平台功能
取消

Gogery

发帖: 9粉丝: 0

发消息 + 关注

更新于2021年02月22日 23:14:24 97 3
直达本楼层的链接
楼主
显示全部楼层
[问题求助] 【mindspore】【模式】PYNATIVE_MODE模式和GRAPH模式的区别

问题如下:

1、两个模式下不同算子或者不同模型实现精度和速度会有不同的影响吗?

2、不同的算子会不会存在通兼容的情况?

3、两个模型分别在什么情况下使用比较好?各有什么优势?

4、两种模式在不同硬件资源上的实现会有差别吗?(ascend、gpu和cpu)

5、两种模式实质性的区别,简单说一下PYNATIVE_MODE模式下可以执行什么操作方便调试,而在GRAPH模式下则无法进行。


已学习下面链接:

https://www.mindspore.cn/doc/programming_guide/zh-CN/r1.0/context.html

https://www.mindspore.cn/doc/api_python/zh-CN/r1.1/mindspore/mindspore.context.html




举报
分享

分享文章到朋友圈

分享文章到微博

chengxiaoli

发帖: 131粉丝: 24

发消息 + 关注

发表于2021年02月22日 23:27:50
直达本楼层的链接
沙发
显示全部楼层

您好,欢迎您的提问。

MindSpore支持两种运行模式,在调试或者运行方面做了不同的优化:

  • PyNative模式:也称动态图模式,将神经网络中的各个算子逐一下发执行,方便用户编写和调试神经网络模型。

  • Graph模式:也称静态图模式或者图模式,将神经网络模型编译成一整张图,然后下发执行。该模式利用图优化等技术提高运行性能,同时有助于规模部署和跨平台运行。

默认情况下,MindSpore处于PyNative模式,可以通过context.set_context(mode=context.GRAPH_MODE)切换为Graph模式;同样地,MindSpore处于Graph模式时,可以通过 context.set_context(mode=context.PYNATIVE_MODE)切换为PyNative模式。

Pynative模式的具体介绍可参考:https://www.mindspore.cn/tutorial/training/zh-CN/r1.1/advanced_use/debug_in_pynative_mode.html

其它疑问我们会尽快确定给您回复。

评论
Gogery 2021-2-22 23:38 评论

这些文件我都已经学习过,了解过了,您是否可以参考我的问题深入回答一下,谢谢您了

... 查看全部
Gogery 2021-2-22 23:39 评论

抱歉,你这个链接还是学到一些知识的,最好是可以在深入讲解一下我的问题,可以不确定,希望大致说一下。

... 查看全部
点赞 评论 引用 举报

AI_学习者

发帖: 11粉丝: 1

发消息 + 关注

更新于2021年02月23日 10:26:47
直达本楼层的链接
板凳
显示全部楼层

大致概括一下:

  1. 精度是一样的,但执行速度不同;图模式速度高于pynative模式,在某些模型下,可能会相差10倍甚至更多

  2. 第二个问题没看明白

  3. pynative通常编写模型、开始调试的时候使用;图模式在编写好模型后部署运行的时候使用

  4. 底层的实现肯定是有差别的;就图模式来说,是会先将construct里面的代码编译成计算图,然后执行,并不是python解析器来执行的,编译的时候也会对代码做各种判断检测;但是表现出来的逻辑和功能应该是相同的;如果你发现某个算子在两种模式下的功能逻辑有明显的不同,且影响你正常使用了,那应该算作是框架的bug,可以提issue;还有,cpu版本,目前不支持pynative模式

  5. 区别在于,pynative模式方便调试,支持python语法,比如在construct可以使用numpy代替某些功能等等,可以使用print语句打印你想要的信息,这样也就方便调试了,但该模式运行速度较慢;图模式速度快,但只支持部分python语法,目前无法使用三方库,图模式支持的python语法可以从官网的“静态图语法支持”条目中查看

评论
Gogery 7 天前 评论

非常感谢,非常详细了,学到好多,有一个问题是: 如果选择p~模式在模型中有print语句,在训练的时候会不会报错呢?我使用的G~模式如果模型中使用print语句则训练会报错的,比必须将相应的print语句删除。

... 查看全部
AI_学习者 7 天前 评论

评论 Gogery:pynative模式可以print,不会报错;图模式不能print,但如果只是写print,记得是没效果不打印,也不报错,比如print('hello'),这个不会报错,只是没用,但如果print(str(1)+'hello')这种,print里面有了其它操作,图模式就会报错了

... 查看全部
Gogery 5 天前 评论

反复阅读,受教了

... 查看全部
点赞 评论 引用 举报

李响

发帖: 7粉丝: 0

发消息 + 关注

发表于2021年02月23日 10:55:42
直达本楼层的链接
地板
显示全部楼层

1、两个模式下不同算子或者不同模型实现精度和速度会有不同的影响吗?
答:两个模式使用的算子是一致的,因此相同的网络,相同的算子,分别在两个模式下执行,精度效果是一致的。由于执行机理的差异,网络的执行性能是会不同的。
2、不同的算子会不会存在通兼容的情况?
答:理论上,MindSpore提供的算子同时支持pynative模式和graph模式。
3、两个模型分别在什么情况下使用比较好?各有什么优势?
答:静态图需要一开始就构建好网络结构,然后框架做整图优化和执行,对于网络固定没有变化,且需要高性能的场景比较适合。
4、两种模式在不同硬件资源上的实现会有差别吗?(ascend、gpu和cpu)
答:原理上是一致的,和硬件无关,每种硬件都有两者模式。
5、两种模式实质性的区别,简单说一下PYNATIVE_MODE模式下可以执行什么操作方便调试,而在GRAPH模式下则无法进行。
答:同3的回答,由于是逐行执行算子,因此用户可以直接调试python代码,在代码中任意位置打断点查看对应算子/api的输出或执行结果。而graph模式由于在构造函数里只是完成网络构造,实际没有执行,因此在construct函数里打断点是无法获取对应算子的输出,而只能等整网执行中指定对应算子的输出打印,在网络执行完成后进行查看。

评论
Gogery 7 天前 评论

谢谢你的回复,学习了

... 查看全部
点赞1 评论 引用 举报

游客

富文本
Markdown
您需要登录后才可以回帖 登录 | 立即注册