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

1. 简介

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

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

机器学习模型创建

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

触发使用 ML API 进行预测

  1. Java Cloud Functions 函数,用于触发已部署 AutoML 模型的端点的调用,该端点会接收来自界面的电影详情请求,并返回预测的电影 SCORE

下面是该应用的架构概览:

5ae50607c0f2db20.png

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

我们来深入了解实现步骤。

构建内容

您将创建一个

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

2. 要求

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

以下是必备条件:

创建项目

  1. Google Cloud Console 的项目选择器页面上,选择或创建一个 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 交互,我们将尝试其中两种方式:BigQuery 网页界面 b. bq 命令 c. API

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

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

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,并将模型注册到 VertexAI 并公开端点。请参阅 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. 用于触发 ML 调用的 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 触发了已部署的模型。