From c1ad5cee36581286f62e3f5fd423261e80897106 Mon Sep 17 00:00:00 2001 From: xulongteng Date: Tue, 13 Aug 2019 17:06:52 +0800 Subject: [PATCH] fix toc --- doc/DEPLOY.md | 315 +++++++++++++++++++++++++------------------------- 1 file changed, 159 insertions(+), 156 deletions(-) mode change 100755 => 100644 doc/DEPLOY.md diff --git a/doc/DEPLOY.md b/doc/DEPLOY.md old mode 100755 new mode 100644 index 1af74ebb..32757c34 --- a/doc/DEPLOY.md +++ b/doc/DEPLOY.md @@ -1,53 +1,57 @@ # PaddlePaddle分布式训练和Serving流程化部署 -* [ 环境配置](#head0) -* [ 分布式训练](#head1) - * [ 1、集群配置](#head2) - * [1.1 创建集群](#head3) - * [1.2 配置集群环境](#head4) - * [2、 配置开发机环境](#head5) - * [2.1 安装KubeCtl](#head6) - * [2.2 安装Helm](#head7) - * [2.3 配置文件](#head8) - * [2.4 安装Go](#head9) - * [ 3、安装volcano](#head10) - * [ 4、执行训练](#head11) - * [ 5、模型产出](#head12) - * [5.1 模型裁剪](#head13) - * [5.2 稀疏参数产出](#head14) - * [5.3 搭建HTTP File Server服务](#head141) -* [ 大规模稀疏参数服务Cube的部署和使用](#head15) - * [1. 编译](#head16) - * [2. 分片cube server部署](#head17) - * [2.1 配置文件修改](#head18) - * [2.2 拷贝可执行文件和配置文件到物理机](#head19) - * [2.3 启动 cube server](#head20) - * [3. cube-builder部署](#head21) - * [3.1 配置文件修改](#head22) - * [3.2 拷贝可执行文件到物理机](#head23) - * [3.3 启动cube-builder](#head24) - * [3.4 seqfile工具](#head241) - * [4. cube-transfer部署](#head25) - * [4.1 cube-transfer配置修改](#head26) - * [4.2 拷贝cube-transfer到物理机](#head27) - * [4.3 启动cube-transfer](#head28) - * [4.4 cube-transfer支持查询接口](#head281) - * [4.5 donefile格式协议](#head29) -* [ 预测服务部署](#head30) - * [ 1、Server端](#head31) - * [1.1 Cube服务](#head32) - * [1.2 Serving编译](#head33) - * [1.3 配置修改](#head34) - * [1.3.1 conf/gflags.conf](#head35) - * [1.3.2 conf/model_toolkit.prototxt](#head36) - * [1.3.3 conf/cube.conf](#head37) - * [1.3.4 模型文件](#head38) - * [1.4 启动Serving](#head39) - * [ 2、Client端](#head40) - * [2.1 测试数据](#head41) - * [2.2 Client编译与部署](#head42) - * [2.2.1 配置修改](#head43) - * [2.2.2 运行服务](#head44) +* [ 1.分布式训练](#head0) + * [ 1.1集群配置](#head1) + * [1.1.1 创建集群](#head2) + * [1.2.1 配置集群环境](#head3) + * [1.2 配置开发机环境](#head4) + * [1.2.1 安装KubeCtl](#head5) + * [1.2.2 安装Helm](#head6) + * [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) +* [2. 大规模稀疏参数服务Cube的部署和使用](#head15) + * [2.1 编译](#head16) + * [2.2 分片cube server/agent部署](#head17) + * [2.2.1 配置文件修改](#head18) + * [2.2.2 拷贝可执行文件和配置文件到物理机](#head19) + * [2.2.3 启动 cube server/agent](#head20) + * [2.3 cube-builder部署](#head21) + * [2.3.1 配置文件修改](#head22) + * [2.3.2 拷贝可执行文件到物理机](#head23) + * [2.3.3 启动cube-builder](#head24) + * [2.3.3.1 接入配送流程](#head25) + * [ 2.3.3.2单机builder](#head26) + * [base模式 ](#head27) + * [ delta模式](#head28) + * [2.3.4 seqfile工具](#head29) + * [2.4 cube-transfer部署](#head30) + * [2.4.1 cube-transfer配置修改](#head31) + * [2.4.2 拷贝cube-transfer到物理机](#head32) + * [2.4.3 启动cube-transfer](#head33) + * [2.4.4 cube-transfer支持查询接口](#head34) + * [2.4.5 donefile格式协议](#head35) +* [3. 预测服务部署](#head36) + * [3.1 Server端](#head37) + * [3.1.1 Cube服务](#head38) + * [3.1.2 Serving编译](#head39) + * [3.1.3 配置修改](#head40) + * [3.1.3.1 conf/gflags.conf](#head41) + * [3.1.3.2 conf/model_toolkit.prototxt](#head42) + * [3.1.3.3 conf/cube.conf](#head43) + * [3.1.3.4 模型文件](#head44) + * [3.1.4 启动Serving](#head45) + * [3.2 Client端](#head46) + * [3.2.1 测试数据](#head47) + * [3.2.2 Client编译与部署](#head48) + * [3.2.2.1 配置修改](#head49) + * [3.2.2.2 运行服务](#head50) + 在搜索、推荐、在线广告等业务场景中,embedding参数的规模常常非常庞大,达到数百GB甚至T级别;训练如此规模的模型需要用到多机分布式训练能力,将参数分片更新和保存;另一方面,训练好的模型,要应用于在线业务,也难以单机加载。Paddle Serving提供大规模稀疏参数读写服务,用户可以方便地将超大规模的稀疏参数以kv形式托管到参数服务,在线预测只需将所需要的参数子集从参数服务读取回来,再执行后续的预测流程。 @@ -68,21 +72,20 @@ 2. 稀疏参数服务部署与使用 3. Paddle Serving的部署 4. 客户端访问Paddle Serving完成CTR预估任务预测请求 -## 环境配置 -**环境要求** :helm、kubectl、go -## 分布式训练 + +## 1.分布式训练 分布式训练采用[volcano](https://github.com/volcano-sh/volcano)开源框架以及云平台实现,文档中以[百度智能云](https://cloud.baidu.com/?from=console)以及CTR预估模型为例,演示如何实现大规模稀疏参数模型的分布式训练。 -### 1、集群配置 +### 1.1集群配置 -#### 1.1 创建集群 +#### 1.1.1 创建集群 登录百度智能云官网,参考[帮助文档](https://cloud.baidu.com/doc/CCE/s/zjxpoqohb)创建容器引擎。 -#### 1.2 配置集群环境 +#### 1.2.1 配置集群环境 进入“产品服务>容器引擎CCE”,点击“集群管理>集群列表”,可看到用户已创建的集群列表。从集群列表中查看创建的集群信息。 @@ -104,21 +107,21 @@ 创建弹性公网实例,完成后选择创建的实例,点击"更多操作>绑定到BCC",填写tiller开头的节点信息进行绑定。 -### 2、 配置开发机环境 +### 1.2 配置开发机环境 配置过程需要开发机的root权限。 -#### 2.1 安装KubeCtl +#### 1.2.1 安装KubeCtl KubeCtl可以实现在本地开发机上连接百度智能云的Kubernets集群,建议参考百度云操作指南文档中[通过KubeCtl连接集群](https://cloud.baidu.com/doc/CCE/s/6jxpotcn5)部分进行安装。 -#### 2.2 安装Helm +#### 1.2.2 安装Helm 建议参考[Helm官方安装文档](https://helm.sh/docs/using_helm/#installing-helm)进行安装。 **注意事项:** 开发机上的kubectl与helm的版本需要与集群上的版本相一致,目前百度智能云为集群安装的helm版本为2.12.3,kubectl版本为1.13.4。 -#### 2.3 配置文件 +#### 1.2.3 配置文件 点击"集群列表"界面的"配置文件下载",下载配置文件。 @@ -158,7 +161,7 @@ export HELM_TLS_KEY=/etc/kubernetes/pki/admin-key.pem 如果只返回client端信息,server端信息显示"Forbidden",检查开发机是否使用了代理,若有可以尝试关闭代理再次执行命令检查。 -#### 2.4 安装Go +#### 1.2.4 安装Go 推荐安装Go 1.12 @@ -180,7 +183,7 @@ tar zxvf go1.12.7.linux-amd64.tar.gz -C /usr/local/ export GOPATH=/usr/local/go ``` -### 3、安装volcano +### 1.3 安装volcano 参考[volcano官方文档](https://github.com/volcano-sh/volcano#quick-start-guide)。 @@ -196,7 +199,7 @@ kubectl apply -f https://raw.githubusercontent.com/volcano-sh/volcano/master/ins ![volcano](./deploy/volcano.png) -### 4、执行训练 +### 1.4 执行训练 创建cluster role和service account,[defaultserviceaccountclusterrole.yaml](./resource/defaultserviceaccountclusterrole.yaml) 文件示例如下: @@ -253,11 +256,11 @@ kubectl apply -f volcano-ctr-demo-baiduyun.yaml ![工作负载](./deploy/workload.png) -### 5、模型产出 +### 1.5 模型产出 CTR预估模型包含了embedding部分以及dense神经网络两部分,其中embedding部分包含的稀疏参数较多,在某些场景下单机的资源难以加载整个模型,因此需要将这两部分分割开来,稀疏参数部分放在分布式的稀疏参数服务,dense网络部分加载到serving服务中。在本文中使用的CTR模型训练镜像中已经包含了模型裁剪和稀疏参数产出的脚本,以下简述其原理和工作过程。 -#### 5.1 模型裁剪,产出预测ProgramDesc和dense参数 +#### 1.5.1 模型裁剪,产出预测ProgramDesc和dense参数 产出用于paddle serving预测服务的dense模型需要对保存的原始模型进行裁剪操作,修改模型的输入以及内部结构。具体原理和操作流程请参考文档[改造CTR预估模型用于大规模稀疏参数服务演示](https://github.com/PaddlePaddle/Serving/blob/develop/doc/CTR_PREDICTION.md)。 @@ -268,7 +271,7 @@ CTR预估模型包含了embedding部分以及dense神经网络两部分,其中 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目录中 (详见本文“预测服务部署”一节) -#### 5.2 稀疏参数产出 +#### 1.5.2 稀疏参数产出 分布式稀疏参数服务由paddle serving的Cube模块实现。Cube服务接受的原始数据格式为Hadoop seqfile格式,因此需要对paddle保存出的模型文件进行格式转换。 @@ -277,7 +280,7 @@ CTR预估模型包含了embedding部分以及dense神经网络两部分,其中 1. 监视训练脚本所在目录的models文件夹,当发现有子目录`pass-1000`时,表示训练任务完成 (默认训练轮次为1000) 2. 调用dumper.py,将models/pass-1000/SparseFeatFactors文件转换成seqfile格式,同时生成一个用于让下游cube-transfer下载完整数据的donefile文件,整个目录结构放到HTTP服务目录下,供下游cube-transfer监听进程检测和下载 (详见本文“大规模稀疏参数服务Cube的部署和使用”一节) -#### 5.3 搭建HTTP File Server服务 +#### 1.5.3 搭建HTTP File Server服务 无论是dense参数还是Sparse参数,在生成之后,都需要以某种方式将文件服务暴露出来。dense参数需要配送给Paddle Serving,稀疏参数需要配速给Cube大规模稀疏参数服务器。 @@ -317,7 +320,7 @@ kubectl get service 就说明服务搭建成功。 -## 大规模稀疏参数服务Cube的部署和使用 +## 2. 大规模稀疏参数服务Cube的部署和使用 Cube大规模稀疏参数服务服务组件,用于承载超大规模稀疏参数的查询、更新等各功能。上述分布式训练产出的稀疏参数,在k8s中以http文件服务的形式提供下载;cube则负责将稀疏参数读取、加工,切分成多个分片,灌入稀疏参数服务集群,提供对外访问。 @@ -330,7 +333,7 @@ Cube一共拆分成四个组件,共同完成上述工作: 关于Cube的详细说明文档,请参考[Cube设计文档](https://github.com/PaddlePaddle/Serving/tree/develop/cube/doc/DESIGN.md)。本文仅描述从头部署Cube服务的流程。 -### 1. 编译 +### 2.1 编译 Cube是Paddle Serving内置的组件,只要按常规步骤编译Serving即可。要注意的是,编译Cube需要Go语言编译器。 @@ -358,10 +361,10 @@ gflags.conf transfer.conf -### 2. 分片cube server/agent部署 +### 2.2 分片cube server/agent部署 -#### 2.1 配置文件修改 +#### 2.2.1 配置文件修改 首先修改cube server的配置文件,将port改为我们需要的端口号,(当本机内存资源紧张时,将in_mem修改为false将以磁盘访问的模式启动cube server): @@ -371,7 +374,7 @@ gflags.conf transfer.conf --in_mem=true ``` -#### 2.2 拷贝可执行文件和配置文件到物理机 +#### 2.2.2 拷贝可执行文件和配置文件到物理机 将bin/cube,bin/cube-agent和conf/gflags.conf拷贝到多个物理机上。假设拷贝好的文件结构如下: @@ -385,7 +388,7 @@ $ tree | `-- gflags.conf ``` -#### 2.3 启动 cube server/agent +#### 2.2.3 启动 cube server/agent ```bash nohup bin/cube & @@ -393,9 +396,9 @@ nohup bin/cube-agent -P 8001 & ``` 其中cube-agent在启动命令中使用 -P 参数指定监听端口号,在log文件夹可以查看cube server的日志。 -### 3. cube-builder部署 +### 2.3 cube-builder部署 -#### 3.1 配置文件修改 +#### 2.3.1 配置文件修改 cube-builder配置项说明: @@ -419,7 +422,7 @@ Flags from /home/work/dangyifei/open-builder/src/main.cpp: -shard_num (shard num) type: int32 default: -1 //必须,数据切分的分片数量 ``` -#### 3.2 拷贝可执行文件到物理机 +#### 2.3.2 拷贝可执行文件到物理机 需要将bin/cube-builder拷贝到物理机上。 只利用builder工具建立索引无特殊位置要求,如果接入配送环节使用必须和cube-transfer同机部署。 假设单独使用builder工具,文件结构如下: @@ -432,16 +435,16 @@ $ tree |-- output ``` -#### 3.3 启动cube-builder -##### 3.3.1接入配送流程 +#### 2.3.3 启动cube-builder +##### 2.3.3.1 接入配送流程 拷贝bin/cube-builder和cube-transfer程序到同一机器。 相关参数已经封装好,只需要在cube-transfer的conf/transfer.conf里配置好cube-builder的地址、源数据和建库数据output的地址即可, 执行cube-transfer时会通过配置文件中的路径调用cube-builder,所以通常不需要手动执行cube-builder。 -##### 3.3.2单机builder +##### 2.3.3.2单机builder **假设分片数为2,词典名为test** -###### base模式 +###### base模式 启动cube-builder命令,参数中的路径需要为绝对路径 @@ -455,27 +458,27 @@ $ tree |-- source | `-- test_seqfile `-- output - |-- 1565323045_1565323045 - | |-- test_part0 - | | |-- data.0 - | | |-- data.n - | | |-- index.0 - | | `-- index.n - | |-- test_part0.tar - | |-- test_part0.tar.md5 - | |-- test_part1 - | | |-- data.0 - | | |-- data.n - | | |-- index.0 - | | `-- index.n - | |-- test_part1.tar - | `-- test_part1.tar.md5 - `-- meta_info - |-- 1565323045_1565323045_0_0.json - `-- 1565323045_1565323045_1_0.json +|-- 1565323045_1565323045 +| |-- test_part0 +| | |-- data.0 +| | |-- data.n +| | |-- index.0 +| | `-- index.n +| |-- test_part0.tar +| |-- test_part0.tar.md5 +| |-- test_part1 +| | |-- data.0 +| | |-- data.n +| | |-- index.0 +| | `-- index.n +| |-- test_part1.tar +| `-- test_part1.tar.md5 +`-- meta_info +|-- 1565323045_1565323045_0_0.json +`-- 1565323045_1565323045_1_0.json ``` test_part0.tar和test_part0.tar.md5是shard0分片的数据和md5校验,1565323045_1565323045_0_0.json是0号分片的索引长度和数量,在对应版本的delta建库中需要。 -###### delta模式 +###### delta模式 需要依赖于上次的base或者delta的id和key,1565323045_1565323045_0_0.json前一个时间戳是id,后一个是key(和分片数据的目录key_id相反),对应cube-builder输入参数-last_version和-depend_version,保持output和dict_name不变(builder会寻找上一轮的index meta信息)。 启动cube-builder命令,参数中的路径需要为绝对路径 @@ -490,43 +493,43 @@ $ tree |-- source | `-- test_seqfile `-- output - |-- 1565323045_1565323045 - | |-- test_part0 - | | |-- data.0 - | | |-- data.n - | | |-- index.0 - | | `-- index.n - | |-- test_part0.tar - | |-- test_part0.tar.md5 - | |-- test_part1 - | | |-- data.0 - | | |-- data.n - | | |-- index.0 - | | `-- index.n - | |-- test_part1.tar - | `-- test_part1.tar.md5 - |-- 1565323045_1565326078 - | |-- test_part0 - | |-- data.0 - | | |-- data.n - | | |-- index.0 - | | `-- index.n - | |-- test_part0.tar - | |-- test_part0.tar.md5 - | |-- test_part1 - | | |-- data.0 - | | |-- data.n - | | |-- index.0 - | | `-- index.n - | |-- test_part1.tar - | `-- test_part1.tar.md5 - `-- meta_info - |-- 1565323045_1565323045_0_0.json - |-- 1565323045_1565323045_0_0.json - |-- 1565326078_1565323045_0_0.json - `-- 1565326078_1565323045_1_0.json -``` -#### 3.4 seqfile工具 +|-- 1565323045_1565323045 +| |-- test_part0 +| | |-- data.0 +| | |-- data.n +| | |-- index.0 +| | `-- index.n +| |-- test_part0.tar +| |-- test_part0.tar.md5 +| |-- test_part1 +| | |-- data.0 +| | |-- data.n +| | |-- index.0 +| | `-- index.n +| |-- test_part1.tar +| `-- test_part1.tar.md5 +|-- 1565323045_1565326078 +| |-- test_part0 +| |-- data.0 +| | |-- data.n +| | |-- index.0 +| | `-- index.n +| |-- test_part0.tar +| |-- test_part0.tar.md5 +| |-- test_part1 +| | |-- data.0 +| | |-- data.n +| | |-- index.0 +| | `-- index.n +| |-- test_part1.tar +| `-- test_part1.tar.md5 +`-- meta_info +|-- 1565323045_1565323045_0_0.json +|-- 1565323045_1565323045_0_0.json +|-- 1565326078_1565323045_0_0.json +`-- 1565326078_1565323045_1_0.json +``` +#### 2.3.4 seqfile工具 builder输入数据的源格式必须为seqfile,key为uint64(输入必须为二进制8个字节),value为序列化的二进制。 提供明文转seqfile工具和读seqfile工具,位置在output/tool里kvtool.py和kv_to_seqfile.py。 kvtool.py 是读seqfile工具,会输出读到的kv信息,参数是文件地址假设在/home/work/test下的seqfile,运行方式如下: @@ -550,9 +553,9 @@ SOURCE_FILE = './source/file.txt' #明文源数据路径 1676869128226002114:48241 37064 91 -539 114 51 -122 269 229 -134 -282 1657749292782759014:167 40 98 27 117 10 -29 15 74 67 -54 ``` -### 4. cube-transfer部署 +### 2.4 cube-transfer部署 -#### 4.1 cube-transfer配置修改 +#### 2.4.1 cube-transfer配置修改 cube-transfer配置文件是conf/transfer.conf,配置比较复杂,配置文件中的路径需要为绝对路径,各个配置项含义如下: ``` @@ -576,7 +579,7 @@ agent1_0: 10.10.180.40:8001 //1号分片0号副本的agen cube1_0: 10.10.180.40:8000:/home/disk1/cube_open //1号分片0号副本的cube ,该路径下会存放配送的数据 ip:port:deploy_path ``` -#### 4.2 拷贝cube-transfer到物理机 +#### 2.4.2 拷贝cube-transfer到物理机 将bin/cube-transfer和conf/transfer.conf拷贝到多个物理机上,构建output和tmp文件夹用来存放配送的中间文件。 假设拷贝好的文件结构如下: @@ -588,9 +591,9 @@ $ tree |-- output |-- tmp `-- conf - |-- transfer.conf +|-- transfer.conf ``` -#### 4.3 启动cube-transfer +#### 2.4.3 启动cube-transfer 假设启动服务端口8099,-l参数是log等级 --config是配置文件位置,./log文件夹下可以查看cube-transfer的日志 ```bash ./cube-transfer -p 8099 -l 4 --config conf/transfer.conf @@ -603,7 +606,7 @@ $ tree -#### 4.4 cube-transfer支持查询接口 +#### 2.4.4 cube-transfer支持查询接口 > 获取当前词典状态 > http://10.10.10.5:8099/dict/info @@ -614,7 +617,7 @@ $ tree > 获取配送历史从最近的base到当前正在配送的delta > http://10.10.10.5:8099/dict/deploy/history -#### 4.5 donefile格式协议 +#### 2.4.5 donefile格式协议 一旦cube-transfer部署完成,它就不断监听我们配置好的donefile数据位置,发现有数据更新后,即启动数据下载,然后通知cube-builder执行建库和配送流程,将新数据配送给各个分片的cube-server。 id最好使用版本产出时间戳,base和patch每产出一条直接在donefile文件最后加一行即可,文件名固定base.txt、patch.txt @@ -629,9 +632,9 @@ id最好使用版本产出时间戳,base和patch每产出一条直接在donefi >{"id":"1562000402","key":"1562000400","input":"/home/work/test_data/input/seqfile"} >``` -## 预测服务部署 +## 3. 预测服务部署 -### 1、Server端 +### 3.1 Server端 通过wget命令从集群获取dense部分模型用于Server端。 @@ -643,7 +646,7 @@ K8s集群上CTR预估任务训练完成后,模型参数分成2部分:一是e 本文介绍Serving使用上述模型参数和program加载模型提供预测服务的流程。 -#### 1.1 Cube服务 +#### 3.1.1 Cube服务 假设Cube服务已经成功部署,用于cube客户端API的配置文件如下所示: @@ -669,7 +672,7 @@ K8s集群上CTR预估任务训练完成后,模型参数分成2部分:一是e **注意事项:** nodes中的ipport_list需要按照分片的顺序(参考cube-transfer配置文件)填写。 -#### 1.2 Serving编译 +#### 3.1.2 Serving编译 截至写本文时,Serving develop分支已经提供了CTR预估服务相关OP,参考[ctr_prediction_op.cpp](https://github.com/PaddlePaddle/Serving/blob/develop/demo-serving/op/ctr_prediction_op.cpp),该OP从client端接收请求后会将每个请求的26个sparse feature id发给cube服务,获得对应的embedding向量,然后填充到模型feed variable对应的LoDTensor,执行预测计算。只要按常规步骤编译Serving即可。 @@ -686,9 +689,9 @@ $ ls bin conf data kvdb log ``` -#### 1.3 配置修改 +#### 3.1.3 配置修改 -##### 1.3.1 conf/gflags.conf +##### 3.1.3.1 conf/gflags.conf 将--enable_cube改为true: @@ -696,7 +699,7 @@ bin conf data kvdb log --enable_cube=true ``` -##### 1.3.2 conf/model_toolkit.prototxt +##### 3.1.3.2 conf/model_toolkit.prototxt Paddle Serving自带的model_toolkit.prototxt如下所示,如有必要可只保留ctr_prediction一个: @@ -743,7 +746,7 @@ sparse_param_service_type: REMOTE sparse_param_service_table_name: "dict" ``` -##### 1.3.3 conf/cube.conf +##### 3.1.3.3 conf/cube.conf conf/cube.conf是一个完整的cube配置文件模板,其中只要修改nodes列表为真实的物理节点IP:port列表即可。例如 (与第1节cube配置文件内容一致): @@ -767,7 +770,7 @@ conf/cube.conf是一个完整的cube配置文件模板,其中只要修改nodes **注意事项:** 如果修改了`dict_name`,需要同步修改1.3.2节中`sparse_param_service_table_name`字段 -##### 1.3.4 模型文件 +##### 3.1.3.4 模型文件 Paddle Serving自带了一个可以工作的CTR预估模型,是从BCE上下载下来的,其制作方法为: 1. 分布式训练CTR预估任务,保存模型program和参数文件 @@ -792,25 +795,25 @@ $ bin/serving & # 重启serving 从K8S集群暴露的http服务下载训练模型,请参考文档[PaddlePaddle分布式训练和Serving流程化部署](http://icode.baidu.com/repos/baidu/personal-code/wangguibao/blob/master:ctr-embedding-to-sequencefile/path/to/doc/DISTRIBUTED_TRANING_AND_SERVING.md) -#### 1.4 启动Serving +#### 3.1.4 启动Serving 执行`./bin/serving `启动serving服务,在./log路径下可以查看serving日志。 -### 2、Client端 +### 3.2 Client端 参考[从零开始写一个预测服务:client端]([https://github.com/PaddlePaddle/Serving/blob/develop/doc/CREATING.md#3-client%E7%AB%AF](https://github.com/PaddlePaddle/Serving/blob/develop/doc/CREATING.md#3-client端))文档,实现client端代码。 文档中使用的CTR预估任务client端代码存放在Serving代码库demo-client路径下,链接[ctr_prediction.cpp](https://github.com/PaddlePaddle/Serving/blob/develop/demo-client/src/ctr_prediction.cpp)。 -#### 2.1 测试数据 +#### 3.2.1 测试数据 CTR预估任务样例使用的数据来自于[原始模型](https://github.com/PaddlePaddle/models/tree/develop/PaddleRec/ctr)的测试数据,在样例中提供了1000个测试样本,如果需要更多样本可以参照原始模型下载数据的[脚本](https://github.com/PaddlePaddle/models/blob/develop/PaddleRec/ctr/data/download.sh)。 -#### 2.2 Client编译与部署 +#### 3.2.2 Client编译与部署 按照1.2Serving编译部分完成编译后,client端文件在output/demo/client/ctr_prediction路径下。 -##### 2.2.1 配置修改 +##### 3.2.2.1 配置修改 修改conf/predictors.prototxt文件ctr_prediction_service部分 @@ -833,6 +836,6 @@ cluster: "list://127.0.0.1:8010" 配置Server端ip与端口号,默认为本机ip、8010端口。 -##### 2.2.2 运行服务 +##### 3.2.2.2 运行服务 执行`./bin/ctr_predictoin`启动client端,在./log路径下可以看到client端执行的日志。 -- GitLab