From b4be45bdd2fc2a2978a4257651d5ce6dd4f2d3aa Mon Sep 17 00:00:00 2001 From: esythan Date: Fri, 20 May 2022 11:11:57 +0000 Subject: [PATCH 1/7] add ps quick start --- .../cluster_quick_start_ps_cn.rst | 199 ++++++++++++++++++ .../06_distributed_training/index_cn.rst | 1 + 2 files changed, 200 insertions(+) create mode 100644 docs/guides/06_distributed_training/cluster_quick_start_ps_cn.rst diff --git a/docs/guides/06_distributed_training/cluster_quick_start_ps_cn.rst b/docs/guides/06_distributed_training/cluster_quick_start_ps_cn.rst new file mode 100644 index 00000000000..b0806eb3a53 --- /dev/null +++ b/docs/guides/06_distributed_training/cluster_quick_start_ps_cn.rst @@ -0,0 +1,199 @@ +.. _cluster_quick_start_ps: + +快速开始-参数服务器 +------------------------- + +搜索推荐场景经常面临两个问题: + +1. 海量训练数据:单机训练太慢,需要增加训练节点数。 +2. 特征维度高且稀疏化:模型稀疏参数过多,单机内存无法容纳,需要采用分布式存储。 + +参数服务器(ParameterServer)模式采用了一种将模型参数中心化管理的方式来实现模型参数的分布式存储和更新。该模式下的节点有两种不同的角色: + +1. 训练节点:该节点负责完成数据读取、从服务节点拉取参数、前向计算、反向梯度计算等过程,并将计算出的梯度上传至服务节点。 +2. 服务节点:在收到所有训练节点传来的梯度后,该节点会将梯度聚合并更新参数,供训练节点拉取进行下一轮的训练。 + +因此参数服务器模式对于存储超大规模模型参数的训练场景十分友好,常被用于训练拥有海量稀疏参数的搜索推荐领域模型。 + +2.1 任务介绍 +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +本节将采用推荐领域非常经典的模型wide_and_deep为例,介绍如何使用飞桨分布式完成参数服务器训练任务,本次快速开始的完整示例代码位于 https://github.com/PaddlePaddle/FleetX/tree/develop/examples/wide_and_deep_dataset。 +在编写分布式训练程序之前,用户需要确保已经安装PaddlePaddle2.3及以上版本的飞桨开源框架。 + +2.2 操作方法 +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +参数服务器训练的基本代码主要包括如下几个部分: + + 1. 导入分布式训练需要的依赖包。 + 2. 定义分布式模式并初始化分布式训练环境。 + 3. 加载模型。 + 4. 构建dataset加载数据 + 5. 定义参数更新策略及优化器。 + 6. 开始训练。 + +下面将逐一进行讲解。 + +2.2.1 导入依赖 +"""""""""""" + +导入必要的依赖,例如分布式训练专用的Fleet API(paddle.distributed.fleet)。 + +.. code-block:: python + + import paddle + import paddle.distributed.fleet as fleet + +2.2.2 定义分布式模式并初始化分布式训练环境 +"""""""""""" + +通过 ``fleet.init()`` 接口,用户可以定义训练相关的环境,注意此环境是用户预先在环境变量中配置好的,包括:训练节点个数,服务节点个数,当前节点的序号,服务节点完整的IP:PORT列表等。 + +.. code-block:: python + + # 当前参数服务器模式只支持静态图模式, 因此训练前必须指定 ``paddle.enable_static()`` + paddle.enable_static() + fleet.init(is_collective=False) + +2.2.3 加载模型 +"""""""""""" + +.. code-block:: python + + # 模型定义参考 examples/wide_and_deep_dataset 中 model.py + from model import WideDeepModel + + model = WideDeepModel() + model.net(is_train=True) + +2.2.4 构建dataset加载数据 +"""""""""""" + +.. code-block:: python + + # 具体数据处理参考examples/wide_and_deep_dataset中reader.py + dataset = paddle.distributed.QueueDataset() + thread_num = 1 + dataset.init(use_var=model.inputs, + pipe_command="python reader.py", + batch_size=batch_size, + thread_num=thread_num) + + train_files_list = [os.path.join(train_data_path, x) + for x in os.listdir(train_data_path)] + dataset.set_filelist(train_files_list) + +备注:dataset具体用法参见\ `使用InMemoryDataset/QueueDataset进行训练 `_\。 + + +2.2.5 定义同步训练 Strategy 及 Optimizer +"""""""""""" + +在Fleet API中,用户可以使用 ``fleet.DistributedStrategy()`` 接口定义自己想要使用的分布式策略。 + +其中 ``a_sync`` 选项用于定义参数服务器相关的策略,当其被设定为 ``False`` 时,分布式训练将在同步的模式下进行。反之,当其被设定成 ``True`` 时,分布式训练将在异步的模式下进行。 + +.. code-block:: python + + # 定义异步训练 + dist_strategy = fleet.DistributedStrategy() + dist_strategy.a_sync = True + + optimizer = paddle.optimizer.SGD(learning_rate=0.0001) + optimizer = fleet.distributed_optimizer(optimizer, dist_strategy) + optimizer.minimize(model.loss) + +2.2.6 开始训练 +"""""""""""" + +完成模型及训练策略以后,我们就可以开始训练模型了。因为在参数服务器模式下会有不同的角色,所以根据不同节点分配不同的任务。 + +对于服务器节点,首先用 ``init_server()`` 接口对其进行初始化,然后启动服务并开始监听由训练节点传来的梯度。 + +同样对于训练节点,用 ``init_worker()`` 接口进行初始化后, 开始执行训练任务。运行 ``exe.train_from_dataset()`` 接口开始训练。 + +.. code-block:: python + + if fleet.is_server(): + fleet.init_server() + fleet.run_server() + else: + exe = paddle.static.Executor(paddle.CPUPlace()) + exe.run(paddle.static.default_startup_program()) + + fleet.init_worker() + + for epoch_id in range(1): + exe.train_from_dataset(paddle.static.default_main_program(), + dataset, + paddle.static.global_scope(), + debug=False, + fetch_list=[train_model.cost], + fetch_info=["loss"], + print_period=1) + + fleet.stop_worker() + +备注:Paddle2.3版本及以后,ParameterServer训练将废弃掉dataloader + exe.run()方式,请切换到dataset + exe.train_from_dataset()方式。 + + +2.3 运行训练脚本 +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +定义完训练脚本后,我们就可以用 ``fleetrun`` 指令运行分布式任务了。其中 ``server_num`` , ``worker_num`` 分别为服务节点和训练节点的数量。在本例中,服务节点有1个,训练节点有2个。 + +.. code-block:: bash + + fleetrun --server_num=1 --trainer_num=2 train.py + +您将在执行终端看到如下日志信息: + +.. code-block:: bash + + LAUNCH INFO 2022-05-18 11:27:17,761 ----------- Configuration ---------------------- + LAUNCH INFO 2022-05-18 11:27:17,761 devices: None + LAUNCH INFO 2022-05-18 11:27:17,761 elastic_level: -1 + LAUNCH INFO 2022-05-18 11:27:17,761 elastic_timeout: 30 + LAUNCH INFO 2022-05-18 11:27:17,761 gloo_port: 6767 + LAUNCH INFO 2022-05-18 11:27:17,761 host: None + LAUNCH INFO 2022-05-18 11:27:17,761 job_id: default + LAUNCH INFO 2022-05-18 11:27:17,761 legacy: False + LAUNCH INFO 2022-05-18 11:27:17,761 log_dir: log + LAUNCH INFO 2022-05-18 11:27:17,761 log_level: INFO + LAUNCH INFO 2022-05-18 11:27:17,762 master: None + LAUNCH INFO 2022-05-18 11:27:17,762 max_restart: 3 + LAUNCH INFO 2022-05-18 11:27:17,762 nnodes: 1 + LAUNCH INFO 2022-05-18 11:27:17,762 nproc_per_node: None + LAUNCH INFO 2022-05-18 11:27:17,762 rank: -1 + LAUNCH INFO 2022-05-18 11:27:17,762 run_mode: collective + LAUNCH INFO 2022-05-18 11:27:17,762 server_num: 1 + LAUNCH INFO 2022-05-18 11:27:17,762 servers: + LAUNCH INFO 2022-05-18 11:27:17,762 trainer_num: 2 + LAUNCH INFO 2022-05-18 11:27:17,762 trainers: + LAUNCH INFO 2022-05-18 11:27:17,762 training_script: train.py + LAUNCH INFO 2022-05-18 11:27:17,762 training_script_args: [] + LAUNCH INFO 2022-05-18 11:27:17,762 with_gloo: 0 + LAUNCH INFO 2022-05-18 11:27:17,762 -------------------------------------------------- + LAUNCH INFO 2022-05-18 11:27:17,772 Job: default, mode ps, replicas 1[1:1], elastic False + LAUNCH INFO 2022-05-18 11:27:17,775 Run Pod: evjsyn, replicas 3, status ready + LAUNCH INFO 2022-05-18 11:27:17,795 Watching Pod: evjsyn, replicas 3, status running + +同时,在log目录下,会生成服务节点和训练节点的日志文件。 +服务节点日志:default.evjsyn.ps.0.log,日志中须包含以下内容,证明服务节点启动成功,可以提供服务。 + +.. code-block:: bash + + I0518 11:27:20.730531 177420 brpc_ps_server.cc:73] running server with rank id: 0, endpoint: IP:PORT + +训练节点日志:default.evjsyn.trainer.0.log,日志中打印了训练过程中的部分变量值。 + +.. code-block:: bash + + time: [2022-05-18 11:27:27], batch: [1], loss[1]:[0.666739] + time: [2022-05-18 11:27:27], batch: [2], loss[1]:[0.690405] + time: [2022-05-18 11:27:27], batch: [3], loss[1]:[0.681693] + time: [2022-05-18 11:27:27], batch: [4], loss[1]:[0.703863] + time: [2022-05-18 11:27:27], batch: [5], loss[1]:[0.670717] + +备注:启动相关问题,请参考\ `launch `_\。 \ No newline at end of file diff --git a/docs/guides/06_distributed_training/index_cn.rst b/docs/guides/06_distributed_training/index_cn.rst index e869479edad..3a3c0841dc2 100644 --- a/docs/guides/06_distributed_training/index_cn.rst +++ b/docs/guides/06_distributed_training/index_cn.rst @@ -5,6 +5,7 @@ 您可以通过以下内容,了解飞桨分布式训练的特性和使用指南: - `分布式训练快速开始 <./cluster_quick_start_cn.html>`_ : 使用飞桨框架快速开始分布式训练。 +- `快速开始-参数服务器 <./cluster_quick_start_ps_cn.html>`_ : 使用飞桨参数服务器快速开始分布式训练。 - `使用FleetAPI进行分布式训练 <./fleet_api_howto_cn.html>`_ : 使用飞桨框架FleetAPI完成分布式训练。 .. toctree:: From ae42409058380ac024681354d8140bdb1b4356d6 Mon Sep 17 00:00:00 2001 From: esythan Date: Tue, 24 May 2022 02:54:59 +0000 Subject: [PATCH 2/7] dataset and contents --- .../cluster_quick_start_ps_cn.rst | 13 ++++++++++++- docs/guides/06_distributed_training/index_cn.rst | 1 + 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/docs/guides/06_distributed_training/cluster_quick_start_ps_cn.rst b/docs/guides/06_distributed_training/cluster_quick_start_ps_cn.rst index 9d12f0d34b5..7c979640833 100644 --- a/docs/guides/06_distributed_training/cluster_quick_start_ps_cn.rst +++ b/docs/guides/06_distributed_training/cluster_quick_start_ps_cn.rst @@ -59,6 +59,7 @@ fleet.init(is_collective=False) 2.2.3 加载模型 +"""""""""""" .. code-block:: python @@ -70,6 +71,16 @@ 2.2.4 构建dataset加载数据 """""""""""" +由于搜索推荐场景涉及到的训练数据通常较大,为提升训练中的数据读取效率,参数服务器采用InMemoryDataset/QueueDataset进行高性能的IO。 + +InMemoryDataset/QueueDataset所对应的数据处理脚本参考examples/wide_and_deep_dataset中的reader.py,与单机DataLoader相比,存在如下区别: + + 1. 继承自 ``fleet.MultiSlotDataGenerator`` 基类。 + 2. 实现基类中的 ``generate_sample()`` 函数,逐行读取数据进行处理,并返回一个可以迭代的reader方法。 + 3. reader方法需返回一个list,其中的每个元素都是一个由参数名和对应值组成的元组。 + +在训练脚本中,构建dataset加载数据: + .. code-block:: python # 具体数据处理参考examples/wide_and_deep_dataset中reader.py @@ -84,7 +95,7 @@ for x in os.listdir(train_data_path)] dataset.set_filelist(train_files_list) -备注:dataset具体用法参见\ `使用InMemoryDataset/QueueDataset进行训练 `_\。 +备注:dataset更详细用法参见\ `使用InMemoryDataset/QueueDataset进行训练 `_\。 2.2.5 定义同步训练 Strategy 及 Optimizer diff --git a/docs/guides/06_distributed_training/index_cn.rst b/docs/guides/06_distributed_training/index_cn.rst index 1506e8053e7..f8ff3f158f1 100644 --- a/docs/guides/06_distributed_training/index_cn.rst +++ b/docs/guides/06_distributed_training/index_cn.rst @@ -14,4 +14,5 @@ deployment.rst cluster_quick_start_cn.rst + cluster_quick_start_ps_cn.rst fleet_api_howto_cn.rst From 170ab59391b115d89f7789472a75123cf45a9905 Mon Sep 17 00:00:00 2001 From: esythan Date: Tue, 24 May 2022 03:01:37 +0000 Subject: [PATCH 3/7] update title --- .../cluster_quick_start_ps_cn.rst | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/guides/06_distributed_training/cluster_quick_start_ps_cn.rst b/docs/guides/06_distributed_training/cluster_quick_start_ps_cn.rst index 7c979640833..cca357b8382 100644 --- a/docs/guides/06_distributed_training/cluster_quick_start_ps_cn.rst +++ b/docs/guides/06_distributed_training/cluster_quick_start_ps_cn.rst @@ -16,13 +16,13 @@ 因此参数服务器模式对于存储超大规模模型参数的训练场景十分友好,常被用于训练拥有海量稀疏参数的搜索推荐领域模型。 -2.1 任务介绍 +1.1 任务介绍 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 本节将采用推荐领域非常经典的模型wide_and_deep为例,介绍如何使用飞桨分布式完成参数服务器训练任务,本次快速开始的完整示例代码位于 https://github.com/PaddlePaddle/FleetX/tree/develop/examples/wide_and_deep_dataset。 在编写分布式训练程序之前,用户需要确保已经安装PaddlePaddle2.3及以上版本的飞桨开源框架。 -2.2 操作方法 +1.2 操作方法 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 参数服务器训练的基本代码主要包括如下几个部分: @@ -37,7 +37,7 @@ 下面将逐一进行讲解。 -2.2.1 导入依赖 +1.2.1 导入依赖 """""""""""" 导入必要的依赖,例如分布式训练专用的Fleet API(paddle.distributed.fleet)。 @@ -47,7 +47,7 @@ import paddle import paddle.distributed.fleet as fleet -2.2.2 定义分布式模式并初始化分布式训练环境 +1.2.2 定义分布式模式并初始化分布式训练环境 """""""""""" 通过 ``fleet.init()`` 接口,用户可以定义训练相关的环境,注意此环境是用户预先在环境变量中配置好的,包括:训练节点个数,服务节点个数,当前节点的序号,服务节点完整的IP:PORT列表等。 @@ -58,7 +58,7 @@ paddle.enable_static() fleet.init(is_collective=False) -2.2.3 加载模型 +1.2.3 加载模型 """""""""""" .. code-block:: python @@ -68,7 +68,7 @@ model = WideDeepModel() model.net(is_train=True) -2.2.4 构建dataset加载数据 +1.2.4 构建dataset加载数据 """""""""""" 由于搜索推荐场景涉及到的训练数据通常较大,为提升训练中的数据读取效率,参数服务器采用InMemoryDataset/QueueDataset进行高性能的IO。 @@ -98,7 +98,7 @@ InMemoryDataset/QueueDataset所对应的数据处理脚本参考examples/wide_an 备注:dataset更详细用法参见\ `使用InMemoryDataset/QueueDataset进行训练 `_\。 -2.2.5 定义同步训练 Strategy 及 Optimizer +1.2.5 定义同步训练 Strategy 及 Optimizer """""""""""" 在Fleet API中,用户可以使用 ``fleet.DistributedStrategy()`` 接口定义自己想要使用的分布式策略。 @@ -115,7 +115,7 @@ InMemoryDataset/QueueDataset所对应的数据处理脚本参考examples/wide_an optimizer = fleet.distributed_optimizer(optimizer, dist_strategy) optimizer.minimize(model.loss) -2.2.6 开始训练 +1.2.6 开始训练 """""""""""" 完成模型及训练策略以后,我们就可以开始训练模型了。因为在参数服务器模式下会有不同的角色,所以根据不同节点分配不同的任务。 @@ -149,7 +149,7 @@ InMemoryDataset/QueueDataset所对应的数据处理脚本参考examples/wide_an 备注:Paddle2.3版本及以后,ParameterServer训练将废弃掉dataloader + exe.run()方式,请切换到dataset + exe.train_from_dataset()方式。 -2.3 运行训练脚本 +1.3 运行训练脚本 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 定义完训练脚本后,我们就可以用 ``fleetrun`` 指令运行分布式任务了。其中 ``server_num`` , ``worker_num`` 分别为服务节点和训练节点的数量。在本例中,服务节点有1个,训练节点有2个。 From f00ccc6339dcdf79e0c8e62cccaa55b6940f8e92 Mon Sep 17 00:00:00 2001 From: esythan Date: Tue, 24 May 2022 07:47:58 +0000 Subject: [PATCH 4/7] reader --- .../06_distributed_training/cluster_quick_start_ps_cn.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/guides/06_distributed_training/cluster_quick_start_ps_cn.rst b/docs/guides/06_distributed_training/cluster_quick_start_ps_cn.rst index cca357b8382..2404899ef43 100644 --- a/docs/guides/06_distributed_training/cluster_quick_start_ps_cn.rst +++ b/docs/guides/06_distributed_training/cluster_quick_start_ps_cn.rst @@ -73,7 +73,7 @@ 由于搜索推荐场景涉及到的训练数据通常较大,为提升训练中的数据读取效率,参数服务器采用InMemoryDataset/QueueDataset进行高性能的IO。 -InMemoryDataset/QueueDataset所对应的数据处理脚本参考examples/wide_and_deep_dataset中的reader.py,与单机DataLoader相比,存在如下区别: +InMemoryDataset/QueueDataset所对应的数据处理脚本参考examples/wide_and_deep_dataset/reader.py,与单机DataLoader相比,存在如下区别: 1. 继承自 ``fleet.MultiSlotDataGenerator`` 基类。 2. 实现基类中的 ``generate_sample()`` 函数,逐行读取数据进行处理,并返回一个可以迭代的reader方法。 From be35cabc168b7fb93e6954b9a4016940c32b3bee Mon Sep 17 00:00:00 2001 From: esythan Date: Tue, 24 May 2022 12:30:51 +0000 Subject: [PATCH 5/7] update dataset --- .../cluster_quick_start_ps_cn.rst | 50 +++++++++++++++++-- 1 file changed, 47 insertions(+), 3 deletions(-) diff --git a/docs/guides/06_distributed_training/cluster_quick_start_ps_cn.rst b/docs/guides/06_distributed_training/cluster_quick_start_ps_cn.rst index 2404899ef43..2953330cd8d 100644 --- a/docs/guides/06_distributed_training/cluster_quick_start_ps_cn.rst +++ b/docs/guides/06_distributed_training/cluster_quick_start_ps_cn.rst @@ -76,16 +76,58 @@ InMemoryDataset/QueueDataset所对应的数据处理脚本参考examples/wide_and_deep_dataset/reader.py,与单机DataLoader相比,存在如下区别: 1. 继承自 ``fleet.MultiSlotDataGenerator`` 基类。 - 2. 实现基类中的 ``generate_sample()`` 函数,逐行读取数据进行处理,并返回一个可以迭代的reader方法。 - 3. reader方法需返回一个list,其中的每个元素都是一个由参数名和对应值组成的元组。 + 2. 实现基类中的 ``generate_sample()`` 函数,逐行读取数据进行处理(不需要对数据文件进行操作),并返回一个可以迭代的reader方法。 + 3. reader方法需返回一个list,其中的每个元素都是一个元组,元组的第一个元素为特征名(string类型),第二个元素为特征值(list类型) + +一个完整的reader.py伪代码如下: + +.. code-block:: python + + import paddle + # 导入所需要的fleet依赖 + import paddle.distributed.fleet as fleet + + # 需要继承fleet.MultiSlotDataGenerator + class WideDeepDatasetReader(fleet.MultiSlotDataGenerator): + def line_process(self, line): + features = line.rstrip('\n').split('\t') + # 省略数据处理过程,具体可参考单机reader + # 返回值为一个list,其中的每个元素均为一个list,不需要转成np.array格式 + return [dense_feature] + sparse_feature + [label] + + # 实现generate_sample()函数 + # 该方法有一个名为line的参数,只需要逐行处理数据,不需要对数据文件进行操作 + def generate_sample(self, line): + def wd_reader(): + # 按行处理数据 + input_data = self.line_process(line) + + # 构造特征名数组feature_name + feature_name = ["dense_input"] + for idx in categorical_range_: + feature_name.append("C" + str(idx - 13)) + feature_name.append("label") + + # 返回一个list,其中的每个元素都是一个元组 + # 元组的第一个元素为特征名(string类型),第二个元素为特征值(list类型) + yield zip(feature_name, input_data) + + # generate_sample()函数需要返回一个可以迭代的reader方法 + return wd_reader + + if __name__ == "__main__": + my_data_generator = WideDeepDatasetReader() + my_data_generator.run_from_stdin() 在训练脚本中,构建dataset加载数据: .. code-block:: python - # 具体数据处理参考examples/wide_and_deep_dataset中reader.py dataset = paddle.distributed.QueueDataset() thread_num = 1 + + # use_var指定网络中的输入数据,pipe_command指定数据处理脚本 + # 要求use_var中输入数据的顺序与数据处理脚本输出的特征顺序一一对应 dataset.init(use_var=model.inputs, pipe_command="python reader.py", batch_size=batch_size, @@ -93,6 +135,8 @@ InMemoryDataset/QueueDataset所对应的数据处理脚本参考examples/wide_an train_files_list = [os.path.join(train_data_path, x) for x in os.listdir(train_data_path)] + + # set_filelist指定dataset读取的训练文件的列表 dataset.set_filelist(train_files_list) 备注:dataset更详细用法参见\ `使用InMemoryDataset/QueueDataset进行训练 `_\。 From 3e8bd5321f86980954b9670d829817d7b4013769 Mon Sep 17 00:00:00 2001 From: Chen Long <1300851984@qq.com> Date: Wed, 25 May 2022 11:26:12 +0800 Subject: [PATCH 6/7] Update index_cn.rst --- docs/guides/06_distributed_training/index_cn.rst | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/docs/guides/06_distributed_training/index_cn.rst b/docs/guides/06_distributed_training/index_cn.rst index f8ff3f158f1..49ac7538c94 100644 --- a/docs/guides/06_distributed_training/index_cn.rst +++ b/docs/guides/06_distributed_training/index_cn.rst @@ -5,14 +5,12 @@ 您可以通过以下内容,了解飞桨分布式训练的特性和使用指南: - `环境部署 <./deployment_cn.html>`_ : 部署环境以使用飞桨框架进行分布式训练。 -- `分布式训练快速开始 <./cluster_quick_start_cn.html>`_ : 使用飞桨框架快速开始分布式训练。 +- `快速开始-数据并行 <./cluster_quick_start_collective_cn.html>`_ : 使用飞桨数据并行快速开始分布式训练。 - `快速开始-参数服务器 <./cluster_quick_start_ps_cn.html>`_ : 使用飞桨参数服务器快速开始分布式训练。 -- `使用FleetAPI进行分布式训练 <./fleet_api_howto_cn.html>`_ : 使用飞桨框架FleetAPI完成分布式训练。 .. toctree:: :hidden: deployment.rst - cluster_quick_start_cn.rst + cluster_quick_start_collective_cn.rst cluster_quick_start_ps_cn.rst - fleet_api_howto_cn.rst From f5e8effe80d09f33aae5ec57c464a84e73c86bf8 Mon Sep 17 00:00:00 2001 From: Chen Long <1300851984@qq.com> Date: Wed, 25 May 2022 11:27:52 +0800 Subject: [PATCH 7/7] Update index_cn.rst --- docs/guides/06_distributed_training/index_cn.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/guides/06_distributed_training/index_cn.rst b/docs/guides/06_distributed_training/index_cn.rst index 49ac7538c94..c769d162dbc 100644 --- a/docs/guides/06_distributed_training/index_cn.rst +++ b/docs/guides/06_distributed_training/index_cn.rst @@ -11,6 +11,6 @@ .. toctree:: :hidden: - deployment.rst + deployment_cn.rst cluster_quick_start_collective_cn.rst cluster_quick_start_ps_cn.rst