Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
FluidDoc
提交
6c71b655
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看板
提交
6c71b655
编写于
6月 28, 2018
作者:
T
typhoonzero
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update
上级
d335c67a
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
18 addition
and
3 deletion
+18
-3
source/user_guides/howto/training/cluster_howto.rst
source/user_guides/howto/training/cluster_howto.rst
+18
-3
未找到文件。
source/user_guides/howto/training/cluster_howto.rst
浏览文件 @
6c71b655
...
@@ -32,14 +32,29 @@ Fluid分布式训练使用手册
...
@@ -32,14 +32,29 @@ Fluid分布式训练使用手册
.. image:: src/dist_train_pserver.png
.. image:: src/dist_train_pserver.png
使用RPC通信方式的数据并行分布式训练,会启动多个pserver进程和多个trainer进程,每个pserver进程
会保存一部分模型参数,并负责接收从trainer发送的梯度并更新这些模型参数;每个trainer进程会保存一份
完整的模型,并使用一部分数据进行训练,然后向pserver发送梯度,最后从pserver拉取更新后的参数。
pserver进程可以在和trainer完全不同的计算节点上,也可以和trainer公用节点。一个分布式任务所需要的
pserver进程个数通常需要根据实际情况调整,已达到最佳的性能,然而通常来说pserver的进程不会比trainer
更多。
在使用GPU训练时,pserver可以选择使用GPU或只使用CPU,如果pserver也使用GPU,则会增加一次从CPU拷贝
接收到的梯度数据到GPU的开销,在某些情况下会导致整体训练性能降低。
- NCCL2通信方式的结构:
- NCCL2通信方式的结构:
.. image:: src/dist_train_nccl2.png
.. image:: src/dist_train_nccl2.png
使用NCCL2(Collective通信方式)进行分布式训练,是不需要启动pserver进程的,每个trainer进程都保存
一份完整的模型参数,在完成计算梯度之后通过trainer之间的相互通信,Reduce梯度数据到所有节点的所有设备
然后每个节点在各自完成参数更新。
使用parameter server方式的训练
使用parameter server方式的训练
---------------------------
---------------------------
使用
"trainer"
API,程序可以自动的通过识别环境变量决定是否已分布式方式执行。
使用
:code`trainer`
API,程序可以自动的通过识别环境变量决定是否已分布式方式执行。
.. csv-table:: 需要在您的分布式环境中配置的环境变量包括:
.. csv-table:: 需要在您的分布式环境中配置的环境变量包括:
:header: "环境变量", "说明"
:header: "环境变量", "说明"
...
@@ -51,8 +66,8 @@ Fluid分布式训练使用手册
...
@@ -51,8 +66,8 @@ Fluid分布式训练使用手册
"PADDLE_CURRENT_IP", "当前节点的IP"
"PADDLE_CURRENT_IP", "当前节点的IP"
"PADDLE_TRAINER_ID", "trainer节点的id,从0~n-1,不能有重复"
"PADDLE_TRAINER_ID", "trainer节点的id,从0~n-1,不能有重复"
使用更加底层的
"transpiler" API可以提供自定义的分布式训练的方法,比如可以在同一台机器上,启动多个pserver和trainer
使用更加底层的
:code:`transpiler` API可以提供自定义的分布式训练的方法,比如可以在同一台机器上,
进行训练,使用底层API的方法可以参考下面的样例代码:
启动多个pserver和trainer
进行训练,使用底层API的方法可以参考下面的样例代码:
.. code:: python
.. code:: python
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录