提交 779bfca9 编写于 作者: H Hao Wang 提交者: Cheerego

Change api guides directory (#633)

* Change api guides directory

* fix wrong ref

* Update memory_optimize.rst
上级 bc9ea57a
......@@ -10,10 +10,10 @@ API Reference
=============
.. toctree::
:maxdepth: 1
''')
file_object.write(' api_guides/index.rst'+'\n')
file_object.write(' ../api_guides/index.rst'+'\n')
file_object.write(' fluid_cn.rst'+'\n')
for file_name in sorted(glob.glob("*.rst")):
if file_name != ('index_cn.rst' and 'fluid_cn.rst'):
......
......@@ -3,9 +3,9 @@ API
=====
.. toctree::
:maxdepth: 1
api_guides/index.rst
../api_guides/index.rst
fluid_cn.rst
average_cn.rst
backward_cn.rst
......
## Introduction to High/Low-level API
Currently PaddlePaddle Fluid has 2 branches of API interfaces:
- Low-level API:
- It is highly flexible and relatively mature. The model trained by it can directly support C++ inference deployment and release.
- There are a large number of models as examples, including all chapters in [book](https://github.com/PaddlePaddle/book), and [models](https://github.com/PaddlePaddle/models).
- Recommended for users who have a certain understanding of deep learning and need to customize a network for training/inference/online deployment.
- High-level API:
- Simple to use
- Still under development. the interface is temporarily in [paddle.fluid.contrib](https://github.com/PaddlePaddle/Paddle/tree/develop/python/paddle/fluid/contrib).
\ No newline at end of file
===========
API Guides
===========
This section introduces the Fluid API structure and usage, to help you quickly get the full picture of the PaddlePaddle Fluid API. This section is divided into the following modules:
.. toctree::
:maxdepth: 1
high_low_level_api_en.md
low_level/layers/index_en.rst
low_level/executor_en.rst
low_level/optimizer_en.rst
low_level/metrics_en.rst
low_level/model_save_reader_en.rst
low_level/inference_en.rst
low_level/distributed/index_en.rst
low_level/memory_optimize_en.rst
low_level/nets_en.rst
low_level/parallel_executor_en.rst
......@@ -12,7 +12,7 @@ Fluid支持数据并行的分布式异步训练,API使用 :code:`DistributedTr
pserver模式分布式异步训练
======================
API详细使用方法参考 :ref: `api_fluid_DistributeTranspiler` ,简单示例用法:
API详细使用方法参考 :ref:`cn_api_fluid_DistributeTranspiler` ,简单示例用法:
.. code-block:: python
......@@ -26,7 +26,7 @@ API详细使用方法参考 :ref: `api_fluid_DistributeTranspiler` ,简单示
trainers=1,
sync_mode=False)
以上参数说明请参考`同步训练 <../distributed/sync_training.html>`_
以上参数说明请参考 `同步训练 <../distributed/sync_training.html>`_
需要注意的是:进行异步训练时,请修改 :code:`sync_mode` 的值
......
......@@ -46,7 +46,7 @@ API详细使用方法参考 :ref:`cn_api_fluid_ParallelExecutor` ,简单实例
提高通信速度
==========
要减少通信数据量,提高通信速度,主要是使用稀疏更新 ,目前支持 `稀疏更新 <../distributed/sparse_update.html>`_ 的主要是 :ref:`cn_api_fluid_layers_embedding` 。
要减少通信数据量,提高通信速度,主要是使用稀疏更新 ,目前支持 `稀疏更新 <../layers/sparse_update.html>`_ 的主要是 :ref:`cn_api_fluid_layers_embedding` 。
.. code-block:: python
......
====================
Distributed Training
====================
.. toctree::
:maxdepth: 1
sync_training_en.rst
async_training_en.rst
cpu_train_best_practice_en.rst
large_scale_sparse_feature_training_en.rst
cluster_train_data_en.rst
......@@ -11,14 +11,15 @@
embedding被广泛应用在各种网络结构中,尤其是文本处理相关的模型。在某些场景,例如推荐系统或者搜索引擎中,
embedding的feature id可能会非常多,当feature id达到一定数量时,embedding参数会变得很大,
会带来两个问题:
1)单机内存由于无法存放如此巨大的embedding参数,导致无法训练;
2)普通的训练模式每一轮迭代都需要同步完整的参数,参数太大会让通信变得非常慢,进而影响训练速度。
1. 单机内存由于无法存放如此巨大的embedding参数,导致无法训练;
2. 普通的训练模式每一轮迭代都需要同步完整的参数,参数太大会让通信变得非常慢,进而影响训练速度。
Fluid支持千亿量级超大规模稀疏特征embedding的训练,embedding参数只会保存在parameter server上,通过
参数prefetch和梯度稀疏更新的方法,大大减少通信量,提高通信速度。
该功能只对分布式训练有效,单机无法使用。
需要配合 `稀疏更新 <../distributed/sparse_update.html>`_ 一起使用。
需要配合 `稀疏更新 <../layers/sparse_update.html>`_ 一起使用。
使用方法:在配置embedding的时候,加上参数 :code:`is_distributed=True` 以及 :code:`is_sparse=True` 即可。
参数 :code:`dict_size` 定义数据中总的id的数量,id可以是int64范围内的任意值,只要总id个数小于等于dict_size就可以支持。
......@@ -38,5 +39,6 @@ Fluid支持千亿量级超大规模稀疏特征embedding的训练,embedding参
=============
当特征数量达到千亿的时候,参数量很大,单机已经无法存下,所以模型的存储和加载都和普通模式不同:
1)普通模式下,参数是在trainer端保存和加载的;
2)分布式模式下,参数的保存和加载,都是在pserver端进行,每个pserver只保存和加载该pserver自身对应部分的参数
1. 普通模式下,参数是在trainer端保存和加载的;
2. 分布式模式下,参数的保存和加载,都是在pserver端进行,每个pserver只保存和加载该pserver自身对应部分的参数
=====================
Neural Network Layer
=====================
.. toctree::
:maxdepth: 1
conv_en.rst
pooling_en.rst
detection_en.rst
sequence_en.rst
math_en.rst
activations_en.rst
loss_function_en.rst
data_in_out_en.rst
control_flow_en.rst
sparse_update_en.rst
data_feeder_en.rst
learning_rate_scheduler_en.rst
tensor_en.rst
......@@ -6,7 +6,7 @@
当我们使用诸如梯度下降法等方式来训练模型时,一般会兼顾训练速度和损失(loss)来选择相对合适的学习率。但若在训练过程中一直使用一个学习率,训练集的损失下降到一定程度后便不再继续下降,而是在一定范围内震荡。其震荡原理如下图所示,即当损失函数收敛到局部极小值附近时,会由于学习率过大导致更新步幅过大,每步参数更新会反复越过极小值而出现震荡。
.. image:: ../../../../images/learning_rate_scheduler.png
.. image:: ../../../images/learning_rate_scheduler.png
:scale: 80 %
:align: center
......
......@@ -11,7 +11,7 @@ Fluid的 :ref:`cn_api_fluid_layers_embedding` 层在单机训练和分布式训
如图所示:一个Tensor中有两行不为0,正向计算的过程中,我们使用ids存储不为0的行,并使用对应的两行数据来进行计算;反向更新的过程也只更新这两行。
.. image:: ../../../../images/lookup_table_training.png
.. image:: ../../../images/lookup_table_training.png
:scale: 50 %
embedding使用例子:
......
......@@ -4,7 +4,7 @@
张量
########
Fluid 中使用两种数据结构来承载数据,分别是 `Tensor 和 LoD_Tensor <../../../../user_guides/howto/prepare_data/lod_tensor.html>`_ 。 其中 LoD-Tensor 是 Fluid 的特有概念,它在 Tensor 基础上附加了序列信息。框架中可传输的数据包括:输入、输出、网络中的可学习参数,全部统一使用 LoD-Tensor 表示,Tensor 可以看作是一种特殊的 LoD-Tensor。
Fluid 中使用两种数据结构来承载数据,分别是 `Tensor 和 LoD_Tensor <../../../user_guides/howto/basic_concept/lod_tensor.html>`_ 。 其中 LoD-Tensor 是 Fluid 的特有概念,它在 Tensor 基础上附加了序列信息。框架中可传输的数据包括:输入、输出、网络中的可学习参数,全部统一使用 LoD-Tensor 表示,Tensor 可以看作是一种特殊的 LoD-Tensor。
下面介绍这两种数据的相关操作。
......@@ -125,7 +125,7 @@ API reference 请参考: :ref:`cn_api_fluid_layers_reverse`
LoD-Tensor
============
LoD-Tensor非常适用于序列数据,相关知识可以参考阅读 `LoD_Tensor <../../../../user_guides/howto/prepare_data/lod_tensor.html>`_ 。
LoD-Tensor非常适用于序列数据,相关知识可以参考阅读 `LoD_Tensor <../../../user_guides/howto/basic_concept/lod_tensor.html>`_ 。
1. create_lod_tensor
-----------------------
......
......@@ -4,7 +4,7 @@
显存优化
#####
显存优化是通过分析、复用 :code:`Program` 中 :code:`Varaible` 使用的显存,从而降低 :code:`Program` 执行时显存消耗的方法。用户可以通过Python脚本调用 :code:`memory_optimize` 接口进行显存优化,显存优化的执行策略如下:
显存优化是通过分析、复用 :code:`Program` 中 :code:`Variable` 使用的显存,从而降低 :code:`Program` 执行时显存消耗的方法。用户可以通过Python脚本调用 :code:`memory_optimize` 接口进行显存优化,显存优化的执行策略如下:
- 首先根据 :code:`Program` 中 :code:`Operator` 之间的关系对 :code:`Variable` 的最后存活时间进行分析,得到每个 :code:`Variable` 的最后存活时间;
- 其次根据每个 :code:`Variable` 的最后存活时间,我们将到达存活时间、不再存活的 :code:`Variable` 所占用的显存提供给后来的 :code:`Variable` 使用。
......@@ -28,7 +28,7 @@
skip_opt_set=("fc"), skip_grads=True)
在这个示例中,:code:`fluid.memory_optimize` 接口对默认的 :code:`Program` 进行了 :code:`Variable` 最后存活时间的分析,并跳过了名字为 :code:`fc` 的 :code:`Variable` 以及网络反向部分的所有 :code:`Variable` 。
这部分 :code:`Variable` 的显存都不会被别的 :code:`Varaible` 再次使用。
这部分 :code:`Variable` 的显存都不会被别的 :code:`Variable` 再次使用。
指定显存优化等级
===========
......
......@@ -29,7 +29,7 @@
**注意** :如果在Reduce模式下使用 :code:`CPU` 多线程执行 :code:`Program` , :code:`Program` 的参数在多个线程间是共享的,在某些模型上,Reduce模式可以大幅节省内存。
由于模型的执行速度与模型结构和执行器的执行策略相关, :code:`ParallelExecutor` 允许用户修改执行器的相关参数,如:线程池大小( :code:`num_threads` )、多少次迭代之后清理一次临时变量 :code:`num_iteration_per_drop_scope` 等,更多信息请参考 :ref:`cn_api_fluid_ExecutionStrategy` >
由于模型的执行速度与模型结构和执行器的执行策略相关, :code:`ParallelExecutor` 允许用户修改执行器的相关参数,如:线程池大小( :code:`num_threads` )、多少次迭代之后清理一次临时变量 :code:`num_iteration_per_drop_scope` 等,更多信息请参考 :ref:`cn_api_fluid_ExecutionStrategy` 。
- 相关API汇总:
- :ref:`cn_api_fluid_ParallelExecutor`
......
......@@ -54,7 +54,7 @@ Operator
这是因为一些常见的对 Tensor 的操作可能是由更多基础操作构成,为了提高使用的便利性,框架内部对基础 Operator 进行了一些封装,包括创建 Operator 依赖可学习参数,可学习参数的初始化细节等,减少用户重复开发的成本。
更多内容可参考阅读 `Fluid设计思想 <../../../advanced_usage/design_idea/fluid_design_idea.html>`_
更多内容可参考阅读 `Fluid设计思想 <../../advanced_usage/design_idea/fluid_design_idea.html>`_
=========
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册