@@ -43,22 +43,55 @@ docker push [YOUR_REPO]/paddle:mypaddle
43
43
44
44
注意上述命令中` [YOUR_REPO] ` 表示读者所使用的Docker镜像仓库地址,读者需要替换成自己使用的仓库地址。下文使用` [YOUR_REPO]/paddle:mypaddle ` 这个地址来表示此步骤所构建出的镜像。
45
45
46
- ### 上传训练文件
46
+ ### 准备训练数据
47
47
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.
49
49
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
52
85
.
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
62
95
```
63
96
64
97
目录中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
151
119
152
` env` 字段表示容器的环境变量,我们将`paddle`运行的一些参数通过这种方式传递到容器内。
120
153
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参数`
130
164
131
165
这些参数的具体描述,读者可以查看[这里](http://www.paddlepaddle.org/doc/ui/cmd_argument/detail_introduction.html#parameter-server-and-distributed-communication)。
132
166
0 commit comments