跳转到主要内容

Merlin推荐系统模型

项目描述

Merlin Models

PyPI version shields.io GitHub License Documentation

Merlin Models库提供了一系列推荐系统模型的标准模型,旨在实现从经典机器学习模型到高级深度学习模型的高质量实现。

该库的目标是让行业用户能够轻松地使用库中已经内置的最佳实践来训练和部署推荐模型。该库简化了行业用户针对其数据集训练标准模型的过程,并将高性能、GPU加速的模型投入生产。该库还允许研究人员通过结合深度学习推荐模型的标准化组件来构建自定义模型,然后研究人员可以在示例离线数据集上对新模型进行基准测试。

在最初的发布中,Merlin Models具有TensorFlow API。PyTorch API已启动,但尚未完成。我们在Transformer4Rec库中提供了基于Transformer的会话式推荐系统的PyTorch支持。

Merlin Models的好处

RecSys模型实现 - 该库为推荐模型提供了经典和最先进的深度学习架构的高级API。这些模型包括检索(例如,矩阵分解、两塔、YouTube DNN等)和排名(例如,DLRM、DCN-v2、DeepFM等)模型。

构建模块 - 在 Merlin 模型中,推荐模型基于可重用的构建模块构建。这种设计使得组合模块以定义新的架构变得容易。该库提供模型定义模块(MLP 层、分解层、输入模块、负采样器、损失函数)、训练模型(来自 Parquet 文件的数据加载器)以及评估(例如排名指标)。

与 Merlin 平台的集成 - Merlin 模型与其他 Merlin 组件深度融合。例如,模型依赖于 NVTabular 进行预处理,并与 Merlin 系统轻松集成以进行推理。精心设计的集成使得构建高性能端到端推荐系统管道变得简单。

Merlin 模型数据加载器 - Merlin 提供与常见深度学习框架的无缝集成,例如 TensorFlow、PyTorch 和 HugeCTR。在训练深度学习推荐系统模型时,数据加载可能成为瓶颈。为了应对这一挑战,Merlin 提供了自定义、高度优化的数据加载器,以加速现有的 TensorFlow 和 PyTorch 训练流程。Merlin 数据加载器可以将速度提升到使用 GPU 的相同训练流程的九倍。

使用 Merlin 数据加载器,您可以

  • 通过一次处理大量数据而不是逐项处理来消除数据加载的瓶颈。
  • 通过从磁盘流式传输来处理不适用于 GPU 或 CPU 内存的数据集。
  • 异步将批次准备到 GPU 中,以避免 CPU 到 GPU 的通信。
  • 通过使用类似的 API,轻松集成到现有的 TensorFlow 或 PyTorch 训练流程中。

要了解 Merlin 模型的核心功能,请参阅 模型概述 页面。

安装

使用 Pip 安装 Merlin 模型

可以通过运行以下命令使用 pip 安装 Merlin 模型

pip install merlin-models

使用 pip 安装 Merlin 模型不会安装一些额外的 GPU 依赖项,例如 CUDA 工具包。当您在我们的 Docker 容器中运行 Merlin 模型时,依赖项已经安装。

包含 Merlin 模型的 Docker 容器

Merlin 模型包含在 Merlin 容器中。

有关 Merlin 容器名称、容器映像的 NVIDIA GPU 云目录中的 URL 以及关键 Merlin 组件的信息,请参阅 Merlin 容器 文档页面。

从源安装 Merlin 模型

可以通过运行以下命令从源安装 Merlin 模型

git clone https://github.com/NVIDIA-Merlin/models
cd models && pip install -e .

入门

Merlin 模型使得定义能够适应不同输入特征的架构变得简单。这种适应性是通过建立在 NVTabular 库的核心功能之上实现的。当您使用 NVTabular 进行特征工程时,NVTabular 会创建一个标识输入特征的模式。您可以通过查看 从 ETL 到训练 RecSys 模型 - NVTabular 和 Merlin 模型集成示例 笔记本来了解 Schema 对象的实际操作。

您可以轻松构建如 DLRM 这样的流行 RecSys 架构,如下面的代码示例所示。定义模型后,您可以使用典型的 Keras 模型进行训练和评估。

import merlin.models.tf as mm
from merlin.io.dataset import Dataset

train = Dataset(PATH_TO_TRAIN_DATA)
valid = Dataset(PATH_TO_VALID_DATA)

model = mm.DLRMModel(
    train.schema,                                                   # 1
    embedding_dim=64,
    bottom_block=mm.MLPBlock([128, 64]),                            # 2
    top_block=mm.MLPBlock([128, 64, 32]),
    prediction_tasks=mm.BinaryClassificationTask(train.schema)      # 3
)

model.compile(optimizer="adagrad", run_eagerly=False)
model.fit(train, validation_data=valid, batch_size=1024)
eval_metrics = model.evaluate(valid, batch_size=1024, return_dict=True)
  1. 为了构建内部输入层,模型从模式对象中识别它们。模式识别连续特征和分类特征,并为它们创建嵌入表。
  2. 为了定义架构的主体,使用具有可配置维度的 MLP 层。
  3. 架构的头部是根据所选任务创建的,在这个例子中是 BinaryClassificationTask。目标二元特征也从模式中推断出来(即标记为 'TARGET')。

您可以在我们的 深度学习推荐模型 概述中找到更多详细信息和信息。

笔记本示例和教程

查看文档中的示例笔记本,以帮助您熟悉 Merlin 模型。

相同的笔记本在Merlin 模型 GitHub 仓库的 examples 目录中也可用。

反馈和支持

如果您想直接向库贡献力量,请参阅 CONTRIBUTING.md 文件。我们特别关注对我们特征工程和预处理操作的贡献或功能请求。为了进一步推进我们的 Merlin 路线图,我们鼓励您在此 调查 中分享有关您的推荐系统管道的所有详细信息。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

merlin-models-23.12.0.tar.gz (486.0 kB 查看哈希值)

上传时间