From b968b1bce2649da359c6f8ef779d4467ab13c795 Mon Sep 17 00:00:00 2001 From: moguguo Date: Mon, 15 Nov 2021 16:15:03 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E5=8A=A8=E8=BD=AC=E9=9D=99=E6=A6=82?= =?UTF-8?q?=E8=BF=B0=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 更新动转静概述章节,补充两个Block,什么是动态图和静态图,什么场景下需要动态图转成静态图 --- docs/guides/04_dygraph_to_static/index_cn.rst | 32 +++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/docs/guides/04_dygraph_to_static/index_cn.rst b/docs/guides/04_dygraph_to_static/index_cn.rst index b54141fa883..1a1604b52a9 100644 --- a/docs/guides/04_dygraph_to_static/index_cn.rst +++ b/docs/guides/04_dygraph_to_static/index_cn.rst @@ -2,9 +2,37 @@ 动态图转静态图 ############### -动态图在接口易用性,交互式调试等方面具有诸多优势,但在工业界的许多部署场景中(如大型推荐系统、移动端)Python执行开销较大,与C++有一定的差距,静态图部署更具优势。 +========================= +什么是动态图和静态图? +========================= + +从深度学习模型构建方式上看,飞桨框架支持动态图编程(Imperative programming)和静态图编程(Declarative programming)两种方式,其代码编写方式和执行方式均存在差异。 + +* **动态图编程:**采用Python风格的编程方式,解析式的执行方式。用户每写一行网络代码,即可同时获得计算结果。在 +`模型开发 <../02_paddle2.0_develop/index_cn.rst>`_章节中,介绍的都是动态图编程方式。 +* **静态图编程:**采用先编译后执行的方式。用户先预定义完整的神经网络结构,飞桨框架将神经网络描述为Program的数据结构,对Program进行编译优化,再调用执行器获得计算结果。 + +动态图编程体验更佳、更易调试,但是因为采用Python实时执行的方式,而Python执行开销较大,与C++有一定差距,性能方面不占优。静态图调试难度大,但是将前端Python编写的神经网络预定义为Program描述,转到C++端重新解析执行,脱离了Python依赖,往往执行性能更佳,并且预先拥有完整网络结构也更利于全局优化。 + +========================= +什么场景下需要动态图转静态图? +========================= + +飞桨框架在设计时,考虑同时兼顾动态图的高易用性和静态图的高性能优势,采用『动静统一』的方案: +* **在模型开发时,推荐采用动态图编程:**用户可获得更好的编程体验、更易用的接口、更友好的调试交互机制。 +* **在模型训练或者推理部署时,只需添加一行装饰器 @to_static,即可将动态图代码转写为静态图代码,并在底层自动使用静态图执行器运行:**获得更好的模型运行性能。 + +方案如下图所示: +.. image:: images/dygraph_to_static.png +图1 飞桨框架动静统一方案示意图 + +> **说明:** +> 飞桨框架2.0默认的编程模式是动态图模式,包括使用高层API编程和基础的API编程。如果想切换到静态图模式编程,可以在程序的开始执行enable_static()函数。如果程序已经使用动态图的模式编写了,想转成静态图模式训练或者保存模型用于部署,可以使用装饰器@to_static。 + +想了解动态图和静态图的详细对比介绍,可参见 +`动态图和静态图的差异 `_。 + -PaddlePaddle 在2.0版本之后,正式支持动态图转静态图(@to_static)的功能,对动态图代码进行智能化分析,自动转换为静态图网络结构,兼顾了动态图易用性和静态图部署性能两方面的优势。 如下将详细地介绍动静转换的各个模块内容: From 81646f45059a2307e06e02ff5712310b655ca789 Mon Sep 17 00:00:00 2001 From: moguguo Date: Mon, 15 Nov 2021 16:16:41 +0800 Subject: [PATCH 2/7] =?UTF-8?q?=E5=8A=A8=E8=BD=AC=E9=9D=99=E6=A6=82?= =?UTF-8?q?=E8=BF=B0=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 增加动转静方案示意图 --- .../images/dygraph_to_static.png | Bin 0 -> 75142 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/guides/04_dygraph_to_static/images/dygraph_to_static.png diff --git a/docs/guides/04_dygraph_to_static/images/dygraph_to_static.png b/docs/guides/04_dygraph_to_static/images/dygraph_to_static.png new file mode 100644 index 0000000000000000000000000000000000000000..9db5392c5b2823d30e76f28478bd5658c81e35fa GIT binary patch literal 75142 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 z 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 literal 0 HcmV?d00001 From 1705fb30bb08e89a64be396b7c4961c560b232e1 Mon Sep 17 00:00:00 2001 From: Chen Long <1300851984@qq.com> Date: Tue, 16 Nov 2021 10:35:47 +0800 Subject: [PATCH 3/7] update style update style --- docs/guides/04_dygraph_to_static/index_cn.rst | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/docs/guides/04_dygraph_to_static/index_cn.rst b/docs/guides/04_dygraph_to_static/index_cn.rst index 1a1604b52a9..4656fe5f01e 100644 --- a/docs/guides/04_dygraph_to_static/index_cn.rst +++ b/docs/guides/04_dygraph_to_static/index_cn.rst @@ -6,35 +6,38 @@ 什么是动态图和静态图? ========================= -从深度学习模型构建方式上看,飞桨框架支持动态图编程(Imperative programming)和静态图编程(Declarative programming)两种方式,其代码编写方式和执行方式均存在差异。 +从深度学习模型构建方式上看,飞桨框架支持动态图编程和静态图编程两种方式,其代码编写方式和执行方式均存在差异。 -* **动态图编程:**采用Python风格的编程方式,解析式的执行方式。用户每写一行网络代码,即可同时获得计算结果。在 -`模型开发 <../02_paddle2.0_develop/index_cn.rst>`_章节中,介绍的都是动态图编程方式。 -* **静态图编程:**采用先编译后执行的方式。用户先预定义完整的神经网络结构,飞桨框架将神经网络描述为Program的数据结构,对Program进行编译优化,再调用执行器获得计算结果。 +* **动态图编程:** 采用 Python 风格的编程方式,解析式的执行方式。每写一行网络代码,即可同时获得计算结果。在 +`模型开发 <../02_paddle2.0_develop/index_cn.html>`_ 章节中,介绍的都是动态图编程方式。 -动态图编程体验更佳、更易调试,但是因为采用Python实时执行的方式,而Python执行开销较大,与C++有一定差距,性能方面不占优。静态图调试难度大,但是将前端Python编写的神经网络预定义为Program描述,转到C++端重新解析执行,脱离了Python依赖,往往执行性能更佳,并且预先拥有完整网络结构也更利于全局优化。 +* **静态图编程:** 采用先编译后执行的方式。先预定义完整的神经网络结构,飞桨框架将神经网络描述为 `Program` 的数据结构,对 `Program` 进行编译优化,再调用执行器获得计算结果。 + +动态图编程体验更佳、更易调试,但是因为采用 Python 实时执行的方式,而 Python 执行开销较大,与 C++ 有一定差距,性能方面不占优。静态图调试难度大,但是将前端 Python 编写的神经网络预定义为 Program描述,转到 C++ 端重新解析执行,脱离了 Python 依赖,往往执行性能更佳,并且预先拥有完整网络结构也更利于全局优化。 ========================= 什么场景下需要动态图转静态图? ========================= 飞桨框架在设计时,考虑同时兼顾动态图的高易用性和静态图的高性能优势,采用『动静统一』的方案: -* **在模型开发时,推荐采用动态图编程:**用户可获得更好的编程体验、更易用的接口、更友好的调试交互机制。 -* **在模型训练或者推理部署时,只需添加一行装饰器 @to_static,即可将动态图代码转写为静态图代码,并在底层自动使用静态图执行器运行:**获得更好的模型运行性能。 + +* **在模型开发时,推荐采用动态图编程:** 可获得更好的编程体验、更易用的接口、更友好的调试交互机制。 + +* **在模型训练或者推理部署时,只需添加一行装饰器 @to_static,即可将动态图代码转写为静态图代码,并在底层自动使用静态图执行器运行:** 获得更好的模型运行性能。 方案如下图所示: + .. image:: images/dygraph_to_static.png 图1 飞桨框架动静统一方案示意图 -> **说明:** -> 飞桨框架2.0默认的编程模式是动态图模式,包括使用高层API编程和基础的API编程。如果想切换到静态图模式编程,可以在程序的开始执行enable_static()函数。如果程序已经使用动态图的模式编写了,想转成静态图模式训练或者保存模型用于部署,可以使用装饰器@to_static。 +.. note:: +飞桨框架2.0默认的编程模式是动态图模式,包括使用高层API编程和基础的API编程。如果想切换到静态图模式编程,可以在程序的开始执行enable_static()函数。如果程序已经使用动态图的模式编写了,想转成静态图模式训练或者保存模型用于部署,可以使用装饰器@to_static。 想了解动态图和静态图的详细对比介绍,可参见 `动态图和静态图的差异 `_。 - -如下将详细地介绍动静转换的各个模块内容: +以下将详细地介绍动静转换的各个模块内容: - `基础接口用法 `_ : 介绍了动静转换 @to_static 的基本用法 From dc8d12431c5a2aba0456c33074cb2f56c544992d Mon Sep 17 00:00:00 2001 From: moguguo Date: Tue, 16 Nov 2021 16:57:16 +0800 Subject: [PATCH 4/7] update style --- docs/guides/04_dygraph_to_static/index_cn.rst | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/docs/guides/04_dygraph_to_static/index_cn.rst b/docs/guides/04_dygraph_to_static/index_cn.rst index 4656fe5f01e..65626534596 100644 --- a/docs/guides/04_dygraph_to_static/index_cn.rst +++ b/docs/guides/04_dygraph_to_static/index_cn.rst @@ -23,15 +23,18 @@ * **在模型开发时,推荐采用动态图编程:** 可获得更好的编程体验、更易用的接口、更友好的调试交互机制。 -* **在模型训练或者推理部署时,只需添加一行装饰器 @to_static,即可将动态图代码转写为静态图代码,并在底层自动使用静态图执行器运行:** 获得更好的模型运行性能。 +* **在模型训练或者推理部署时,只需添加一行装饰器 @to_static,即可将动态图代码转写为静态图代码,并在底层自动使用静态图执行器运行:** 可获得更好的模型运行性能。 方案如下图所示: .. image:: images/dygraph_to_static.png -图1 飞桨框架动静统一方案示意图 + :width: 500px + :align: center + +.. centered:: 图1 飞桨框架动静统一方案示意图 .. note:: -飞桨框架2.0默认的编程模式是动态图模式,包括使用高层API编程和基础的API编程。如果想切换到静态图模式编程,可以在程序的开始执行enable_static()函数。如果程序已经使用动态图的模式编写了,想转成静态图模式训练或者保存模型用于部署,可以使用装饰器@to_static。 + 飞桨框架 2.0 及以上版本默认的编程模式是动态图模式,包括使用高层 API 编程和基础的 API 编程。如果想切换到静态图模式编程,可以在程序的开始执行 `enable_static()` 函数。如果程序已经使用动态图的模式编写了,想转成静态图模式训练或者保存模型用于部署,可以使用装饰器 @to_static。 想了解动态图和静态图的详细对比介绍,可参见 `动态图和静态图的差异 `_。 From 3e5bc03b65b8781966714e2a5e67fa089917e47d Mon Sep 17 00:00:00 2001 From: moguguo Date: Wed, 17 Nov 2021 11:17:29 +0800 Subject: [PATCH 5/7] Update index_cn.rst --- docs/guides/04_dygraph_to_static/index_cn.rst | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/docs/guides/04_dygraph_to_static/index_cn.rst b/docs/guides/04_dygraph_to_static/index_cn.rst index 65626534596..ce77e3bc6a0 100644 --- a/docs/guides/04_dygraph_to_static/index_cn.rst +++ b/docs/guides/04_dygraph_to_static/index_cn.rst @@ -6,14 +6,13 @@ 什么是动态图和静态图? ========================= -从深度学习模型构建方式上看,飞桨框架支持动态图编程和静态图编程两种方式,其代码编写方式和执行方式均存在差异。 +在深度学习模型构建上,飞桨框架支持动态图编程和静态图编程两种方式,其代码编写和执行方式均存在差异。 -* **动态图编程:** 采用 Python 风格的编程方式,解析式的执行方式。每写一行网络代码,即可同时获得计算结果。在 -`模型开发 <../02_paddle2.0_develop/index_cn.html>`_ 章节中,介绍的都是动态图编程方式。 +* **动态图编程:** 采用 Python 的编程风格,解析式地执行每一行网络代码,并同时返回计算结果。在`模型开发 <../02_paddle2.0_develop/index_cn.html>`_ 章节中,介绍的都是动态图编程方式。 -* **静态图编程:** 采用先编译后执行的方式。先预定义完整的神经网络结构,飞桨框架将神经网络描述为 `Program` 的数据结构,对 `Program` 进行编译优化,再调用执行器获得计算结果。 +* **静态图编程:** 采用先编译后执行的方式。需先在代码中预定义完整的神经网络结构,飞桨框架会将神经网络描述为 `Program` 的数据结构,并对 `Program` 进行编译优化,再调用执行器获得计算结果。 -动态图编程体验更佳、更易调试,但是因为采用 Python 实时执行的方式,而 Python 执行开销较大,与 C++ 有一定差距,性能方面不占优。静态图调试难度大,但是将前端 Python 编写的神经网络预定义为 Program描述,转到 C++ 端重新解析执行,脱离了 Python 依赖,往往执行性能更佳,并且预先拥有完整网络结构也更利于全局优化。 +动态图编程体验更佳、更易调试,但是因为采用 Python 实时执行的方式,开销较大,在性能方面与 C++ 有一定差距;静态图调试难度大,但是将前端 Python 编写的神经网络预定义为 Program描述,转到 C++ 端重新解析执行,脱离了 Python 依赖,往往执行性能更佳,并且预先拥有完整网络结构也更利于全局优化。 ========================= 什么场景下需要动态图转静态图? @@ -21,14 +20,14 @@ 飞桨框架在设计时,考虑同时兼顾动态图的高易用性和静态图的高性能优势,采用『动静统一』的方案: -* **在模型开发时,推荐采用动态图编程:** 可获得更好的编程体验、更易用的接口、更友好的调试交互机制。 +* **在模型开发时,推荐采用动态图编程。** 可获得更好的编程体验、更易用的接口、更友好的调试交互机制。 -* **在模型训练或者推理部署时,只需添加一行装饰器 @to_static,即可将动态图代码转写为静态图代码,并在底层自动使用静态图执行器运行:** 可获得更好的模型运行性能。 +* **在模型训练或者推理部署时,只需添加一行装饰器 @to_static,即可将动态图代码转写为静态图代码,并在底层自动使用静态图执行器运行。** 可获得更好的模型运行性能。 方案如下图所示: .. image:: images/dygraph_to_static.png - :width: 500px + :width: 800px :align: center .. centered:: 图1 飞桨框架动静统一方案示意图 @@ -40,7 +39,7 @@ `动态图和静态图的差异 `_。 -以下将详细地介绍动静转换的各个模块内容: +**以下将详细地介绍动静转换的各个模块内容:** - `基础接口用法 `_ : 介绍了动静转换 @to_static 的基本用法 From 6daef9871cd7893b9c88bad2faf575dd8e672709 Mon Sep 17 00:00:00 2001 From: moguguo Date: Wed, 17 Nov 2021 16:21:54 +0800 Subject: [PATCH 6/7] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=A0=BC=E5=BC=8F?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/guides/04_dygraph_to_static/index_cn.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/guides/04_dygraph_to_static/index_cn.rst b/docs/guides/04_dygraph_to_static/index_cn.rst index ce77e3bc6a0..2429f0f2938 100644 --- a/docs/guides/04_dygraph_to_static/index_cn.rst +++ b/docs/guides/04_dygraph_to_static/index_cn.rst @@ -8,7 +8,7 @@ 在深度学习模型构建上,飞桨框架支持动态图编程和静态图编程两种方式,其代码编写和执行方式均存在差异。 -* **动态图编程:** 采用 Python 的编程风格,解析式地执行每一行网络代码,并同时返回计算结果。在`模型开发 <../02_paddle2.0_develop/index_cn.html>`_ 章节中,介绍的都是动态图编程方式。 +* **动态图编程:** 采用 Python 的编程风格,解析式地执行每一行网络代码,并同时返回计算结果。在 `模型开发 <../02_paddle2.0_develop/index_cn.html>`_ 章节中,介绍的都是动态图编程方式。 * **静态图编程:** 采用先编译后执行的方式。需先在代码中预定义完整的神经网络结构,飞桨框架会将神经网络描述为 `Program` 的数据结构,并对 `Program` 进行编译优化,再调用执行器获得计算结果。 From 9c5b702b4df7043c1a18aa374336d9dc2380e209 Mon Sep 17 00:00:00 2001 From: Chen Long <1300851984@qq.com> Date: Fri, 19 Nov 2021 17:25:48 +0800 Subject: [PATCH 7/7] update codes --- docs/guides/04_dygraph_to_static/index_cn.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/guides/04_dygraph_to_static/index_cn.rst b/docs/guides/04_dygraph_to_static/index_cn.rst index 2429f0f2938..fe6a61bd9a5 100644 --- a/docs/guides/04_dygraph_to_static/index_cn.rst +++ b/docs/guides/04_dygraph_to_static/index_cn.rst @@ -26,12 +26,14 @@ 方案如下图所示: -.. image:: images/dygraph_to_static.png +.. figure:: images/dygraph_to_static.png :width: 800px :align: center + .. centered:: 图1 飞桨框架动静统一方案示意图 + .. note:: 飞桨框架 2.0 及以上版本默认的编程模式是动态图模式,包括使用高层 API 编程和基础的 API 编程。如果想切换到静态图模式编程,可以在程序的开始执行 `enable_static()` 函数。如果程序已经使用动态图的模式编写了,想转成静态图模式训练或者保存模型用于部署,可以使用装饰器 @to_static。