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

1. 简介

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

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

机器学习模型创建

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

触发使用 ML API 进行预测

  1. Java Cloud Functions,用于触发对已部署 AutoML 模型的端点的调用,此端点接受电影详情作为来自界面的请求,返回预测电影得分

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

5ae50607c0f2db20

上述架构的应用不在本 Codelab 的讨论范围内,但如果您也喜欢开发客户端应用,请参阅博客

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

构建内容

您需要创建一个

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

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 中,我们假设数据已经准备就绪,并使用以下已处理的 data 文件。

4. 创建和加载数据集

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

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

location 设置为区域 (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

使用 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

选择数据源

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

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

b787ef18dbca4cff.png

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

训练模型

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

bf095263d57106de.png

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

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

e72b004a17849bd.png

评估、部署和测试模型

训练完成后,您应该能够点击“训练”(位于左侧菜单中的“模型开发”标题下),并在“训练流水线”部分看到您的训练。点击该按钮即可转到 Model Registry 页面。您应该能够:

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

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

95fb4495618174f0

在继续学习本部分之前,请务必在 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. 从 Repo 复制 javapom.xml 文件,并粘贴到内嵌编辑器中的相应文件(如果使用的是本地编辑器,推荐),然后从 repo 克隆源代码
  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 触发了已部署的模型。