未验证 提交 0429acb6 编写于 作者: J Jiawei Wang 提交者: GitHub

Reorder the context, move http file server to 1.4

上级 66e1e255
......@@ -10,11 +10,11 @@
* [1.2.3 配置文件](#head7)
* [1.2.4 安装Go](#head8)
* [ 1.3 安装volcano](#head9)
* [1.4 执行训练](#head10)
* [1.5 模型产出](#head11)
* [1.5.1 模型裁剪,产出预测ProgramDesc和dense参数](#head12)
* [1.5.2 稀疏参数产出](#head13)
* [1.5.3 搭建HTTP File Server服务](#head14)
* [1.4 搭建HTTP File Server服务](#head91)
* [1.5 执行训练](#head10)
* [1.6 模型产出](#head11)
* [1.6.1 模型裁剪,产出预测ProgramDesc和dense参数](#head12)
* [1.6.2 稀疏参数产出](#head13)
* [2. 大规模稀疏参数服务Cube的部署和使用](#head15)
* [2.1 编译](#head16)
* [2.2 分片cube server/agent部署](#head17)
......@@ -201,7 +201,89 @@ kubectl apply -f https://raw.githubusercontent.com/volcano-sh/volcano/master/ins
![volcano](./deploy/volcano.png)
### <span id="head10">1.4 执行训练</span>
### <span id="head91">1.4 搭建HTTP File Server服务</span>
无论是dense参数还是Sparse参数,在生成之后,都需要以某种方式将文件服务暴露出来。dense参数需要配送给Paddle Serving,稀疏参数需要配速给Cube大规模稀疏参数服务器。
配送的方式是通过K8S集群建立一个Http file server的pod,再通过注册负载均衡 load balancer service,映射file server的port给load balancer,最终可以直接通过公网IP:Port的方式来访问HTTP File Server。
fileserver.yaml 一同包含两个部分,第一个是file server pod的配置,这样可以启动file server的docker镜像,并暴露文件服务端口。第二个是load balancer的配置,这样可以启动load balancer分配公网IP并且映射文件服务端口给公网。 [fileserver.yaml](./resource/fileserver.yaml) 文件示例如下:
```yaml
apiVersion: v1
kind: Pod
metadata:
name: file-server
labels:
app: file-server
spec:
volumes:
- hostPath:
path: /home/work
type: ""
name: file-home
containers:
- name: file-server
image: halverneus/static-file-server
ports:
- containerPort: 8080
volumeMounts:
- mountPath: /web
name: file-home
nodeSelector:
nodeType: model
---
kind: Service
apiVersion: v1
metadata:
name: loadbalancer
spec:
type: LoadBalancer
ports:
- name: file-server
port: 8080
targetPort: 8080
selector:
app: file-server
```
具体步骤如下
执行
```bash
kubectl apply -f fileserver.yaml
```
两项配置都执行成功之后,执行
```bash
kubectl get pod
```
会显示file-server,如下图所示。
![file_server](./deploy/file_server.png)
```bash
kubectl get service
```
会显示load balancer,如下图所示。
![load_balancer](./deploy/load_balancer.png)
其中External IP就是文件服务的公网IP,我们可以在任意一台可以连接公网的计算机上,输入wget http://IP:Port 。例如图片中的示例,输入wget http://180.76.113.149:8080 。
如果显示下载了 index.html
![wget_example](./deploy/wget_example.png)
就说明服务搭建成功。
### <span id="head10">1.5 执行训练</span>
创建cluster role和service account,[defaultserviceaccountclusterrole.yaml](./resource/defaultserviceaccountclusterrole.yaml) 文件示例如下:
......@@ -258,11 +340,11 @@ kubectl apply -f volcano-ctr-demo-baiduyun.yaml
![工作负载](./deploy/workload.png)
### <span id="head11">1.5 模型产出</span>
### <span id="head11">1.6 模型产出</span>
CTR预估模型包含了embedding部分以及dense神经网络两部分,其中embedding部分包含的稀疏参数较多,在某些场景下单机的资源难以加载整个模型,因此需要将这两部分分割开来,稀疏参数部分放在分布式的稀疏参数服务,dense网络部分加载到serving服务中。在本文中使用的CTR模型训练镜像中已经包含了模型裁剪和稀疏参数产出的脚本,以下简述其原理和工作过程。
CTR预估模型包含了embedding部分以及dense神经网络两部分,其中embedding部分包含的稀疏参数较多,在某些场景下单机的资源难以加载整个模型,因此需要将这两部分分割开来,稀疏参数部分放在分布式的稀疏参数服务,dense网络部分加载到serving服务中,稀疏参数和dense网络都需要通过http file server服务来进行配送(详见本文"1.4 搭建HTTP File Server服务"一节)。在本文中使用的CTR模型训练镜像中已经包含了模型裁剪和稀疏参数产出的脚本,以下简述其原理和工作过程。
#### <span id="head12">1.5.1 模型裁剪,产出预测ProgramDesc和dense参数</span>
#### <span id="head12">1.6.1 模型裁剪,产出预测ProgramDesc和dense参数</span>
产出用于paddle serving预测服务的dense模型需要对保存的原始模型进行裁剪操作,修改模型的输入以及内部结构。具体原理和操作流程请参考文档[改造CTR预估模型用于大规模稀疏参数服务演示](https://github.com/PaddlePaddle/Serving/blob/develop/doc/CTR_PREDICTION.md)
......@@ -271,56 +353,17 @@ CTR预估模型包含了embedding部分以及dense神经网络两部分,其中
1. 监视训练脚本所在目录的models文件夹,当发现有子目录`pass-1000`时,表示训练任务完成 (默认训练轮次为1000)
2. 调用save_program.py,生成一个适用于预测的ProgramDesc保存到models/inference_only目录,并将所需参数一并保存到该子目录下
3. 调用replace_params.py,用models/pass-1000目录下参数文件替换models/inference_only目录下同名参数文件
4. 打包models/inference_only生成ctr_model.tar.gz,放到HTTP服务目录下,供外部用户手动下载,并替换到Serving的data/models/paddle/fluid/ctr_prediction目录中 (详见本文“预测服务部署”一节)
4. 打包models/inference_only生成ctr_model.tar.gz,放到HTTP服务目录下(详见本文"1.4 搭建HTTP File Server服务"一节),供外部用户手动下载,并替换到Serving的data/models/paddle/fluid/ctr_prediction目录中 (详见本文“预测服务部署”一节)
#### <span id="head13">1.5.2 稀疏参数产出</span>
#### <span id="head13">1.6.2 稀疏参数产出</span>
分布式稀疏参数服务由paddle serving的Cube模块实现。Cube服务接受的原始数据格式为Hadoop seqfile格式,因此需要对paddle保存出的模型文件进行格式转换。
在trainer镜像中,将模型参数转换为seqfile的主要流程是:
1. 监视训练脚本所在目录的models文件夹,当发现有子目录`pass-1000`时,表示训练任务完成 (默认训练轮次为1000)
2. 调用dumper.py,将models/pass-1000/SparseFeatFactors文件转换成seqfile格式,同时生成一个用于让下游cube-transfer下载完整数据的donefile文件,整个目录结构放到HTTP服务目录下,供下游cube-transfer监听进程检测和下载 (详见本文“大规模稀疏参数服务Cube的部署和使用”一节)
#### <span id="head14">1.5.3 搭建HTTP File Server服务</span>
无论是dense参数还是Sparse参数,在生成之后,都需要以某种方式将文件服务暴露出来。dense参数需要配送给Paddle Serving,稀疏参数需要配速给Cube大规模稀疏参数服务器。
配送的方式是通过K8S集群建立一个Http file server的pod,再通过注册负载均衡 load balancer service,映射file server的port给load balancer,最终可以直接通过公网IP:Port的方式来访问HTTP File Server。
具体步骤如下
执行
```bash
kubectl apply -f fileserver.yaml
```
fileserver.yaml 一同包含两个部分,第一个是file server pod的配置,这样可以启动file server的docker镜像,并暴露文件服务端口。第二个是load balancer的配置,这样可以启动load balancer分配公网IP并且映射文件服务端口给公网。
两项配置都执行成功之后,执行
2. 调用dumper.py,将models/pass-1000/SparseFeatFactors文件转换成seqfile格式,同时生成一个用于让下游cube-transfer下载完整数据的donefile文件,整个目录结构放到HTTP服务目录下(详见本文"1.4 搭建HTTP File Server服务"一节),供下游cube-transfer监听进程检测和下载 (详见本文“大规模稀疏参数服务Cube的部署和使用”一节)
```bash
kubectl get pod
```
会显示file-server,如下图所示。
![file_server](./deploy/file_server.png)
```bash
kubectl get service
```
会显示load balancer,如下图所示。
![load_balancer](./deploy/load_balancer.png)
其中External IP就是文件服务的公网IP,我们可以在任意一台可以连接公网的计算机上,输入wget http://IP:Port 。例如图片中的示例,输入wget http://180.76.113.149:8080 。
如果显示下载了 index.html
![wget_example](./deploy/wget_example.png)
就说明服务搭建成功。
## <span id="head15">2. 大规模稀疏参数服务Cube的部署和使用</span>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册