使用带有TensorFlow Serving的Kubernetes缩放神经网络图像分类

2011年,Google开发了一个内部深度学习基础架构,称为 信仰区,这使Google员工的规模越来越大 神经网络 并将培训扩展到数千个核心。去年底,Google 引入了TensorFlow,其第二代机器学习系统。 TensorFlow是通用的,灵活的,可移植的,易于使用的,并且最重要的是与开源社区一起开发。

将机器学习引入产品的过程涉及在数据集上创建和训练模型,然后将模型推入生产以服务请求。在此博客文章中,我们将向您展示如何使用 KubernetesTensorFlow服务,这是一种用于机器学习模型的高性能,开放源代码服务系统,可满足您应用程序的扩展需求。

让我们将图像分类用作 。假设您的应用程序需要能够正确识别一组类别中的图像。例如,给定下面的可爱小狗图像,您的系统应将其归类为猎犬。

| | | Image via 维基百科 |

您可以使用TensorFlow来实现图像分类 Inception-v3模型 训练了来自 ImageNet数据集。该数据集包含图像及其标签,这使TensorFlow学习者可以训练模型,供您的应用程序在生产中使用。

模型经过训练后, 出口的, TensorFlow服务 使用该模型执行推断-根据其客户提供的新数据进行预测。在我们的示例中,客户通过 gRPC,这是Google提供的高性能,开源RPC框架。

推断可能会占用大量资源。我们的服务器执行以下TensorFlow图以处理其收到的每个分类请求。 Inception-v3模型具有超过2700万个参数,每个推断运行57亿个浮点运算。

| | | Inception-v3的原理图|

幸运的是,这是Kubernetes可以帮助我们的地方。 Kubernetes使用其集群在集群中分布推理请求处理 外部负载均衡器。每 集群中包含一个 TensorFlow服务Docker映像 基于TensorFlow Serving的gRPC服务器和经过培训的Inception-v3模型。该模型表示为 文件集 描述TensorFlow图的形状,模型权重,资产等。由于所有内容都整齐地打包在一起,因此我们可以使用 Kubernetes复制控制器 跟上服务需求。

为了帮助您自己尝试一下,我们编写了 分步教程,向您展示如何创建TensorFlow Serving Docker容器以为Inception-v3图像分类模型提供服务,配置Kubernetes集群并对其运行分类请求。我们希望这将使您更轻松地将机器学习集成到自己的应用程序中,并使用Kubernetes进行扩展!要了解有关TensorFlow Serving的更多信息,请查看 tensorflow.github.io/服务

  • 李方伟,Google软件工程师