提交 55244abc 编写于 作者: Z ZPaC

Optimize parameter server training tutorial.

上级 559a6952
...@@ -21,18 +21,20 @@ Parameter Server(参数服务器)是分布式训练中一种广泛使用的架 ...@@ -21,18 +21,20 @@ Parameter Server(参数服务器)是分布式训练中一种广泛使用的架
在ps-lite的架构设计中,一共包含三个独立的组件,分别是Server、Worker和Scheduler,作用分别是: 在ps-lite的架构设计中,一共包含三个独立的组件,分别是Server、Worker和Scheduler,作用分别是:
- Server:保存模型的权重和反向计算的梯度值,并使用优化器通过Worker上传的梯度值对模型进行更新。 - Server:保存模型的权重和反向计算的梯度值,并使用优化器通过Worker上传的梯度值对模型进行更新(当前版本仅支持单Server)
- Worker:执行网络的正反向计算,正向计算的梯度值通过Push接口上传至Server中,把Server更新好的模型下载到Worker本地。 - Worker:执行网络的正反向计算,正向计算的梯度值通过Push接口上传至Server中,通过Pull接口把Server更新好的模型下载到Worker本地。
- Scheduler:用于建立Server和Worker的通信关系。 - Scheduler:用于建立Server和Worker的通信关系。
> 当前版本仅支持Ascend 910 AI处理器,GPU平台支持正在开发中。
## 准备工作 ## 准备工作
以LeNet在Ascend 910上使用Parameter Server,并且配置单Worker,单Server训练为例: 以LeNet在Ascend 910上使用Parameter Server训练为例:
### 训练脚本准备 ### 训练脚本准备
参考<https://gitee.com/mindspore/mindspore/tree/master/model_zoo/official/cv/lenet>,了解如何训练一个LeNet网络。 参考<https://gitee.com/mindspore/mindspore/tree/master/model_zoo/official/cv/lenet>使用[MNIST数据集](http://yann.lecun.com/exdb/mnist/)了解如何训练一个LeNet网络。
### 参数设置 ### 参数设置
...@@ -41,7 +43,7 @@ Parameter Server(参数服务器)是分布式训练中一种广泛使用的架 ...@@ -41,7 +43,7 @@ Parameter Server(参数服务器)是分布式训练中一种广泛使用的架
- 通过`mindspore.nn.Cell.set_param_ps()``nn.Cell`中所有权重递归设置 - 通过`mindspore.nn.Cell.set_param_ps()``nn.Cell`中所有权重递归设置
- 通过`mindspore.common.Parameter.set_param_ps()`对此权重进行设置 - 通过`mindspore.common.Parameter.set_param_ps()`对此权重进行设置
原训练脚本基础上,设置LeNet模型所有权重通过Parameter Server训练: [原训练脚本](https://gitee.com/mindspore/mindspore/blob/master/model_zoo/official/cv/lenet/train.py)基础上,设置LeNet模型所有权重通过Parameter Server训练:
```python ```python
network = LeNet5(cfg.num_classes) network = LeNet5(cfg.num_classes)
network.set_param_ps() network.set_param_ps()
...@@ -49,9 +51,10 @@ network.set_param_ps() ...@@ -49,9 +51,10 @@ network.set_param_ps()
### 环境变量设置 ### 环境变量设置
Mindspore通过读取环境变量,控制Parameter Server训练,环境变量包括以下选项: Mindspore通过读取环境变量,控制Parameter Server训练,环境变量包括以下选项(其中MS_SCHED_HOST及MS_SCHED_POST所有脚本需保持一致)
``` ```
export PS_VERBOSE=1 # Print ps-lite log
export MS_SERVER_NUM=1 # Server number export MS_SERVER_NUM=1 # Server number
export MS_WORKER_NUM=1 # Worker number export MS_WORKER_NUM=1 # Worker number
export MS_SCHED_HOST=XXX.XXX.XXX.XXX # Scheduler IP address export MS_SCHED_HOST=XXX.XXX.XXX.XXX # Scheduler IP address
...@@ -68,6 +71,7 @@ export MS_ROLE=MS_SCHED # The role of this process: MS_SCHED repre ...@@ -68,6 +71,7 @@ export MS_ROLE=MS_SCHED # The role of this process: MS_SCHED repre
`Scheduler.sh`: `Scheduler.sh`:
```bash ```bash
#!/bin/bash #!/bin/bash
export PS_VERBOSE=1
export MS_SERVER_NUM=1 export MS_SERVER_NUM=1
export MS_WORKER_NUM=1 export MS_WORKER_NUM=1
export MS_SCHED_HOST=XXX.XXX.XXX.XXX export MS_SCHED_HOST=XXX.XXX.XXX.XXX
...@@ -79,6 +83,7 @@ export MS_ROLE=MS_SCHED # The role of this process: MS_SCHED repre ...@@ -79,6 +83,7 @@ export MS_ROLE=MS_SCHED # The role of this process: MS_SCHED repre
`Server.sh`: `Server.sh`:
```bash ```bash
#!/bin/bash #!/bin/bash
export PS_VERBOSE=1
export MS_SERVER_NUM=1 export MS_SERVER_NUM=1
export MS_WORKER_NUM=1 export MS_WORKER_NUM=1
export MS_SCHED_HOST=XXX.XXX.XXX.XXX export MS_SCHED_HOST=XXX.XXX.XXX.XXX
...@@ -90,6 +95,7 @@ export MS_ROLE=MS_SCHED # The role of this process: MS_SCHED repre ...@@ -90,6 +95,7 @@ export MS_ROLE=MS_SCHED # The role of this process: MS_SCHED repre
`Worker.sh`: `Worker.sh`:
```bash ```bash
#!/bin/bash #!/bin/bash
export PS_VERBOSE=1
export MS_SERVER_NUM=1 export MS_SERVER_NUM=1
export MS_WORKER_NUM=1 export MS_WORKER_NUM=1
export MS_SCHED_HOST=XXX.XXX.XXX.XXX export MS_SCHED_HOST=XXX.XXX.XXX.XXX
...@@ -108,7 +114,7 @@ export MS_ROLE=MS_SCHED # The role of this process: MS_SCHED repre ...@@ -108,7 +114,7 @@ export MS_ROLE=MS_SCHED # The role of this process: MS_SCHED repre
2. 查看结果 2. 查看结果
查看`scheduler.log`中Server与Worker通信日志: 查看`scheduler.log`中Server与Worker通信日志:
``` ```
Bind to role=scheduler, id=1, ip=XXX.XXX.XXX.XXX, port=XXXX Bind to role=scheduler, id=1, ip=XXX.XXX.XXX.XXX, port=XXXX
Assign rank=8 to node role=server, ip=XXX.XXX.XXX.XXX, port=XXXX Assign rank=8 to node role=server, ip=XXX.XXX.XXX.XXX, port=XXXX
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册