在 Google Kubernetes 上部署 ML Pipeline
最后更新于
这有帮助吗?
最后更新于
这有帮助吗?
在本教程中,我们将使用之前构建和部署的相同的机器学习 pipeline 和 Flask 应用。这次,我们将演示如何在 Google Kubernetes Engine 上将机器学习 pipeline 容器化并进行部署。
了解什么是容器(Container)、什么是 Docker、什么是 Kubernetes 以及什么是 Google Kubernetes Engine?
构建 Docker 镜像并上传到 Google Container Registry (GCR)。
创建集群,并将机器学习 pipeline 与 Flask 应用作为 Web 服务进行部署。
实时查看使用训练好的机器学习 pipeline 预测新数据点的 Web 应用。
本教程将涵盖从构建 docker 镜像、将其上传到 Google Container Registry,然后将预训练的机器学习 pipeline 和 Flask 应用部署到 Google Kubernetes Engine (GKE) 的整个工作流程。
在我们深入了解 Kubernetes 之前,先了解一下什么是容器以及为什么需要容器?
你是否遇到过这样的问题:你的代码在你的电脑上运行得很好,但当朋友尝试运行完全相同的代码时,却无法运行?如果你的朋友重复完全相同的步骤,他或她应该得到相同的结果,对吗?对此的单字回答是**环境**。你朋友的环境和你的不同。
环境包括什么?→ 编程语言,例如 Python,以及构建和测试应用程序时使用的所有库和依赖项及其确切版本。
如果我们可以创建一个可以转移到其他机器(例如:你朋友的电脑或像谷歌云平台这样的云服务提供商)上的环境,我们就可以在任何地方重现结果。因此,***容器***是一种软件类型,它将应用程序及其所有依赖项打包在一起,以便应用程序能够在不同的计算环境之间可靠地运行。
那么 Docker 又是什么呢?
现在你已经了解了容器,特别是 Docker,接下来让我们了解 Kubernetes 是什么。
Kubernetes 是谷歌在 2014 年开发的一个强大的开源系统,用于管理容器化应用程序。简单来说,Kubernetes ****是一个用于在机器集群上运行和协调容器化应用程序的系统。它是一个旨在完全管理容器化应用程序生命周期的平台。
✔️ **负载均衡:** 自动在容器之间分配负载。
✔️ **弹性伸缩:** 在需求变化时(例如高峰时段、周末和节假日)通过添加或移除容器来自动向上或向下扩展。
✔️ **存储:** 使存储与应用程序的多个实例保持一致。
✔️ 自愈合: 自动重启失败的容器,并杀死对用户定义的健康检查没有响应的容器。
✔️ **自动化部署:** 你可以自动化 Kubernetes 为你的部署创建新容器、移除现有容器并将其所有资源迁移到新容器。
想象一下这样的场景:你需要将多个 docker 容器运行在多台机器上,以支持一个企业级的 ML 应用程序,而这个应用程序在白天和晚上的工作负载变化很大。听起来很简单,但手动完成这是一项非常繁重的工作。
你需要准时启动正确的容器,弄清楚它们如何互相通信,处理存储注意事项,并应对失败的容器或硬件。这就是 Kubernetes 正在解决的问题,它允许大量容器协同工作,从而减轻了操作负担。
将 **Docker 与 Kubernetes** 进行比较是错误的。这是两种不同的技术。Docker 是一种允许你容器化应用程序的软件,而 Kubernetes 是一个容器管理系统,可以创建、扩展和监控成千上万个容器。
在任何应用程序的生命周期中,Docker 在部署时用于打包应用程序,而 kubernetes 则用于管理应用程序的其余生命周期。
Google Kubernetes Engine 是 谷歌开源的 Kubernetes 在谷歌云平台上的实现。就这么简单!
**容器**是一种软件类型,它将应用程序及其所有依赖项打包在一起,以便应用程序能够在不同的计算环境之间可靠地运行。
**Docker** 是用于构建和管理容器的软件。
**Kubernetes** 是一个开源系统,用于在集群环境中管理容器化应用程序。
Google Kubernetes Engine 是开源 Kubernetes 框架在谷歌云平台上的实现。
一家保险公司希望通过在住院时利用患者的人口统计学信息和基本健康风险指标,更好地预测患者费用,从而改善现金流预测。
构建并部署一个 Web 应用程序,在其中将患者的人口统计学和健康信息输入基于 Web 的表单,然后输出预测的费用金额。
训练和开发用于部署的机器学习 Pipeline。
使用 Flask 框架构建 Web 应用。它将使用训练好的 ML pipeline 来实时生成新数据点的预测。
构建 docker 镜像并将容器上传到 Google Container Registry (GCR)。
创建集群并在 Google Kubernetes Engine 上部署应用程序。
我们使用 Python 中的 PyCaret 来训练和开发将用作我们 Web 应用一部分的机器学习 pipeline。机器学习 Pipeline 可以在集成开发环境 (IDE) 或 Notebook 中开发。我们使用 Notebook 运行以下代码。
当你在 PyCaret 中保存模型时,会根据在 **setup()** 函数中定义的配置创建整个转换 pipeline。所有内部依赖项都会自动编排。请参见存储在 'deployment_28042020' 变量中的 pipeline 和模型。
本教程不专注于构建 Flask 应用。这里只是为了完整性而讨论。现在我们的机器学习 pipeline 已经准备就绪,我们需要一个 Web 应用程序,它可以连接到我们训练好的 pipeline,以实时生成新数据点的预测。我们使用 Python 中的 Flask 框架创建了 Web 应用程序。此应用程序有两部分:
前端(使用 HTML 设计)
后端(使用 Flask 开发)
我们的 Web 应用程序看起来是这样的
现在我们有了一个功能齐全的 Web 应用程序,我们可以开始在 Google Kubernetes Engine 上容器化和部署应用程序的过程了。
登录你的 GCP 控制台并前往“资源管理”
点击创建新项目
点击控制台窗口顶部的**激活 Cloud Shell** 按钮以打开 Cloud Shell。
在 Cloud Shell 中执行以下代码克隆本教程中使用的 GitHub 仓库。
执行以下代码设置 PROJECT_ID 环境变量。
pycaret-kubernetes-demo 是我们在上面的步骤 1 中选择的项目名称。
执行以下代码构建应用程序的 docker 镜像并打标签以便上传
可以通过运行以下代码检查可用镜像
gcloud auth configure-docker
执行以下代码将 docker 镜像上传到 Google Container Registry
docker push gcr.io/${PROJECT_ID}/insurance-app:v1
容器上传后,你需要一个集群来运行容器。集群包含一个 Compute Engine VM 实例池,运行着 Kubernetes。
为 gcloud 工具设置你的项目 ID 和 Compute Engine 区域选项
gcloud config set project $PROJECT_ID gcloud config set compute/zone us-central1
执行以下代码创建集群
gcloud container clusters create insurance-cluster --num-nodes=2
要在 GKE 集群上部署和管理应用程序,你必须与 Kubernetes 集群管理系统通信。执行以下命令部署应用程序
默认情况下,你在 GKE 上运行的容器无法从互联网访问,因为它们没有外部 IP 地址。执行以下代码将应用程序暴露到互联网
执行以下代码获取服务状态。EXTERNAL-IP 是你可以在浏览器中用于查看已发布应用程序的网址。
注意: 在本文发表时,该应用程序将从公共地址移除,以限制资源消耗。
自第一个版本 1.0.0 发布以来,PyCaret 提供以下模块供使用。点击下方链接查看文档和 Python 中的工作示例。
Notebook 中的 PyCaret 入门教程
在我们的关于在云中部署机器学习 pipeline 的文章中,我们演示了如何使用 PyCaret 开发机器学习 pipeline,使用 Docker 对其进行容器化,并使用 Microsoft Azure Web App Services 作为 Web 应用程序提供服务。如果你之前没有听说过 PyCaret,请阅读这篇了解更多信息。
如何在 Heroku PaaS 上部署 ML pipeline如何使用 Docker 容器在 Azure Web Services 上部署 ML pipeline。
PyCaret 是一个开源的低代码机器学习库,用于训练和部署机器学习 pipeline 和模型到生产环境。PyCaret 可以使用 pip 轻松安装。
Flask 是一个允许你构建 Web 应用程序的框架。Web 应用程序可以是商业网站、博客、电子商务系统,或是一个使用训练好的模型实时生成预测的应用。如果你没有安装 Flask,可以使用 pip 安装它。
谷歌云平台 (GCP) 是谷歌提供的一套云计算服务,运行在谷歌内部用于其终端用户产品(如谷歌搜索、Gmail 和 YouTube)的相同基础设施上。如果你没有 GCP 账户,可以免费注册一年。
Docker 是一家提供软件(也称为 Docker)的公司,该软件允许用户构建、运行和管理容器。虽然 Docker 的容器最常见,但还有其他一些不太出名的替代方案,例如如何使用 Docker 容器在 Azure Web Services 上部署 ML pipeline。LXD
通过 Kubernetes / Docker 部署的应用程序生命周期如何使用 Docker 容器在 Azure Web Services 上部署 ML pipeline。.
GKE 的其他流行替代方案有Amazon ECS
()
Microsoft Azure Kubernetes Service.
本教程使用 PyCaret 创建的机器学习 Pipeline
谷歌云平台(项目信息页面)git clone https://github.com/pycaret/pycaret-deployment-google.git
Container Registry
谷歌云平台 → Kubernetes Engine → 集群通过 kubectl 创建部署时返回的输出Cloud Shell → kubectl get service👉 步骤 10 — 在
http://34.71.77.61:8080上查看应用程序运行情况最终应用程序已上传到 http://34.71.77.61:8080
我们收到了社区的大力支持和反馈。我们正在积极改进 PyCaret 并准备发布下一个版本。PyCaret 1.0.1 将更强大、更好。如果您想分享您的反馈并帮助我们进一步改进,您可以填写此表单
在网站上或在我们的
GitHub
或