爱奇艺 TensorFlow Serving 内存泄漏优化实践

TensorFlow Serving 由于其便捷稳定的特点在CTR(Click-through Rate,点击率) 预估业务场景被广泛的使用,但是其运行时会出现内存不断增长的问题,也不断有相关issue被提交到Github社区,且目前都是Open状态。本文分享了爱奇艺深度学习平台在实践中发现的两个TensorFlow Serving内存泄漏问题,并修复和提交了 PR 到社区,这里将详细介绍问题的背景以及解决的过程,希望能够有所帮助。

01

背景介绍

TensorFlow Serving(以下简称 TF Serving) 是谷歌开源、用来部署 TensorFlow模型的高性能推理系统。它主要具备如下特点:

  • 同时支持 gRPC 和 HTTP 接口

  • 支持多模型、多版本

  • 支持模型热更新和版本切换

另外,爱奇艺在 TF Serving的基础上,开源了 XGBoost Serving 来支持 GBDT 模型的推理服务,也同样继承了 TF Serving的以上特性。

总体来讲,使用 TF Serving 来部署推理服务的稳定性和性能都比较好,特别是CTR 预估这种对服务延迟和稳定性要求高的业务。不过,在 TFServing Github 的 [issue 列表]上,经常有人报告运行中出现内存不断增长导致 OOM 的问题。一个典型的内存issue <<Sharpincrease in memory usage -> server is killed>>

在 2018 年就有人提出,目前为止还是 open 状态。

爱奇艺深度学习平台在实践中也遇到了两个类似的问题,我们业务的线上推理服务是通过 Docker容器进行部署的,但是发现 TF Serving 在某些时候内存会不断增长导致容器 OOM。下面将逐个介绍这两个问题的背景是如何被解决的。

02

  模型特征 Raw Serving Tensor输入

先来介绍一下 TF 模型 SavedModel特征输入的两种方式。一种是模型输入只有一个,该输入的 placeholder 是一个 String,String 的内容是tf.Examples;另一种是模型输入有多个,每个输入placeholder 分别对应特征的Tensor。以tf.estimator的API为例子,两者的API分别为`tf.estimator.export.build_parsing_serving_input_receiver_fn`和`tf.estimator.export.build_raw_serving_input_receiver_fn`。使用saved_model_cli命令可以明显看到这两种模型输入的不同:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值