diff --git a/doc/DEPLOY.md b/doc/DEPLOY.md
index affa8dc605fe1ea063dc1a4315e10606705b10b3..37dca602e8cb42803fe057b8d6f8a1d844185ddc 100644
--- a/doc/DEPLOY.md
+++ b/doc/DEPLOY.md
@@ -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

-### 1.4 执行训练
+### 1.4 搭建HTTP File Server服务
+
+无论是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,如下图所示。
+
+
+
+```bash
+kubectl get service
+```
+
+会显示load balancer,如下图所示。
+
+
+
+其中External IP就是文件服务的公网IP,我们可以在任意一台可以连接公网的计算机上,输入wget http://IP:Port 。例如图片中的示例,输入wget http://180.76.113.149:8080 。
+
+如果显示下载了 index.html
+
+
+
+就说明服务搭建成功。
+
+
+### 1.5 执行训练
创建cluster role和service account,[defaultserviceaccountclusterrole.yaml](./resource/defaultserviceaccountclusterrole.yaml) 文件示例如下:
@@ -258,11 +340,11 @@ kubectl apply -f volcano-ctr-demo-baiduyun.yaml

-### 1.5 模型产出
+### 1.6 模型产出
-CTR预估模型包含了embedding部分以及dense神经网络两部分,其中embedding部分包含的稀疏参数较多,在某些场景下单机的资源难以加载整个模型,因此需要将这两部分分割开来,稀疏参数部分放在分布式的稀疏参数服务,dense网络部分加载到serving服务中。在本文中使用的CTR模型训练镜像中已经包含了模型裁剪和稀疏参数产出的脚本,以下简述其原理和工作过程。
+CTR预估模型包含了embedding部分以及dense神经网络两部分,其中embedding部分包含的稀疏参数较多,在某些场景下单机的资源难以加载整个模型,因此需要将这两部分分割开来,稀疏参数部分放在分布式的稀疏参数服务,dense网络部分加载到serving服务中,稀疏参数和dense网络都需要通过http file server服务来进行配送(详见本文"1.4 搭建HTTP File Server服务"一节)。在本文中使用的CTR模型训练镜像中已经包含了模型裁剪和稀疏参数产出的脚本,以下简述其原理和工作过程。
-#### 1.5.1 模型裁剪,产出预测ProgramDesc和dense参数
+#### 1.6.1 模型裁剪,产出预测ProgramDesc和dense参数
产出用于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目录中 (详见本文“预测服务部署”一节)
-#### 1.5.2 稀疏参数产出
+#### 1.6.2 稀疏参数产出
分布式稀疏参数服务由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的部署和使用”一节)
-
-#### 1.5.3 搭建HTTP File Server服务
-
-无论是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,如下图所示。
-
-
-
-```bash
-kubectl get service
-```
-
-会显示load balancer,如下图所示。
-
-
-其中External IP就是文件服务的公网IP,我们可以在任意一台可以连接公网的计算机上,输入wget http://IP:Port 。例如图片中的示例,输入wget http://180.76.113.149:8080 。
-
-如果显示下载了 index.html
-
-
-就说明服务搭建成功。
## 2. 大规模稀疏参数服务Cube的部署和使用