Skip to content

Commit 8bb2613

Browse files
authored
Merge pull request #1551 from Yancey1989/develop
Add [prepare training data] for distributed training on k8s
2 parents a4bd414 + 8ed7463 commit 8bb2613

File tree

1 file changed

+56
-22
lines changed

1 file changed

+56
-22
lines changed

doc/howto/usage/k8s/k8s_distributed_cn.md

Lines changed: 56 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -43,22 +43,55 @@ docker push [YOUR_REPO]/paddle:mypaddle
4343

4444
注意上述命令中`[YOUR_REPO]`表示读者所使用的Docker镜像仓库地址,读者需要替换成自己使用的仓库地址。下文使用`[YOUR_REPO]/paddle:mypaddle`这个地址来表示此步骤所构建出的镜像。
4545

46-
### 上传训练文件
46+
### 准备训练数据
4747

48-
本文使用PaddlePaddle官方的[recommendation demo](http://www.paddlepaddle.org/doc/demo/index.html#recommendation)作为这次训练的内容,我们将训练文件与数据放在一个job name命名的目录中,上传到volume所在的共享存储(使用不同分布式存储会有不同的挂载方式,需要要先挂载这个目录,然后拷贝数据)。完成后volume中的文件内容大致如下:
48+
这里我们通过在Kubernetes集群上启动一个Job来下载并切割数据,也可以通过修改[k8s_train](./src/k8s_train/README.md)的内容来定制image.
4949

50-
```bash
51-
[root@paddle-kubernetes-node0 mfs]# tree -d
50+
在启动Job之前,需要根据不同的分布式存储来绑定一个[persistentVolumeClaim](https://kubernetes.io/docs/user-guide/persistent-volumes/),生成的数据将会存储在这个volume下.
51+
52+
```yaml
53+
apiVersion: batch/v1
54+
kind: Job
55+
metadata:
56+
name: paddle-data
57+
spec:
58+
template:
59+
metadata:
60+
name: pi
61+
spec:
62+
hostNetwork: true
63+
containers:
64+
- name: paddle-data
65+
image: paddledev/paddle-tutorial:k8s_data
66+
imagePullPolicy: Always
67+
volumeMounts:
68+
- mountPath: "/mnt"
69+
name: nfs
70+
env:
71+
- name: OUT_DIR
72+
value: /home/work/mfs/paddle-cluster-job
73+
- name: SPLIT_COUNT
74+
value: "3"
75+
volumes:
76+
- name: nfs
77+
persistentVolumeClaim:
78+
claimName: mfs
79+
restartPolicy: Never
80+
```
81+
82+
完成后volume中的文件内容大致如下:
83+
```base
84+
[root@paddle-kubernetes-node0 nfsdir]$ tree -d
5285
.
53-
└── paddle-cluster-job
54-
├── data
55-
│   ├── 0
56-
│   │
57-
│   ├── 1
58-
│   │
59-
│   └── 2
60-
├── output
61-
└── recommendation
86+
`-- paddle-cluster-job
87+
|-- 0
88+
| `-- data
89+
|-- 1
90+
| `-- data
91+
|-- 2
92+
| `-- data
93+
|-- output
94+
|-- quick_start
6295
```
6396

6497
目录中paddle-cluster-job是本次训练对应的job name,本次训练要求有3个PaddlePaddle节点,在paddle-cluster-job/data目录中存放切分好的数据,文件夹0,1,2分别代表3个节点的trainer_id。recommendation文件夹内存放训练文件,output文件夹存放训练结果与日志。
@@ -118,15 +151,16 @@ spec:
118151

119152
`env`字段表示容器的环境变量,我们将`paddle`运行的一些参数通过这种方式传递到容器内。
120153

121-
`JOB_PATH`表示共享存储挂载的路径,`JOB_NAME`表示job名字,`TRAIN_CONFIG_DIR`表示本次训练文件所在目录,这三个变量组合就可以找到本次训练需要的文件路径。
122-
123-
`CONF_PADDLE_NIC`表示`paddle pserver`进程需要的`--nics`参数,即网卡名
124-
125-
`CONF_PADDLE_PORT`表示`paddle pserver`的`--port`参数,`CONF_PADDLE_PORTS_NUM`则表示稠密更新的端口数量,也就是`--ports_num`参数。
126-
127-
`CONF_PADDLE_PORTS_NUM_SPARSE`表示稀疏更新的端口数量,也就是`--ports_num_for_sparse`参数。
128-
129-
`CONF_PADDLE_GRADIENT_NUM`表示训练节点数量,即`--num_gradient_servers`参数
154+
环境变量 | 说明
155+
--- | ---
156+
JOB_PATH | 共享存储挂在的路径
157+
JOB_NAME | Job的名字
158+
TRAIN_CONFIG_DIR | 本次训练文件所在目录,与JOB_PATH,JOB_NAME组合可以找到本次训练需要的文件路径
159+
CONF_PADDLE_NIC | `paddle pserver`进程需要的`--nics`参数,即网卡名
160+
CONF_PADDLE_PORT | `paddle paserver`的`--port`参数
161+
CONF_PADDLE_PORTS_NUM | 稠密更新的端口数量,即`--ports_num`参数
162+
CONF_PADDLE_PORTS_NUM_SPARSE | 稀疏更新的端口数量,即`--ports_num_for_sparse`参数
163+
CONF_PADDLE_GRADIENT_NUM | 训练节点数量,即`--num_gradient_servers参数`
130164

131165
这些参数的具体描述,读者可以查看[这里](http://www.paddlepaddle.org/doc/ui/cmd_argument/detail_introduction.html#parameter-server-and-distributed-communication)。
132166

0 commit comments

Comments
 (0)