这篇文章已超过一年。较旧的文章可能包含过时内容。请检查页面中的信息自发布以来是否已失效。
使用 Kubernetes 和 TensorFlow Serving 扩展神经网络图像分类
2011 年,Google 开发了内部深度学习基础设施 DistBelief,它让 Google 员工能够构建更大规模的神经网络,并将训练扩展到数千个核心。去年底,Google 推出了 TensorFlow,这是其第二代机器学习系统。TensorFlow 通用、灵活、可移植、易于使用,最重要的是,它是与开源社区共同开发的。
将机器学习引入产品涉及在数据集上创建和训练模型,然后将模型推送到生产环境以提供服务请求。在这篇博客文章中,我们将向您展示如何使用 Kubernetes 和 TensorFlow Serving(一个高性能、开源的机器学习模型服务系统)来满足应用程序的扩展需求。
让我们以图像分类为例。假设您的应用程序需要在各种类别中正确识别图像。例如,给定下面的可爱小狗图片,您的系统应将其归类为猎犬。
| | | 图片来源:维基百科 |
您可以使用 TensorFlow 和在 ImageNet 数据集数据上训练的 Inception-v3 模型来实现图像分类。此数据集包含图像及其标签,这使得 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。