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

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

3天内不再提示

Merlin HugeCTR 分级参数服务器系列之三——集成到 TensorFlow

NVIDIA英伟达 来源:未知 2022-11-22 19:45 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

前两期中我们介绍了 HugeCTR 分级参数服务器 (HPS)的三级存储结构的设计,相关配置使用,数据后端以及流式在线模型更新方案。本期将为大家介绍如何将 HPS 集成到 TensorFlow 中,从而实现在 TensorFlow 中利用分级存储来部署包含庞大 Embedding Tables 的模型。

引言

当需要基于 TensorFlow 来部署包含庞大 Embedding Tables 的深度学习模型时,数据科学家和机器学习工程师需要面对以下挑战:

  • 庞大的 Embedding Tables:训练好的 Embedding Tables 的大小往往达到几百GB,使用 TensorFlow 原生的 Layers 或 Variable 无法放入 GPU 内存;

  • 低延时需求: 在线推理要求 Embedding 查询的延时要足够低(几毫秒级),以保证体验质量和维持用户粘度;

  • 多 GPU 扩展能力:分布式推理框架需要将多个模型部署在多个 GPU上,每个模型包含一个或多个 Embedding Tables;

  • 支持加载为 Pre-trained Embeddings:对于迁移学习等任务,需要支持以 Pre-trained Embeddings 的形式加载庞大的 Embedding Tables。

针对以上挑战,我们为 HPS 提供了一个面向 TensorFlow 的 Python 定制化插件,以方便用户将 HPS 集成到 TensorFlow 模型图中,实现包含庞大 Embedding Tables 的模型的高效部署:

  • HPS 通过使用集群中可用的存储资源来扩展 GPU 内存,包含 CPU RAM 以及非易失性存储如 HDD 和 SSD,从而实现庞大 Embedding Tables 的分级存储,如图 1 所示;

  • HPS 通过使用 GPU Embedding Cache 来利用 embedding key 的长尾特性,当查询请求持续不断涌入时,缓存机制保证 GPU 内存可以自动存储热门(高频访问)key 的 Embeddings,从而可以提供低延迟的查询服务;

  • 在 GPU 内存,CPU 内存以及 SSD 组成的存储层级中,HPS 以层级结构化的方式来管理多个模型的 Embedding Tables,实现参数服务器的功能;

  • HPS 的查询服务通过 Custom TensorFlow Layers 来接入,无论是推理还是类似迁移学习的任务,都可以有效支持。

c3fdeebe-6a5a-11ed-8abf-dac502259ad0.png

图 1:HPS 的分级存储架构

TensorFlow 用户可以使用我们提供的 Python APIs,轻松利用 HPS 的上述特性,我们将在下文中进一步介绍。

工作流程

利用 HPS 来部署包含庞大 Embedding Tables 的 TensorFlow 模型的工作流程如图 2 所示:

c476d05e-6a5a-11ed-8abf-dac502259ad0.png

图 2:利用 HPS 部署 TensorFlow 模型的工作流程

流程中的步骤可以总结如下:

  • 训练阶段:用户可以用原生的 TensorFlow Embedding Layers(例如 tf.nn.embedding_lookup_sparse)或者支持模型并行的 SOK[1] Embedding Layers(例如 sok.DistributedEmbedding)来搭建模型图并进行训练。只要模型可以用 TensorFlow 进行训练,则无论密集层以及模型图的拓扑结构如何,HPS 都可以在推理阶段集成进来。

  • 分解训练的模型图:用户需要从训练的模型图中提取由密集层组成的子图,并将其单独保存下来。至于训练好的 Embedding Weights,如果使用的是原生 TensorFlow Embedding Layers,则需要提取 Embedding Weights 并将其转换成 HPS 支持的格式;如果使用的是 SOK Embedding Layers,可以利用 sok.Saver.dump_to_file 来直接得到所需的格式。HPS 的格式要求为:每个 Embedding Table 都被保存在一个文件夹中,包含两个二进制文件,key (int64)和 emb_vector(float32)。举例来说,如果一共有 1000 个训练好的键值对,并且 embedding vector 的长度是 16,那么 key 文件和 emb_vector 文件的大小分别为 1000*8 bytes 和 1000*16*4 bytes。

  • 搭建并保存推理图:推理图由 HPS Layers(如 hps.SparseLookupLayer)和保存好的密集层子图搭建而成。只需将训练图中的 Embedding Layer 用 HPS Layers 加以替换,便可以得到推理图。该推理图保存后便可在生产环境中部署。

  • 部署推理图:为了利用 HPS,用户需要提供一个 JSON 文件,来指定待部署模型的配置信息,用以启动 HPS 查询服务。接下来便可以部署保存好的推理图来执行在线推理任务,在此过程中有效地利用 HPS Embedding 查询的优化设计。关于配置信息的更多细节,请参考 HPS Configuration[2]

API

HPS 提供了简洁易用的 Python API,可以与 TensorFlow 无缝地衔接。用户只需几行代码,便可以启动 HPS 查询服务以及将 HPS 集成到 TensorFlow 模型图中。

  • hierarchical_parameter_server.Init:该方法用来针对待部署的模型启动 HPS 查询服务,需要在执行推理任务前被调用一次。必须提供的参数为:

  • global_batch_size:整型,待部署模型的全局批大小。例如模型部署在 4 个 GPUs 上,每个 GPU 上批大小为 4096,则全局批大小为 16384

  • ps_config_file:字符串,HPS 初始化所需的 JSON 配置文件

该方法支持显式调用或隐式调用。显式调用用于基于 Python 脚本的测试工作;隐式调用则用于在生产环境中部署模型,要求待部署的推理模型中的 hps.SparseLookupLayer 或 hps.LookupLayer 指定好 global_batch_size 和 ps_config_file,当模型首次接收到推理请求时,会以 call_once 且线程安全的方式触发 HPS 的初始化

  • hierarchical_parameter_server.SparseLookupLayer:继承自 tf.keras.layers.Layer,通过指定模型名和 table id 订阅到 HPS 查询服务。该层执行与 tf.nn.embedding_lookup_sparse 基本相同的功能。构造时必须提供的参数为:

  • model_name:字符串,HPS 部署的模型名

  • table_id:整型,指定的 model_name 的 Embedding Tables 的索引

  • emb_vec_size:整型,指定的 model_name 和 table_id 的 Embedding Vector 的长度

  • emb_vec_dtype:返回的 Embedding Vector 的数据类型,目前只支持为 tf.float32

  • ps_config_file:字符串,HPS 隐式初始化所需的 JSON 配置文件

  • global_batch_size:整型,待部署模型的全局批大小

执行时的输入和返回值为:

  • sp_ids:输入,int64 类型的 id 的 N x M SparseTensor,其中 N 通常是批次大小,M 是任意的

  • sp_weights:输入,可以是具有 float/double weight 的 SparseTensor,或者是 None 以表示所有 weight 应为 1。如果指定,则 sp_weights 必须具有与 sp_ids 完全相同的 shape 和 indice

  • combiner:输入,指定 reduction 操作的字符串。目前支持“mean”,“sqrtn”和“sum”

  • max_norm:输入,如果提供,则在 combine 之前将每个 embedding 规范化为具有等于 max_norm 的 l2 范数

  • emb_vector: 返回值,表示 combined embedding 的密集张量。对于由 sp_ids 表示的密集张量中的每一行,通过 HPS 来查找该行中所有 id 的 embedding,将它们乘以相应的 weight,并按指定的方式组合这些 embedding

  • hierarchical_parameter_server.LookupLayer:继承自 tf.keras.layers.Layer,通过指定模型名和 table id 订阅到 HPS 查询服务。该层执行与 tf.nn.embedding_lookup 基本相同的功能。构造时的参数与 hierarchical_parameter_server.SparseLookupLayer 相同。执行时的输入和返回值为:

  • inputs:输入,保存在 Tensor 中的键。数据类型必须为 tf.int64

  • emb_vector: 返回值,查询到的 Embedding Vector。数据类型为 tf.float32

部署方案

按照图 2 的工作流程得到集成了 HPS 的推理模型后,用户可以根据生产环境选择多种部署方案:

  • Triton TensorFlow backend[3]:Triton 推理服务器是开源推理服务软件,可简化 AI 推理流程,支持部署不同深度学习框架的推理模型。集成了 HPS 的 TensorFlow 推理模型可以基于 Triton TensorFlow backend 进行部署,只需将 HPS 的 embedding lookup 视作 custom op,并在启动 tritonserver 前用 LD_PRELOAD 将其 shared library 加载到 Triton 即可

  • TensorFlow Serving[4]:集成了 HPS 的 TensorFlow 推理模型也可方便地部署在 TensorFlow Serving 这一灵活高性能的推理服务系统上,HPS 的 embedding lookup 同样可作为 custom op 被加载到 TensorFlow Serving中

如果用户希望进一步对集成了 HPS 的推理模型中的密集网络层进行优化,还可以使用 tensorflow.python.compiler.tensorrt.trt_convert 对 SavedModel 进行转换,HPS 的 embedding lookup 可自动 fallback 到其 TensorFlow plugin 对应的 kernels,而可被优化的密集网络层则会生成 TensorRT engine 来执行。转换后的 SavedModel 仍然可以使用 Triton TensorFlow backend 或 TensorFlow Serving 进行部署。

除了使用 HPS 的 TensorFlow plugin 外,用户还可使用 Triton HPS backend[5]。利用 Triton Ensemble Model[6],用户可以方便地将 HPS backend 和其他 Triton backend 连接起来,搭建出 HPS 用于 embedding lookup、其他 backend 用于密集网络层前向传播的推理服务流水线。使用该方案来部署模型的工作流程如图 3 所示:

c4e7e14a-6a5a-11ed-8abf-dac502259ad0.png

图 3:利用 Triton Emsemble Model 部署模型的工作流程

这里密集网络层部分除了可以使用 TensorFlow backend 进行部署外,还可以使用 TensorRT backend 进行部署,此时需要将密集网络层的 SavedModel 通过 TensorFlow->ONNX->TensorRT 的转化,得到性能优化的 TensorRT engine。

结语

在这一期的 HugeCTR 分级参数服务器文章中,我们介绍了使用 HPS 部署包含庞大 Embedding Tables 的 TensorFlow 模型的解决方案,工作流程以及 API。更多信息,请参考 HPS 官方文档:

https://nvidia-merlin.github.io/HugeCTR/master/hierarchical_parameter_server/index.html

在下一期中,我们将着重介绍 HugeCTR 分级参数服务器中最关键的组件:Embedding Cache 的设计细节,敬请期待。

以下是 HugeCTR 的 Github repo 以及其他发布的文章,欢迎感兴趣的朋友阅读和反馈。Github:

https://github.com/NVIDIA-Merlin/HugeCTR (更多文章详见 README)

[1]SOK

https://nvidia-merlin.github.io/HugeCTR/sparse_operation_kit/master/index.html

[2]HPS Configuration

https://nvidia-merlin.github.io/HugeCTR/master/hugectr_parameter_server.html#configuration

[3]Triton TensorFlow backend

https://github.com/triton-inference-server/tensorflow_backend

[4]TensorFlow Serving

https://github.com/tensorflow/serving

[5]Triton HPS backend

https://github.com/triton-inference-server/hugectr_backend/tree/main/hps_backend

[6]Triton Ensemble Model

https://github.com/triton-inference-server/server/blob/main/docs/user_guide/architecture.md#ensemble-models

点击查看关于 HugeCTR 分级参数服务器的更多内容

‍‍‍‍Merlin HugeCTR 分级参数服务器简介

Merlin HugeCTR 分级参数服务器简介之二


原文标题:Merlin HugeCTR 分级参数服务器系列之三——集成到 TensorFlow

文章出处:【微信公众号:NVIDIA英伟达】欢迎添加关注!文章转载请注明出处。


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

    关注

    23

    文章

    4040

    浏览量

    97657

原文标题:Merlin HugeCTR 分级参数服务器系列之三——集成到 TensorFlow

文章出处:【微信号:NVIDIA_China,微信公众号:NVIDIA英伟达】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    发布元服务配置内容分级

    年龄分级作为元服务的重要属性,在华为应用市场的应用详情页展示给用户,帮助用户找到适合其年龄段的元服务,从而为未成年人用户打造纯净的使用环境。 1.AGC提供了调查问卷,根据您回答的内容,自动生成
    发表于 11-21 11:29

    欧洲服务器免费ip地址怎么获取?#欧洲服务器 #免费IP地址 #服务器

    服务器
    jf_57681485
    发布于 :2025年06月13日 11:15:04

    DNS服务器无法访问?2分钟快速排查与解决!#DNS服务器 #DNS #服务器

    服务器
    jf_57681485
    发布于 :2025年06月10日 14:55:34

    直播云服务器对带宽有什么要求?#直播云服务器 #直播 #带宽

    服务器
    jf_57681485
    发布于 :2025年05月30日 11:54:24

    如何选择 边缘计算服务器

    边缘计算服务器选型指南(2025年更新版) 一、明确应用场景需求 场景细分‌ 工业控制、自动驾驶等需‌毫秒级响应‌的场景,优先选择集成多核处理(如Xeon D系列)和实时算法加速模块
    的头像 发表于 05-06 07:58 523次阅读
    如何选择 边缘计算<b class='flag-5'>服务器</b>

    国外bgp服务器多少钱?# 服务器

    服务器
    jf_57681485
    发布于 :2025年04月24日 14:19:00

    新加坡服务器延迟大吗?真相在这里#新加坡服务器 #服务器

    服务器
    jf_57681485
    发布于 :2025年04月18日 13:48:50

    AI 推理服务器都有什么?2025年服务器品牌排行TOP10与选购技巧

    根据行业数据,AI推理服务器的性能差异可以达到10倍以上。比如,用普通服务器跑一个700亿参数的大模型,可能需要30秒才能出结果,而用顶级服务器可能只需要3秒。这就是为什么选对
    的头像 发表于 04-09 11:06 7352次阅读
    AI 推理<b class='flag-5'>服务器</b>都有什么?2025年<b class='flag-5'>服务器</b>品牌排行TOP10与选购技巧

    NTP校时服务器 时钟同步服务器

    服务器
    jf_75250307
    发布于 :2025年03月19日 20:56:34

    服务器数据恢复—如何预防服务器故障与恢复服务器数据!

    服务器常见故障: 硬件故障:磁盘损坏、电池故障等。 软件问题:操作系统崩溃、未知的程序运行错误等。 病毒破坏:勒索病毒加密、删除服务器数据等。 不可控力量;服务器浸水、火烧、机房倒塌等导致
    的头像 发表于 03-11 12:36 814次阅读

    独立服务器和云服务器哪个快一些?

    独立服务器和云服务器哪个快一些?在数字服务部署中,独立服务器与云服务器的速度差异并非绝对,需结合资源配置与应用场景综合判断。以下是UU云对独
    的头像 发表于 02-05 10:08 799次阅读

    ftp服务器怎么搭建

    需要选择一款合适的FTP服务器软件。常见的FTP服务器软件包括Windows自带的IIS(Internet信息服务)、第方软件如Serv-U、3CDaemon、FileZilla S
    的头像 发表于 02-01 15:43 1407次阅读

    双北斗校时服务器、双北斗授时服务器、双北斗对时服务器、双北斗NTP服务器

    技术,能够有效减少误差,提高时间信息的准确性。此外,北斗时间服务器还支持多种通信协议和接口方式,方便用户进行集成和部署。 SYN2151型NTP时间同步服务器 是双北斗时钟服务器,完全
    的头像 发表于 01-21 09:24 792次阅读
    双北斗校时<b class='flag-5'>服务器</b>、双北斗授时<b class='flag-5'>服务器</b>、双北斗对时<b class='flag-5'>服务器</b>、双北斗NTP<b class='flag-5'>服务器</b>