在 GKE 上部署机器学习流水线
上次更新于
这有帮助吗?
上次更新于
这有帮助吗?
在本教程中,我们将使用之前构建和部署的相同机器学习流水线和 Flask 应用。这次我们将演示如何在 Google Kubernetes Engine 上将机器学习流水线容器化并部署。
了解什么是容器、什么是 Docker、什么是 Kubernetes 以及什么是 Google Kubernetes Engine?
构建 Docker 镜像并将其上传到 Google Container Registry (GCR)。
创建集群并将带 Flask 应用的机器学习流水线部署为 Web 服务。
查看一个正在运行的 Web 应用,该应用使用经过训练的机器学习流水线实时预测新的数据点。
本教程将涵盖从构建 docker 镜像、将其上传到 Google Container Registry,然后将预训练的机器学习流水线和 Flask 应用部署到 Google Kubernetes Engine (GKE) 的整个工作流程。
在我们深入了解 Kubernetes 之前,先来了解一下什么是容器以及为什么我们需要它?
你是否曾遇到过这样的问题:你的代码在你的电脑上运行良好,但当你的朋友尝试运行完全相同的代码时,却无法运行?如果你的朋友重复完全相同的步骤,他或她应该得到相同的结果,对吗?这个问题的简短答案就是**环境**。你朋友的环境与你的不同。
环境包括什么?→ 编程语言(如 Python)以及构建和测试应用程序时使用的所有具有确切版本的库和依赖项。
如果我们能创建一个可以转移到其他机器(例如:你朋友的电脑或像 Google Cloud Platform 这样的云服务提供商)的环境,我们就可以在任何地方重现结果。因此,***容器***是一种将应用程序及其所有依赖项打包在一起的软件类型,以便应用程序能够在不同的计算环境中可靠地运行。
那么 Docker 是什么?
既然你已经具体了解了容器和 Docker,那么让我们来了解一下 Kubernetes 是怎么回事。
Kubernetes 是 Google 在 2014 年开发的一个强大的开源系统,用于管理容器化应用程序。简单来说,Kubernetes 是一个用于在机器集群中运行和协调容器化应用程序的系统。它是一个旨在完全管理容器化应用程序生命周期的平台。
✔️ **负载均衡:**自动分配容器之间的负载。
✔️ **扩缩容:**当需求变化时(如高峰时段、周末和节假日),通过添加或删除容器自动扩缩容。
✔️ **存储:**使应用程序的多个实例保持存储一致性。
✔️ 自我修复 自动重启失败的容器,并终止不响应用户定义健康检查的容器。
✔️ **自动化发布 **你可以自动化 Kubernetes 为你的部署创建新容器,删除现有容器并将所有资源转移到新容器。
想象一下这样的场景:你必须在多台机器上运行多个 Docker 容器来支持一个企业级 ML 应用程序,并且该应用程序在白天和夜晚的工作负载变化很大。这听起来可能很简单,但手动操作起来却非常费力。
你需要及时启动正确的容器,弄清楚它们如何相互通信,处理存储注意事项,并应对失败的容器或硬件。这就是 Kubernetes 正在解决的问题,它允许大量容器协同工作,减轻了操作负担。
将 **Docker 与 Kubernetes** 进行比较是错误的。这是两种不同的技术。Docker 是一种允许你将应用程序容器化的软件,而 Kubernetes 是一种容器管理系统,允许创建、扩缩和监控成百上千个容器。
在任何应用程序的生命周期中,Docker 用于在部署时打包应用程序,而 Kubernetes 则用于后续的应用程序管理。
Google Kubernetes Engine 是 Google 在 Google Cloud Platform 上实现的谷歌开源 Kubernetes。就这么简单!
**容器**是一种将应用程序及其所有依赖项打包在一起的软件类型,以便应用程序能够在不同的计算环境中可靠地运行。
**Docker** 是一种用于构建和管理容器的软件。
**Kubernetes** 是一个开源系统,用于在集群环境中管理容器化应用程序。
Google Kubernetes Engine 是在 Google Cloud Platform 上实现的开源 Kubernetes 框架。
一家保险公司希望通过在住院时使用人口统计学和基本患者健康风险指标更准确地预测患者费用来改善其现金流预测。
构建和部署一个 Web 应用,在该应用中将患者的人口统计和健康信息输入到基于 Web 的表单中,然后输出预测的费用金额。
训练和开发用于部署的机器学习流水线。
使用 Flask 框架构建一个 Web 应用。它将使用经过训练的 ML 流水线实时生成新数据点的预测。
构建 docker 镜像并将容器上传到 Google Container Registry (GCR)。
创建集群并将应用部署到 Google Kubernetes Engine。
我们使用 Python 中的 PyCaret 来训练和开发机器学习流水线,该流水线将作为我们 Web 应用的一部分使用。机器学习流水线可以在集成开发环境 (IDE) 或 Notebook 中开发。我们使用 Notebook 运行以下代码
当你在 PyCaret 中保存模型时,会创建基于 **setup()** 函数中定义配置的整个转换流水线。所有相互依赖关系都会自动协调。查看存储在 ‘deployment_28042020’ 变量中的流水线和模型
本教程的重点不是构建 Flask 应用程序,在此提及仅为完整性考虑。现在我们的机器学习流水线已准备就绪,我们需要一个可以连接到我们训练好的流水线并实时生成新数据点预测的 Web 应用程序。我们使用 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
容器上传完成后,你需要一个集群来运行容器。集群由运行 Kubernetes 的 Compute Engine VM 实例池组成。
为 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 入门教程
在我们的关于在云端部署机器学习流水线,我们演示了如何在 PyCaret 中开发机器学习流水线,使用 Docker 将其容器化并使用 Microsoft Azure Web App Services 提供 Web 应用服务。如果你之前没听说过 PyCaret,请阅读这篇了解更多信息。
之前我们演示了和
是一个开源的低代码 Python 机器学习库,用于训练和部署机器学习流水线和模型到生产环境。可以使用 pip 轻松安装 PyCaret。
是一个允许你构建 Web 应用程序的框架。Web 应用程序可以是商业网站、博客、电子商务系统,或者是一个使用训练好的模型实时从提供的数据中生成预测的应用程序。如果你没有安装 Flask,可以使用 pip 进行安装。
Google Cloud Platform (GCP) 由 Google 提供,是一套云计算服务,运行在 Google 内部用于其终端用户产品(如 Google Search、Gmail 和 YouTube)的相同基础设施上。如果你没有 GCP 账户,可以注册。如果你是首次注册,将获得 1 年的免费额度。
Docker 是一家提供软件(也称为 Docker)的公司,该软件允许用户构建、运行和管理容器。虽然 Docker 的容器最常用,但还有其他不太知名的替代方案,例如和提供容器解决方案。
GKE 的其他流行替代方案有和.
在本教程中,我们将使用 Google Kubernetes Engine。要跟着做,你必须拥有一个 Google Cloud Platform 账户。免费注册。
()
由于我们已经在初始教程中涵盖了前两个任务,我们将快速回顾一下,然后重点关注上面列表中的剩余项目。如果你有兴趣了解更多关于如何使用 Python 中的 PyCaret 开发机器学习流水线以及使用 Flask 框架构建 Web 应用的信息,请阅读.
如果你还没跟上,没关系。你可以直接 fork 这个从 GitHub。你的项目文件夹此时应如下所示
验证到(你只需要运行一次)
👉 第 10 步 — 在...上查看正在运行的应用程序
我们收到了社区压倒性的支持和反馈。我们正在积极改进 PyCaret 并准备下一个版本。PyCaret 1.0.1 将更强大、更好用。如果你想分享你的反馈并帮助我们进一步改进,你可以在网站上或在我们的或页面上留言。
关注我们的并订阅我们的频道,了解更多关于 PyCaret 的信息。
PyCaret 是一个开源项目。欢迎所有人贡献。如果你想贡献,请随时在上工作。带有单元测试的 Pull Request 在 dev-1.0.1 分支上接受。
如果你喜欢 PyCaret,请在我们的给我们 ⭐️。
Medium