Hello 自定义训练:提供自定义图片分类模型的预测结果

本页面逐步演示如何在图片分类模型中执行预测以及如何在 Web 应用中查看预测结果。

本文档是“Hello 自定义训练”教程的一部分,该教程逐步演示如何使用 Vertex AI 训练图片分类模型以及使用模型执行预测。在本教程中,您将使用 Vertex AI 的自定义训练功能在 Vertex AI 的预构建容器环境中运行 TensorFlow Keras 训练应用。此自定义训练作业将训练一个机器学习模型,以根据花卉类型对花卉图片进行分类。训练机器学习模型后,本教程将介绍如何创建端点,并从该端点向简单的 Web 应用提供预测结果。

本教程包含多个页面:

  1. 设置项目和环境

  2. 训练自定义图片分类模型

  3. 提供自定义图片分类模型的预测结果。

  4. 清理项目

每个页面均假定您已经按照本教程中之前页面的说明操作。

本文档的其余部分假定您使用的是您在本教程的第一页中创建的 Cloud Shell 环境。如果原始的 Cloud Shell 会话不再处于打开状态,您可以执行以下操作来返回该环境:

  1. 在 Cloud Console 中,激活 Cloud Shell。

    激活 Cloud Shell

  2. 在 Cloud Shell 会话中,运行以下命令:

    cd hello-custom-sample
    

1.创建端点

要从您在本教程之前页面中训练的机器学习模型获取在线预测结果,请创建 Vertex AI 端点。端点通过一个或多个模型提供在线预测结果。

  1. 在 Google Cloud Console 的 Vertex AI 部分中,转到模型页面。

    转到“模型”

  2. 找到您在本教程的上一步中训练的模型所在的行,hello_custom,然后点击模型的名称以打开模型详情页面。

  3. 部署和测试标签页上,点击部署到端点,打开部署到端点窗格。

  4. 定义端点步骤中,为端点添加一些基本信息:

    1. 选择创建新端点

    2. 端点名称字段中,输入 hello_custom

    3. 确保模型设置部分中显示模型的名称,也称为 hello_custom。指定以下模型设置:

      1. 流量拆分字段中,输入 100。Vertex AI 支持将一个端点的流量拆分到多个模型,但本教程不使用该功能。

      2. 计算节点数下限字段中,输入 1

      3. 机器类型下拉列表中,从标准部分选择 n1-standard-2

      4. 点击完成

    4. 日志记录部分中,确保已启用两种类型的预测日志记录。

    点击继续

  5. 端点详情步骤中,确认端点将部署到 us-central1 (Iowa)

    请勿选中使用客户管理的加密密钥 (CMEK) 复选框。本教程不使用 CMEK

  6. 点击部署创建端点并将模型部署到端点。

几分钟后,端点表格中新端点旁边会显示 。同时,您还会收到一封电子邮件,告知您已成功创建端点并将模型部署到端点。

2.部署 Cloud Functions 函数

您可以将请求发送到 Vertex AI API 的 REST 接口,从您刚刚创建的 Vertex AI 端点获得预测结果。但是,只有具有 aiplatform.endpoints.predict 权限的主帐号才能发送在线预测请求。您无法使端点公开,供任何人向其发送请求(例如通过 Web 应用)。

在本部分中,将代码部署到 Cloud Functions 以处理未经身份验证的请求。您在本教程的第一页中下载的示例代码包含此 Cloud Functions 函数的代码,位于 function/ 目录中。(可选)运行以下命令来探索 Cloud Functions 函数代码:

less function/main.py

部署该函数具有以下用途:

  • 您可以配置 Cloud Functions 函数以接收未经身份验证的请求。此外,函数使用默认具有 Editor 角色的服务帐号运行,其中包含从 Vertex AI 端点获取预测结果所需的 aiplatform.endpoints.predict 权限。

  • 此函数还会对请求执行有用的预处理。Vertex AI 端点期望预测请求的格式为经过训练的 TensorFlow Keras 图的第一层:具有固定尺寸的归一化浮点数的张量。此函数将图片的网址作为输入,并将图片预处理为此格式,然后再向 Vertex AI 端点请求预测结果。

如需部署 Cloud Functions 函数,请执行以下操作:

  1. 在 Google Cloud Console 的 Vertex AI 部分中,转到端点页面。

    转至 Endpoints

  2. 找到您在上一个部分中创建的名为 hello_custom 的端点所在的行。在该行中,点击示例请求以打开示例请求窗格。

  3. 示例请求窗格中,找到以下格式的 shell 代码行:

    ENDPOINT_ID="ENDPOINT_ID"
    

    ENDPOINT_ID 是标识此特定端点的编号。

    复制这行代码,并在 Cloud Shell 会话中运行该代码以设置 ENDPOINT_ID 变量。

  4. 在 Cloud Shell 会话中运行以下命令部署 Cloud Functions 函数:

    gcloud functions deploy classify_flower \
      --region=us-central1 \
      --source=function \
      --runtime=python37 \
      --memory=2048MB \
      --trigger-http \
      --allow-unauthenticated \
      --set-env-vars=ENDPOINT_ID=${ENDPOINT_ID}
    

3.部署 Web 应用以发送预测请求

最后,在 Cloud Storage 上托管静态 Web 应用,以从经过训练的机器学习模型获取预测结果。Web 应用将请求发送到 Cloud Functions 函数,该函数对请求进行预处理并从 Vertex AI 端点获取预测结果。

您下载的示例代码的 webapp 目录包含一个示例 Web 应用。在您的 Cloud Shell 会话中,运行以下命令以准备和部署 Web 应用:

  1. 设置几个 shell 变量,供后续步骤中的命令使用:

    PROJECT_ID=PROJECT_ID
    BUCKET_NAME=BUCKET_NAME
    

    请替换以下内容:

  2. 修改应用,为其提供 Cloud Functions 函数的触发器网址:

    echo "export const CLOUD_FUNCTION_URL = 'https://us-central1-${PROJECT_ID}.cloudfunctions.net/classify_flower';" \
      > webapp/function-url.js
    
  3. webapp 目录上传到您的 Cloud Storage 存储分区:

    gsutil -m cp -r webapp gs://${BUCKET_NAME}/
    
  4. 使刚才上传的 Web 应用文件可公开可读

    gsutil -m acl ch -u AllUsers:R gs://${BUCKET_NAME}/webapp/**
    
  5. 现在,您可以导航到以下网址以打开 Web 应用并获取预测结果:

    https://storage.googleapis.com/BUCKET_NAME/webapp/index.html
    

    打开 Web 应用,然后点击一个花卉图片,查看机器学习模型对花卉类型的分类结果。Web 应用将预测结果显示为花卉类型以及图片包含每种花卉类型的概率的列表。

在以下屏幕截图中,Web 应用已经获得了一个预测结果,并且正在发送另一个预测请求。

包含四张带标签的花卉图片的 Web 应用。一张图片下方显示预测标签的概率。另一张图片下显示正在加载的进度条。

后续步骤

按照本教程的最后一页清理您创建的资源。