使用 Vertex AI AutoML 进行电影评分预测

1. 简介

在此 Codelab 中,我们将使用 Vertex AI AutoML 创建电影评分预测模型,并让 Java Cloud Functions 触发已部署的模型端点。该模型使用存储在 BigQuery 中的数据进行训练,并在 Vertex AI 中注册。服务列表可以分为两个部分:

  1. 机器学习模型创建和部署
  2. 使用机器学习 API 进行预测的触发器

机器学习模型创建

  1. 从 CSV 到 BigQuery 的数据来源
  2. BigQuery 数据集成到 Vertex AI 中,用于创建 AutoML 模型
  3. 模型部署在 Vertex AI Model Registry 中,用于生成端点 API

使用机器学习 API 进行预测的触发器

  1. Java Cloud Functions 触发已部署的 AutoML 模型端点的调用,该端点将电影详细信息作为来自界面请求的输入,并返回预测的电影评分

以下是应用的高级架构概览:

5ae50607c0f2db20.png

此 Codelab 不涉及上述架构的应用,但如果您也想开发客户端应用,请参阅此 博客

下面我们来详细了解实现步骤。

构建内容

您将创建以下内容:

  • 一个 BigQuery 数据集,用于包含表和模型组件
  • Vertex AI AutoML 模型(创建和部署)
  • Java Cloud Functions 触发器,用于使用机器学习 API 进行预测

2. 要求

  • 一个浏览器,例如 ChromeFirefox
  • 启用了结算功能的 Google Cloud 项目

前提条件如下:

创建项目

  1. Google Cloud 控制台的项目选择器页面上,选择或创建一个 Google Cloud 项目
  2. 确保您的 Cloud 项目已启用结算功能。了解如何 检查项目是否已启用结算功能
  3. 前往 BigQuery 以启用 API。您还可以通过在浏览器中输入以下网址,直接打开 BigQuery 网页界面: https://console.cloud.google.com/bigquery

激活 Cloud Shell

  1. 您将使用 Cloud Shell,这是一个在 Google Cloud 中运行的命令行环境,它预加载了 bq:在 Cloud 控制台中,点击右上角的“激活 Cloud Shell”:6757b2fb50ddcc2d.png
  2. 在连接到 Cloud Shell 后,您应该会看到自己已通过身份验证,并且项目已设置为您的项目 ID。在 Cloud Shell 中运行以下命令,以确认您已通过身份验证:
gcloud auth list
  1. 在 Cloud Shell 中运行以下命令,以确认 gcloud 命令了解您的项目
gcloud config list project
  1. 如果项目未设置,请使用以下命令进行设置:
gcloud config set project <PROJECT_ID>

如需了解 gcloud 命令和用法,请参阅 文档

3. 准备训练数据

这是所有数据相关项目、产品和应用中的一个主要步骤,除了技术之外,还需要大量的领域专业知识来准备最佳数据集,并使其为机器学习项目做好准备。在此 Codelab 中,我们将假定数据已准备就绪,并使用此已处理的 数据 文件。

4. 创建和加载数据集

BigQuery 数据集是表的集合。数据集中的所有表都存储在同一数据 位置。您还可以附加自定义访问权限控制,以限制对数据集及其表的访问权限。

  1. 在 Cloud Shell 中,使用 bq mk 命令创建一个名为“movies”的数据集。
bq mk --location=<<LOCATION>> movies

位置 设置为区域 (asia-south1)。请务必将其设置为 VERTEX AI 步骤的区域(两个实例应位于同一区域)。

  1. 确保您已准备好数据文件 (.csv)。在 Cloud Shell 中执行以下命令,以克隆 代码库 并前往该项目:
git clone <<repository link>>

cd movie-score
  1. 使用 bq load 命令将 CSV 文件加载到 BigQuery 表中(请注意,您也可以直接从 BigQuery 界面上传):
bq load --source_format=CSV --skip_leading_rows=1 movies.movies_score \
./movies_bq_src.csv \ Id:numeric,name:string,rating:string,genre:string,year:numeric,released:string,score:string,director:string,writer:string,star:string,country:string,budget:numeric,company:string,runtime:numeric,data_cat:string
  1. 通过以下 3 种方式之一进行查询:

我们可以通过三种方式与 BigQuery 交互,我们将尝试其中两种方式:a. BigQuery 网页界面 b. bq 命令 c. API

SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;

我使用了 BigQuery Web SQL 工作区来运行查询。SQL 工作区如下所示:

109a0b2c7155e9b3.png

使用 bq 命令:

bq query --use_legacy_sql=false \
SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;

5. 在 Vertex AI AutoML 中使用 BigQuery 数据

使用 BigQuery 中的数据,通过 Vertex AI 直接创建 AutoML 模型。请注意,我们还可以从 BigQuery 本身执行 AutoML,并向 Vertex AI 注册模型并公开端点。请参阅 BigQuery AutoML 的文档。不过,在此示例中,我们将使用 Vertex AI AutoML 来创建模型。

创建 Vertex AI 数据集

从 Google Cloud 控制台前往 Vertex AI,启用 Vertex AI API(如果尚未启用),展开“数据”并选择“数据集”,点击“创建数据集”,选择“表格”数据类型和“回归 / 分类”选项,然后点击“创建”:

4104c75c34cbd2d9.png

选择数据源

在下一页上,选择一个数据源。选择“从 BigQuery 中选择表或视图”选项,然后在 BigQuery 路径“浏览”字段中从 BigQuery 中选择表。点击“继续”。

注意: BigQuery 实例和 Vertex AI 数据集应具有相同的区域,以便 BigQuery 表显示在 Vertex AI 中。

b787ef18dbca4cff.png

从浏览列表中选择源表/视图时,请务必点击单选按钮以继续执行以下步骤。如果您不小心点击了表/视图的名称,系统会将您带到 Dataplex。如果发生这种情况,您只需浏览返回到 Vertex AI 即可。

训练模型

  1. 创建数据集后,您应该会看到“分析”页面,其中包含训练新模型的选项。点击该选项:

bf095263d57106de.png

  1. 将“目标”保留为“分类”,然后在第一页中选择“AutoML”选项,然后点击“继续”:e50597bc3f29894c.png
  2. 为模型指定名称,然后从显示的下拉菜单中选择“目标列名称”作为“评分”,然后点击“继续”。
  3. 另请注意,您可以选中“将测试数据集导出到 BigQuery”选项,这样您就可以轻松地在数据库中查看包含结果的测试集,而无需额外的集成层或在服务之间移动数据。
  4. 在下一页上,您可以选择所需的任何高级训练选项,以及要将模型设置为训练的小时数。请注意,在增加要用于训练的节点时数之前,您可能需要注意价格。

点击“开始训练”以开始训练新模型。

e72b004a17849bd.png

评估、部署和测试模型

训练完成后,您应该能够点击“训练”(左侧菜单中“模型开发”标题下),并在“训练流水线”部分中看到列出的训练。点击该训练以进入 Model Registry 页面。您应该能够:

  1. 查看和评估训练结果4767b4bbd7cf93fa.png
  2. 使用 API 端点部署和测试模型

部署模型后,系统会创建一个 API 端点,您可以在应用中使用该端点发送请求并在响应中获取模型预测结果。

95fb4495618174f0.png

在继续学习本部分之前,请务必在 Vertex AI 端点部分中记下已部署模型的端点 ID、位置和其他详细信息。

6. 用于触发机器学习调用的 Java Cloud Functions 函数

还记得我们在机器学习部署步骤中获得的端点和其他详细信息吗?我们将在此处使用这些信息,并且由于我们使用的是 Java Cloud Functions,因此我们将使用 pom.xml 来处理依赖项。我们使用 google-cloud-aiplatform 库来使用 Vertex AI AutoML 端点 API。

  1. 在 Google Cloud 控制台中搜索 Cloud Functions,然后点击“创建函数”。
  2. 输入配置详细信息,例如环境、函数名称、区域、触发器(在本例中为 HTTPS)、您选择的身份验证,启用“需要 HTTPS”,然后点击“下一步/保存”

a68272022df062f2.png

  1. 在下一页上,选择“运行时”(Java 11)、“源代码”(内嵌或上传),然后开始编辑

13df616369ca5951.png

  1. 从代码库复制 javapom.xml 文件,然后将其粘贴到内嵌编辑器中的相应文件中;如果您使用的是本地编辑器(推荐),请从代码库克隆源代码
  2. 在此示例中,更改 .java 源文件中的项目 ID、端点 ID、位置和端点,但请注意,最佳实践是使用 Secret Manager 存储凭据
  3. 在此 Codelab 的范围内,请在复制的源代码中注释掉 .java 类中的 MongoDB 部分

完成所有更改后,继续部署函数。您应该会看到端点网址,该网址可在客户端应用中使用,以向此 Cloud Functions 函数发送请求并接收电影评分作为响应。

7. 清理

为避免系统因本博文中使用的资源向您的 Google Cloud 账号收取费用,请按照以下步骤操作:

  1. 在 Google Cloud 控制台中,进入 管理资源 页面
  2. 在项目列表中,选择要删除的项目,然后点击“删除”
  3. 在对话框中输入项目 ID,然后点击“关停”以删除项目

8. 恭喜

恭喜!您已成功在 Vertex AI AutoML 中创建并部署了电影评分预测模型,并从 Cloud Functions 触发了已部署的模型。