Press "Enter" to skip to content

在GCP上使用GitHub Actions实现无缝的CI/CD流水线:您的有效MLOps工具

全栈7步MLOps框架

第7课:将所有ML组件部署到GCP。使用Github Actions构建CI/CD管道。

Photo by Hassan Pasha on Unsplash

这个教程是由7个课程中的第7课组成,它将逐步指导您如何使用MLOps良好实践设计、实现和部署一个ML系统。在课程期间,您将构建一个生产就绪的模型,用于预测丹麦多个消费类型在未来24小时内的能源消耗水平。

通过本课程,您将了解使用批量服务架构设计、编码和部署ML系统的所有基础知识。

本课程面向中高级机器学习工程师,他们希望通过构建自己的端到端项目来提升自己的技能。

现在,证书随处可见。构建高级端到端项目,以后可以展示,是成为专业工程师的最佳途径。

目录:

  • 课程介绍
  • 课程内容
  • 数据源
  • 第7课:将所有ML组件部署到GCP。使用Github Actions构建CI/CD管道。
  • 第7课:代码
  • 结论
  • 参考文献

课程介绍

在这个7课程的结尾,您将知道如何:

  • 设计批量服务架构
  • 使用Hopsworks作为特征存储
  • 设计特征工程管道,从API读取数据
  • 使用超参数调整构建训练管道
  • 使用W&B作为ML平台跟踪您的实验、模型和元数据
  • 实现批量预测管道
  • 使用Poetry构建自己的Python包
  • 部署自己的私有PyPi服务器
  • 使用Airflow进行编排
  • 使用预测来使用FastAPI和Streamlit编写Web应用程序
  • 使用Docker容器化您的代码
  • 使用Great Expectations确保数据验证和完整性
  • 随时监控预测绩效
  • 将所有内容部署到GCP
  • 使用GitHub Actions构建CI/CD管道

如果听起来很多,不用担心。在您完成本课程之后,您将理解我之前说的所有内容。最重要的是,您将知道为什么我使用所有这些工具以及它们如何作为一个系统协同工作。

如果您想从本课程中获得最大的收益我建议您访问包含所有课程代码的GitHub仓库 。本课程旨在在文章中快速阅读和复制代码。

在本课程结束时,您将知道如何实现下面的图表。如果有什么不清楚的地方,不用担心,我会详细解释。

Diagram of the architecture you will build during the course [Image by the Author].

第7课结尾,您将知道如何手动部署3个ML管道和Web应用程序到GCP。此外,您将构建一个CI/CD管道,使用GitHub Actions自动化部署过程。

课程内容:

  1. 批量服务。特征存储。特征工程管道。
  2. 训练管道。ML平台。超参数调整。
  3. 批处理预测管道。使用Poetry打包Python模块。
  4. 私有PyPi服务器。使用Airflow编排所有内容。
  5. 使用GE进行数据验证,确保数据质量和完整性。模型性能持续监控。
  6. 使用FastAPI和Streamlit消费和可视化模型的预测。容器化一切。
  7. 将所有ML组件部署到GCP。使用Github Actions构建CI/CD管道。

Lesson 7重点教授如何将所有组件部署到GCP并围绕其构建CI/CD管道,为了获得完整体验,我们建议您观看该课程的其他课程。

查看第4课,了解如何使用Airflow编排3个ML管道,查看第6课,了解如何使用FastAPI和Streamlit消耗模型预测。

数据源

我们使用了一个提供丹麦所有能源消费类型的每小时能源消费值的免费和开放的API[1]。

他们提供了一个直观的界面,您可以轻松地查询和可视化数据。您可以在此处访问数据[1]。

数据具有4个主要属性:

  • Hour UTC:观察到数据点时的UTC日期时间。
  • Price Area:丹麦分为两个价格区域:DK1和DK2-由大带分开。 DK1在大带以西,DK2在大带以东。
  • Consumer Type:消费者类型是由丹麦能源拥有和维护的DE35行业代码。
  • Total Consumption:以kWh为单位的总电力消耗

注意:观察存在15天的滞后!但对于我们的演示用例,这不是问题,因为我们可以模拟与实时相同的步骤。

A screenshot from our web app showing how we forecasted the energy consumption for area = 1 and consumer_type = 212 [Image by the Author].

数据点具有每小时的分辨率。例如:“2023-04-15 21:00Z”,“2023-04-15 20:00Z”,“2023-04-15 19:00Z”等。

我们将将数据建模为多个时间序列。每个唯一的价格区域消费者类型元组代表其唯一时间序列。

因此,我们将构建一个模型,独立地预测每个时间序列未来24小时的能源消耗情况。

查看下面的视频,以更好地了解数据的外观👇

课程和数据源概述[作者的视频]。

第7课:部署所有ML组件到GCP。使用GitHub Actions构建CI/CD管道。

第7课的目标

在第7课中,我将教您两件事:

  1. 如何手动部署3个ML管道和Web应用程序到GCP。
  2. 如何使用GitHub Actions自动化部署过程。
Diagram of the final architecture with the Lesson 7 components highlighted in blue [Image by the Author].

换句话说,您将把迄今为止所做的一切展示给世界。

只要您的工作坐在电脑上,它可以是世界上最好的ML解决方案,但不幸的是,它不会增加任何价值。

了解如何部署您的代码对于任何项目都至关重要。

所以记住…

我们将使用GCP作为云提供商,GitHub Actions作为CI/CD工具。

理论概念和工具

CI / CD: CI / CD代表持续集成和持续交付。

CI 步骤主要包括每次推送代码到 git 后构建和测试代码。

CD 步骤会自动将您的代码部署到多个环境中:开发、预发布和生产环境。

根据您的特定软件要求,您需要或不需要标准 CI/CD 流水线的所有规格。

例如,您可能在进行概念验证。这时预发布环境可能有些过度。但是拥有开发和生产 CD 流水线将大大提高您的生产力。

GitHub Actions:GitHub Actions 是目前最受欢迎的 CI/CD 工具之一。它直接集成在您的 GitHub 存储库中。最棒的部分是,您不需要任何虚拟机来运行您的 CI/CD 流水线。一切都在 GitHub 的计算机上运行。

您需要在一个 YAML 文件中指定一组规则,GitHub Actions 将处理其余部分。我将在本文中向您展示它的工作原理。

GitHub Actions 对于公共存储库完全是免费的。这是多么棒的一件事啊!

顺便说一句。使用 GitHub Actions,您可以基于各种存储库事件触发任何作业,但将其用作 CI/CD 工具是最常见的用例。

第 7 课:代码

您可以在此处访问 GitHub 存储库。

注意:所有安装说明都在存储库的 README 中。在此,您将直接跳转到代码。

第 7 课的代码和说明在以下位置:

  • deploy/ — Docker 和 shell 部署文件
  • .github/workflows — GitHub Actions CI/CD 工作流程
  • README_DEPLOY — 专门用于将代码部署到 GCP 的 README
  • README_CICD — 专门用于设置 CI/CD 流水线的 README

准备凭据

直接将凭据存储在 git 存储库中是巨大的安全风险。因此,您将使用.env文件注入敏感信息。

.env.default是您必须配置的所有变量的示例。存储不敏感属性(例如项目名称)的默认值也很有用。

A screenshot of the .env.default file [Image by the Author].

要复制此文章,您必须设置课程中使用的所有基础设施和服务。

2 个主要组件可以分别部署。

#1. 3 个 ML 流水线:

  • 特征管道
  • 训练管道
  • 批量预测管道

对于#1.,您必须设置以下内容:

  • Hopsworks(免费)— 特征存储:第 1 课
  • W&B(免费)— ML 平台:第 2 课
  • GCP 存储桶(免费)— 存储在 GCP 上:第 3 课
  • Airflow(免费)— 开源编排工具:第 4 课

#2. Web 应用:

  • FastAPI 后端(免费):第 6 课
  • Streamlit 预测仪表板(免费):第 6 课
  • Streamlit 监控仪表板(免费):第 6 课

幸运的是,对于#2.,您只需设置用作存储的 GCP GCS 存储桶。

但请注意,如果您只执行#2.,则您将没有任何数据可在您的 Web 应用程序中使用。

我们不想在本文中涉及一些无聊的设置凭据之类的东西。还好,如果您要实施并复制整个课程,您可以在先前的文章和 GitHub README 中找到逐步说明。

如果您想查看(而不是复制)我们如何将代码部署到 GCP 并构建 GitHub Actions 工作流程,您不必担心任何凭据。只需继续阅读以下部分 ✌️

注意:本课程中唯一没有免费计划的服务在此处。在编写本课程时,在GCP上部署和测试基础设施花费了我大约20美元。但是我有一个全新的GCP帐户,为我提供了300美元的GCP信用,从而间接地使其免费。只需在完成后删除所有GCP资源,您就可以了。

手动部署到GCP

因此,让我们手动将两个主要组件部署到GCP:

  • ML管道
  • Web应用程序

但是,作为第一步,让我们设置我们需要进行部署的所有GCP资源。之后,您将SSH到您的机器并部署您的代码。

欲了解更多信息,请访问GitHub部署自述文件。

设置资源

让我们进入您的GCP energy_consumption项目并创建以下资源:

  1. 带有IAP访问权限的管理VM服务帐户
  2. 暴露端口防火墙规则
  3. 用于TCP隧道的IAP防火墙规则
  4. 用于管道的VM
  5. 用于Web应用程序的VM
  6. 外部静态IP

不要被花哨的名字吓到。您将获得使用本文和我提供的GCP文档的逐步指南。

注意:如果您不打算在GCP基础架构上复制基础架构,则跳过“设置资源”部分,直接进入“部署ML管道”

#1.带有IAP访问权限的管理VM服务帐户

我们需要一个新的GCP服务帐户,具有管理权限和IAP访问GCP VM的权限。

您必须创建一个新的服务帐户,并为其分配以下角色:

  • 计算实例管理员(v1)
  • IAP安全隧道用户
  • 服务帐户令牌创建器
  • 服务帐户用户

IAP代表Identity-Aware Proxy。这是一种创建隧道的方式,路由TCP流量到您的私有网络内部。对于您的知识,您可以阅读有关此主题的更多信息,使用以下文档(您不必理解它即可继续进行下一步):

  • 使用IAP进行TCP转发[2]
  • TCP转发概述[3]

#2.暴露端口防火墙规则

创建一个防火墙规则,公开以下TCP端口:8501、8502和8001。

还要添加一个名为energy-forecasting-expose-ports的目标标记。

以下是帮助我们创建和配置防火墙规则端口的两个文档:

  • 如何在Google Compute Engine中打开特定端口(例如9090)[4]
  • 如何在GCP计算引擎实例上打开防火墙端口[5]

以下是我们的防火墙规则的外观👇

GCP "暴露端口"防火墙规则的截图[作者的图像].

#3.用于TCP隧道的IAP防火墙规则

现在,我们将创建一个防火墙规则,允许所有连接到默认网络的VM使用IAP进行TCP隧道。

有关如何创建IAP的TCP隧道防火墙规则的逐步指南[6]。

以下是我们的防火墙规则的外观👇

GCP "IAP TCP转发"防火墙规则的截图[作者的图像].

#4. 管道的虚拟机

进入您的 GCP energy_consumption 项目 -> VM 实例 -> 创建实例。

选择 e2-standard-2: 2 vCPU 核心 — 8 GB RAM 作为您的 VM 实例类型。

将其命名为:ml-pipeline

将磁盘更改为 20 GB 存储。

选择区域为欧洲西部 3(法兰克福),并选择区域为欧洲西部 3-c。在此,您可以选择任何其他区域和区域,但如果您第一次这样做,我们建议您像我们一样做。

网络:默认

此外,请勾选 HTTP 和 HTTPS 复选框,并添加之前几步中创建的 energy-forecasting-expose-ports 自定义防火墙规则。

以下是两个帮助我创建和配置防火墙规则端口的文档:

  • 如何在 Google Compute Engine 中打开特定的端口,例如 9090 [4]
  • 如何在 GCP 计算引擎实例上打开防火墙端口 [5]

#5. Web 应用程序的虚拟机

现在让我们针对 Web 应用程序虚拟机重复类似的过程,但使用略有不同的设置。

这次选择 e2-micro: 0.25 2 vCPU — 1 GB 内存作为您的 VM 实例类型。

将其命名为:app

将磁盘更改为 15 GB 的标准持久磁盘

选择区域为欧洲西部 3(法兰克福),并选择区域为欧洲西部 3-c。

网络:默认

此外,请勾选 HTTP 和 HTTPS 复选框,并添加之前几步中创建的 energy-forecasting-expose-ports 自定义防火墙规则。

#6. 外部静态 IP

这是谜题的最后一块。

如果我们希望 Web 应用程序的外部 IP 是静态的(即不会更改),我们必须将静态地址附加到我们的 Web 应用程序 VM 上。

我们建议仅将其添加到我们几步前创建的 app VM 上。

同时,将静态外部 IP 添加到 ml-pipeline VM 完全没有问题。

有关保留静态外部 IP 地址的文档 [7]。

现在无聊的部分已经完成,让我们开始部署代码👇

部署 ML 管道

首先,我们必须安装 gcloud GCP CLI 工具,以在我们的计算机和 GCP VM 之间进行通信。

要进行身份验证,我们将使用具有 VM 和 IAP 访问的管理员权限的服务帐户进行配置。

现在,我们必须告诉 gcloud GCP CLI 使用该服务帐户。

为此,您必须为您的服务帐户创建一个密钥,并将其下载为 JSON 文件。与您为存储桶服务帐户所做的操作相同 – 这是一些文档,以刷新您的记忆 [8]。

下载文件后,在终端中运行以下 gcloud 命令:

gcloud auth activate-service-account SERVICE_ACCOUNT@DOMAIN.COM - key-file=/path/key.json - project=PROJECT_ID

有关 gcloud auth 命令的更多详细信息,请查看此文档。

现在,每当您使用 gcloud 运行命令时,它都会使用此服务帐户进行身份验证。

现在让我们通过 SSH 连接到您前几步创建的 ml-pipeline GCP VM:

gcloud compute ssh ml-pipeline - zone europe-west3-c - quiet - tunnel-through-iap - project <your-project-id>
  • 注意 1:如果您没有在与我们相同的区域创建 VM,请更改区域。
  • 注意 2:您的项目 ID 不是您的项目名称。转到 GCP 项目列表并查找项目 ID。

从此处开始,如果您正确配置了防火墙和服务帐户,则由于所有步骤都是 Docker 化的,因此所有步骤的相似度将达到 99%,与其他文章的步骤相同。

请查看 Github README – 设置附加工具和使用部分,以获取逐步说明。

您可以在连接到 ml-pipeline GCP 机器时按照相同的步骤操作。

请注意,GCP 机器正在使用 Linux 作为其操作系统。因此,无论您在本地设备上使用的操作系统如何,您都可以直接复制并粘贴来自 README 的命令。

使用gcloud连接“app” VM的截图[作者截图].

您可以安全地重复所有步骤,使用此SSH连接设置本地管道,但您必须记住以下3个边缘情况:

#1.在VM的主目录中克隆代码

只需SHH到VM并运行:

git clone https://github.com/iusztinpaul/energy-forecasting.gitcd energy-forecasting

#2.使用以下命令安装Docker:

安装Docker:

sudo apt updatesudo apt install --yes apt-transport-https ca-certificates curl gnupg2 software-properties-commoncurl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"sudo apt updatesudo apt install --yes docker-ce

将sudo权限添加到Docker:

sudo usermod -aG docker $USERlogout 

再次登录您的机器:

gcloud compute ssh ml-pipeline --zone europe-west3-c --quiet --tunnel-through-iap --project <your-project-id>

查看这些文档以获得完整的说明[9]。

#3.将所有cp命令替换为gcloud compute scp:

此命令将帮助您将文件从本地计算机复制到VM。

例如,而不是运行:

cp -r /path/to/admin/gcs/credentials/admin-buckets.json credentials/gcp/energy_consumption

在不同的终端(不是连接到VM的SSH终端)中运行:

gcloud compute scp --recurse --zone europe-west3-c --quiet --tunnel-through-iap --project <your-project-id> /local/path/to/admin-buckets.json ml-pipeline:~/energy-forecasting/airflow/dags/credentials/gcp/energy_consumption/

此命令将把本地的admin-buckets.json文件复制到ml-pipeline VM。

在将代码设置在ml-pipeline GCP VM上后,从GCP转到VM视图和网络标记部分。在那里,您将找到外部IP地址列,如下图所示。复制该IP并将端口8080附加到其上。

例如,基于下面的图像中的外部IP地址,我使用此地址访问了Airflow:35.207.134.188:8080。

恭喜!您已连接到自己托管的Airflow应用程序。

注意:如果无法连接,请等待几秒钟以正确加载。

“app” GCP VM配置的截图[作者的图像].

部署Web应用程序

让我们使用SSH连接到您在几个步骤前创建的“app” GCP VM:

gcloud compute ssh app --zone europe-west3-c --quiet --tunnel-through-iap --project <your-project-id>
  • 注意1:如果您没有在与我们相同的区域内创建VM,请更改区域。
  • 注意2:您的project-id不是您的项目名称。转到GCP项目列表并查找项目ID。

这里的过程与“部署ML管道”中描述的过程类似。

您可以按照第6课中描述的步骤或GitHub存储库的“设置其他工具和用法”部分部署Web应用程序。

但不要忘记牢记“部署ML管道”部分中描述的3个边缘案例。

请原谅我要引用这么多关于如何设置这个东西的外部文档。这篇文章太长了,我不想在这里重复GCP Google文档。

使用GitHub Actions进行CI/CD管道(免费)

GitHub Actions YAML文件位于.github/workflows目录下。

首先,让我解释一下你必须了解的GitHub Actions文件的主要组件👇

使用“on->push->branches:”部分,您可以指定要侦听事件的分支。在这种情况下,当新代码提交到“main”分支时,GitHub Action将被触发。

在“env:”部分中,您可以声明脚本内需要的环境变量。

“jobs->ci_cd->steps:”部分中,您将声明CI/CD管道步骤,这些步骤将按顺序运行。

“jobs->ci_cd->runs-on:”部分中,您指定要运行步骤的VM的映像。

现在,让我们来看看一些实际的GitHub Action文件🔥

ML管道GitHub Actions YAML文件

当新代码提交到“main”分支时,该操作将被触发,除了Web应用程序目录和YAML和Markdown文件。

我们添加了包含有关GCP项目和VM的信息的环境变量。

至于CI/CD步骤,我们主要做了两件事:

  1. 配置凭据和通过身份验证连接到GCP,
  2. 在给定的GCP VM上使用SSH连接并运行一个命令:进入代码目录,拉取最新的更改,构建Python包并将其部署到PyPi注册表。现在,Airflow将在下次运行时使用新的Python包。

基本上,它做了您手动执行的操作,但现在,一切都使用GitHub Actions进行了良好的自动化。

请注意,您不必记住或知道如何从头开始编写GitHub Actions文件,因为您可以找到已经编写好的模板,以满足大部分用例。例如,这是我们用来编写下面的YAML文件的google-github-actions/ssh-compute [11]存储库。

您会发现针对几乎任何您想到的用例的类似模板。

Web应用程序GitHub Actions YAML文件

Web应用程序操作文件与用于ML管道的文件的90%相同,除了以下内容:

  • 我们忽略ML管道文件;
  • 我们运行构建和运行Web应用程序的docker命令。

但是“ ${{ vars… }}”奇怪的语法从何而来?我马上会解释,但是现在您必须知道以下内容:

  • ${{ vars.<name> }}“: 在GitHub内设置的变量;

在GCP上使用GitHub Actions实现无缝的CI/CD流水线:您的有效MLOps工具 机器学习 第10张

  • ${{ secrets.<name> }}”: 在GitHub内设置的秘密。一旦设置了秘密,您就无法再看到它了(您可以查看变量);

在GCP上使用GitHub Actions实现无缝的CI/CD流水线:您的有效MLOps工具 机器学习 第11张

  • ${{ env.<name> }}”: 在“env:”部分中设置的环境变量。

重要观察

上面的YAML文件不包含CI部分,仅包含CD部分。

为了遵循健壮的 CI 流程最佳实践,您应该运行一个构建 Docker 镜像并将其推送到 Docker registry 的操作。

然后,您需要 SSH 到测试环境并运行测试套件。最后一步是 SSH 到生产 VM,拉取镜像并运行它们。

本系列文章过长,我们想要让它简单明了,但好消息是您已经学会了所有必要的工具和原则,可以按照我们上述的描述来完成。

设置密钥和变量

此时,您需要 fork energy-consumption 仓库,并使用您自己的 GitHub Actions 凭据进行配置。

请参阅此文档,了解如何在 GitHub 上 fork 仓库 [10]。

设置 Actions 变量

进入您 fork 的仓库。然后点击:“设置 -> 密钥和变量 -> Actions”。

现在,点击“变量”。您可以通过点击“新建存储库变量”来创建一个新变量。请参见下面的图片 👇

如何创建新存储库变量的截图[图片由作者提供]

您需要创建 5 个变量,GitHub Actions 脚本将使用这些变量:

  • APP_INSTANCE_NAME :web 应用程序 VM 的名称。在我们的案例中,它被称为“app”。如果您使用我们推荐的命名约定,则默认值应该是 OK。
  • GCLOUD_PROJECT :您的 GCP 项目 ID。在这里,您需要使用您的项目 ID 进行更改。
  • ML_PIPELINE_INSTANCE_NAME :ML 管道 VM 的名称。在我们的案例中,它是“ml-pipeline”。如果您使用我们推荐的命名约定,则默认值应该是 OK。
  • USER :您在使用 SSH 连接设置机器时用于连接到 VM 的用户。我的用户名是“pauliusztin”,但您必须更改为您自己的用户名。进入 VM 并运行 echo $USER
  • ZONE :您部署 VM 的区域。如果您使用我们推荐的命名约定,则默认值应该是 OK。

设置操作密钥

在同一“密钥和变量/Actions”部分中,点击“密钥”选项卡。

您可以通过点击“新建存储库密钥”按钮来创建一个新的密钥。

这些与我们刚刚完成的变量类似,但在填写值后,您将无法再看到它们。这就是为什么这些被称为密钥。

这里是您添加所有敏感信息的地方。在我们的案例中,是 GCP 凭据和私钥。请参见下面的图片 👇

如何创建新存储库密钥的截图[图片由作者提供]

GCP_CREDENTIALS 密钥包含您的 VM 管理员服务帐户的 JSON 密钥内容。通过设置此项,CI/CD 流程将使用该服务帐户对 VM 进行身份验证。

由于文件内容以 JSON 格式呈现,因此要正确格式化,您必须执行以下步骤:

安装 jq CLI 工具:

sudo apt updatesudo apt install -y jqjq - version

格式化您的 JSON 密钥文件:

jq -c . /path/to/your/admin-vm.json

获取此命令的输出并使用它创建您的 GCP_CREDENTIALS 密钥。

GCP_SSH_PRIVATE_KEY 是您的 GCP 私有 SSH 密钥(不是您的个人密钥——GCP 在使用 SSH 连接到 VM 时会自动创建一个附加密钥),该密钥是在您使用 SSH 连接到 GCP VM 时在本地计算机上创建的。

要复制它,请运行以下命令:

cd ~/.sshcat google_compute_engine

从终端窗口中复制输出并创建 GCP_SSH_PRIVATE_KEY 变量。

运行 CI/CD 管道

现在对代码进行任何更改,将其推送到主分支,GitHub Actions 文件应该会自动触发。

检查 GitHub 存储库的“Actions”选项卡以查看其结果。

Screenshot of the GitHub Actions running logs on GitHub [Image by the Author].

会触发两个操作。一个将构建并将 ml-pipeline 模块部署到您的 ml-pipeline GCP VM,另一个将构建并将 web 应用程序部署到您的 app GCP VM。

结论

恭喜!你完成了 全栈 7 步 MLOps 框架 课程的最后一课。这意味着你现在是一名全栈 ML 工程师 🔥。

我再次为这篇高度技术性的文章道歉。这不是一篇非常有趣的文章,但是对于完成这个系列的关键步骤非常重要。

在第 7 课中,您学习了如何:

  • 手动将 3 个 ML 管道部署到 GCP;
  • 手动将 web 应用程序部署到 GCP;
  • 使用 GitHub Actions 构建 CI/CD 管道以自动化部署过程。

现在,您了解了如何通过部署 ML 系统并将其投入运行来增加真正的业务价值,是时候构建您的出色 ML 项目了。

没有项目是完美构建的,这个项目也不例外。

请查看我们的奖励课程全栈 7 步 MLOps 框架,在这里,我们将公开讨论我们可以采取哪些其他设计选择来进一步改进本课程期间构建的 ML 系统。

我非常感谢您选择我的课程学习 MLE 和 MLOps,并希望它对您的学习之旅有所帮助✌️。

让我们在 LinkedIn 上保持联系,并让我知道您是否有任何问题并分享您在完成全栈 7 步 MLOps 框架课程后构建的伟大项目。

在此处访问 GitHub 存储库。

💡 我的目标是帮助机器学习工程师提升设计和生产化 ML 系统的能力。关注我的 LinkedIn 或订阅我的每周通讯以获取更多见解!

🔥 如果您喜欢阅读这样的文章并希望支持我的写作,请考虑成为小猪AI会员。使用我的推荐链接,您可以在不额外付费的情况下支持我,同时享受无限制访问小猪AI丰富的故事集。

🤖 加入以获取关于设计和构建生产就绪 ML 系统的独家内容 🚀 解锁全部访问权限…

pauliusztin.medium.com

谢谢 ✌🏼!

参考资料

[1] 来自丹麦 API 的 DE35 行业代码的能源消耗,丹麦能源数据服务

[2] 使用 IAP 进行 TCP 转发,GCP 文档

[3] TCP 转发概述,GCP 文档

[4] Google Cloud Collective,如何在 Google Compute Engine 中打开特定端口(例如 9090)(2017 年),Stackoverflow

[5] ANTHONY HEDDINGS,如何在 GCP Compute Engine 实例上打开防火墙端口(2020 年),How-To Geek

[6] 为 IAP TCP 转发准备项目,GCP 文档

[7] 保留静态外部 IP 地址,GCP 文档

[8] 创建和删除服务账号密钥,GCP 文档

[9] Tom Roth, 在 Google Cloud 虚拟机上安装 Docker(2018),Tom Roth 博客

[10] Fork 一个仓库,GitHub 文档

[11] GCP GitHub Actions 仓库,GitHub

Leave a Reply

Your email address will not be published. Required fields are marked *