Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
FluidDoc
提交
b23853a2
F
FluidDoc
项目概览
PaddlePaddle
/
FluidDoc
通知
5
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
23
列表
看板
标记
里程碑
合并请求
111
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
F
FluidDoc
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
23
Issue
23
列表
看板
标记
里程碑
合并请求
111
合并请求
111
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
b23853a2
编写于
3月 29, 2019
作者:
W
Wu Yi
提交者:
Cheerego
3月 29, 2019
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
refine dist doc (#733)
上级
868d40e7
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
13 addition
and
4 deletion
+13
-4
doc/fluid/user_guides/howto/training/cluster_howto.rst
doc/fluid/user_guides/howto/training/cluster_howto.rst
+13
-4
未找到文件。
doc/fluid/user_guides/howto/training/cluster_howto.rst
浏览文件 @
b23853a2
...
...
@@ -40,8 +40,11 @@
pserver进程个数通常需要根据实际情况调整,以达到最佳的性能,然而通常来说pserver的进程不会比trainer\
更多。
在使用GPU训练时,pserver可以选择使用GPU或只使用CPU,如果pserver也使用GPU,则会增加一次从CPU拷贝\
**注:**
在使用GPU训练时,pserver可以选择使用GPU或只使用CPU,如果pserver也使用GPU,则会增加一次从CPU拷贝\
接收到的梯度数据到GPU的开销,在某些情况下会导致整体训练性能降低。
**注:** 在使用GPU训练时,如果每个trainer节点有多个GPU卡,则会先在每个trainer节点的多个卡之间执行\
NCCL2通信方式的梯度聚合,然后再通过pserver聚合多个节点的梯度。
- NCCL2通信方式的结构:
...
...
@@ -191,7 +194,10 @@ NCCL2模式的分布式训练,由于没有parameter server角色,是trainer
* 配置 :code:`fluid.DistributeTranspilerConfig` 中 :code:`mode="nccl2"` 。
* 调用 :code:`transpile` 时,:code:`trainers` 传入所有trainer节点的endpoint,并且传入参数 :code:`current_endpoint` 。
在此步骤中,会在 :code:`startup program` 中增加 :code:`gen_nccl_id_op` 用于在多机程序初始化时同步NCCLID信息。
* 初始化 :code:`ParallelExecutor` 时传入 :code:`num_trainers` 和 :code:`trainer_id` 。
在此步骤中,:code:`ParallelExecutor` 会使用多机方式初始化NCCL2并可以开始在多个节点对每个参数对应的梯度执行跨节点的
:code:`allreduce` 操作,执行多机同步训练
一个例子:
...
...
@@ -211,9 +217,9 @@ NCCL2模式的分布式训练,由于没有parameter server角色,是trainer
.. csv-table:: NCCL2模式必要参数说明
:header: "参数", "说明"
"trainer_id", "任务中每个trainer节点的唯一ID,从0开始,不能有重复"
"trainers", "任务中所有trainer节点的endpoint,用于在NCCL2初始化时,广播NCCL ID"
"current_endpoint", "当前节点的endpoint"
"trainer_id", "
(int)
任务中每个trainer节点的唯一ID,从0开始,不能有重复"
"trainers", "
(int)
任务中所有trainer节点的endpoint,用于在NCCL2初始化时,广播NCCL ID"
"current_endpoint", "
(string)
当前节点的endpoint"
目前使用NCCL2进行分布式训练仅支持同步训练方式。使用NCCL2方式的分布式训练,更适合模型体积较大,并需要使用\
同步训练和GPU训练,如果硬件设备支持RDMA和GPU Direct,可以达到很高的分布式训练性能。
...
...
@@ -247,8 +253,11 @@ NCCL2分布式训练注意事项
- 随机采样一些数据,补全分配到较少数据的节点上。(推荐使用这种方法,以训练完整的数据集)。
- 在python代码中,每个节点每个pass只训练固定的batch数,如果这个节点数据较多,则不训练这些多出来的数据。
**说明:** 使用NCCL2模式分布式训练时,如果只希望使用一个节点上的部分卡,可以通过配置环境变量::code:`export CUDA_VISIBLE_DEVICES=0,1,2,3` 指定。
**注意:** 如果系统中有多个网络设备,需要手动指定NCCL2使用的设备,假设需要使用 :code:`eth2` 为通信设备,需要设定如下环境变量:
.. code-block:: bash
export NCCL_SOCKET_IFNAME=eth2
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录