From ea454fec11c938ba3f7608697a443e40868a7fdd Mon Sep 17 00:00:00 2001 From: huanxiaoling <3174348550@qq.com> Date: Tue, 6 Dec 2022 18:51:27 +0800 Subject: [PATCH] update the en file --- tutorials/source_en/advanced/compute_graph.md | 177 +++++++++++ .../source_en/advanced/compute_graph.rst | 8 - .../advanced/compute_graph/combine.md | 299 ------------------ .../compute_graph/images/framework1.png | Bin 27920 -> 0 bytes .../compute_graph/images/framework2.png | Bin 25348 -> 0 bytes .../advanced/compute_graph/images/jit.png | Bin 72774 -> 0 bytes .../source_en/advanced/compute_graph/mode.md | 274 ---------------- .../source_zh_cn/advanced/compute_graph.ipynb | 2 +- 8 files changed, 178 insertions(+), 582 deletions(-) create mode 100644 tutorials/source_en/advanced/compute_graph.md delete mode 100644 tutorials/source_en/advanced/compute_graph.rst delete mode 100644 tutorials/source_en/advanced/compute_graph/combine.md delete mode 100644 tutorials/source_en/advanced/compute_graph/images/framework1.png delete mode 100644 tutorials/source_en/advanced/compute_graph/images/framework2.png delete mode 100644 tutorials/source_en/advanced/compute_graph/images/jit.png delete mode 100644 tutorials/source_en/advanced/compute_graph/mode.md diff --git a/tutorials/source_en/advanced/compute_graph.md b/tutorials/source_en/advanced/compute_graph.md new file mode 100644 index 0000000000..06d16ab624 --- /dev/null +++ b/tutorials/source_en/advanced/compute_graph.md @@ -0,0 +1,177 @@ + + +# Computational Graph + +![comp-graph.png](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/master/tutorials/source_zh_cn/advanced/images/comp-graph.png) + +A computational graph is a form of representing mathematical expressions by using directed graphs. As shown in the figure, the neural network structure can be regarded as a computational graph consisting of Tensor data and Tensor operations as nodes, so constructing a neural network and training it by using a deep learning framework is the process of constructing a computational graph and executing it. The current support for computational graphs in the industry framework is divided into two modes: dynamic graphs are executed by interpretation, with dynamic syntax affinity and flexible expression, and static graphs are executed by using JIT (just in time) compilation optimization. There are more restrictions on the syntax for using static syntax. + +MindSpore supports both computational graph modes with a unified API expression, using the same API in both modes and a unified automatic differentiation mechanism to achieve the unification of dynamic and static graphs. In the following, we introduce each of the two computational graph modes of MindSpore. + +## Dynamic Graphs + +Dynamic graphs are characterized by the fact that the construction and computation of a computational graph occur simultaneously (Define by run), which is consistent with Python interpreted execution. When a Tensor is defined in the computational graph, its value is calculated and determined, so it is easier to debug the model and get the value of intermediate results in real time. However, the need for all nodes to be saved makes it difficult to optimize the entire computational graph. + +In MindSpore, the dynamic graph pattern is also known as the PyNative pattern. Due to interpreted execution of dynamic graphs, it is recommended to use dynamic graph mode for debugging during script development and network process debugging. + +> Default computational graph mode in MindSpore is PyNative mode. + +If you need to manually control the framework to adopt PyNative mode, you can configure it with the following code: + +```python +import mindspore as ms + +ms.set_context(mode=ms.PYNATIVE_MODE) +``` + +In PyNative mode, the underlying operaors corresponding to all computation nodes is executed in a single Kernel, so that printing and debugging of computation results can be done arbitrarily, e.g. + +```python +import numpy as np +from mindspore import nn +from mindspore import ops +from mindspore import Tensor, Parameter + +class Network(nn.Cell): + def __init__(self): + super().__init__() + self.w = Parameter(Tensor(np.random.randn(5, 3), ms.float32), name='w') # weight + self.b = Parameter(Tensor(np.random.randn(3,), ms.float32), name='b') # bias + + def construct(self, x): + out = ops.matmul(x, self.w) + print('matmul: ', out) + out = out + self.b + print('add bias: ', out) + return out + +model = Network() +``` + +We simply define a Tensor with a shape of (5,) as input and observe the output. You can see that the `print` statement inserted in the `construct` method prints out the intermediate results in real time. + +```python +x = ops.ones(5, ms.float32) # input tensor +``` + +```python +out = model(x) +print('out: ', out) +``` + +```text +matmul: [-1.8809001 2.0400267 0.32370526] +add bias: [-1.6770952 1.5087128 0.15726662] +out: [-1.6770952 1.5087128 0.15726662] +``` + +## Static Graphs + +Compared to dynamic graphs, static graphs separate the construction of the computational graph from the actual computation (Define and run). In the build phase, the original computational graph is optimized and tuned according to the complete computational flow, and compiled to obtain a more memory-efficient and less computationally intensive computational graph. Since the structure of the graph does not change after compilation, it is called a "static graph". In the calculation phase, the results are obtained by executing the compiled calculation graph based on the input data. Compared with dynamic graphs, static graphs have a richer grasp of global information and can be optimized more, but their intermediate processes are black boxes for users, and they cannot get the intermediate calculation results in real time like dynamic graphs. + +In MindSpore, the static graph mode is also known as Graph mode. In Graph mode, based on graph optimization, computational graph whole graph sink and other techniques, the compiler can perform global optimization for the graph and obtain better performance, so it is more suitable for scenarios where the network is fixed and high performance is required. + +If you need to manually control the framework to adopt Graph mode, you can configure it with the following code: + +```python +ms.set_context(mode=ms.GRAPH_MODE) +``` + +### Graph Compilation Based on Source Code Conversion + +In static graph mode, MindSpore converts Python source code into Intermediate Representation IR (IR) by means of source code conversion, and based on this, optimizes the IR graph, and finally executes the optimized graph on hardware devices. MindSpore uses a functional IR based on graph representation, called MindIR. For details, see [Intermediate Representation MindIR](https://www.mindspore.cn/docs/en/master/design/mindir.html). + +MindSpore static graph execution process actually consists of two steps, corresponding to the Define and Run phases of the static graph. However, in practice, it is not sensed when the instantiated Cell object is called. MindSpore encapsulates both phases in the `__call__` method of the Cell, so the actual calling process is as follows: + +> `model(inputs) = model.compile(inputs) + model.construct(inputs)`, where `model` is the instantiated Cell object. + +We call the `compile` method explicitly for the following example: + +```python +model = Network() + +model.compile(x) +out = model(x) +print('out: ', out) +``` + +```text +out: [-0.26551223 3.0243678 0.706525 ] +``` + +### Static Graph Syntax + +In Graph mode, Python code is not executed by the Python interpreter, but the code is compiled into a static computational graph, and then the static computational graph is executed. Therefore, the compiler cannot support the full amount of Python syntax. MindSpore static graph compiler maintains a subset of Python common syntax to support the construction and training of neural networks. For details, refer to [Static graph syntax support](https://www.mindspore.cn/docs/en/master/note/static_graph_syntax_support.html). + +### Static Graph Control Flow + +In PyNative mode, MindSpore fully supports flow control statements in Python native syntax. In Graph mode, MindSpore is compiled with performance optimizations, so there are some special constraints on the use of flow control statements when defining networks, but the rest remains consistent with the native Python syntax. For details, refer to [flow control statements](https://mindspore.cn/tutorials/experts/en/master/network/control_flow.html). + +## Just-in-time Compilation + +Usually, due to the flexibility of dynamic graphs, we choose to use the PyNative model for free neural network construction to achieve model innovation and optimization. But when performance acceleration is needed, we need to accelerate the neural network in part or as a whole. At this point, switching directly to Graph mode is an easy option, but the limitations of static graphs on syntax and control flow make it impossible to convert from dynamic to static graphs senselessly. + +For this purpose, MindSpore provides the `jit` decorator, which can make Python functions or Python-class member functions compiled into computational graphs, and improves the running speed by graph optimization and other techniques. At this point we can simply accelerate the graph compilation for the modules we want to optimize for performance, while the rest of the model, we still use the interpreted execution method, without losing the flexibility of dynamic graphs. + +### Cell Module Compilation + +When we need to speed up a part of the neural network, we can use the `jit` modifier directly on the `construct` method. The module is automatically compiled to a static graph when the instantiated object is called. The example is as follows: + +```python +import mindspore as ms +from mindspore import nn + +class Network(nn.Cell): + def __init__(self): + super().__init__() + self.fc = nn.Dense(10, 1) + + @ms.jit + def construct(self, x): + return self.fc(x) +``` + +### Function Compilation + +Similar to the Cell module compilation, when you need to compile acceleration for certain operations of Tensor, you can use `jit` modifier on its defined function. The module is automatically compiled as a static graph when the function is called. An example is as follows: + +> Based on the functional auto-differentiation feature of MindSpore, it is recommended to use the function compilation method for JIT compilation acceleration of Tensor operations. + +```python +@ms.jit +def mul(x, y): + return x * y +``` + +### Whole-graph Compilation + +MindSpore supports compiling and optimizing the forward computation, back propagation, and gradient optimization update of neural network training into one computational graph, which is called whole graph compilation. At this point, it only needs to construct the neural network training logic as a function and use the `jit` modifier on the function to achieve whole-graph compilation. + +The following is an example by using a simple fully connected network: + +```python +network = nn.Dense(10, 1) +loss_fn = nn.BCELoss() +optimizer = nn.Adam(network.trainable_params(), 0.01) + +def forward_fn(data, label): + logits = network(data) + loss = loss_fn(logits, label) + return loss + +grad_fn = ms.value_and_grad(forward_fn, None, optimizer.parameters) + +@ms.jit +def train_step(data, label): + loss, grads = grad_fn(data, label) + optimizer(grads) + return loss +``` + +As shown in the above code, after encapsulating the neural network forward execution and loss function as `forward_fn`, the function transformation is executed to obtain the gradient calculation function. Then the gradient calculation function and optimizer calls are encapsulated as `train_step` function and modified with `jit`. When the `train_step` function is called, the static graph is compiled, the whole graph is obtained and executed. + +In addition to using modifiers, `jit` methods can also be called by using function transformations, as in the following example: + +```python +train_step = ms.jit(train_step) +``` diff --git a/tutorials/source_en/advanced/compute_graph.rst b/tutorials/source_en/advanced/compute_graph.rst deleted file mode 100644 index f107eeb165..0000000000 --- a/tutorials/source_en/advanced/compute_graph.rst +++ /dev/null @@ -1,8 +0,0 @@ -Computation Graphs -========================== - -.. toctree:: - :maxdepth: 1 - - compute_graph/mode - compute_graph/combine diff --git a/tutorials/source_en/advanced/compute_graph/combine.md b/tutorials/source_en/advanced/compute_graph/combine.md deleted file mode 100644 index 37559dbf7d..0000000000 --- a/tutorials/source_en/advanced/compute_graph/combine.md +++ /dev/null @@ -1,299 +0,0 @@ -# Combination of Dynamic and Static Graphs - - - -Currently, dynamic and static graphs are supported in the industry. Dynamic graphs are executed through explanation, with dynamic syntax affinity and flexible expression. Static graphs are executed through just in time (JIT) build, which focuses on static syntax and has many syntax constraints. The build process of the dynamic graph is different from that of the static graph. As a result, the syntax constraints are also different. - -For dynamic and static graph modes, MindSpore first unifies the API expression and uses the same APIs in the two modes. Then, it unifies the underlying differentiation mechanism of dynamic and static graphs. - -![dynamic](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/master/tutorials/source_en/advanced/compute_graph/images/framework1.png) - -## Implementation Principle - -MindSpore allows you to use the `jit` modifier to modify objects that need to be executed using static graphs, achieving combination of dynamic and static graphs. The following uses a simple combination example to describe the implementation principle. The sample code is as follows: - -```python -import numpy as np -import mindspore.nn as nn -import mindspore as ms - -class Add(nn.Cell): - """Define a class to implement the x self addition.""" - def construct(self, x): - x = x + x - x = x + x - return x - -class Mul(nn.Cell): - """Define a class to implement the x self multiplication.""" - @ms.jit # Use jit to modify the function. This function is executed in static graph mode. - def construct(self, x): - x = x * x - x = x * x - return x - -class Test(nn.Cell): - """Define a class to implement Add(x), Mul(x), and then Add(x).""" - def __init__(self): - super(Test, self).__init__() - self.add = Add() - self.mul = Mul() - - def construct(self, x): - x = self.add(x) - x = self.mul(x) - x = self.add(x) - return x - -ms.set_context(mode=ms.PYNATIVE_MODE) -x = ms.Tensor(np.ones([3, 3], dtype=np.float32)) -print("init x:\n", x) -net = Test() -x = net(x) -print("\nx:\n", x) -``` - -```text - init x: - [[1. 1. 1.] - [1. 1. 1.] - [1. 1. 1.]] - - x: - [[1024. 1024. 1024.] - [1024. 1024. 1024.] - [1024. 1024. 1024.]] -``` - -According to the preceding information, after the test operation, the final value of x is a 3\*3 matrix whose each element is 8. The following figure shows the build method of this test case according to the execution sequence. - -![msfunction](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/master/tutorials/source_en/advanced/compute_graph/images/jit.png) - -Functions modified by `jit` are built and executed in static graph mode. If the network involves reverse derivation, the part modified by `jit` is also used to generate a backward graph in the form of an entire graph. The backward graph is connected to backward graphs of operators before and after the graph and then delivered for execution. The cache policy is the same as that of the static graph. When the input shape and type information of the same function object is the same, the built graph structure is cached. - -## `jit` Modifier - -To improve the execution speed of forward computing tasks in dynamic graph mode, MindSpore provides the `jit` modifier. You can modify Python functions or member functions of Python classes to build them into computational graphs. Technologies such as graph optimization are used to improve the running speed. - -### Usage - -MindSpore supports static build in dynamic graphs. You can use the `jit` modifier to modify the function objects that need to be executed using static graphs to implement mixed execution of dynamic and static graphs. - -#### 1. Modifying Independent Function - -When using the `jit` modifier, you can modify an independently defined function so that it can run in static graph mode. The following is an example: - -```python -import numpy as np -import mindspore.ops as ops -import mindspore as ms - -# Set the running mode to dynamic graph mode. -ms.set_context(mode=ms.PYNATIVE_MODE) - -# Use the modifier to specify the execution in static graph mode. -@ms.jit -def add_func(x, y): - return ops.add(x, y) - -x = ms.Tensor(np.array([1.0, 2.0, 3.0]).astype(np.float32)) -y = ms.Tensor(np.array([4.0, 5.0, 6.0]).astype(np.float32)) - -out = add_func(x, y) -print(out) -``` - -```text - [5. 7. 9.] -``` - -In the preceding sample code, although the running mode is set to dynamic graph mode at the beginning, the `add_func(x, y)` function is modified using the `jit` modifier. Therefore, the `add_func(x, y)` function still runs in static graph mode. - -#### 2. Modifying the Member Functions of a Class - -When using the `jit` modifier, you can modify the member methods of classes. The sample code is as follows: - -```python -import numpy as np -import mindspore.nn as nn -import mindspore.ops as ops -import mindspore as ms - -# Set the running mode to dynamic graph mode. -ms.set_context(mode=ms.PYNATIVE_MODE) - -class Add(nn.Cell): - - @ms.jit # Use the modifier to specify the execution in static graph mode. - def construct(self, x, y): - out = x + y - return out - -x = ms.Tensor(np.array([1.0, 2.0, 3.0]).astype(np.float32)) -y = ms.Tensor(np.array([4.0, 5.0, 6.0]).astype(np.float32)) - -net = Add() -grad_ops = ms.grad(net, grad_position=(0, 1)) # Define the derivation operation. -grad_out = grad_ops(x, y) - -print("Infer result:\n", net(x, y)) - -print("Gradient result:") -print("Grad x Tensor1:\n", grad_out[0]) # Derivation of x -print("Grad y Tensor2:\n", grad_out[1]) # Derivation of y -``` - -```text - Infer result: - [5. 7. 9.] - Gradient result: - Grad x Tensor1: - [1. 1. 1.] - Grad y Tensor2: - [1. 1. 1.] -``` - -According to the preceding information, the sum of x and y is \[5, 7, 9\]. The derivation result of x is the same as that of y, that is, \[1, 1, 1\]. - -### Precautions - -When using `jit` to modify functions to improve execution efficiency, pay attention to the following points: - -1. Functions modified by `jit` must be within the syntax scope supported by static graph build, including but not limited to data types. - -2. The control flow syntax supported by a function modified by `jit` is the same as that supported by the static graph. An acceleration effect is achieved only for a control flow structure with a fixed loop count or a branch condition. - -3. When the `@jit` decorated function is used in PyNative mode, the parts that are not modified by `jit` support breakpoint debugging, and the parts modified by `jit` do not support breakpoint debugging because they are built in static graph mode. - -4. Functions modified by `jit` are built and executed in static graph mode. Therefore, `jit` decorator does not support the Hook operator in the modified functions or the customized Bprop function. - -5. Functions modified by `jit` are affected by side effects of static graph functions. Side effects of a function refer to the additional effects on the main function in addition to the return value of the function, for example, modifying global variables (variables other than the function) and modifying function parameters. - - Scenario 1: - - ```python - import numpy as np - import mindspore as ms - - # pylint: disable=W0612 - - value = 5 - - @ms.jit - def func(x, y): - out = x + y - value = 1 - return out - - ms.set_context(mode=ms.PYNATIVE_MODE) - x = ms.Tensor(np.array([1.0, 2.0, 3.0]).astype(np.float32)) - y = ms.Tensor(np.array([1.0, 2.0, 3.0]).astype(np.float32)) - func(x, y) - print(value) - ``` - - ```text - 5 - ``` - - In this scenario, `value` is a global variable and is modified in the `func` function. In this case, if `jit` decorator is used to modify the `func` function, the global variable `value` is not changed. The reason is that statements irrelevant to return values are optimized during static graph build. - - Scenario 2: - - ```python - import numpy as np - import mindspore.nn as nn - import mindspore as ms - - class Func(nn.Cell): - def __init__(self): - super(Func, self).__init__() - self.value = 5 - - @ms.jit - def construct(self, x): - out = self.value + x - return out - - ms.set_context(mode=ms.PYNATIVE_MODE) - x = ms.Tensor(np.array([1.0, 2.0, 3.0]).astype(np.float32)) - func = Func() - print("out1:", func(x)) - func.value = 1 - print("out2:", func(x)) - ``` - - ```text - out1: [6. 7. 8.] - out2: [6. 7. 8.] - ``` - - According to the preceding information, after the member variable `value` of the `func` class is changed to 1, the `construct` operation of the member function is not affected. In this scenario, `jit` is used to modify the `construct` member function of the `func` object. When `construct` is executed, it is built and executed in static graph mode. The static graph caches the build result. Therefore, when `func` is called for the second time, the modification of `value` does not take effect. - -6. If a function with the `jit` modifier contains operators (such as `MatMul` and `Add`) that do not require parameter training, these operators can be directly called in the modified function. If the modified function contains operators (such as `Conv2D` and `BatchNorm` operators) that require parameter training, these operators must be instantiated outside the modified function. The following uses sample code to describe the two scenarios. - - Scenario 1: Directly call an operator (`mindspore.ops.Add` in the example) that does not require parameter training in the modified function. The sample code is as follows: - - ```python - import numpy as np - import mindspore as ms - import mindspore.ops as ops - - ms.set_context(mode=ms.PYNATIVE_MODE) - - add = ops.Add() - - @ms.jit - def add_fn(x, y): - res = add(x, y) - return res - - x = ms.Tensor(np.array([1.0, 2.0, 3.0]).astype(np.float32)) - y = ms.Tensor(np.array([4.0, 5.0, 6.0]).astype(np.float32)) - z = add_fn(x, y) - - print("x:", x.asnumpy(), "\ny:", y.asnumpy(), "\nz:", z.asnumpy()) - ``` - - ```text - x: [1. 2. 3.] - y: [4. 5. 6.] - z: [5. 7. 9.] - ``` - - Scenario 2: The operator (`mindspore.nn.Conv2d` in the example) that requires parameter training must be instantiated outside the modified function. The sample code is as follows: - - ```python - import numpy as np - import mindspore.nn as nn - import mindspore as ms - - ms.set_context(mode=ms.PYNATIVE_MODE) - - # Instantiate the conv_obj operator in the conv_fn function. - conv_obj = nn.Conv2d(in_channels=3, out_channels=4, kernel_size=3, stride=2, padding=0) - conv_obj.init_parameters_data() - - @ms.jit - def conv_fn(x): - res = conv_obj(x) - return res - - input_data = np.random.randn(1, 3, 3, 3).astype(np.float32) - z = conv_fn(ms.Tensor(input_data)) - print(z.asnumpy()) - ``` - - ```text - [[[[ 0.00829158 -0.02994147] - [-0.09116832 -0.00181637]] - - [[-0.00519348 -0.02172063] - [-0.04015012 -0.02083161]] - - [[ 0.00608188 -0.01443425] - [-0.01468289 0.01200477]] - - [[ 0.00845292 0.00044869] - [-0.00361492 0.01993337]]]] - ``` diff --git a/tutorials/source_en/advanced/compute_graph/images/framework1.png b/tutorials/source_en/advanced/compute_graph/images/framework1.png deleted file mode 100644 index b49791d8eed61c164c8df9d087be7ae34e2c7f51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27920 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 F{{R^Y5Ul_J diff --git a/tutorials/source_en/advanced/compute_graph/images/framework2.png b/tutorials/source_en/advanced/compute_graph/images/framework2.png deleted file mode 100644 index a961c2f661836bd7c96b99d2ac25c12488819948..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25348 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 BnAiXS diff --git a/tutorials/source_en/advanced/compute_graph/images/jit.png b/tutorials/source_en/advanced/compute_graph/images/jit.png deleted file mode 100644 index af6c3bd342f5a8ba45b0b2ddda7bdf651efb75d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72774 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 - -Currently, there are two execution modes of a mainstream deep learning framework: a static graph mode (Graph) and a dynamic graph mode (PyNative). - -- In static graph mode, when the program is built and executed, the graph structure of the neural network is generated first, and then the computation operations involved in the graph are performed. Therefore, in static graph mode, the compiler can achieve better execution performance by using technologies such as graph optimization, which facilitates large-scale deployment and cross-platform running. - -- In dynamic graph mode, the program is executed line by line according to the code writing sequence. In the forward execution process, the backward execution graph is dynamically generated according to the backward propagation principle. In this mode, the compiler delivers the operators in the neural network to the device one by one for computing, facilitating users to build and debug the neural network model. - -## Introduction to Dynamic and Static Graphs - -MindSpore provides a unified encoding mode for static and dynamic graphs, significantly enhancing compatibility between both types of graphs. This enables you to switch between the static and dynamic graph modes by changing only one line of code, eliminating the need to develop multiple sets of code. The dynamic graph mode is the default mode of MindSpore and is mainly used for debugging, and the static graph mode has more efficient execution performance and is mainly used for deployment. - -> When switching the running mode from dynamic graph to static graph, pay attention to the [static graph syntax support](https://www.mindspore.cn/docs/en/master/note/static_graph_syntax_support.html). - -### Mode Selection - -You can configure the `context` parameter to control the program running mode. The differences between the dynamic graph mode and the static graph mode are as follows: - -- **Application scenario:** The network structure of a static graph needs to be built at the beginning, and then the framework optimizes and executes the entire graph. This mode is applicable to scenarios where the network is fixed and high performance is required. Operators are executed line by line on a dynamic graph. Single operator, common functions, and networks can be executed, and gradients can be computed separately. - -- **Network execution:** When the same network and operator are executed in static graph mode and dynamic graph mode, the accuracy effect is the same. The static graph mode uses technologies such as graph optimization and entire computational graph offloading. The static graph mode has higher network performance and efficiency, while the dynamic graph mode facilitates debugging and optimization. - -- **Code debugging:** The dynamic graph mode is recommended for script development and network process debugging. In dynamic graph mode, you can easily set breakpoints and obtain intermediate results of network execution. You can also debug the network in pdb mode. In static graph mode, breakpoints cannot be set. You can only specify an operator for printing and view the output result after the network execution is complete. - -### Mode Switching - -During mode switching, you need to set the running mode in the context. Define the network model `MyNet` and the data used in subsequent code snippets for subsequent switching and display of the dynamic and static graph modes. - -```python -import numpy as np -import mindspore.nn as nn -import mindspore.ops as ops -import mindspore as ms - -class MyNet(nn.Cell): - """Customize the network to implement the addition of two tensors.""" - def __init__(self): - super(MyNet, self).__init__() - self.add = ops.Add() - - def construct(self, x, y): - return self.add(x, y) - -x = ms.Tensor(np.array([1.0, 2.0, 3.0]).astype(np.float32)) -y = ms.Tensor(np.array([4.0, 5.0, 6.0]).astype(np.float32)) -``` - -Set the running mode to static graph mode. - -```python -import mindspore as ms - -ms.set_context(mode=ms.GRAPH_MODE) - -net = MyNet() -print(net(x, y)) -``` - -```text - [5. 7. 9.] -``` - -When MindSpore is in static graph mode, you can switch to the dynamic graph mode by setting `mode=ms.PYNATIVE_MODE`. Similarly, when MindSpore is in dynamic graph mode, you can switch to the static graph mode by setting`mode=ms.GRAPH_MODE`. Pay attention to [static graph syntax support](https://www.mindspore.cn/docs/en/master/note/static_graph_syntax_support.html). - -```python -ms.set_context(mode=ms.PYNATIVE_MODE) - -net = MyNet() -print(net(x, y)) -``` - -```text - [5. 7. 9.] -``` - -## Static Graph - -In MindSpore, the static graph mode is also called the Graph mode, which is applicable to scenarios where the network is fixed and high performance is required. You can set the input parameter `mode` to `GRAPH_MODE` in the `set_context` API to set the static graph mode. - -In static graph mode, the compiler can perform global optimization on graphs based on technologies such as graph optimization and entire computational graph offloading. Therefore, good performance can be obtained when the compiler is executed in static graph mode. However, the execution graph is converted from the source code. Therefore, not all Python syntax is supported in static graph mode. There are some special constraints. For details about the support, see [Static Graph Syntax Support](https://www.mindspore.cn/docs/en/master/note/static_graph_syntax_support.html). - -### Execution Principle of the Static Graph Mode - -In static graph mode, MindSpore converts the Python source code into an intermediate representation (IR), optimizes the IR graph based on the IR, and executes the optimized graph on the hardware device. - -MindSpore uses a graph-based functional IR called MindIR. The static graph mode is built and optimized based on MindIR. When using the static graph mode, you need to use the [nn.Cell](https://mindspore.cn/docs/en/master/api_python/nn/mindspore.nn.Cell.html#mindspore.nn.Cell) class and writ execution code in the `construct` function. - -### Code Example in Static Graph Mode - -The code of the static graph mode is as follows. The neural network model implements the computation operation of $f(x, y)=x*y$. - -```python -# Set the running mode to static graph mode. -ms.set_context(mode=ms.GRAPH_MODE) - -class Net(nn.Cell): - """Customize the network to implement the multiplication of two tensors.""" - def __init__(self): - super(Net, self).__init__() - self.mul = ops.Mul() - - def construct(self, x, y): - """Define execution code."" - return self.mul(x, y) - -x = ms.Tensor(np.array([1.0, 2.0, 3.0]).astype(np.float32)) -y = ms.Tensor(np.array([4.0, 5.0, 6.0]).astype(np.float32)) - -net = Net() - -print(net(x, y)) -``` - -```text - [ 4. 10. 18.] -``` - -### Control Flow in Static Graph Mode - -For details about control flows in static graph mode, see [Process Control Statements](https://mindspore.cn/tutorials/experts/en/master/network/control_flow.html). - -## Dynamic Graph - -In MindSpore, the dynamic graph mode is also called the PyNative mode. You can set the input parameter `mode` to `PYNATIVE_MODE` in the `set_context` API to set the dynamic graph mode. - -During script development and network process debugging, you are advised to use the dynamic graph mode for debugging. The dynamic graph mode supports single-operator execution, common function execution, network execution, and independent gradient computation. - -### Execution Principle of the Dynamic Graph Mode - -In dynamic graph mode, you can use complete Python APIs. In addition, when APIs provided by MindSpore are used, the framework executes operator API operations on the corresponding hardware platform based on the selected hardware platform (Ascend/GPU/CPU) or environment information, and returns the corresponding result. - -The overall execution process of the framework is as follows: - -![process](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/master/tutorials/source_en/advanced/compute_graph/images/framework2.png) - -The front-end Python API is called to the framework layer and finally computed on the corresponding hardware device. - -The following uses the `ops.mul` operator to replace the network model that needs to be defined in static graph mode to implement the computation of $f(x, y)=x*y$. - -```python -# Set the running mode to dynamic graph mode. -ms.set_context(mode=ms.PYNATIVE_MODE) - -x = ms.Tensor(np.array([1.0, 2.0, 3.0]).astype(np.float32)) -y = ms.Tensor(np.array([4.0, 5.0, 6.0]).astype(np.float32)) - -output = ops.mul(x, y) - -print(output.asnumpy()) -``` - -```text - [ 4. 10. 18.] -``` - -In the preceding sample code, when the `ops.mul(x, y)` API is called, the Python API at the MindSpore expression layer is called to the C++ layer of the MindSpore framework using [Pybind11](https://pybind11.readthedocs.io/en/stable/basics.html) and converted into the C++ API. Then, the framework automatically selects the corresponding hardware device based on the MindSpore installation environment information and performs the add operation on the hardware device. - -According to the preceding principles, in PyNative mode, Python script code is executed based on the Python syntax. During the execution, Python APIs at the MindSpore expression layer are executed on different hardware based on user settings to accelerate performance. - -Therefore, in dynamic graph mode, you can use Python syntax and debugging methods as required. - -### Principle of Automatic Differentiation in Dynamic Graph Mode - -In a dynamic graph, the forward propagation process is executed based on the Python syntax, and the backward propagation process is implemented based on tensors. - -Therefore, during the forward propagation process, all operations applied to tensors are recorded and computed backward, and all backward propagation processes are connected to form an overall backward propagation graph. Finally, the backward graph is executed on the device and the gradient is computed. - -The following uses a simple sample code to describe the principle of automatic differentiation in dynamic graph mode. Multiply the matrix x by a fixed parameter z, and then perform matrix multiplication with y: - -$$f(x, y)=(x * z) * y \tag{1}$$ - -The sample code is as follows: - -```python -# Set the running mode to dynamic graph mode. -ms.set_context(mode=ms.PYNATIVE_MODE) - -class Net(nn.Cell): - """Customize a network.""" - def __init__(self): - super(Net, self).__init__() - self.matmul = ops.MatMul() - self.z = ms.Parameter(ms.Tensor(np.array([1.0], np.float32)), name='z') - - def construct(self, x, y): - x = x * self.z - x = self.matmul(x, y) - return x - -class GradNetWrtX(nn.Cell): - """Define the derivation of x.""" - def __init__(self, net): - super(GradNetWrtX, self).__init__() - - self.net = net - - def construct(self, x, y): - gradient_function = ms.grad(self.net) - return gradient_function(x, y) - -x = ms.Tensor([[0.8, 0.6, 0.2], [1.8, 1.3, 1.1]], dtype=ms.float32) -y = ms.Tensor([[0.11, 3.3, 1.1], [1.1, 0.2, 1.4], [1.1, 2.2, 0.3]], dtype=ms.float32) - -output = GradNetWrtX(Net())(x, y) -print(output) -``` - -```text - [[4.5099998 2.7 3.6000001] - [4.5099998 2.7 3.6000001]] -``` - -> The accuracy may vary depending on the computing platform. Therefore, the execution results of the preceding code vary slightly on different platforms. For details about the derivation of the formula and the explanation of the preceding printed results, see [Automatic Derivation](https://www.mindspore.cn/tutorials/en/master/advanced/derivation.html#). - -![forward](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/master/tutorials/source_zh_cn/advanced/compute_graph/images/forward_backward.png) - -It can be learned from the preceding dynamic graph mode that, in a forward propagation process, MindSpore records a computation process of Mul, and a backward MulGrad operator is obtained according to a definition of a backward bprop corresponding to Mul. - -The bprop definition of the Mul operator is as follows: - -```python -from mindspore.ops._grad.grad_base import bprop_getters - -@bprop_getters.register(ops.Mul) -def get_bprop_mul(self): - """Grad definition for `Mul` operation.""" - mul_func = P.Mul() - - def bprop(x, y, out, dout): - bc_dx = mul_func(y, dout) - bc_dy = mul_func(x, dout) - return binop_grad_common(x, y, bc_dx, bc_dy) - - return bprop -``` - -You can see that two backward propagation gradient values of the input and output are required to compute the backward input of Mul. In this case, you can connect z to MulGrad based on the actual input value. The rest can be deduced by analogy. For the next operator Matmul, the MatmulGrad information is obtained accordingly, and then the context gradient propagation is connected based on the input and output of bprop. - -Similarly, for derivation of input y, the same process may be used for derivation. - -### Control Flow in Dynamic Graph Mode - -In MindSpore, the control flow syntax is not specially processed. Instead, the control flow syntax is directly executed based on the Python syntax, and automatic differentiation operations are performed on the expanded execution operators. - -For example, in a for loop, the Python source code is executed first in the dynamic graph, and then the statements in the for loop are continuously executed based on the number of loops, and automatic differentiation operations are performed on the operators. - -```python -# Set the running mode to dynamic graph mode. -ms.set_context(mode=ms.PYNATIVE_MODE) - -class Net(nn.Cell): - """Customize a network.""" - def __init__(self): - super(Net, self).__init__() - self.matmul = ops.MatMul() - self.z = ms.Parameter(ms.Tensor(np.array([1.0], np.float32)), name='z') - - def construct(self, x): - for _ in range(3): - x = x + self.z - return x - -x = ms.Tensor(np.array([1.0, 2.0, 3.0]).astype(np.float32)) -net = Net() -output = net(x) - -print(output) -``` - -```text - [4. 5. 6.] -``` diff --git a/tutorials/source_zh_cn/advanced/compute_graph.ipynb b/tutorials/source_zh_cn/advanced/compute_graph.ipynb index 3a7ba7ec6e..057cbc1730 100644 --- a/tutorials/source_zh_cn/advanced/compute_graph.ipynb +++ b/tutorials/source_zh_cn/advanced/compute_graph.ipynb @@ -138,7 +138,7 @@ "id": "4cd72031-836d-475e-a74d-5264b29393d1", "metadata": {}, "source": [ - "相较于动态图而言,静态图的特点是将计算图的构建和实际计算分开(Define and run)。在构建阶段,根据完整的计算流程对原始的计算图进行优化和调整,编译得到更省内存和计算量更少的计算图。由于编译之后图的结构不再改变,所以称之为 “静态图” 。 在计算阶段,根据输入数据执行编译好的计算图得到计算结果。相较于动态图,静态图对全局的信息掌握更丰富,可做的优化也会更多,但是其中间过程对于用户来说是黑盒,无法像动态图一样实时拿到中间计算结果。\n", + "相较于动态图而言,静态图的特点是将计算图的构建和实际计算分开(Define and run)。在构建阶段,根据完整的计算流程对原始的计算图进行优化和调整,编译得到更省内存和计算量更少的计算图。由于编译之后图的结构不再改变,所以称之为 “静态图” 。在计算阶段,根据输入数据执行编译好的计算图得到计算结果。相较于动态图,静态图对全局的信息掌握更丰富,可做的优化也会更多,但是其中间过程对于用户来说是黑盒,无法像动态图一样实时拿到中间计算结果。\n", "\n", "在MindSpore中,静态图模式又被称为Graph模式,在Graph模式下,基于图优化、计算图整图下沉等技术,编译器可以针对图进行全局的优化,获得较好的性能,因此比较适合网络固定且需要高性能的场景。\n", "\n", -- Gitee