Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
Paddle
提交
03f52fae
P
Paddle
项目概览
PaddlePaddle
/
Paddle
1 年多 前同步成功
通知
2302
Star
20931
Fork
5422
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1423
列表
看板
标记
里程碑
合并请求
543
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Paddle
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1,423
Issue
1,423
列表
看板
标记
里程碑
合并请求
543
合并请求
543
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
03f52fae
编写于
4月 10, 2018
作者:
S
Shan Yi
提交者:
GitHub
4月 10, 2018
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix typo
上级
351f69c7
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
22 addition
and
22 deletion
+22
-22
doc/v2/howto/cluster/multi_cluster/k8s_aws_cn.md
doc/v2/howto/cluster/multi_cluster/k8s_aws_cn.md
+22
-22
未找到文件。
doc/v2/howto/cluster/multi_cluster/k8s_aws_cn.md
浏览文件 @
03f52fae
# Kubernetes on AWS
我们将向你展示怎么样在AWS的
kubernetes集群上运行分布式paddlep
addle训练,让我们从核心概念开始
我们将向你展示怎么样在AWS的
Kubernetes集群上运行分布式PaddleP
addle训练,让我们从核心概念开始
##
分布式paddlepaddle
训练的核心概念
##
PaddlePaddle分布式
训练的核心概念
### 分布式训练任务
一个分布式训练任务可以看做是一个
k
ubernetes任务
每一个
kubernetes任务都有相应的配置文件,此配置文件指定了像任务的pods和
环境变量信息
一个分布式训练任务可以看做是一个
K
ubernetes任务
每一个
Kubernetes任务都有相应的配置文件,此配置文件指定了像任务的pod个数之类的
环境变量信息
在分布式训练任务中,我们可以如下操作:
1.
在分布式文件系统中,准备分
区
数据和配置文件(在此次教学中,我们会用到亚马逊分布式存储服务(EFS))
1.
在分布式文件系统中,准备分
块
数据和配置文件(在此次教学中,我们会用到亚马逊分布式存储服务(EFS))
2.
创建和提交一个kubernetes任务配置到集群中开始训练
###
参数服务和训练
###
Parameter Server和Trainer
在paddlepaddle集群中有两个角色:参数服务
(pserver)者和训练者, 每一个参数服务过程都会以一个全局模型碎片存在。每一个训练者都可以进行本地模型拷贝,并可以利用本地数据更新模型。在这个训练过程中,训练者发送模型更新到参数服务中,参数服务职责就是聚合这些更新,以便于训练者
可以把全局模型同步到本地。
在paddlepaddle集群中有两个角色:参数服务
器(pserver)者和trainer, 每一个参数服务器过程都会保存一部分模型的参数。每一个trainer都保存一份完整的模型参数,并可以利用本地数据更新模型。在这个训练过程中,trainer发送模型更新到参数服务器中,参数服务器职责就是聚合这些更新,以便于trainer
可以把全局模型同步到本地。
为了能够和pserver
联通,训练者需要每一个pserver的IP地址。在k
ubernetes中利用服务发现机制(比如:DNS、hostname)要比静态的IP地址要好一些,因为任何一个pod都会被杀掉然后新的pod被重启到另一个不同IP地址的node上。现在我们可以先用静态的IP地址方式,这种方式是可以更改的。
为了能够和pserver
通信,trainer需要每一个pserver的IP地址。在K
ubernetes中利用服务发现机制(比如:DNS、hostname)要比静态的IP地址要好一些,因为任何一个pod都会被杀掉然后新的pod被重启到另一个不同IP地址的node上。现在我们可以先用静态的IP地址方式,这种方式是可以更改的。
参数服务
者和训练者一块被打包成一个docker镜像,这个镜像会运行在被ke
bernetes集群调度的pod中。
参数服务
器和trainer一块被打包成一个docker镜像,这个镜像会运行在被Ku
bernetes集群调度的pod中。
### 训练者ID
每一个训练过程都需要一个训练ID,以0作为基础值,作为命令行参数传递。训练过程因此用这个ID去读取数据分
区
。
每一个训练过程都需要一个训练ID,以0作为基础值,作为命令行参数传递。训练过程因此用这个ID去读取数据分
片
。
### 训练
利用shell脚本进入容器,可以看到许多kubernetes预先定义好的环境变量。这里可以定义任务identity,在任务中identity可以用来远程访问包含所有pod的k
ubernetes apiserver服务。
PaddlePaddle容器的入口是一个shell脚本,这个脚本可以读取Kubernetes内预置的环境变量。这里可以定义任务identity,在任务中identity可以用来远程访问包含所有pod的K
ubernetes apiserver服务。
每一个pod通过ip来排序。每一个pod的序列作为“pod id”。因为我们会在每一个pod中运行训练和参数服务,可以用“pod id”作为训练ID。入口脚本详细工作流程如下:
...
...
@@ -38,7 +38,7 @@
4.
以trainer_id来训练将自动把结果写入到EFS卷中。
## AWS的
kubernetes中的paddlep
addle
## AWS的
Kubernetes中的PaddleP
addle
### 选择AWS服务区域
这个教程需要多个AWS服务工作在一个区域中。在AWS创建任何东西之前,请检查链接https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/ 选择一个可以提供如下服务的区域:EC2, EFS, VPS, CloudFormation, KMS, VPC, S3。在教程中我们使用“Oregon(us-west-2)”作为例子。
...
...
@@ -70,7 +70,7 @@
在AWS中
[
kube-aws
](
https://github.com/coreos/kube-aws
)
是一个自动部署集群的CLI工具
##### kube-aws完整性验证
提示:如果你用的是非官方版本(e.g RC release)的kube-aws,可以跳过这一步骤。引入
coreos的应用程序签名公钥:
提示:如果你用的是非官方版本(e.g RC release)的kube-aws,可以跳过这一步骤。引入coreos的应用程序签名公钥:
```
gpg2 --keyserver pgp.mit.edu --recv-key FC8A365E
...
...
@@ -110,9 +110,9 @@ mv ${PLATFORM}/kube-aws /usr/local/bin
#### kubectl
[
kubectl
](
https://
kubernetes.io/docs/user-guide/kubectl-overview/
)
是一个操作k
ubernetes集群的命令行接口
[
kubectl
](
https://
Kubernetes.io/docs/user-guide/kubectl-overview/
)
是一个操作K
ubernetes集群的命令行接口
利用
`curl`
工具从
k
ubernetes发布页面中下载
`kubectl`
利用
`curl`
工具从
K
ubernetes发布页面中下载
`kubectl`
```
# OS X
...
...
@@ -257,7 +257,7 @@ DNS名称含有CNAME指向到集群DNS名称或者记录指向集群的IP地址
#### S3 bucket
在启动
k
ubernetes集群前需要创建一个S3 bucket
在启动
K
ubernetes集群前需要创建一个S3 bucket
在AWS上创建s3 bucket会有许多的bugs,所以使用
[
s3 console
](
https://console.aws.amazon.com/s3/home?region=us-west-2
)
。
...
...
@@ -313,9 +313,9 @@ kube-aws render credentials --generate-ca
```
kube-aws render stack
```
asserts(模板和凭证)用于创建、更新和当前目录被创建的
k
ubernetes集群相关联
asserts(模板和凭证)用于创建、更新和当前目录被创建的
K
ubernetes集群相关联
### 启动
k
ubernetes集群
### 启动
K
ubernetes集群
#### 创建一个在CloudFormation模板上定义好的实例
...
...
@@ -415,7 +415,7 @@ ip-10-0-0-55.us-west-2.compute.internal Ready 6m
### 开始在AWS上进行paddlepaddle的训练
#### 配置
k
ubernetes卷指向EFS
#### 配置
K
ubernetes卷指向EFS
首先需要创建一个持久卷
[
PersistentVolume
](
https://kubernetes.io/docs/user-guide/persistent-volumes/
)
到EFS上
...
...
@@ -464,7 +464,7 @@ kubectl --kubeconfig=kubeconfig create -f pvc.yaml
#### 准备训练数据
启动
k
ubernetes job在我们创建的持久层上进行下载、保存并均匀拆分训练数据为3份.
启动
K
ubernetes job在我们创建的持久层上进行下载、保存并均匀拆分训练数据为3份.
用
`paddle-data-job.yaml`
保存
```
...
...
@@ -613,7 +613,7 @@ chmod 400 key-name.pem
ssh -i key-name.pem core@INSTANCE_IP
```
`INSTANCE_IP`
: EC2上
k
ubernetes工作节点的公共IP地址,进入
[
EC2 console
](
https://us-west-2.console.aws.amazon.com/ec2/v2/home?region=us-west-2#Instances:sort=instanceId
)
中检查任何
`paddle-cluster-kube-aws-worker`
实例的
`public IP`
`INSTANCE_IP`
: EC2上
K
ubernetes工作节点的公共IP地址,进入
[
EC2 console
](
https://us-west-2.console.aws.amazon.com/ec2/v2/home?region=us-west-2#Instances:sort=instanceId
)
中检查任何
`paddle-cluster-kube-aws-worker`
实例的
`public IP`
2.
挂载EFS
```
...
...
@@ -647,7 +647,7 @@ sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,ret
```
`server.log`
是
`pserver`
的log日志,
`train.log`
是
`trainer`
的log日志,模型快照和描述存放在
`pass-0000*`
.
###
k
ubernetes集群卸载或删除
###
K
ubernetes集群卸载或删除
#### 删除EFS
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录