网易首页 > 网易号 > 正文 申请入驻

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

0
分享至

前两期中我们介绍了 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 来接入,无论是推理还是类似迁移学习的任务,都可以有效支持。

图 1:HPS 的分级存储架构

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

工作流程

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

图 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 所示:

图 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

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
上海一餐馆内男子为护孕妻两次劝烟被打,打人者被处500元处罚

上海一餐馆内男子为护孕妻两次劝烟被打,打人者被处500元处罚

封面新闻
2026-06-19 15:14:19
中东,突发大消息!以色列发动空袭!特朗普最新发声

中东,突发大消息!以色列发动空袭!特朗普最新发声

证券时报
2026-06-19 15:05:17
“雷仁勋”刷屏!小女孩拆穿“雷军的新装”:小米股价一年暴跌60%,市值蒸发近万亿

“雷仁勋”刷屏!小女孩拆穿“雷军的新装”:小米股价一年暴跌60%,市值蒸发近万亿

新浪财经
2026-06-19 15:51:18
中方刚冻结交易,阿基诺家族充当出头鸟,我国防部:停止作秀表演

中方刚冻结交易,阿基诺家族充当出头鸟,我国防部:停止作秀表演

流史岁月
2026-06-18 22:00:03
乱了!世界杯赛后爆发大规模冲突,比起6比0,更惨的是断腿重伤

乱了!世界杯赛后爆发大规模冲突,比起6比0,更惨的是断腿重伤

观察鉴娱
2026-06-19 14:51:34
墨西哥主帅:与韩国的比赛很艰苦;我不喜欢李刚仁的发色

墨西哥主帅:与韩国的比赛很艰苦;我不喜欢李刚仁的发色

懂球帝
2026-06-19 15:53:25
巨大失误!韩国门将接球脱手,罗莫进球,墨西哥1比0韩国

巨大失误!韩国门将接球脱手,罗莫进球,墨西哥1比0韩国

澎湃新闻
2026-06-19 10:58:27
河南26岁帅哥时颖去世,结婚仅半年,妻子颜值高,悲痛透露原因

河南26岁帅哥时颖去世,结婚仅半年,妻子颜值高,悲痛透露原因

180视角
2026-06-19 12:33:45
特朗普的俄乌立场发生根本转变?战争开始回到莫斯科

特朗普的俄乌立场发生根本转变?战争开始回到莫斯科

项鹏飞
2026-06-19 17:43:09
私生活混乱、被央视“开除”、陪睡上位,她身上哪个标签是真的?

私生活混乱、被央视“开除”、陪睡上位,她身上哪个标签是真的?

素衣读史
2026-06-18 21:37:31
7次神扑逼平西班牙!温州商人圆佛得角门神心愿,帮其母赴美看球

7次神扑逼平西班牙!温州商人圆佛得角门神心愿,帮其母赴美看球

湘楚风云聊体育
2026-06-19 11:16:38
中国造纸学会就“纸尿裤事件”声明:市面在售产品安全可控

中国造纸学会就“纸尿裤事件”声明:市面在售产品安全可控

新京报
2026-06-19 18:43:19
全网舆论炸锅!严查驻外领馆签证漏洞,不守规矩外籍人员一律清退

全网舆论炸锅!严查驻外领馆签证漏洞,不守规矩外籍人员一律清退

古史青云啊
2026-06-19 11:31:56
孙兴慜57分钟0射门引热议:被嘲像女星 在儿童区冲刺 亚洲一哥们

孙兴慜57分钟0射门引热议:被嘲像女星 在儿童区冲刺 亚洲一哥们

颜小白的篮球梦
2026-06-19 14:04:45
离谱!大量音乐节宣布取消!

离谱!大量音乐节宣布取消!

嘻笑堂
2026-06-18 00:31:41
美国断供C919发动机1年后,世界才发现,中国造出了一台更好的

美国断供C919发动机1年后,世界才发现,中国造出了一台更好的

商业财经风向
2026-06-18 10:39:45
《抓特务》为何票房扑街?太陈旧,是次因,“瘸驴叙事”,是主因

《抓特务》为何票房扑街?太陈旧,是次因,“瘸驴叙事”,是主因

马庆云的影音娱
2026-06-19 14:39:29
华为注册“世界”商标通过初审!

华为注册“世界”商标通过初审!

芯智讯
2026-06-19 13:34:35
小国佛得角火了!逼平西班牙的背后还藏着中国的托举……这届世界杯四支新军都没白来

小国佛得角火了!逼平西班牙的背后还藏着中国的托举……这届世界杯四支新军都没白来

新民周刊
2026-06-19 16:07:33
应急管理部表扬广东4起成功避险案例,连州村民因救下全村获表扬

应急管理部表扬广东4起成功避险案例,连州村民因救下全村获表扬

中国日报网
2026-06-19 19:48:02
2026-06-19 20:24:49
NVIDIA英伟达中国 incentive-icons
NVIDIA英伟达中国
英伟达(中国)官方账号
3576文章数 1459关注度
往期回顾 全部

科技要闻

Anthropic被禁,智谱却涨疯了

头条要闻

婚礼短片现"别人老公老婆"新娘忍整场 不料有更离谱的

头条要闻

婚礼短片现"别人老公老婆"新娘忍整场 不料有更离谱的

体育要闻

世界杯最不知名球员,没上场先涨粉600万

娱乐要闻

吴倩自曝小时被爸爸打掉牙齿硬吞进肚

财经要闻

Token低价陷阱

汽车要闻

惊出冷汗!重庆实测奥迪A5L,华为智驾这波操作绝了…

态度原创

亲子
教育
旅游
健康
房产

亲子要闻

婴儿RSV预防迎来新选择,创新单抗为宝宝呼吸健康护航

教育要闻

出了考场谈女权,这多少有些让人意外,很难不引起人警觉

旅游要闻

品味传统 畅享假日丨乐享端午

吃粽子的3条保胃法则,消化科医生推荐

房产要闻

商业清零式退潮,大量住宅登场!三亚又要大规模调规!

无障碍浏览 进入关怀版