本文发布时间已超过一年。较旧的文章可能包含过时的内容。请检查页面中的信息自发布以来是否已不正确。
使用 TensorFlow Serving 和 Kubernetes 扩展神经网络图像分类
2011 年,Google 开发了一个名为 DistBelief 的内部深度学习基础设施,这使 Google 员工能够构建更大的神经网络并将训练扩展到数千个核心。去年年底,Google 推出了 TensorFlow,这是其第二代机器学习系统。TensorFlow 通用、灵活、可移植、易于使用,最重要的是,它是与开源社区共同开发的。
将机器学习引入您的产品的过程包括在您的数据集上创建和训练模型,然后将模型推送到生产环境中以服务请求。在这篇博文中,我们将向您展示如何将 Kubernetes 与 TensorFlow Serving(一种用于机器学习模型的高性能开源服务系统)结合使用,以满足您的应用程序的扩展需求。
让我们以图像分类作为示例。假设您的应用程序需要能够在一组类别中正确识别图像。例如,给定下面可爱的幼犬图像,您的系统应将其分类为寻回犬。
| | | 图片来自 维基百科 |
您可以使用在来自 ImageNet 数据集的数据上训练的 Inception-v3 模型,通过 TensorFlow 实现图像分类。此数据集包含图像及其标签,这使 TensorFlow 学习器可以训练一个模型,该模型可供您的应用程序在生产环境中使用。
模型经过训练和导出后,TensorFlow Serving 使用该模型执行推断 — 基于其客户端提供的新数据进行预测。在我们的示例中,客户端通过 gRPC(Google 的高性能开源 RPC 框架)提交图像分类请求。
推断可能非常消耗资源。我们的服务器执行以下 TensorFlow 图来处理其接收的每个分类请求。Inception-v3 模型具有超过 2700 万个参数,每次推断运行 57 亿次浮点运算。
幸运的是,这正是 Kubernetes 可以帮助我们的地方。Kubernetes 使用其外部负载均衡器在集群中分发推断请求处理。集群中的每个 Pod 都包含一个TensorFlow Serving Docker 镜像,其中包含基于 TensorFlow Serving 的 gRPC 服务器和经过训练的 Inception-v3 模型。该模型表示为描述 TensorFlow 图的形状、模型权重、资产等的一组文件。由于所有内容都整齐地打包在一起,因此我们可以使用Kubernetes Replication Controller动态扩展复制的 Pod 的数量,以跟上服务需求。
为了帮助您自己尝试一下,我们编写了一个分步教程,其中向您展示了如何创建 TensorFlow Serving Docker 容器以服务 Inception-v3 图像分类模型,配置 Kubernetes 集群并针对其运行分类请求。我们希望这将使您更容易将机器学习集成到您自己的应用程序中并使用 Kubernetes 对其进行扩展!要了解有关 TensorFlow Serving 的更多信息,请查看 tensorflow.github.io/serving。