文档
  • PyCaret 3.0
  • 入门
    • 💻安装
    • 🚀快速入门
    • ⭐教程
    • 📶模块
    • ⚙️数据预处理
      • 数据准备
      • 缩放和转换
      • 特征工程
      • 特征选择
      • 其他设置参数
    • 💡函数
      • 初始化
      • 训练
      • 优化
      • 分析
      • 部署
      • 其他
  • 学习 PYCARET
    • 📖博客
      • PyCaret 1.0 发布公告
      • PyCaret 2.0 发布公告
      • 关于 PyCaret 你不知道的 5 件事
      • 构建和部署你的第一个机器学习 Web 应用
      • 使用 PyCaret 在 Power BI 中构建你自己的 AutoML
      • 在 Google Kubernetes 上部署 ML 流水线
      • 在 AWS Fargate 上部署 PyCaret 和 Streamlit
      • 使用 PyCaret 在 Power BI 中进行异常检测
      • 在 Google Kubernetes 上部署 ML 应用
      • 在 GKE 上部署机器学习流水线
      • 在 AWS Fargate 上部署机器学习流水线
      • 使用 Docker 在云端部署 ML 流水线
      • 使用 PyCaret 在 Power BI 中进行聚类分析
      • 使用 ONNX Runtime 在边缘设备上部署 PyCaret 模型
      • GitHub 是你所需要的最佳 AutoML
      • 在 AWS Fargate 上部署 PyCaret 和 Streamlit
      • 使用 PyCaret 和 MLflow 轻松实现 MLOps
      • 使用 PyCaret 在 Power BI 中进行聚类分析
      • 使用 PyCaret 在 Alteryx 中进行机器学习
      • 使用 PyCaret 在 KNIME 中进行机器学习
      • 使用 PyCaret 在 SQL 中进行机器学习 第 I 部分
      • 使用 PyCaret 在 Power BI 中进行机器学习
      • 使用 PyCaret 在 Tableau 中进行机器学习
      • 使用 PyCaret 进行多时间序列预测
      • 使用 PyCaret 预测客户流失
      • 使用 PyCaret (正确地) 预测潜在客户得分
      • 使用 PyCaret 在 Python 中进行 NLP 文本分类
      • 使用 PyCaret (正确地) 预测潜在客户得分
      • 使用 PyCaret 预测黄金价格暴跌
      • 使用机器学习预测黄金价格
      • PyCaret 2.1 特性总结
      • 使用 PyCaret 将 ML 模型部署到 SQL Server
      • 使用 PyCaret 和 Gradio 超越你的 ML
      • 时间序列 101 - 献给初学者
      • 使用 PyCaret 进行时间序列异常检测
      • 使用 PyCaret 回归进行时间序列预测
      • 使用 PyCaret 在 Power BI 中进行主题建模
      • 使用 PyCaret 编写和训练自定义 ML 模型
      • 使用 PyCaret 和 Streamlit 构建和部署 ML 应用
      • PyCaret 2.3.6 发布!了解新特性?
    • 📺视频
    • 🛩️速查表
    • ❓常见问题解答
    • 👩‍💻示例
  • 重要链接
    • 🛠️版本说明
    • ⚙️API 参考
    • 🙋 讨论
    • 📤问题
    • 👮 许可
  • 媒体
    • 💻Slack
    • 📺YouTube
    • 🔗LinkedIn
    • 😾GitHub
    • 🔅Stack Overflow
由 GitBook 提供支持
在本页
  • 在 Google Kubernetes Engine 上部署使用 Streamlit 和 PyCaret 构建的机器学习应用
  • 回顾
  • 👉 你将在本教程中学到什么
  • 💻 本教程工具箱
  • PyCaret
  • Streamlit
  • Google Cloud Platform
  • 让我们开始吧。
  • 什么是 Kubernetes?
  • 特性
  • 如果你已经有了 Docker,为什么还需要 Kubernetes?
  • 什么是 Google Kubernetes Engine?
  • 最后一次,你明白了吗?
  • 设定业务背景
  • 目标
  • 任务
  • 👉 任务 1 — 模型训练与验证
  • 👉 任务 2 — 构建一个前端 Web 应用
  • 页眉 / 布局
  • 在线预测
  • 批量预测
  • 👉 任务 3 — 创建一个 Dockerfile
  • 👉 任务 4 — 在 GKE 上部署 ML 流水线
  • PyCaret 2.0.0 即将发布!
  • 想了解特定模块?
  • 另请参阅
  • 你想贡献吗?

这有帮助吗?

  1. 学习 PYCARET
  2. 博客

在 Google Kubernetes 上部署 ML 应用

上一篇使用 PyCaret 在 Power BI 中进行异常检测下一篇在 GKE 上部署机器学习流水线

上次更新于 2 年前

这有帮助吗?

在 Google Kubernetes Engine 上部署使用 Streamlit 和 PyCaret 构建的机器学习应用

一步一步的初学者指南:在 Google Kubernetes Engine 上容器化和部署 Streamlit 应用

作者:Moez Ali

一步一步的初学者指南:在 Google Kubernetes Engine 上容器化和部署 Streamlit 应用

回顾

在本教程中,我们将使用相同的机器学习流水线和 Streamlit 应用,并演示如何将它们容器化并部署到 Google Kubernetes Engine 上。

通过本教程,你将能够在 Google Kubernetes Engine 上构建并托管一个功能齐全的容器化 Web 应用。这个 Web 应用可以使用训练好的机器学习模型来生成在线预测(一对一)以及批量预测(通过上传 CSV 文件)。最终的应用界面如下所示:

👉 你将在本教程中学到什么

  • 什么是容器,什么是 Docker,什么是 Kubernetes,以及什么是 Google Kubernetes Engine?

  • 构建一个 Docker 镜像并上传到 Google Container Registry (GCR)。

  • 在 GCP 上创建一个集群,并将机器学习应用部署为 Web 服务。

  • 查看一个正在运行的 Web 应用,它使用训练好的机器学习流水线实时预测新的数据点。

在过去,我们已经介绍了使用 Docker 进行容器化以及在 Azure、GCP 和 AWS 等云平台上进行部署。如果你有兴趣了解更多,可以阅读以下教程:

💻 本教程工具箱

PyCaret

pip install **pycaret**

Streamlit

pip install **streamlit**

Google Cloud Platform

让我们开始吧。

在我们深入了解 Kubernetes 之前,先来了解一下什么是容器,以及为什么我们需要它?

你是否遇到过这样的问题:你的代码在你的电脑上运行良好,但当朋友尝试运行完全相同的代码时,却无法正常工作?如果你的朋友遵循了完全相同的步骤,他或她应该得到相同的结果,对吧?对此问题的简短回答是:**环境**。你朋友的环境与你的不同。

环境包括什么?→ 编程语言,例如 Python,以及构建和测试应用时使用的所有库和依赖项,且版本完全一致。

如果我们能创建一个可以转移到其他机器(例如:你朋友的电脑或 Google Cloud Platform 这样的云服务提供商)的环境,我们就可以在任何地方重现结果。因此,***容器***是一种软件类型,它将应用及其所有依赖项打包在一起,以便应用能够在不同的计算环境中可靠地运行。

那么 Docker 是什么?

现在你已经了解了容器,特别是 Docker,接下来我们来了解一下 Kubernetes 是什么。

什么是 Kubernetes?

Kubernetes 是一个强大的开源系统,由 Google 在 2014 年开发,用于管理容器化应用。简单来说,Kubernetes 是一个用于在机器集群中运行和协调容器化应用的系统。它是一个旨在完全管理容器化应用生命周期的平台。

特性

✔️ **负载均衡:**自动在容器之间分配负载。

✔️ **扩缩容:**当需求变化时(例如高峰时段、周末和节假日),通过添加或删除容器来自动向上或向下扩缩容。

✔️ **存储:**保持应用的多个实例的存储一致性。

✔️ 自修复:自动重启失败的容器,并终止对用户定义的健康检查无响应的容器。

✔️ **自动化部署:**你可以自动化 Kubernetes 为你的部署创建新容器,移除现有容器,并将它们的所有资源转移到新容器上。

如果你已经有了 Docker,为什么还需要 Kubernetes?

想象一个场景:你需要在一夜之间在多台机器上运行多个 Docker 容器,以支持一个在白天和晚上工作负载各不相同的企业级 ML 应用。这听起来可能很简单,但手动操作起来非常繁琐。

你需要准时启动正确的容器,弄清楚它们如何相互通信,处理存储考虑事项,以及应对失败的容器或硬件。这就是 Kubernetes 正在解决的问题,它允许大量容器协同工作,从而减轻了运维负担。

什么是 Google Kubernetes Engine?

Google Kubernetes Engine 是 Google 开源 Kubernetes 在 Google Cloud Platform 上的实现。就这么简单!

最后一次,你明白了吗?

  • **容器**是一种软件类型,它将应用及其所有依赖项打包在一起,以便应用能够在不同的计算环境中可靠地运行。

  • **Docker** 是一种用于构建和管理容器的软件。

  • **Kubernetes** 是一种用于在集群环境中管理容器化应用的开源系统。

  • Google Kubernetes Engine 是开源 Kubernetes 框架在 Google Cloud Platform 上的实现。

设定业务背景

一家保险公司希望通过更好地预测住院时的患者费用来改善其现金流预测,预测依据是患者的人口统计学信息和基本健康风险指标。

目标

构建一个 Web 应用,支持使用训练好的机器学习模型和流水线进行在线(一对一)预测以及批量预测。

任务

  • 使用 PyCaret 训练、验证和开发机器学习流水线。

  • 构建一个具有两种功能的前端 Web 应用:(i) 在线预测和 (ii) 批量预测。

  • 创建一个 Dockerfile

  • 在 Google Kubernetes Engine 上部署 Web 应用。部署后,它将公开可用,并通过 Web URL 进行访问。

👉 任务 1 — 模型训练与验证

在本教程中,我们进行了两次实验。第一次实验使用 PyCaret 的默认预处理设置。第二次实验包含一些额外的预处理任务,例如缩放和归一化、自动化特征工程以及将连续数据分箱到区间。请参阅第二次实验的 setup 代码:

**# Experiment No. 2**

from **pycaret.regression** import *****

r2 = **setup**(data, target = 'charges', session_id = 123,
           normalize = True,
           polynomial_features = True, trigonometry_features = True,
           feature_interaction=True, 
           bin_numeric_features= ['age', 'bmi'])

只需要几行代码就能实现魔法。请注意,在实验 2 中,转换后的数据集有 62 个用于训练的特征,而原始数据集只有 6 个特征。所有新特征都是 PyCaret 中转换和自动化特征工程的结果。

PyCaret 中模型训练的示例代码

# Model Training and Validation 
lr = **create_model**('lr')

注意转换和自动化特征工程的影响。R2 值提高了 10%,付出的努力很少。我们可以比较两次实验的线性回归模型的残差图,观察转换和特征工程对模型**异方差性**的影响。

# plot residuals of trained model**
plot_model**(lr, plot = 'residuals')

机器学习是一个迭代过程。迭代次数和使用的技术取决于任务的关键程度以及预测错误可能带来的影响。机器学习模型在医院 ICU 实时预测患者结果的严重性和影响,远大于预测客户流失的模型。

在本教程中,我们只进行了两次迭代,第二次实验的线性回归模型将用于部署。然而,在这个阶段,模型仍然只是 Notebook / IDE 中的一个对象。要将其保存为可以传输到其他应用并被其使用的文件,请执行以下代码:

# save transformation pipeline and model 
**save_model**(lr, model_name = 'deployment_28042020')

在 PyCaret 中保存模型时,将创建基于 **setup()** 函数中配置定义的整个转换流水线。所有相互依赖关系都会自动协调。查看存储在 ‘deployment_28042020’ 变量中的流水线和模型:

我们已经完成了训练和模型选择。最终的机器学习流水线和线性回归模型现已保存为 pickle 文件(deployment_28042020.pkl),该文件将用于 Web 应用,对新数据点生成预测。

👉 任务 2 — 构建一个前端 Web 应用

现在我们的机器学习流水线和模型已经准备好,可以开始构建一个能够对新数据点生成预测的前端 Web 应用了。这个应用将支持通过上传 CSV 文件进行“在线”预测和“批量”预测。我们将应用代码分解为三个主要部分:

页眉 / 布局

本节导入库,加载训练好的模型,并创建一个基本布局:顶部有徽标,一张 jpg 图片,侧边栏有一个下拉菜单,用于在“在线”预测和“批量”预测之间切换。

在线预测

本节处理应用的主要功能:在线一对一预测。我们使用 streamlit 控件,例如数字输入、文本输入、下拉菜单和复选框,来收集用于训练模型的数据点,例如年龄、性别、BMI、子女数量、吸烟者和地区。

批量预测

批量预测是应用功能的第二层。streamlit 中的file_uploader 控件用于上传 CSV 文件,然后调用 PyCaret 原生的 **predict_model()** 函数生成预测结果,并使用 streamlit 的 write() 函数显示。

如果你还记得上面的任务 1,我们最终确定了一个线性回归模型,该模型是在从原始 6 个特征中提取的 62 个特征上训练的。Web 应用的前端有一个输入表单,只收集这 6 个特征,即年龄、性别、BMI、子女数量、吸烟者和地区。

我们如何将新数据点的这 6 个特征转换为训练模型所使用的 62 个特征呢?我们无需担心这部分,因为 PyCaret 通过协调转换流水线来自动处理。当你对使用 PyCaret 训练的模型调用预测函数时,所有转换(按顺序)都会在从训练好的模型生成预测之前自动应用。

**测试应用** 在我们将应用发布到 Heroku 之前,最后一个步骤是在本地测试 Web 应用。打开 Anaconda Prompt,导航到你的项目文件夹,并执行以下代码:

**streamlit** run app.py

现在我们已经有了一个功能齐全的 Web 应用,我们可以开始在 Google Kubernetes Engine 上容器化和部署该应用的过程了。

👉 任务 3 — 创建一个 Dockerfile

为了容器化我们的应用进行部署,我们需要一个 Docker 镜像,它在运行时会成为一个容器。Docker 镜像是使用 Dockerfile 创建的。Dockerfile 只是一个包含一系列指令的文件。本项目的 Dockerfile 如下所示:

这个 Dockerfile 的最后一部分(从第 23 行开始)是 Streamlit 特有的,通常不需要。Dockerfile 区分大小写,必须与项目的其他文件一起放在项目文件夹中。

👉 任务 4 — 在 GKE 上部署 ML 流水线

遵循这简单的 10 个步骤,将应用部署到 GKE 集群。

步骤 1 — 在 GCP 控制台创建新项目

登录你的 GCP 控制台,然后进入管理资源(Manage Resources)

点击创建新项目(Create New Project)

步骤 2 — 导入项目代码

点击控制台窗口右上角的 **激活 Cloud Shell** 按钮以打开 Cloud Shell。

在 Cloud Shell 中执行以下代码,克隆本教程中使用的 GitHub 仓库。

git clone [https://github.com/pycaret/pycaret-streamlit-google.git](https://github.com/pycaret/pycaret-streamlit-google.git)

步骤 3 — 设置项目 ID 环境变量

执行以下代码设置 PROJECT_ID 环境变量。

export PROJECT_ID=**pycaret-streamlit-gcp**

pycaret-streamlit-gcp 是我们在上面步骤 1 中选择的项目名称。

步骤 4 — 构建 Docker 镜像

执行以下代码构建应用的 Docker 镜像并打标签以供上传:

docker build -t gcr.io/${PROJECT_ID}/insurance-streamlit:v1 .

运行以下代码可以查看可用的镜像:

**docker **images

步骤 5 — 上传容器镜像

  1. gcloud auth configure-docker

  2. 执行以下代码将 Docker 镜像上传到 Google Container Registry:

    docker push gcr.io/${PROJECT_ID}/insurance-streamlit:v1

步骤 6 — 创建集群

容器上传后,你需要一个集群来运行容器。集群由运行 Kubernetes 的 Compute Engine VM 实例池组成。

  1. 为 gcloud 工具设置你的项目 ID 和 Compute Engine 区域选项

    gcloud config set project $PROJECT_ID gcloud config set compute/zone us-central1

  2. 执行以下代码创建集群:

    gcloud container clusters create streamlit-cluster --num-nodes=2

步骤 7 — 部署应用

要在 GKE 集群上部署和管理应用,你必须与 Kubernetes 集群管理系统通信。执行以下命令部署应用:

kubectl create deployment insurance-streamlit --image=gcr.io/${PROJECT_ID}/insurance-streamlit:v1

步骤 8 — 将你的应用暴露给互联网

默认情况下,你在 GKE 上运行的容器无法从互联网访问,因为它们没有外部 IP 地址。执行以下代码将应用暴露给互联网:

kubectl expose deployment insurance-streamlit --type=LoadBalancer --port 80 --target-port **8501**

步骤 9 — 检查服务

执行以下代码获取服务状态。EXTERNAL-IP 是你可以在浏览器中用于查看已发布应用的网址。

kubectl get service

步骤 10 — 在网址上查看应用的运行情况

注意:本文发布时,该应用将已从公共地址移除,以限制资源消耗。

PyCaret 2.0.0 即将发布!

想了解特定模块?

截至第一个版本 1.0.0,PyCaret 包含以下可用模块。点击下方链接查看 Python 文档和工作示例。

另请参阅

Notebook 中的 PyCaret 入门教程

你想贡献吗?

在我们的关于在云端部署机器学习流水线的文章中,我们演示了如何在 PyCaret 中开发机器学习流水线,并将训练好的模型作为使用 Streamlit 开源框架构建的 Web 应用部署到 Heroku PaaS 上。如果你之前没有听说过 PyCaret,可以阅读此文了解更多信息。

最终应用 (第 1 页共 2 页)

是一个开源、低代码的 Python 机器学习库,用于训练和部署机器学习流水线及模型到生产环境。PyCaret 可以使用 pip 轻松安装。

是一个开源的 Python 库,可以轻松为机器学习和数据科学构建精美的定制 Web 应用。Streamlit 可以使用 pip 轻松安装。

Google Cloud Platform (GCP) 由 Google 提供,是一套云计算服务,运行在 Google 内部用于其最终用户产品(如 Google 搜索、Gmail 和 YouTube)的相同基础设施上。如果你没有 GCP 账户,可以注册。如果你是首次注册,将获得一年的免费积分。

https://www.freepik.com/free-photos-vectors/cargo-ship

**Docker** 是一家公司,提供软件(也称为 Docker),允许用户构建、运行和管理容器。虽然 Docker 容器最常见,但也有其他不太出名的替代方案,例如和也提供容器解决方案。

图片来源:chuttersnap 在 Unsplash 上拍摄

GKE 的其他热门替代方案有和.

在本教程中,我们将使用 Google Kubernetes Engine。为了跟上进度,你必须拥有 Google Cloud Platform 账户。免费注册。

()

训练和模型验证在集成开发环境 (IDE) 或 Notebook 中进行,可以在本地机器上或云端。如果你之前没有使用过 PyCaret,了解更多关于 PyCaret 的信息,或查看在我们的.

两次实验的信息网格比较
转换后的数据集列
线性回归模型的 10 折交叉验证
线性回归模型的残差图
使用 PyCaret 创建的流水线
app.py — 代码片段 第 1 部分
app.py — 代码片段 第 2 部分
app.py — 代码片段 第 3 部分
Streamlit 应用测试 — 在线预测
Streamlit 应用测试 — 批量预测

如果你想跟着做,你需要 fork 这个GitHub 仓库。

https://github.com/pycaret/pycaret-streamlit-google
Google Cloud Platform 控制台 → 管理资源
Google Cloud Platform 控制台 → 管理资源 → 创建新项目
Google Cloud Platform (项目信息页面)
Docker 构建成功时返回的消息

认证到(只需运行一次)

Google Cloud Platform → Kubernetes Engine → 集群
应用发布在 https://34.70.49.248 — 第 1 页
应用发布在 https://34.70.49.248 — 第 2 页

我们收到了社区压倒性的支持和反馈。我们正在积极改进 PyCaret 并准备下一个版本。PyCaret 2.0.0 将会更强大、更好。如果你想分享你的反馈并帮助我们进一步改进,你可以在网站上留言或在我们的或页面留言。

关注我们的并订阅我们的频道,了解更多 PyCaret 信息。

PyCaret 是一个开源项目。欢迎大家贡献。如果你想贡献,请随时在上贡献。接受带有单元测试的 dev-1.0.1 分支的 Pull Request。

请在我们的上给我们点亮 ⭐️,如果你喜欢 PyCaret。

Medium

LinkedIn

Twitter

📖
最新帖子
公告
使用 PyCaret 和 Streamlit 构建和部署机器学习 Web 应用
在 AWS Fargate 上部署机器学习流水线
在 Google Kubernetes Engine 上部署机器学习流水线
在 AWS Web Service 上部署机器学习流水线
在 Heroku PaaS 上构建和部署你的第一个机器学习 Web 应用
PyCaret
Streamlit
此处
LXD
LXC
Amazon ECS
Microsoft Azure Kubernetes Service
点击此处
数据源
点击此处
入门教程
网站
仓库
Container Registry
本教程的 GitHub 仓库链接
Microsoft Azure 部署的 GitHub 仓库链接
Heroku 部署的 GitHub 仓库链接
填写此表单
GitHub
LinkedIn
LinkedIn
YouTube
分类
回归
聚类
异常检测
自然语言处理
关联规则挖掘
分类
回归
聚类
异常检测
自然语言处理
关联规则挖掘
待解决问题
GitHub 仓库
https://medium.com/@moez_62905/
https://www.linkedin.com/in/profile-moez/
https://twitter.com/moezpycaretorg1