Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
BaiXuePrincess
PaddleRec
提交
52649a21
P
PaddleRec
项目概览
BaiXuePrincess
/
PaddleRec
与 Fork 源项目一致
Fork自
PaddlePaddle / PaddleRec
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
PaddleRec
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
52649a21
编写于
7月 22, 2020
作者:
W
wuzhihua
提交者:
GitHub
7月 22, 2020
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #150 from MrChengmo/fix_distributed
Fix distributed
上级
6eef2a3f
b1fdf253
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
116 addition
and
36 deletion
+116
-36
core/engine/cluster/cloud/cluster.sh
core/engine/cluster/cloud/cluster.sh
+2
-0
core/engine/cluster/cloud/k8s_config.ini.template
core/engine/cluster/cloud/k8s_config.ini.template
+1
-0
core/engine/cluster/cloud/mpi_config.ini.template
core/engine/cluster/cloud/mpi_config.ini.template
+1
-0
core/engine/cluster/cluster.py
core/engine/cluster/cluster.py
+10
-3
doc/distributed_train.md
doc/distributed_train.md
+25
-8
doc/yaml.md
doc/yaml.md
+77
-25
未找到文件。
core/engine/cluster/cloud/cluster.sh
浏览文件 @
52649a21
...
...
@@ -59,6 +59,7 @@ function _gen_mpi_config() {
-e
"s#<
$
OUTPUT_PATH
$>
#
$OUTPUT_PATH
#g"
\
-e
"s#<
$
THIRDPARTY_PATH
$>
#
$THIRDPARTY_PATH
#g"
\
-e
"s#<
$
CPU_NUM
$>
#
$max_thread_num
#g"
\
-e
"s#<
$
USE_PYTHON3
$>
#
$USE_PYTHON3
#g"
\
-e
"s#<
$
FLAGS_communicator_is_sgd_optimizer
$>
#
$FLAGS_communicator_is_sgd_optimizer
#g"
\
-e
"s#<
$
FLAGS_communicator_send_queue_size
$>
#
$FLAGS_communicator_send_queue_size
#g"
\
-e
"s#<
$
FLAGS_communicator_thread_pool_size
$>
#
$FLAGS_communicator_thread_pool_size
#g"
\
...
...
@@ -76,6 +77,7 @@ function _gen_k8s_config() {
-e
"s#<
$
AFS_REMOTE_MOUNT_POINT
$>
#
$AFS_REMOTE_MOUNT_POINT
#g"
\
-e
"s#<
$
OUTPUT_PATH
$>
#
$OUTPUT_PATH
#g"
\
-e
"s#<
$
CPU_NUM
$>
#
$max_thread_num
#g"
\
-e
"s#<
$
USE_PYTHON3
$>
#
$USE_PYTHON3
#g"
\
-e
"s#<
$
FLAGS_communicator_is_sgd_optimizer
$>
#
$FLAGS_communicator_is_sgd_optimizer
#g"
\
-e
"s#<
$
FLAGS_communicator_send_queue_size
$>
#
$FLAGS_communicator_send_queue_size
#g"
\
-e
"s#<
$
FLAGS_communicator_thread_pool_size
$>
#
$FLAGS_communicator_thread_pool_size
#g"
\
...
...
core/engine/cluster/cloud/k8s_config.ini.template
浏览文件 @
52649a21
...
...
@@ -19,6 +19,7 @@ afs_local_mount_point="/root/paddlejob/workspace/env_run/afs/"
# 新k8s afs挂载帮助文档: http://wiki.baidu.com/pages/viewpage.action?pageId=906443193
PADDLE_PADDLEREC_ROLE=WORKER
use_python3=<$ USE_PYTHON3 $>
CPU_NUM=<$ CPU_NUM $>
GLOG_v=0
...
...
core/engine/cluster/cloud/mpi_config.ini.template
浏览文件 @
52649a21
...
...
@@ -17,6 +17,7 @@ output_path=<$ OUTPUT_PATH $>
thirdparty_path=<$ THIRDPARTY_PATH $>
PADDLE_PADDLEREC_ROLE=WORKER
use_python3=<$ USE_PYTHON3 $>
CPU_NUM=<$ CPU_NUM $>
GLOG_v=0
...
...
core/engine/cluster/cluster.py
浏览文件 @
52649a21
...
...
@@ -159,23 +159,30 @@ class ClusterEnvBase(object):
self
.
cluster_env
[
"PADDLE_VERSION"
]
=
self
.
backend_env
.
get
(
"config.paddle_version"
,
"1.7.2"
)
# python_version
self
.
cluster_env
[
"USE_PYTHON3"
]
=
self
.
backend_env
.
get
(
"config.use_python3"
,
"0"
)
# communicator
max_thread_num
=
int
(
envs
.
get_runtime_environ
(
"max_thread_num"
))
self
.
cluster_env
[
"FLAGS_communicator_is_sgd_optimizer"
]
=
self
.
backend_env
.
get
(
"config.communicator.FLAGS_communicator_is_sgd_optimizer"
,
0
)
self
.
cluster_env
[
"FLAGS_communicator_send_queue_size"
]
=
self
.
backend_env
.
get
(
"config.communicator.FLAGS_communicator_send_queue_size"
,
5
)
"config.communicator.FLAGS_communicator_send_queue_size"
,
max_thread_num
)
self
.
cluster_env
[
"FLAGS_communicator_thread_pool_size"
]
=
self
.
backend_env
.
get
(
"config.communicator.FLAGS_communicator_thread_pool_size"
,
32
)
self
.
cluster_env
[
"FLAGS_communicator_max_merge_var_num"
]
=
self
.
backend_env
.
get
(
"config.communicator.FLAGS_communicator_max_merge_var_num"
,
5
)
"config.communicator.FLAGS_communicator_max_merge_var_num"
,
max_thread_num
)
self
.
cluster_env
[
"FLAGS_communicator_max_send_grad_num_before_recv"
]
=
self
.
backend_env
.
get
(
"config.communicator.FLAGS_communicator_max_send_grad_num_before_recv"
,
5
)
max_thread_num
)
self
.
cluster_env
[
"FLAGS_communicator_fake_rpc"
]
=
self
.
backend_env
.
get
(
"config.communicator.FLAGS_communicator_fake_rpc"
,
0
)
self
.
cluster_env
[
"FLAGS_rpc_retry_times"
]
=
self
.
backend_env
.
get
(
...
...
doc/distributed_train.md
浏览文件 @
52649a21
...
...
@@ -69,6 +69,12 @@ dataset:
data_path
:
"
{workspace}/data/sample_data/train"
sparse_slots
:
"
click
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26"
dense_slots
:
"
dense_var:13"
phase
:
-
name
:
phase1
model
:
"
{workspace}/model.py"
dataset_name
:
dataloader_train
thread_num
:
1
```
分布式的训练配置可以改为:
...
...
@@ -101,6 +107,13 @@ dataset:
data_path
:
"
{workspace}/train_data"
sparse_slots
:
"
click
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26"
dense_slots
:
"
dense_var:13"
phase
:
-
name
:
phase1
model
:
"
{workspace}/model.py"
dataset_name
:
dataloader_train
# 分布式训练节点的CPU_NUM环境变量与thread_num相等,多个phase时,取最大的thread_num
thread_num
:
1
```
除此之外,还需关注数据及模型加载的路径,一般而言:
...
...
@@ -120,6 +133,8 @@ cluster_type: mpi # k8s 可选
config
:
# 填写任务运行的paddle官方版本号 >= 1.7.2, 默认1.7.2
paddle_version
:
"
1.7.2"
# 是否使用PaddleCloud运行环境下的Python3,默认使用python2
use_python3
:
1
# hdfs/afs的配置信息填写
fs_name
:
"
afs://xxx.com"
...
...
@@ -140,11 +155,13 @@ config:
# paddle参数服务器分布式底层超参,无特殊需求不理不改
communicator
:
# 使用SGD优化器时,建议设置为1
FLAGS_communicator_is_sgd_optimizer
:
0
# 以下三个变量默认都等于训练时的线程数:CPU_NUM
FLAGS_communicator_send_queue_size
:
5
FLAGS_communicator_thread_pool_size
:
32
FLAGS_communicator_max_merge_var_num
:
5
FLAGS_communicator_max_send_grad_num_before_recv
:
5
FLAGS_communicator_thread_pool_size
:
32
FLAGS_communicator_fake_rpc
:
0
FLAGS_rpc_retry_times
:
3
...
...
@@ -175,12 +192,12 @@ submit:
# for k8s gpu
# k8s gpu 模式下,训练节点数,及每个节点上的GPU卡数
k8s_trainers
:
2
k8s
-cpu-
cores
:
4
k8s
_cpu_
cores
:
4
k8s_gpu_card
:
1
# for k8s ps-cpu
k8s_trainers
:
2
k8s
-cpu-
cores
:
4
k8s
_cpu_
cores
:
4
k8s_ps_num
:
2
k8s_ps_cores
:
4
...
...
@@ -232,7 +249,7 @@ phase:
再新增
`backend.yaml`
```
yaml
backend
:
"
PaddleCloud"
cluster_type
:
mpi
cluster_type
:
mpi
# k8s可选
config
:
paddle_version
:
"
1.7.2"
...
...
@@ -317,7 +334,7 @@ phase:
```
yaml
backend
:
"
PaddleCloud"
cluster_type
:
k8s
#
k8s
可选
cluster_type
:
k8s
#
mpi
可选
config
:
# 填写任务运行的paddle官方版本号 >= 1.7.2, 默认1.7.2
...
...
@@ -357,7 +374,7 @@ submit:
# for k8s gpu
# k8s gpu 模式下,训练节点数,及每个节点上的GPU卡数
k8s_trainers
:
2
k8s
-cpu-
cores
:
4
k8s
_cpu_
cores
:
4
k8s_gpu_card
:
1
```
...
...
@@ -399,7 +416,7 @@ phase:
再新增
`backend.yaml`
```
yaml
backend
:
"
PaddleCloud"
cluster_type
:
k8s
#
k8s
可选
cluster_type
:
k8s
#
mpi
可选
config
:
# 填写任务运行的paddle官方版本号 >= 1.7.2, 默认1.7.2
...
...
@@ -439,7 +456,7 @@ submit:
# for k8s gpu
# k8s ps-cpu 模式下,训练节点数,参数服务器节点数,及每个节点上的cpu核心数及内存限制
k8s_trainers
:
2
k8s
-cpu-
cores
:
4
k8s
_cpu_
cores
:
4
k8s_ps_num
:
2
k8s_ps_cores
:
4
```
...
...
doc/yaml.md
浏览文件 @
52649a21
# PaddleRec yaml配置说明
# PaddleRec
config.
yaml配置说明
## 全局变量
...
...
@@ -12,31 +12,31 @@
## runner变量
| 名称 | 类型 |
取值
| 是否必须 | 作用描述 |
| :---------------------------: | :----------: | :-------------------------------------------: | :------: | :------------------------------------------------------------------: |
| name | string |
任意
| 是 | 指定runner名称 |
| 名称 | 类型 |
取值
| 是否必须 | 作用描述 |
| :---------------------------: | :----------: | :-------------------------------------------
------------
: | :------: | :------------------------------------------------------------------: |
| name | string |
任意
| 是 | 指定runner名称 |
| class | string | train(默认) / infer / local_cluster_train / cluster_train | 是 | 指定运行runner的类别(单机/分布式, 训练/预测) |
| device | string |
cpu(默认) / gpu
| 否 | 程序执行设备 |
| fleet_mode | string |
ps(默认) / pslib / collective
| 否 | 分布式运行模式 |
| selected_gpus | string |
"0"(默认)
| 否 | 程序运行GPU卡号,若以"0,1"的方式指定多卡,则会默认启用collective模式 |
| worker_num | int |
1(默认)
| 否 | 参数服务器模式下worker的数量 |
| server_num | int |
1(默认)
| 否 | 参数服务器模式下server的数量 |
| distribute_strategy | string |
async(默认)/sync/half_async/geo
| 否 | 参数服务器模式下训练模式的选择 |
| epochs | int |
>= 1
| 否 | 模型训练迭代轮数 |
| phases | list[string] |
由phase name组成的list
| 否 | 当前runner的训练过程列表,顺序执行 |
| init_model_path | string |
路径
| 否 | 初始化模型地址 |
| save_checkpoint_interval | int |
>= 1
| 否 | Save参数的轮数间隔 |
| save_checkpoint_path | string |
路径
| 否 | Save参数的地址 |
| save_inference_interval | int |
>= 1
| 否 | Save预测模型的轮数间隔 |
| save_inference_path | string |
路径
| 否 | Save预测模型的地址 |
| save_inference_feed_varnames | list[string] |
组网中指定Variable的name
| 否 | 预测模型的入口变量name |
| save_inference_fetch_varnames | list[string] |
组网中指定Variable的name
| 否 | 预测模型的出口变量name |
| print_interval | int |
>= 1
| 否 | 训练指标打印batch间隔 |
| instance_class_path | string |
路径
| 否 | 自定义instance流程实现的地址 |
| network_class_path | string |
路径
| 否 | 自定义network流程实现的地址 |
| startup_class_path | string |
路径
| 否 | 自定义startup流程实现的地址 |
| runner_class_path | string |
路径
| 否 | 自定义runner流程实现的地址 |
| terminal_class_path | string |
路径
| 否 | 自定义terminal流程实现的地址 |
| device | string |
cpu(默认) / gpu
| 否 | 程序执行设备 |
| fleet_mode | string |
ps(默认) / pslib / collective
| 否 | 分布式运行模式 |
| selected_gpus | string |
"0"(默认)
| 否 | 程序运行GPU卡号,若以"0,1"的方式指定多卡,则会默认启用collective模式 |
| worker_num | int |
1(默认)
| 否 | 参数服务器模式下worker的数量 |
| server_num | int |
1(默认)
| 否 | 参数服务器模式下server的数量 |
| distribute_strategy | string |
async(默认)/sync/half_async/geo
| 否 | 参数服务器模式下训练模式的选择 |
| epochs | int |
>= 1
| 否 | 模型训练迭代轮数 |
| phases | list[string] |
由phase name组成的list
| 否 | 当前runner的训练过程列表,顺序执行 |
| init_model_path | string |
路径
| 否 | 初始化模型地址 |
| save_checkpoint_interval | int |
>= 1
| 否 | Save参数的轮数间隔 |
| save_checkpoint_path | string |
路径
| 否 | Save参数的地址 |
| save_inference_interval | int |
>= 1
| 否 | Save预测模型的轮数间隔 |
| save_inference_path | string |
路径
| 否 | Save预测模型的地址 |
| save_inference_feed_varnames | list[string] |
组网中指定Variable的name
| 否 | 预测模型的入口变量name |
| save_inference_fetch_varnames | list[string] |
组网中指定Variable的name
| 否 | 预测模型的出口变量name |
| print_interval | int |
>= 1
| 否 | 训练指标打印batch间隔 |
| instance_class_path | string |
路径
| 否 | 自定义instance流程实现的地址 |
| network_class_path | string |
路径
| 否 | 自定义network流程实现的地址 |
| startup_class_path | string |
路径
| 否 | 自定义startup流程实现的地址 |
| runner_class_path | string |
路径
| 否 | 自定义runner流程实现的地址 |
| terminal_class_path | string |
路径
| 否 | 自定义terminal流程实现的地址 |
...
...
@@ -70,3 +70,55 @@
| optimizer.learning_rate | float | > 0 | 否 | 指定学习率 |
| reg | float | > 0 | 否 | L2正则化参数,只在SGD下生效 |
| others | / | / | / | 由各个模型组网独立指定 |
# PaddleRec backend.yaml配置说明
## 全局变量
| 名称 | 类型 | 取值 | 是否必须 | 作用描述 |
| :----------: | :----: | :-------------: | :------: | :----------------------------------------------: |
| backend | string | paddlecloud/k8s | 是 | 使用PaddleCloud平台提交,还是在公有云K8S集群提交 |
| cluster_type | string | mpi/k8s | 是 | 指定运行的计算集群: mpi 还是 k8s |
## config
| 名称 | 类型 | 取值 | 是否必须 | 作用描述 |
| :--------------------: | :----: | :-------------------------------------: | :------: | :------------------------------------------------------------------------------------------: |
| paddle_version | string | paddle官方版本号,如1.7.2/1.8.0/1.8.3等 | 否 | 指定运行训练使用的Paddle版本,默认1.7.2 |
| use_python3 | int | 0(默认)/1 | 否 | 指定是否使用python3进行训练 |
| fs_name | string | "afs://xxx.com" | 是 | hdfs/afs集群名称所需配置 |
| fs_ugi | string | "usr,pwd" | 是 | hdfs/afs集群密钥所需配置 |
| output_path | string | "/user/your/path" | 否 | 任务输出的远程目录 |
| train_data_path | string | "/user/your/path" | 是 | mpi集群下指定训练数据路径,paddlecloud会自动将数据分片并下载到工作目录的
`./train_data`
文件夹 |
| test_data_path | string | "/user/your/path" | 否 | mpi集群下指定测试数据路径,会自动下载到工作目录的
`./test_data`
文件夹 |
| thirdparty_path | string | "/user/your/path" | 否 | mpi集群下指定thirdparty路径,会自动下载到工作目录的
`./thirdparty`
文件夹 |
| afs_remote_mount_point | string | "/user/your/path" | 是 | k8s集群下指定远程路径的地址,会挂载到工作目录的
`./afs/下`
|
### config.communicator
| 名称 | 类型 | 取值 | 是否必须 | 作用描述 |
| :----------------------------------------------: | :---: | :------------: | :------: | :----------------------------------------------------: |
| FLAGS_communicator_is_sgd_optimizer | int | 0(默认)/1 | 否 | 异步分布式训练时的多线程的梯度融合方式是否使用SGD模式 |
| FLAGS_communicator_send_queue_size | int | 线程数(默认) | 否 | 分布式训练时发送队列的大小 |
| FLAGS_communicator_max_merge_var_num | int | 线程数(默认) | 否 | 分布式训练多线程梯度融合时,线程数的配置 |
| FLAGS_communicator_max_send_grad_num_before_recv | int | 线程数(默认) | 否 | 分布式训练使用独立recv参数线程时,与send的步调配置超参 |
| FLAGS_communicator_thread_pool_size | int | 32(默认) | 否 | 分布式训练时,多线程发送参数的线程池大小 |
| FLAGS_communicator_fake_rpc | int | 0(默认)/1 | 否 | 分布式训练时,选择不进行通信 |
| FLAGS_rpc_retry_times | int | 3(默认) | 否 | 分布式训练时,GRPC的失败重试次数 |
## submit
| 名称 | 类型 | 取值 | 是否必须 | 作用描述 |
| :-----------: | :----: | :-------------------------: | :------: | :------------------------------------------------------: |
| ak | string | PaddleCloud平台提供的ak密钥 | 是 | paddlecloud用户配置 |
| sk | string | PaddleCloud平台提供的sk密钥 | 否 | paddlecloud用户配置 |
| priority | string | normal/high/very_high | 否 | 任务优先级 |
| job_name | string | 任意 | 是 | 任务名称 |
| group | string | 计算资源所在组名称 | 是 | 组名称 |
| start_cmd | string | 任意 | 是 | 启动命令,默认
`python -m paddlerec.run -m ./config.yaml`
|
| files | string | 任意 | 是 | 随任务提交上传的文件,给出相对或绝对路径 |
| nodes | int | >=1(默认1) | 否 | mpi集群下的节点数 |
| k8s_trainers | int | >=1(默认1) | 否 | k8s集群下worker的节点数 |
| k8s_cpu_cores | int | >=1(默认1) | 否 | k8s集群下worker的CPU核数 |
| k8s_gpu_card | int | >=1(默认1) | 否 | k8s集群下worker的GPU卡数 |
| k8s_ps_num | int | >=1(默认1) | 否 | k8s集群下server的节点数 |
| k8s_ps_cores | int | >=1(默认1) | 否 | k8s集群下server的CPU核数 |
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录