本文发表于一年多前。旧文章可能包含过时内容。请检查页面中的信息自发布以来是否已变得不正确。

使用 Kubernetes 和 TensorFlow Serving 扩展神经网络图像分类

2011 年,Google 开发了一款内部深度学习基础设施,名为 DistBelief,它让 Google 员工能够构建越来越大的神经网络,并将训练扩展到数千个核心。去年底,Google 推出了 TensorFlow,这是其第二代机器学习系统。TensorFlow 通用、灵活、可移植、易于使用,最重要的是,它与开源社区共同开发。

将机器学习引入您的产品的过程包括创建和训练数据集模型,然后将模型推送到生产环境以处理请求。在本博客文章中,我们将向您展示如何使用 KubernetesTensorFlow Serving(一个用于机器学习模型的高性能开源服务系统),以满足您应用程序的扩展需求。

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

| | | 图片来源:维基百科 |

您可以使用在 ImageNet 数据集数据上训练的 Inception-v3 模型来使用 TensorFlow 实现图像分类。此数据集包含图像及其标签,这使得 TensorFlow 学习器能够训练一个可供您的应用程序在生产环境中使用的模型。

一旦模型经过训练和导出TensorFlow Serving 就会使用该模型进行推理——根据其客户端提供的新数据进行预测。在我们的示例中,客户端通过 gRPC 提交图像分类请求,gRPC 是 Google 开发的一个高性能开源 RPC 框架。

推理可能非常消耗资源。我们的服务器执行以下 TensorFlow 图来处理收到的每个分类请求。Inception-v3 模型拥有超过 2700 万个参数,每次推理运行 57 亿次浮点运算。

| | | Inception-v3 示意图 |

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

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