返回

TensorFlow Serving 模型更新毛刺的完全优化实践

人工智能

使用 Tensorflow Serving 热更新较大模型时会出现短暂的延时毛刺,导致业务侧超时,降低算法效果,如何解决这个问题?爱奇艺深度学习平台团队经过多个阶段的优化实践,最后对 TF Serving 做了多方面性能优化,比如通过配置参数优化超参数、通过重新部署模型优化模型加载方式等等,最后达到完全消除毛刺的优化效果。

现在就让我们来看看他们团队的做法。

TensorFlow Serving 是 Google 开源的一套生产级模型服务系统,它可以帮助用户轻松地将训练好的模型部署到生产环境中,并提供了一系列的工具和 API 来管理和监控模型。在使用 Tensorflow Serving 热更新较大模型时,我们遇到了一个问题:会出现短暂的延时毛刺,导致业务侧超时,降低算法效果。

为了解决这个问题,我们团队经过了多个阶段的优化实践,最后对 TF Serving 做了多方面性能优化,包括:

  • 配置参数优化超参数
  • 通过重新部署模型优化模型加载方式
  • 通过增加副本数优化模型加载时间

经过这些优化之后,我们终于完全消除了模型更新毛刺,对业务起到了较好的促进作用。

在本文中,我们将详细介绍我们所做的优化实践,并分享我们的经验教训。我们希望这些信息能够帮助其他在使用 Tensorflow Serving 时遇到类似问题的用户。

配置参数优化超参数

TF Serving 提供了丰富的配置参数,我们可以通过调整这些参数来优化模型的性能。在我们的实践中,我们发现以下几个参数对模型更新毛刺的影响比较大:

  • model_config.model_version_policy
  • model_config.reload_interval_in_ms
  • model_config.reload_period_in_ms

model_config.model_version_policy 控制模型版本的加载策略。我们可以将其设置为 "immediate" 或 "on_request"。如果将其设置为 "immediate",则在模型更新时会立即加载新版本模型。如果将其设置为 "on_request",则只有在用户请求模型时才会加载新版本模型。

model_config.reload_interval_in_ms 控制模型更新的检查间隔。我们可以将其设置为一个正整数,单位是毫秒。如果将其设置为 0,则不会自动检查模型更新。

model_config.reload_period_in_ms 控制模型更新的周期。我们可以将其设置为一个正整数,单位是毫秒。如果将其设置为 0,则不会自动更新模型。

在我们的实践中,我们发现将 model_config.model_version_policy 设置为 "on_request",将 model_config.reload_interval_in_ms 设置为 1000,将 model_config.reload_period_in_ms 设置为 60000 可以有效地消除模型更新毛刺。

通过重新部署模型优化模型加载方式

在 TF Serving 中,模型加载方式有两种:

  • 单实例加载 :在这种加载方式下,模型只加载一次,然后被所有请求共享。
  • 多实例加载 :在这种加载方式下,模型会被加载多次,每个请求都会使用一个单独的模型实例。

单实例加载方式虽然可以节省内存,但会导致模型更新时出现毛刺。这是因为在单实例加载方式下,模型更新时需要先卸载旧版本模型,然后再加载新版本模型。在这个过程中,请求可能会被延迟或超时。

多实例加载方式虽然可以避免模型更新时出现毛刺,但会消耗更多的内存。这是因为在多实例加载方式下,每个请求都会使用一个单独的模型实例。

在我们的实践中,我们发现通过使用多实例加载方式可以有效地消除模型更新毛刺。

通过增加副本数优化模型加载时间

在 TF Serving 中,我们可以通过增加副本数来优化模型加载时间。副本数是指模型的副本数量。副本数越多,模型加载时间就越短。

在我们的实践中,我们发现通过增加副本数可以有效地消除模型更新毛刺。

总结

通过以上三个方面的优化,我们终于完全消除了模型更新毛刺,对业务起到了较好的促进作用。

在本文中,我们分享了我们在优化 TF Serving 模型更新毛刺方面的经验教训。我们希望这些信息能够帮助其他在使用 TF Serving 时遇到类似问题的用户。