提交 3a3a2356 编写于 作者: C chengmo

Merge branch 'doc_update' into 'develop'

Doc update

See merge request !27
...@@ -57,7 +57,12 @@ class SingleTrainer(TranspileTrainer): ...@@ -57,7 +57,12 @@ class SingleTrainer(TranspileTrainer):
if metrics: if metrics:
self.fetch_vars = metrics.values() self.fetch_vars = metrics.values()
self.fetch_alias = metrics.keys() self.fetch_alias = metrics.keys()
context['status'] = 'startup_pass' evaluate_only = envs.get_global_env(
'evaluate_only', False, namespace='evaluate')
if evaluate_only:
context['status'] = 'infer_pass'
else:
context['status'] = 'startup_pass'
def startup(self, context): def startup(self, context):
self._exe.run(fluid.default_startup_program()) self._exe.run(fluid.default_startup_program())
......
...@@ -46,7 +46,7 @@ class TranspileTrainer(Trainer): ...@@ -46,7 +46,7 @@ class TranspileTrainer(Trainer):
namespace = "train.reader" namespace = "train.reader"
class_name = "TrainReader" class_name = "TrainReader"
else: else:
readerdataloader = self.model._infer_data_loader dataloader = self.model._infer_data_loader
namespace = "evaluate.reader" namespace = "evaluate.reader"
class_name = "EvaluateReader" class_name = "EvaluateReader"
...@@ -239,8 +239,17 @@ class TranspileTrainer(Trainer): ...@@ -239,8 +239,17 @@ class TranspileTrainer(Trainer):
metrics_format = ", ".join(metrics_format) metrics_format = ", ".join(metrics_format)
self._exe.run(startup_program) self._exe.run(startup_program)
for (epoch, model_dir) in self.increment_models: model_list = self.increment_models
print("Begin to infer epoch {}, model_dir: {}".format(epoch, model_dir))
evaluate_only = envs.get_global_env(
'evaluate_only', False, namespace='evaluate')
if evaluate_only:
model_list = [(0, envs.get_global_env(
'evaluate_model_path', "", namespace='evaluate'))]
for (epoch, model_dir) in model_list:
print("Begin to infer No.{} model, model_dir: {}".format(
epoch, model_dir))
program = infer_program.clone() program = infer_program.clone()
fluid.io.load_persistables(self._exe, model_dir, program) fluid.io.load_persistables(self._exe, model_dir, program)
reader.start() reader.start()
......
...@@ -259,12 +259,3 @@ auc_var, batch_auc_var, auc_states = fluid.layers.auc( ...@@ -259,12 +259,3 @@ auc_var, batch_auc_var, auc_states = fluid.layers.auc(
``` ```
完成上述组网后,我们最终可以通过训练拿到`avg_cost``auc`两个重要指标。 完成上述组网后,我们最终可以通过训练拿到`avg_cost``auc`两个重要指标。
# 训练
## 单机训练
## 分布式训练
### 本地模拟分布式
### 百度云分布式训练
# 预测
# 基于DNN模型的TDM召回模型
## 论文介绍
## 目录
* [数据准备](#数据准备)
* [数据来源](#数据来源)
* [数据预处理](#数据预处理)
* [一键下载训练及测试数据](#一键下载训练及测试数据)
* [数据读取](#数据读取)
* [模型组网](#模型组网)
* [输入定义](#输入定义)
* [模型组网](#模型组网)
* [Loss定义](#loss定义)
* [训练](#训练)
* [单机训练](#单机训练)
* [分布式训练](#分布式训练)
* [本地模拟分布式](#本地模拟分布式)
* [百度云分布式训练](#百度云分布式训练)
* [预测](#预测)
* [本地预测](#本地预测)
* [Benchmark](#benchmark)
* [调优](#调优)
* [效果调优](#效果调优)
* [性能调优](#性能调优)
* [模型产出与部署](#模型产出与部署)
#
## 数据准备
### 数据来源
### 数据预处理
### 一键下载训练及测试数据
### 数据读取
#
## 模型组网
### 输入定义
### 模型组网
### Loss定义
#
## 训练
### 单机训练
### 分布式训练
#### 本地模拟分布式
#### 百度云分布式训练
#
## 预测
### 预测组网
### 本地预测
### Benchmark
#
## 调优
### 效果调优
### 性能调优
#
## 模型产出与部署
...@@ -12,7 +12,11 @@ ...@@ -12,7 +12,11 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
evaluate: evaluate:
workspace: "paddlerec.models.recall.word2vec" workspace: "paddlerec.models.recall.word2vec"
evaluate_only: True
evaluate_model_path: ""
reader: reader:
batch_size: 50 batch_size: 50
class: "{workspace}/w2v_evaluate_reader.py" class: "{workspace}/w2v_evaluate_reader.py"
......
# Paddle-TDM
本代码库提供了基于PaddlePaddle实现的TreeBased推荐搜索算法,主要包含以下组成:
- 基于fake数据集,适用于快速调试的paddle-tdm模型。主要用于理解paddle-tdm的设计原理,高效上手设计适合您的使用场景的模型。
以上内容将随paddle版本迭代不断更新,欢迎您关注该代码库。
#
## TDM设计思路
### 基本概念
TDM是为大规模推荐系统设计的、能承载任意先进模型来高效检索用户兴趣的推荐算法解决方案。TDM基于树结构,提出了一套对用户兴趣度量进行层次化建模与检索的方法论,使得系统能直接利高级深度学习模型在全库范围内检索用户兴趣。其基本原理是使用树结构对全库item进行索引,然后训练深度模型以支持树上的逐层检索,从而将大规模推荐中全库检索的复杂度由O(n)(n为所有item的量级)下降至O(log n)。
### 核心问题
1. 如何构建树结构?
2. 如何基于树结构做深度学习模型的训练?
3. 如何基于树及模型进行高效检索?
### PaddlePaddle的TDM方案
1. 树结构的数据,来源于各个业务的实际场景,构造方式各有不同,paddle-TDM一期暂不提供统一的树的构造流程,但会统一树构造好之后,输入paddle网络的数据组织形式。业务方可以使用任意工具构造自己的树,生成指定的数据格式,参与tdm网络训练。
2. 网络训练中,有三个核心问题:
- 如何组网?答:paddle封装了大量的深度学习OP,用户可以根据需求设计自己的网络结构。
- 训练数据如何组织?答:tdm的训练数据主要为:`user/query emb``item`的正样本,`item`需要映射到树的某个叶子节点。用户只需准备符合该构成的数据即可。负样本的生成,会基于用户提供的树结构,以及paddle提供的`tdm-sampler op`完成高效的负采样,并自动添加相应的label,参与tdm中深度学习模型的训练。
- 大规模的数据与模型训练如何实现?答:基于paddle优秀的大规模参数服务器分布式能力,可以实现高效的分布式训练。基于paddle-fleet api,学习门槛极低,且可以灵活的支持增量训练,流式训练等业务需求。
3. 训练好模型后,可以基于paddle,将检索与打分等流程都融入paddle的组网中,生成inference_model与参数文件,基于PaddlePaddle的预测库或者PaddleLite进行快速部署与高效检索。
#
\ No newline at end of file
此差异已折叠。
...@@ -18,7 +18,7 @@ train: ...@@ -18,7 +18,7 @@ train:
strategy: "async" strategy: "async"
epochs: 2 epochs: 2
workspace: "paddlerec.models.recall.tdm" workspace: "paddlerec.models.treebased.tdm"
reader: reader:
batch_size: 32 batch_size: 32
......
<p align="center"> <p align="center">
<img align="center" src="doc/imgs/logo.png"> <img align="center" src="doc/imgs/logo.png">
<p> <p>
...@@ -70,7 +71,7 @@ ...@@ -70,7 +71,7 @@
### 启动内置模型的默认配置 ### 启动内置模型的默认配置
目前框架内置了多个模型,简单的命令即可使用内置模型开始单机训练和本地1*1模拟训练,我们以`ctr-dnn`为例介绍PaddleRec的简单使用。 目前框架内置了多个模型,简单的命令即可使用内置模型开始单机训练和本地1*1模拟训练,我们以`dnn`为例介绍PaddleRec的简单使用。
<h3 align="center">单机训练</h3> <h3 align="center">单机训练</h3>
...@@ -100,7 +101,7 @@ python -m paddlerec.run -m paddlerec.models.rank.dnn -e cluster ...@@ -100,7 +101,7 @@ python -m paddlerec.run -m paddlerec.models.rank.dnn -e cluster
若您复用内置模型,对**yaml**配置文件进行了修改,如更改超参,重新配置数据后,可以直接使用paddlerec运行该yaml文件。 若您复用内置模型,对**yaml**配置文件进行了修改,如更改超参,重新配置数据后,可以直接使用paddlerec运行该yaml文件。
例如在paddlerec代码目录下,修改了dnn模型`config.yaml`的配置后,运行`ctr-dnn`模型: 我们以dnn模型为例,在paddlerec代码目录下,修改了dnn模型`config.yaml`的配置后,运行`dnn`模型:
```bash ```bash
python -m paddlerec.run -m ./models/rank/dnn/config.yaml -e single python -m paddlerec.run -m ./models/rank/dnn/config.yaml -e single
``` ```
...@@ -109,37 +110,45 @@ python -m paddlerec.run -m ./models/rank/dnn/config.yaml -e single ...@@ -109,37 +110,45 @@ python -m paddlerec.run -m ./models/rank/dnn/config.yaml -e single
<h2 align="center">支持模型列表</h2> <h2 align="center">支持模型列表</h2>
| 方向 | 模型 | 单机CPU训练 | 单机GPU训练 | 分布式CPU训练 | 分布式GPU训练 | | 方向 | 模型 | 单机CPU训练 | 单机GPU训练 | 分布式CPU训练 |
| :------: | :----------------------------------------------------------------------------: | :---------: | :---------: | :-----------: | :-----------: | | :------: | :----------------------------------------------------------------------------: | :---------: | :---------: | :-----------: |
| 内容理解 | [Text-Classifcation](models/contentunderstanding/text_classification/model.py) | ✓ | x | ✓ | x | | 内容理解 | [Text-Classifcation](models/contentunderstanding/text_classification/model.py) | ✓ | x | ✓ |
| 内容理解 | [TagSpace](models/contentunderstanding/tagspace/model.py) | ✓ | x | ✓ | x | | 内容理解 | [TagSpace](models/contentunderstanding/tagspace/model.py) | ✓ | x | ✓ |
| 召回 | [Word2Vec](models/recall/word2vec/model.py) | ✓ | x | ✓ | x | | 召回 | [TDM](models/treebased/tdm/model.py) | ✓ | x | ✓ |
| 召回 | [TDM](models/recall/tdm/model.py) | ✓ | x | ✓ | x | | 召回 | [Word2Vec](models/recall/word2vec/model.py) | ✓ | x | ✓ |
| 召回 | [SSR](models/recall/ssr/model.py) | ✓ | ✓ | ✓ | x | | 召回 | [SSR](models/recall/ssr/model.py) | ✓ | ✓ | ✓ |
| 召回 | [Gru4Rec](models/recall/gru4rec/model.py) | ✓ | ✓ | ✓ | x | | 召回 | [Gru4Rec](models/recall/gru4rec/model.py) | ✓ | ✓ | ✓ |
| 排序 | [CTR-Dnn](models/rank/dnn/model.py) | ✓ | x | ✓ | x | | 排序 | [Dnn](models/rank/dnn/model.py) | ✓ | x | ✓ |
| 排序 | [DeepFm](models/rank/deepfm/model.py) | ✓ | x | ✓ | x | | 排序 | [DeepFM](models/rank/deepfm/model.py) | ✓ | x | ✓ |
| 排序 | [xDeepFm](models/rank/xdeepfm/model.py) | ✓ | x | ✓ | x | | 排序 | [xDeepFM](models/rank/xdeepfm/model.py) | ✓ | x | ✓ |
| 排序 | [DIN](models/rank/din/model.py) | ✓ | x | ✓ | x | | 排序 | [DIN](models/rank/din/model.py) | ✓ | x | ✓ |
| 排序 | [Wide&Deep](models/rank/wide_deep/model.py) | ✓ | x | ✓ | x | | 排序 | [Wide&Deep](models/rank/wide_deep/model.py) | ✓ | x | ✓ |
| 多任务 | [ESMM](models/multitask/essm/model.py) | ✓ | ✓ | ✓ | x | | 多任务 | [ESMM](models/multitask/esmm/model.py) | ✓ | ✓ | ✓ |
| 多任务 | [MMOE](models/multitask/mmoe/model.py) | ✓ | ✓ | ✓ | x | | 多任务 | [MMOE](models/multitask/mmoe/model.py) | ✓ | ✓ | ✓ |
| 排序 | [ShareBottom](models/multitask/share-bottom/model.py) | ✓ | ✓ | ✓ | x | | 多任务 | [ShareBottom](models/multitask/share-bottom/model.py) | ✓ | ✓ | ✓ |
| 匹配 | [DSSM](models/match/dssm/model.py) | ✓ | x | ✓ | x | | 匹配 | [DSSM](models/match/dssm/model.py) | ✓ | x | ✓ |
| 匹配 | [Simnet](models/match/multiview-simnet/model.py) | ✓ | x | ✓ | x | | 匹配 | [MultiView-Simnet](models/match/multiview-simnet/model.py) | ✓ | x | ✓ |
<h2 align="center">文档</h2> <h2 align="center">文档</h2>
### 背景介绍
* [推荐系统](doc/rec_background.md)
* [分布式-参数服务器](doc/ps_background.md)
### 新手教程 ### 新手教程
* [推荐系统背景介绍](doc/rec_background.md) * [环境要求](#环境要求)
* [分布式-参数服务器背景介绍](doc/ps_background.md) * [安装命令](#安装命令)
* [快速开始](#启动内置模型的默认配置)
### 进阶教程 ### 进阶教程
* [自定义数据集及Reader](doc/custom_dataset_reader.md) * [自定义数据集及Reader](doc/custom_dataset_reader.md)
* [分布式训练](doc/distributed_train.md) * [分布式训练](doc/distributed_train.md)
### 开发者教程
* [PaddleRec设计文档](doc/design.md)
### 关于PaddleRec性能 ### 关于PaddleRec性能
* [Benchmark](doc/benchmark.md) * [Benchmark](doc/benchmark.md)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册