Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Crayon鑫
Paddle
提交
53f4451b
P
Paddle
项目概览
Crayon鑫
/
Paddle
与 Fork 源项目一致
Fork自
PaddlePaddle / Paddle
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Paddle
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
53f4451b
编写于
12月 18, 2017
作者:
T
typhoonzero
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update links
上级
e6306b4c
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
13 addition
and
14 deletion
+13
-14
doc/howto/usage/cluster/k8s_distributed_cn.md
doc/howto/usage/cluster/k8s_distributed_cn.md
+13
-14
未找到文件。
doc/howto/usage/cluster/k8s_distributed_cn.md
浏览文件 @
53f4451b
# Kubernetes分布式训练
前一篇文章介绍了如何在Kubernetes集群上启动一个单机PaddlePaddle训练作业 (Job)。在这篇文章里,我们介绍如何在Kubernetes集群上进行分布式PaddlePaddle训练作业。关于PaddlePaddle的分布式训练,文章
[
Cluster Training
](
http
s://github.com/baidu/Paddle/blob/develop/doc/cluster/opensource/cluster_train.md
)
介绍了一种通过SSH远程分发任务,进行分布式训练的方法,与此不同的是,本文将介绍在Kubernetes容器管理平台上快速构建PaddlePaddle容器集群,进行分布式训练的方案。
前一篇文章介绍了如何在Kubernetes集群上启动一个单机PaddlePaddle训练作业 (Job)。在这篇文章里,我们介绍如何在Kubernetes集群上进行分布式PaddlePaddle训练作业。关于PaddlePaddle的分布式训练,文章
[
Cluster Training
](
http
://www.paddlepaddle.org/docs/develop/documentation/zh/howto/usage/cluster/cluster_train_cn.html
)
介绍了一种通过SSH远程分发任务,进行分布式训练的方法,与此不同的是,本文将介绍在Kubernetes容器管理平台上快速构建PaddlePaddle容器集群,进行分布式训练的方案。
有关Kubernetes相关概念以及如何搭建和配置Kubernetes集群,可以参考
[
k8s_basis
](
./k8s_basis_cn.md
)
。
...
...
@@ -28,7 +28,7 @@ PaddlePaddle镜像需要提供`paddle pserver`与`paddle train`进程的运行
-
拷贝训练文件到容器内
-
生成
`paddle pserver`
与
`paddle train`
进程的启动参数,并且启动训练
因为官方镜像
`paddledev/paddle:cpu-latest`
内已经包含PaddlePaddle的执行程序但是还没上述功能,所以我们可以在这个基础上,添加启动脚本,制作新镜像来完成以上的工作。参考镜像的
[
*Dockerfile*
](
https://github.com/PaddlePaddle/Paddle/blob/develop/doc/howto/usage/cluster/
k8s/
src/k8s_train/Dockerfile
)
。
因为官方镜像
`paddledev/paddle:cpu-latest`
内已经包含PaddlePaddle的执行程序但是还没上述功能,所以我们可以在这个基础上,添加启动脚本,制作新镜像来完成以上的工作。参考镜像的
[
*Dockerfile*
](
https://github.com/PaddlePaddle/Paddle/blob/develop/doc/howto/usage/cluster/src/k8s_train/Dockerfile
)
。
```
bash
$
cd
doc/howto/usage/k8s/src/k8s_train
...
...
@@ -149,20 +149,19 @@ spec:
文件中,
`metadata`
下的
`name`
表示这个job的名字。
`parallelism,completions`
字段表示这个job会同时开启3个PaddlePaddle节点,成功训练且退出的pod数目为3时,这个job才算成功结束。然后申明一个存储卷
`jobpath`
,代表宿主机目录
`/home/work/mfs`
,在对容器的描述
`containers`
字段中,将此目录挂载为容器的
`/home/jobpath`
目录,这样容器的
`/home/jobpath`
目录就成为了共享存储,放在这个目录里的文件其实是保存到了MFS上。
`env`
字段表示容器的环境变量,我们将
`paddle`
运行的一些参数通过这种方式传递到容器内
。
`env`
字段表示容器的环境变量,我们将
`paddle`
运行的一些参数通过这种方式传递到容器内
:
环境变量 | 说明
--- | ---
JOB_PATH | 共享存储挂在的路径
JOB_NAME | Job的名字
TRAIN_CONFIG_DIR | 本次训练文件所在目录,与JOB_PATH,JOB_NAME组合可以找到本次训练需要的文件路径
CONF_PADDLE_NIC |
`paddle pserver`
进程需要的
`--nics`
参数,即网卡名
CONF_PADDLE_PORT |
`paddle paserver`
的
`--port`
参数
CONF_PADDLE_PORTS_NUM | 稠密更新的端口数量,即
`--ports_num`
参数
CONF_PADDLE_PORTS_NUM_SPARSE | 稀疏更新的端口数量,即
`--ports_num_for_sparse`
参数
CONF_PADDLE_GRADIENT_NUM | 训练节点数量,即
`--num_gradient_servers参数`
这些参数的具体描述,读者可以查看
[
这里
](
http://www.paddlepaddle.org/doc/ui/cmd_argument/detail_introduction.html#parameter-server-and-distributed-communication
)
。
-
JOB_PATH:共享存储挂在的路径
-
JOB_NAME:Job的名字
-
TRAIN_CONFIG_DIR:本次训练文件所在目录,与JOB_PATH,JOB_NAME组合可以找到本次训练需要的文件路径
-
CONF_PADDLE_NIC:
`paddle pserver`
进程需要的
`--nics`
参数,即网卡名
-
CONF_PADDLE_PORT:
`paddle paserver`
的
`--port`
参数
-
CONF_PADDLE_PORTS_NUM:稠密更新的端口数量,即
`--ports_num`
参数
-
CONF_PADDLE_PORTS_NUM_SPARSE:稀疏更新的端口数量,即
`--ports_num_for_sparse`
参数
-
CONF_PADDLE_GRADIENT_NUM:训练节点数量,即
`--num_gradient_servers参数`
这些参数的具体描述,读者可以查看
[
这里
](
http://www.paddlepaddle.org/docs/develop/documentation/zh/howto/usage/cmd_parameter/detail_introduction_cn.html
)
。
编写完YAML文件后,可以使用Kubernetes的命令行工具创建job。
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录