机器学习数据科学家努力构建模型,用于解决业务问题。然而,在部署模型时,会遇到一些挑战,例如如何扩展模型、模型如何与应用程序内部或外部的不同服务交互、如何实现重复操作等。为了克服这些问题,Kubernetes 是最合适的。
在这篇博客中,我将帮助您了解 Kubernetes 的基础知识、它对部署机器学习 (ML) 模型的好处,以及如何使用 Azure Kubernetes 服务实际进行部署。
Kubernetes,通常缩写为 K8S,是一个用于管理容器化工作负载和服务的开源平台,由 Google 于 2014 年开源。主要用于大规模运行生产工作负载。
Kubernetes 集群包含运行容器化应用程序的工作节点。 这些工作节点是一组机器。 这些应用程序是 Pod 的一部分(代表正在运行的容器集)。 每个集群必须至少有一个工作节点。 控制平面管理集群中的工作节点和 Pod。 控制平面由不同的组件组成,即:
a. API Server:暴露 Kubernetes API。 kube-apiserver 可以通过部署更多实例来水平扩展。
b. Scheduler:控制平面使用调度器来分配新创建的没有分配节点的 Pod,并选择一个节点供它们运行。
c. Controller-Manager:控制平面使用控制器管理器运行不同的控制器进程,例如:节点、作业、endpoints、服务帐户和token控制器。
d. etcd:存储 Kubernetes 集群配置和状态数据,例如: Pod 数量、状态、命名空间等。它还存储 Kubernetes API 对象和服务发现详细信息。
这些服务通常相互协同工作,并且需要满足可扩展性和云安全方面的需求。 本文概述了 Kubernetes 中的所有组件。
以下是 Kubernetes 在部署 ML 或深度学习模型时提供的优势。
大多数机器学习项目都是用 Python 或 R 等编程语言编写的,应用程序也可以用其他编程语言编写,以实现数据交换、安全性和可视化。 基于容器的解决方案微服务在这种情况下发挥着关键作用,因为开发人员可以独立运行不同的实验。
基于 AI 的系统本质上是非常动态的,因此监控包含 AI 模型的 Kubernetes 至关重要。 这将有助于了解 K8S 集群的规模、性能、响应时间和指定重新训练策略。 Prometheus 是一个 Kubernetes 监控工具。 它推出了自己的查询语言工具(PromQL)
Prometheus 服务部署在 Kubernetes 环境中,并将其指标拉入数据库。 这些使用 HTTP 协议发布的指标是人类可读的,并且可以通过 API 调用轻松访问。 Prometheus 还提供 PromQL 查询结果的可视化。如果需要丰富的附加功能,我们可以使用 Grafana。 当违反预定义的性能阈值时,Prometheus 还会提供实时警报。
几乎所有云提供商(例如:AWS、GCP 和 AZURE)都提供 Kubernetes 作为服务。 大多数公司都利用这些云服务。 因此建议使用他们的 Kubernetes 服务。 在本博客中,我将解释使用 Azure Kubernetes 服务部署 ML 模型的三种方法。
A. Azure ML 工作区:Azure ML 服务使用步骤如下,无论您在何处部署模型,它都是类似的:
在步骤 5 中,我们将使用 AKSCompute(Azure Kubernetes 计算服务)进行推理。
B. 将 Docker 镜像部署到独立的 Azure Kubernetes 服务
具体步骤如下:
Azure Kubernetes 服务会注意如果 Pod 被删除或利用率很高,它将创建另一个 pod。 因此,总会有实现高可用性、可扩展性的机会。
C. 使用 Kubeflow 进行端到端 ML 生命周期
Kubeflow 是在 Kubernetes 上管理完整机器学习生命周期的最流行方法之一。 具体操作步骤如下所示:
尽管我给出了一些使用 Kubernetes 部署 ML 模型的不同方法,但人们可以根据自己的要求使用任何方法将模型部署到 Kubernetes。
本文帮助您熟悉 Kubernetes 及其与模型的集成。 ML 模型需要并行运行许多不同的实验。 当每次资源需求发生变化时,Kubernetes 都是最佳实践,它将有助于资源管理、监控、作业调度等。