diff --git a/chapter_computational_graph/generation_of_computational_graph.md b/chapter_computational_graph/generation_of_computational_graph.md index 8edcde5..7c43c61 100644 --- a/chapter_computational_graph/generation_of_computational_graph.md +++ b/chapter_computational_graph/generation_of_computational_graph.md @@ -22,7 +22,7 @@ def model(X, flag): ``` 完成前端语言的模型完整构建表达后,执行模型运算时不会直接接收输入数据进行计算,而是使用计算框架的编译器对模型进行编译。由于在进行静态生成编译时并不读取输入数据,此时需要一种特殊的张量来表示输入数据辅助构建完整的计算图,这种特殊张量就被称之为"数据占位符"。在上述的伪代码中输入数据**X**需要使用占位符在静态图中表示。构造伪代码中的条件控制时,由于在静态图模式下构建网络并没有执行任何计算,对于条件控制在编译阶段并不会进行逻辑运算完成判断,因此需要将条件控制算子以及所有的分支计算子图加入计算图中。在执行阶段网络接受数据流入,调度条件控制算子时进行逻辑判断,控制数据流入不同的分支计算子图中进行后续计算。由于控制流和静态生成的特殊性,在部分计算框架中前端语言Python的控制流不能够被正确编译为等价的静态图结构,因此需要使用复杂的图内方法实现控制流。 -在后续的章节中我们会继续深入了解计算框架静态生成图结构的过程。静态生成的过程是采用计算框架编译器将代码编译为中间表示。计算框架编译器受传统编译器方案启发,设计体系结构包含两部分编译器前端和编译器后端。中间表示承上启下贯穿前端和后端,是前端源代码和目标硬件代码之间的中间数据格式。在计算框架编译器中中间表示以计算图形式存在,编译器会根据前端神经网络模型自动构建完整的前向计算图和反向计算图。 +在后续的章节中我们会继续深入了解计算框架静态生成图结构的过程。静态生成的过程是采用计算框架编译器将代码编译为中间表示。计算框架编译器受传统编译器方案启发,设计体系结构包含两部分:编译器前端和编译器后端。中间表示承上启下贯穿前端和后端,是前端源代码和目标硬件代码之间的中间数据格式。在计算框架编译器中中间表示以计算图形式存在,编译器会根据前端神经网络模型自动构建完整的前向计算图和反向计算图。 ![静态生成](../img/ch03/static-gen.svg) :width:`800px` @@ -136,8 +136,8 @@ def model(X, flag): |框架|动态图转静态图| | :-:| :---: | | TensorFlow |@tf_function追踪算子调度构建静态图,
其中AutoGraph机制可以自动转换控制流为静态表达 | -| MindSpore | context.set_context(mode=context.PYNATIVE_MODE) 动态图模式
context.set_context(mode=context.GRAPH_MODE) 静态图模式
\@ms_function支持基于源码转换 | +| MindSpore | context.set_context(mode=context.PYNATIVE_MODE) 动态图模式,
context.set_context(mode=context.GRAPH_MODE) 静态图模式,
\@ms_function支持基于源码转换 | | PyTorch | torch.jit.script()支持基于源码转换,
torch.jit.trace()支持基于追踪转换 | -| PaddlePaddle | paddle.jit.to_static()支持基于源码转换,
paddle.jit.TracedLayer.trace()支持基于追踪转换 | +| PaddlePaddle | paddle.jit.to_static()支持基于源码转换,
paddle.jit.TracedLayer.trace()支持基于追踪转换 | :label:`dynamic_static_switch`