update ch03 (#359)

* fix ch03 table

* fix ch03 table

* update ch03-table-test
This commit is contained in:
Jiarong Han
2022-06-01 11:38:30 +08:00
committed by GitHub
parent 8373fb698b
commit 291e7ffd54
2 changed files with 23 additions and 21 deletions

View File

@@ -22,7 +22,7 @@ def model(X, flag):
```
完成前端语言的模型完整构建表达后,执行模型运算时不会直接接收输入数据进行计算,而是使用计算框架的编译器对模型进行编译。由于在进行静态生成编译时并不读取输入数据,此时需要一种特殊的张量来表示输入数据辅助构建完整的计算图,这种特殊张量就被称之为"数据占位符"。在上述的伪代码中输入数据**X**需要使用占位符在静态图中表示。构造伪代码中的条件控制时由于在静态图模式下构建网络并没有执行任何计算对于条件控制在编译阶段并不会进行逻辑运算完成判断因此需要将条件控制算子以及所有的分支计算子图加入计算图中。在执行阶段网络接受数据流入调度条件控制算子时进行逻辑判断控制数据流入不同的分支计算子图中进行后续计算。由于控制流和静态生成的特殊性在部分计算框架中前端语言Python的控制流不能够被正确编译为等价的静态图结构因此需要使用复杂的图内方法实现控制流。
在后续的章节中我们会继续深入了解计算框架静态生成图结构的过程。静态生成的过程是采用计算框架编译器将代码编译为中间表示。计算框架编译器受传统编译器方案启发,设计体系结构包含两部分:编译器前端和编译器后端。中间表示承上启下贯穿前端和后端,是前端源代码和目标硬件代码之间的中间数据格式。在计算框架编译器中中间表示以计算图形式存在,编译器会根据前端神经网络模型自动构建完整的前向计算图和反向计算图。
静态生成的过程是采用计算框架编译器将代码编译为中间表示。计算框架编译器受传统编译器方案启发,设计体系结构包含两部分:编译器前端和编译器后端。中间表示承上启下贯穿前端和后端,是前端源代码和目标硬件代码之间的中间数据格式。在计算框架编译器中中间表示以计算图形式存在,编译器会根据前端神经网络模型自动构建完整的前向计算图和反向计算图。
![静态生成](../img/ch03/static-gen.svg)
:width:`800px`
@@ -79,14 +79,14 @@ def model(X1, X2):
:静态图和动态图对比
|特性|静态图|动态图|
|:---:| :---: | :---: |
| 即时获取中间结果 | | |
| 代码调试难易 | | 简单 |
| 控制流实现方式 | 特定的语法 | 前端语言语法 |
| 性能 | 优化策略多,性能更佳 | 图优化受限,性能较差 |
| 内存占用 | 内存占用少 | 内存占用相对较多 |
| 部署能力 |可直接部署 | 不可直接部署|
| 特性| 静态图 | 动态图 |
| --- | ------- | ------- |
| 即时获取中间结果| 否 | |
| 代码调试难易 | 难 | 易 |
| 控制流实现方式 | 特定的语法 | 前端语言语法 |
| 性能 | 优化策略多,性能更佳 | 图优化受限,性能较差 |
| 内存占用 | 内存占用少 | 内存占用相对较多 |
| 内存占用 | 可直接部署 | 不可直接部署 |
:label:`cmp_dynamic_static`
针对两种模式的特性,结合任务需求选择合适的模式可以事半功倍,学术科研以及模型开发调试阶段,为了快速验证思想和迭代更新模型结构可以选择动态图模式进行构建算法;网络模型确定,为了加速训练过程或者为硬件部署模型,可以选择静态图模式。
@@ -133,11 +133,12 @@ def model(X, flag):
:主流框架动态图转换静态图支持
|框架|动态图转静态图|
| :-:| :---: |
| TensorFlow |@tf_function追踪算子调度构建静态图<br>其中AutoGraph机制可以自动转换控制流为静态表达 |
| MindSpore | context.set_context(mode=context.PYNATIVE_MODE) 动态图模式,<br> context.set_context(mode=context.GRAPH_MODE) 静态图模式,<br>\@ms_function支持基于源码转换 |
| 框架 | 动态图转静态图 |
| :-----------------:| :--------------------------------------------------: |
| TensorFlow |@tf_function追踪算子调度构建静态图<br>其中AutoGraph机制可以自动转换控制流为静态表达 |
| MindSpore | context.set_context(mode=context.PYNATIVE_MODE)动态图模式,<br>context.set_context(mode=context.GRAPH_MODE) 静态图模式,<br>@ms_function支持基于源码转换 |
| PyTorch | torch.jit.script()支持基于源码转换,<br>torch.jit.trace()支持基于追踪转换 |
| PaddlePaddle | paddle.jit.to_static()支持基于源码转换,<br>paddle.jit.TracedLayer.trace()支持基于追踪转换 |
:label:`dynamic_static_switch`