当使用MindSpore进行深度学习任务时,可以选择使用动态图模式(PyNative模式)或静态图模式(Graph模式)。
-
动态图模式(PyNative模式):
- 适合脚本开发和网络调试,以及需要实时获取中间结果的值进行调试或可视化。
- 可以使用Python编写网络模型,自由度较高。
- 每个操作都是立即执行的,可以方便地进行调试和错误排查。
- 无需显式编译,代码动态执行。
-
静态图模式(Graph模式):
- 通过图优化和整图下沉等技术,可以获得较好的性能,适合网络固定且需要高性能的场景。
- 静态图模式将整个计算图编译并优化后再执行,提高了执行效率。
- 可以使用静态图编译器对计算图进行优化,减少运行时开销。
- 适合模型训练和推理,特别是对于需要频繁执行的任务。
静态图模式的开启方式有两种:
-
基于装饰器的方式:
import mindspore.common.dtype as mstype from mindspore.common.tensor import Tensor from mindspore import context @context.compile_mode(0) def func(x, y): z = x + y return z x = Tensor(1, mstype.int32) y = Tensor(2, mstype.int32) output = func(x, y)
-
基于全局context的方式:
import mindspore.context as context import mindspore.ops.operations as P from mindspore import Tensor context.set_context(mode=context.GRAPH_MODE, device_target="CPU") x = Tensor(1, dtype=mindspore.float32) y = Tensor(2, dtype=mindspore.float32) add = P.Add() output = add(x, y)
在使用静态图模式时,需要注意以下细节:
- 静态图模式有一定的语法约束,MindSpore的静态图编译器支持Python的常用语法子集,不支持所有Python语法。
- 可以使用
JitConfig
配置选项来自定义编译流程,包括优化等级、模型执行方式和静态图语法支持级别。 - 静态图模式支持更多的优化和部署选项,例如自动混合精度、自动并行等。
- 使用静态图高级编程技巧可以提高编译效率和执行效率,如使用
@ms_function
装饰器、使用make_tuple
等。