0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

HugeCTR系列第2部分:训练大型深度学习推荐模型

星星科技指导员 来源:NVIDIA 作者:Vinh Nguyen 2022-04-02 14:30 次阅读

在 Merlin HugeCTR 博文系列的第一部分,我们讨论了训练大型深度学习推荐系统所面临的挑战,以及 HugeCTR 如何解决这些问题。

深度学习推荐系统可能包含超大型嵌入表,这些嵌入表可能会超出主机或 GPU 显存。

我们专为推荐系统设计了 HugeCTR。

这是一个专门用于在 GPU 上训练和部署大型推荐系统的框架。

它为在多个 GPU 或节点上分配单个嵌入表提供了不同的策略。

HugeCTR 是 NVIDIA Merlin] 的主要训练引擎,后者是一种 GPU 加速框架,旨在为推荐系统工作提供一站式服务,从数据准备、特征工程、多 GPU 训练到本地或云中的生产级推理。

训练性能和可扩展性一直是 HugeCTR 的突出特性,为 MLPerf 训练 v0.7 推荐任务中的 NVIDIA 获奖作品提供支持,但我们近期采纳了早期采用者和客户的反馈,以帮助改进易用性。

这篇博文将着重讨论我们在易用性方面的持续承诺和近期改进。

HugeCTR 是一种定制的深度学习框架,使用 CUDA C++ 编写,专用于推荐系统。

起初,超参数和神经网络架构在 JSON 配置中定义,然后通过命令行接口执行。

近期,我们添加了 Python API,使其更易于使用。

表 1 汇总了命令行和 Python API 之间的主要区别。

我们建议使用 Python API,并将在后面部分中重点介绍。

但是,如果您对命令行界面感兴趣,可以在此处找到一些示例。

表 1:HugeCTR 接口比较。

直接从 Python 配置和训练 HugeCTR

自 v2.3 版本起,HugeCTR 开始提供易于使用的 Python 接口,用于定义模型架构、超参数、数据加载程序以及训练循环。

此接口使 HugeCTR 更接近于数据科学 Python 生态系统和实践。

利用此接口的方法有两种:

1. 类似于 Keras 的高级 Python API

HugeCTR 现在提供了一个类似 Keras 的高级 Python API 套件,用于定义模型、层、优化器和执行训练。

下文提供了一个示例代码段。

如下所示,此 API 模拟热门的 Keras 构建-编译-适应范式。

2. 低级 Python API

HugeCTR 低级 Python API 允许从 JSON 文件读取模型定义和优化器配置,从而提供向后兼容性。

此外,此 API 允许使用 Python 循环不断手动执行训练,从而获得对训练的精细控制。

在本博客的动手实践部分中,我们将详细介绍如何使用此 API 基于两个数据集训练模型。

我们将在以下示例中演示此 API。

使用预训练的 HugeCTR 模型进行预测

随着 v3.0 版本的发布,HugeCTR 增加了对基于 GPU 的推理的支持,可生成许多批次的预测。

HugeCTR 将参数服务器、嵌入缓存和推理会话分离开来,以便更好地管理资源以及更有效地利用 GPU。

参数服务器用于加载和管理嵌入表。

对于超过 GPU 显存的嵌入表,参数服务器将嵌入表存储在 CPU 内存上。

嵌入缓存为模型提供嵌入查找服务。活动嵌入条目存储在 GPU 显存上,以便快速查找。

推理会话将这两者与模型权重和其他参数结合起来,以执行前向传播。

下文提供了初始化 HugeCTR 推理的函数调用序列示例。

我们将使用 config_file、embedding_cache 和 parameter_server 初始化 InferenceSession。

HugeCTR Python 推理 API 需要一个 JSON 格式的推理配置文件,该文件类似于训练配置 JSON。

但是,在添加推理子句时,我们需要省略优化器和求解器子句。

我们还需要将输出层更改为 Sigmoid 类型。

推理子句中的 dense_model_file 和 sparse_model_file 参数应设置为指向由 HugeCTR 训练的模型文件(_dense_xxxx.model 和 0_sparse_xxxx.model)。

我们在 Github 存储库中提供了多个完整示例:电子商务行为数据集和 Microsoft 新闻数据集。

我们一起来看一些示例

我们在 Github 存储库中提供了 HugeCTR API 的多个端到端示例。这些笔记本基于实际数据集和应用领域提供了完整的 Merlin 演练,从数据下载、预处理和特征工程到模型训练和推理。

1. 高级 Python API 与 Criteo 数据集

Criteo 1TB Click Logs 数据集是公开可用于推荐系统的大型数据集。

它包含约 40 亿个示例的 1.3TB 未压缩点击日志。

在我们的示例中,数据集使用 Pandas 或 NVTabular 进行预处理,以规范化连续特征,并对分类特征进行分类。

之后,我们使用 HugeCTR 的高级 API 训练深度和交叉神经网络架构。

首先,我们定义求解器和优化器,以使用它初始化 HugeCTR 模型。

然后,我们可以逐层添加,这类似于 TensorFlow Keras API。

最后,我们只需要调用 .fit() 函数。

2. 低级 Python API 与电子商务行为数据集

在此演示笔记本中,我们将使用 REES46 营销平台中的多品类商店的电子商务行为数据[/u]作为我们的数据集。

此笔记本基于 RecSys 2020 大会上的 NVIDIA 教程构建而成。

我们使用 NVTabular 进行特征工程和预处理,并使用 HugeCTR 训练 Facebook 深度学习推荐系统模型 (DLRM)。

我们针对 Criteo 点击日志数据集改编了一个示例 Json 配置文件。

需要编辑以与此数据集匹配的几个参数为:

slot_size_array:分类变量的基数,可以从 NVTabular 工作流程对象获取。

dense_dim:密集特征的数量

slot_num:分类变量的数量

以下 Python 代码会按批执行参数更新。

同样,我们针对 Microsoft 新闻数据集提供了第 2 个示例。

尝试使用 HugeCTR 的命令行和 Python API 训练推荐系统管线

我们致力于提供用户友好且易于使用的体验,以简化推荐系统工作流程。

我们近期根据早期采用者和客户的反馈对 HugeCTR 接口进行了改进。

HugeCTR Github 存储库提供了有关如何基于多个公共数据集(从小型到大型数据集都包含在内)使用此新接口的示例。

我们想邀请您针对您自己的领域改编这些示例,并见证 Merlin 的处理能力。

和往常一样,我们希望通过 Github 以及其他渠道获得您的反馈。

这是我们 HugeCTR 系列中关于“使用 HugeCTR 的新 API 训练大型深度学习推荐系统模型”的第二篇博文。

下一篇博文将讨论如何部署到生产。

关于作者

Vinh Nguyen 是一位深度学习的工程师和数据科学家,发表了 50 多篇科学文章,引文超过 2500 篇。在 NVIDIA ,他的工作涉及广泛的深度学习和人工智能应用,包括语音、语言和视觉处理以及推荐系统。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • NVIDIA
    +关注

    关注

    14

    文章

    4682

    浏览量

    102117
  • API
    API
    +关注

    关注

    2

    文章

    1437

    浏览量

    61234
  • 深度学习
    +关注

    关注

    73

    文章

    5270

    浏览量

    120176
收藏 人收藏

    评论

    相关推荐

    深度学习模型优化与调试方法

    深度学习模型训练过程中,往往会遇到各种问题和挑战,如过拟合、欠拟合、梯度消失或爆炸等。因此,对深度学习
    的头像 发表于 07-01 11:41 112次阅读

    英伟达开源Nemotron-4 340B系列模型,助力大型语言模型训练

    近日,英伟达宣布开源了一款名为Nemotron-4 340B的大型模型,这一壮举为开发者们打开了通往高性能大型语言模型(LLM)训练的新天地。该系列
    的头像 发表于 06-17 14:53 255次阅读

    大语言模型:原理与工程实践+初识2

    的一系列变革。 大语言模型深度学习的应用之一,可以认为,这些模型的目标是模拟人类交流,为了理解和生成人类语言。为此,
    发表于 05-13 00:09

    【大语言模型:原理与工程实践】大语言模型的预训练

    大语言模型的核心特点在于其庞大的参数量,这赋予了模型强大的学习容量,使其无需依赖微调即可适应各种下游任务,而更倾向于培养通用的处理能力。然而,随着学习容量的增加,对预
    发表于 05-07 17:10

    如何优化深度学习模型?

    因为大部分人使用的模型都是预训练模型,使用的权重都是在大型数据集上训练好的
    发表于 01-29 14:25 320次阅读
    如何优化<b class='flag-5'>深度</b><b class='flag-5'>学习</b><b class='flag-5'>模型</b>?

    如何基于深度学习模型训练实现工件切割点位置预测

    Hello大家好,今天给大家分享一下如何基于深度学习模型训练实现工件切割点位置预测,主要是通过对YOLOv8姿态评估模型在自定义的数据集上
    的头像 发表于 12-22 11:07 428次阅读
    如何基于<b class='flag-5'>深度</b><b class='flag-5'>学习</b><b class='flag-5'>模型</b><b class='flag-5'>训练</b>实现工件切割点位置预测

    如何基于深度学习模型训练实现圆检测与圆心位置预测

    Hello大家好,今天给大家分享一下如何基于深度学习模型训练实现圆检测与圆心位置预测,主要是通过对YOLOv8姿态评估模型在自定义的数据集上
    的头像 发表于 12-21 10:50 1018次阅读
    如何基于<b class='flag-5'>深度</b><b class='flag-5'>学习</b><b class='flag-5'>模型</b><b class='flag-5'>训练</b>实现圆检测与圆心位置预测

    深度学习如何训练出好的模型

    算法工程、数据派THU深度学习在近年来得到了广泛的应用,从图像识别、语音识别到自然语言处理等领域都有了卓越的表现。但是,要训练出一个高效准确的深度
    的头像 发表于 12-07 12:38 784次阅读
    <b class='flag-5'>深度</b><b class='flag-5'>学习</b>如何<b class='flag-5'>训练</b>出好的<b class='flag-5'>模型</b>

    视觉深度学习迁移学习训练框架Torchvision介绍

    Torchvision是基于Pytorch的视觉深度学习迁移学习训练框架,当前支持的图像分类、对象检测、实例分割、语义分割、姿态评估模型的迁
    的头像 发表于 09-22 09:49 604次阅读
    视觉<b class='flag-5'>深度</b><b class='flag-5'>学习</b>迁移<b class='flag-5'>学习</b><b class='flag-5'>训练</b>框架Torchvision介绍

    深度学习在医学图像分割与病变识别中的应用实战

    的准确性评估之外,还可以使用其他指标如精确度、召回率、F1数等,根据任务的特点选择合适的指标进行评估。 在实际应用中,模型训练可能需要更多的技巧和策略,如数据增强、学习率调整、早停等
    发表于 09-04 11:11

    深度学习框架和深度学习算法教程

    了基于神经网络的机器学习方法。 深度学习算法可以分为两大类:监督学习和无监督学习。监督学习的基本
    的头像 发表于 08-17 16:11 846次阅读

    深度学习框架区分训练还是推理吗

    模型,以便将来能够进行准确的预测。推理是指在训练完成后,使用已经训练好的模型进行新的预测。然而,深度学习
    的头像 发表于 08-17 16:03 1137次阅读