Skip to content

Commit bedaf4e

Browse files
committed
update doc
1 parent aac0160 commit bedaf4e

File tree

1 file changed

+31
-29
lines changed

1 file changed

+31
-29
lines changed

doc/online_trainer.md

Lines changed: 31 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# 流式训练
2-
推荐系统在服务的过程中,会不断产生可用于训练CTR模型的日志数据,流式训练是指数据不是一次性放入训练系统中,而是随着时间流式地加入到训练过程中去。每接收一个分片的数据,模型会对它进行预测,并利用该分片数据增量训练模型,同时按一定的频率保存全量或增量模型。
3-
本教程以[slot_dnn](../models/rank/slot_dnn/README.md)模型使用demo数据为例进行介绍
2+
推荐系统在服务的过程中,会不断产生可用于训练CTR模型的日志数据,流式训练是指数据不是一次性放入训练系统中,而是随着时间流式地加入到训练过程中去。每接收一个分片的数据,模型会对它进行预测,并利用该分片数据增量训练模型,同时按一定的频率保存全量或增量模型。
3+
本教程以[slot_dnn](../models/rank/slot_dnn/README.md)模型使用demo数据为例进行介绍
44

55
## 配置
66
流式训练配置参见models/rank/slot_dnn/config_online.yaml,新增配置及作用如下:
@@ -16,8 +16,8 @@
1616

1717
## 数据
1818
### 数据落盘目录格式
19-
在train_data_dir目录下,再建立两层目录,第一层目录对应训练数据的日期(8位),第二层目录对应训练数据的具体时间(4位,前两位为小时,后两位为分钟),并且需要与配置文件中的split_interval配置对应。
20-
例如:train_data_dir配置为“data”目录,split_interval配置为5,则具体的目录结构如下:
19+
在train_data_dir目录下,再建立两层目录,第一层目录对应训练数据的日期(8位),第二层目录对应训练数据的具体时间(4位,前两位为小时,后两位为分钟),并且需要与配置文件中的split_interval配置对应。
20+
例如:train_data_dir配置为“data”目录,split_interval配置为5,则具体的目录结构如下:
2121
```txt
2222
├── data
2323
├── 20190720 # 训练数据的日期
@@ -40,8 +40,8 @@
4040

4141
## 模型
4242
流式训练采用静态图参数服务器方式训练,在组网时需要注意几点:
43-
1embedding层需使用paddle.static.nn.sparse_embedding,其中size参数的第一维可指定任意值,第二维为embedding向量的维度。
44-
2为了记录特征展现(show)和点击(click)的次数,需要在网络中定义两个变量,指明特征是否展现和点击,取值均为0或者1,sparse_embedding中通过entry参数传入一个ShowClickEntry,指明这两个变量(show和click)的名字。
43+
1. embedding层需使用paddle.static.nn.sparse_embedding,其中size参数的第一维可指定任意值,第二维为embedding向量的维度。
44+
2. 为了记录特征展现(show)和点击(click)的次数,需要在网络中定义两个变量,指明特征是否展现和点击,取值均为0或者1,sparse_embedding中通过entry参数传入一个ShowClickEntry,指明这两个变量(show和click)的名字。
4545
```python
4646
# net.py
4747
# 构造ShowClickEntry,指明展现和点击对应的变量名
@@ -62,34 +62,34 @@ label = paddle.static.data(
6262
```
6363

6464
## 训练
65-
请在models/rank/slot_dnn目录下执行如下命令,启动流式训练。
65+
请在models/rank/slot_dnn目录下执行如下命令,启动流式训练。
6666
```bash
6767
fleetrun --server_num=1 --worker_num=1 ../../../tools/static_ps_online_trainer.py -m config_online.yaml
6868
```
69-
启动后,可以在该目录下的log/workerlog.0文件中查看训练日志。
70-
正确的训练过程应该包含以下几个部分:
71-
1参数初始化:打印config_online.yaml中配置的参数。
72-
2获取之前已经训练好的模型并加载模型,如果之前没有保存模型,则跳过加载模型这一步。
73-
3循环训练每个pass的数据,其中包括获取训练数据(建立训练数据处理pipe);利用上个pass的模型预测当前pass的数据,并获取预测AUC;训练当前pass的数据,并获取训练AUC。
74-
4保存模型:根据checkpoint_per_pass配置,在固定pass数据训练完成之后,保存模型。
69+
启动后,可以在该目录下的log/workerlog.0文件中查看训练日志。
70+
正确的训练过程应该包含以下几个部分:
71+
1. 参数初始化:打印config_online.yaml中配置的参数。
72+
2. 获取之前已经训练好的模型并加载模型,如果之前没有保存模型,则跳过加载模型这一步。
73+
3. 循环训练每个pass的数据,其中包括获取训练数据(建立训练数据处理pipe);利用上个pass的模型预测当前pass的数据,并获取预测AUC;训练当前pass的数据,并获取训练AUC。
74+
4. 保存模型:根据checkpoint_per_pass配置,在固定pass数据训练完成之后,保存模型。
7575

7676
## 模型
7777
目前流式训练支持保存几种格式的模型:
7878
### 全量模型
79-
全量模型(checkpoint)用于流式训练的热启,具体目录为model_save_path/{$day}/{$pass_id}。
80-
其中model_save_path为config_online.yaml中的配置,day对应8位日期,pass_id对应流式训练过程中的第几个pass。
81-
目录下存在两个文件夹,其中000为模型中的dense参数,001为模型中的sparse参数
79+
全量模型(checkpoint)用于流式训练的热启,具体目录为model_save_path/{$day}/{$pass_id}。
80+
其中model_save_path为config_online.yaml中的配置,day对应8位日期,pass_id对应流式训练过程中的第几个pass。
81+
目录下存在两个文件夹,其中000为模型中的dense参数,001为模型中的sparse参数
8282
### batch model
8383
与checkpoint模型类似,一般在每天数据训练结束后保存,保存前调用shrink函数删除掉长久不见的sparse特征,节省空间。
8484
### base/delta model
85-
base/delta模型一般用于线上预测,与全量模型相比,在保存过程中去掉了部分出现频率不高的特征,降低模型保存的磁盘占用及耗时。
86-
这两个模型一般指sparse_embedding中的参数,因此需要搭配dnn_plugin(模型文件和dense参数文件)才能实现线上完整预测。
87-
base模型具体保存路径为model_save_path/{$day}/base,每天数据训练结束后保存,保存前调用shrink函数。
88-
delta模型具体保存路径为model_save_path/{$day}/delta_{$pass_id},每一个delta模型都是在上一个base/delta模型基础上进行保存的增量模型。
85+
base/delta模型一般用于线上预测,与全量模型相比,在保存过程中去掉了部分出现频率不高的特征,降低模型保存的磁盘占用及耗时。
86+
这两个模型一般指sparse_embedding中的参数,因此需要搭配dnn_plugin(模型文件和dense参数文件)才能实现线上完整预测。
87+
base模型具体保存路径为model_save_path/{$day}/base,每天数据训练结束后保存,保存前调用shrink函数。
88+
delta模型具体保存路径为model_save_path/{$day}/delta_{$pass_id},每一个delta模型都是在上一个base/delta模型基础上进行保存的增量模型。
8989

9090
## 高级功能
91-
为进一步提升模型效果,降低存储空间,提供了一系列高级功能,下面逐一进行介绍相关的功能和配置。
92-
具体配置详情可参考config_online.yaml中的table_parameters部分。
91+
为进一步提升模型效果,降低存储空间,提供了一系列高级功能,下面逐一进行介绍相关的功能和配置。
92+
具体配置详情可参考config_online.yaml中的table_parameters部分。
9393
为使用高级功能,需要配置相应的table及accessor:
9494
| 名称 | 类型 | 取值 | 是否必须 | 作用描述 |
9595
| :---------------------------: | :----------: | :-------------------------------------------------------: | :------: | :------------------------------------------------------------------: |
@@ -101,7 +101,8 @@ server端会根据特征的show和click计算一个频次得分,用于判断
101101
| :---------------------------: | :----------: | :-------------------------------------------------------: | :------: | :------------------------------------------------------------------: |
102102
| nonclk_coeff | float | 任意 || 特征展现但未点击对应系数 |
103103
| click_coeff | float | 任意 || 特征点击对应系数 |
104-
具体频次score计算公式如下:
104+
105+
具体频次score计算公式如下:
105106
score = click_coeff * click + noclick_coeff * (click - show)
106107
### 特征embedding扩展
107108
特征embedding初始情况下,只会生成一维embedding,其余维度均为0,当特征的频次score大于等于扩展阈值时,才会扩展出剩余维度,具体涉及到的配置如下:
@@ -110,17 +111,18 @@ score = click_coeff * click + noclick_coeff * (click - show)
110111
| embedx_dim | int | 任意 || 特征embedding扩展维度 |
111112
| embedx_threshold | int | 任意 || 特征embedding扩展阈值 |
112113
| fea_dim | int | 任意 || 特征embedding总维度 |
113-
需要注意的是:
114-
1、特征embedding的实际维度为1 + embedx_dim,即一维初始embedding + 扩展embedding。
115-
2、特征总维度包括show和click,因此fea_dim = embedx_dim + 3。
114+
115+
需要注意的是:
116+
1. 特征embedding的实际维度为1 + embedx_dim,即一维初始embedding + 扩展embedding。
117+
2. 特征总维度包括show和click,因此fea_dim = embedx_dim + 3。
116118
### 特征embedding保存
117119
为降低模型保存的磁盘占用及耗时,在保存base/delta模型时,可以去掉部分出现频率不高的特征,具体涉及到的配置如下:
118120
| 名称 | 类型 | 取值 | 是否必须 | 作用描述 |
119121
| :---------------------------: | :----------: | :-------------------------------------------------------: | :------: | :------------------------------------------------------------------: |
120122
| base_threshold | float | 任意 || 特征频次score大于等于该阈值才会在base模型中保存 |
121-
| delta_threshold | float | 任意 || 从上一个delta模型到当前delta模型,特征频次score大于等于该阈值才会在delta模型中保存 |
123+
| delta_threshold | float | 任意 || 从上一个delta模型到当前delta模型,<br>特征频次score大于等于该阈值才会在delta模型中保存 |
122124
| delta_keep_days | int | 任意 || 特征未出现天数小于等于该阈值才会在delta模型中保存 |
123-
| converter | string | 任意 || base/delta模型转换器 |
125+
| converter | string | 任意 || base/delta模型转换器(对接线上推理KV存储) |
124126
| deconverter | string | 任意 || base/delta模型解压器 |
125127
### 特征embedding淘汰
126128
一般每天的数据训练完成后,会调用shrink函数删除掉一些长久不出现或者出现频率极低的特征,具体涉及到的配置如下:
@@ -133,7 +135,7 @@ score = click_coeff * click + noclick_coeff * (click - show)
133135
稀疏参数(sparse_embedding)优化算法配置,分为一维embedding的优化算法(embed_sgd_param)和扩展embedding的优化算法(embedx_sgd_param):
134136
| 名称 | 类型 | 取值 | 是否必须 | 作用描述 |
135137
| :---------------------------: | :----------: | :-------------------------------------------------------: | :------: | :------------------------------------------------------------------: |
136-
| name | string | SparseAdaGradSGDRule/SparseNaiveSGDRule/SparseAdamSGDRule/StdAdaGradSGDRule || 优化算法名称 |
138+
| name | string | SparseAdaGradSGDRule<br>SparseNaiveSGDRule<br>SparseAdamSGDRule<br>StdAdaGradSGDRule || 优化算法名称 |
137139
| learning_rate | float | 任意 || 学习率 |
138140
| initial_g2sum | float | 任意 || g2sum初始值 |
139141
| initial_range | float | 任意 || embedding初始化范围[-initial_range, initial_range] |

0 commit comments

Comments
 (0)