Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
机器未来
Paddle
提交
0f7126f2
P
Paddle
项目概览
机器未来
/
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看板
提交
0f7126f2
编写于
3月 03, 2017
作者:
Y
Yancey1989
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add prepare training data and efk paddle logs
上级
9827a5c6
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
60 addition
and
22 deletion
+60
-22
doc/howto/usage/k8s/k8s_distributed_cn.md
doc/howto/usage/k8s/k8s_distributed_cn.md
+60
-22
doc/howto/usage/k8s/src/efk-paddle-logs.png
doc/howto/usage/k8s/src/efk-paddle-logs.png
+0
-0
未找到文件。
doc/howto/usage/k8s/k8s_distributed_cn.md
浏览文件 @
0f7126f2
...
@@ -43,22 +43,55 @@ docker push [YOUR_REPO]/paddle:mypaddle
...
@@ -43,22 +43,55 @@ docker push [YOUR_REPO]/paddle:mypaddle
注意上述命令中
`[YOUR_REPO]`
表示读者所使用的Docker镜像仓库地址,读者需要替换成自己使用的仓库地址。下文使用
`[YOUR_REPO]/paddle:mypaddle`
这个地址来表示此步骤所构建出的镜像。
注意上述命令中
`[YOUR_REPO]`
表示读者所使用的Docker镜像仓库地址,读者需要替换成自己使用的仓库地址。下文使用
`[YOUR_REPO]/paddle:mypaddle`
这个地址来表示此步骤所构建出的镜像。
###
上传训练文件
###
准备训练数据
本文使用PaddlePaddle官方的
[
recommendation demo
](
http://www.paddlepaddle.org/doc/demo/index.html#recommendation
)
作为这次训练的内容,我们将训练文件与数据放在一个job name命名的目录中,上传到volume所在的共享存储(使用不同分布式存储会有不同的挂载方式,需要要先挂载这个目录,然后拷贝数据)。完成后volume中的文件内容大致如下:
这里我们通过在Kubernetes集群上启动一个Job来下载并切割数据,也可以通过修改
[
k8s_train
](
./k8s_train
)
的内容来定制image.
```
bash
在启动Job之前,需要根据不同的分布式存储来绑定一个
[
persistentVolumeClaim
](
https://kubernetes.io/docs/user-guide/persistent-volumes/
)
,生成的数据将会存储在这个volume下.
[
root@paddle-kubernetes-node0 mfs]# tree
-d
```
yaml
apiVersion
:
batch/v1
kind
:
Job
metadata
:
name
:
paddle-data
spec
:
template
:
metadata
:
name
:
pi
spec
:
hostNetwork
:
true
containers
:
-
name
:
paddle-data
image
:
paddledev/paddle-tutorial:k8s_data
imagePullPolicy
:
Always
volumeMounts
:
-
mountPath
:
"
/mnt"
name
:
nfs
env
:
-
name
:
OUT_DIR
value
:
/mnt/paddle-cluster-job
-
name
:
SPLIT_COUNT
value
:
"
3"
volumes
:
-
name
:
nfs
persistentVolumeClaim
:
claimName
:
mfs
restartPolicy
:
Never
```
完成后volume中的文件内容大致如下:
```
base
[root@paddle-kubernetes-node0 nfsdir]$ tree -d
.
.
└──
paddle-cluster-job
`--
paddle-cluster-job
├── data
|-- 0
│ ├── 0
| `-- data
│ │
|-- 1
│ ├── 1
| `-- data
│ │
|-- 2
│ └── 2
| `-- data
├──
output
|--
output
└── recommendation
|-- quick_start
```
```
目录中paddle-cluster-job是本次训练对应的job name,本次训练要求有3个PaddlePaddle节点,在paddle-cluster-job/data目录中存放切分好的数据,文件夹0,1,2分别代表3个节点的trainer_id。recommendation文件夹内存放训练文件,output文件夹存放训练结果与日志。
目录中paddle-cluster-job是本次训练对应的job name,本次训练要求有3个PaddlePaddle节点,在paddle-cluster-job/data目录中存放切分好的数据,文件夹0,1,2分别代表3个节点的trainer_id。recommendation文件夹内存放训练文件,output文件夹存放训练结果与日志。
...
@@ -118,15 +151,16 @@ spec:
...
@@ -118,15 +151,16 @@ spec:
`env`
字段表示容器的环境变量,我们将
`paddle`
运行的一些参数通过这种方式传递到容器内。
`env`
字段表示容器的环境变量,我们将
`paddle`
运行的一些参数通过这种方式传递到容器内。
`JOB_PATH`
表示共享存储挂载的路径,
`JOB_NAME`
表示job名字,
`TRAIN_CONFIG_DIR`
表示本次训练文件所在目录,这三个变量组合就可以找到本次训练需要的文件路径。
环境变量 | 说明
--- | ---
`CONF_PADDLE_NIC`
表示
`paddle pserver`
进程需要的
`--nics`
参数,即网卡名
JOB_PATH | 共享存储挂在的路径
JOB_NAME | Job的名字
`CONF_PADDLE_PORT`
表示
`paddle pserver`
的
`--port`
参数,
`CONF_PADDLE_PORTS_NUM`
则表示稠密更新的端口数量,也就是
`--ports_num`
参数。
TRAIN_CONFIG_DIR | 本次训练文件所在目录,与JOB_PATH,JOB_NAME组合可以找到本次训练需要的文件路径
CONF_PADDLE_NIC |
`paddle pserver`
进程需要的
`--nics`
参数,即网卡名
`CONF_PADDLE_PORTS_NUM_SPARSE`
表示稀疏更新的端口数量,也就是
`--ports_num_for_sparse`
参数。
CONF_PADDLE_PORT |
`paddle paserver`
的
`--port`
参数
CONF_PADDLE_PORTS_NUM | 稠密更新的端口数量,即
`--ports_num`
参数
`CONF_PADDLE_GRADIENT_NUM`
表示训练节点数量,即
`--num_gradient_servers`
参数
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
)
。
这些参数的具体描述,读者可以查看
[
这里
](
http://www.paddlepaddle.org/doc/ui/cmd_argument/detail_introduction.html#parameter-server-and-distributed-communication
)
。
...
@@ -279,3 +313,7 @@ def getIdMap(podlist):
...
@@ -279,3 +313,7 @@ def getIdMap(podlist):
args
+=
" "
+
args_ext
+
" --trainer_id="
+
\
args
+=
" "
+
args_ext
+
" --trainer_id="
+
\
str
(
trainerId
)
+
" --save_dir="
+
JOB_PATH_OUTPUT
str
(
trainerId
)
+
" --save_dir="
+
JOB_PATH_OUTPUT
```
```
### 使用EFK查询训练日志
首先需要在集群中
[
部署EFK(Elasticsearch+Fluentd+Kibana)
](
https://github.com/k8sp/efk
)
套件,在Kibana中根据POD或者Container名字来搜索相应日志
![
EFK下的Paddle训练日志
](
./src/efk-paddle-logs.png
)
doc/howto/usage/k8s/src/efk-paddle-logs.png
0 → 100644
浏览文件 @
0f7126f2
210.3 KB
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录