使用入门:内置广度和深度算法

借助 AI Platform Training 中的内置算法,您可以提交训练数据、选择算法,以及让 AI Platform Training 为您处理预处理和训练作业,而无需为训练应用编写任何代码。

概览

在本教程中,您不用编写任何代码即可训练广度和深度模型。您可以将人口普查收入数据集提交给 AI Platform Training 进行预处理和训练,然后在 AI Platform Training 上部署模型以获取预测结果。生成的模型预测了个人年收入超过 $50000 的概率。

准备工作

如需通过命令行完成本教程的学习,请使用 Cloud Shell 或已安装 Cloud SDK 的任何环境。

完成以下步骤以设置 GCP 帐号,启用所需的 API,然后安装并激活 Cloud SDK:

  1. 登录您的 Google Cloud 帐号。如果您是 Google Cloud 新手,请创建一个帐号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 在 Google Cloud Console 的项目选择器页面上,选择或创建一个 Google Cloud 项目。

    转到“项目选择器”

  3. 确保您的 Cloud 项目已启用结算功能。 了解如何确认您的项目是否已启用结算功能

  4. 启用 AI Platform Training & Prediction and Compute Engine API。

    启用 API

  5. 安装并初始化 Cloud SDK
  6. 在 Google Cloud Console 的项目选择器页面上,选择或创建一个 Google Cloud 项目。

    转到“项目选择器”

  7. 确保您的 Cloud 项目已启用结算功能。 了解如何确认您的项目是否已启用结算功能

  8. 启用 AI Platform Training & Prediction and Compute Engine API。

    启用 API

  9. 安装并初始化 Cloud SDK

设置

如需使用表格式内置算法,您必须从 CSV 文件中移除标题行,并将目标值移到第一列。我们已针对本教程中的操作修改了原始人口普查数据集,并将其托管在公开 Cloud Storage 存储分区 (gs://cloud-samples-data/ai-platform/census/algorithms/data/) 中。

Console

在开始训练作业前,您需要将数据从我们的公开 Cloud Storage 存储分区复制到您的 Cloud Storage 存储分区。

将示例数据复制到 Cloud Storage 存储分区

  1. 首先,从我们的公开 Cloud Storage 存储分区中下载训练数据和测试数据。

    1. 导航到我们的公开 Cloud Storage 存储分区:

      获取示例数据

    2. 下载 test.csvtrain.csv

      1. 点击文件名。

      2. 对象详情页面中点击下载。这些文件会分别作为 ai-platform_census_algorithms_data_test.csvai-platform_census_algorithms_data_train.csv 下载到您的本地环境。

  2. 接下来,将训练数据和测试数据上传到您的 Cloud Storage 存储分区。

    1. 导航到 Cloud Storage 存储分区的“浏览器”页面。 从选择项目下拉列表中选择您的项目,或在新标签页中将其打开:

      “Cloud Storage 浏览器”页面

    2. 点击要使用的存储分区的名称,如果没有存储分区,请新建一个。(如要创建新的存储分区,请务必创建区域性存储分区,并选择在其中运行 AI Platform Training 训练作业的区域。)

    3. (可选)点击创建文件夹,为您上传的文件创建一个文件夹。为该文件夹输入名称(例如“data”),然后点击创建。然后,点击文件夹名称导航到新文件夹。

    4. 点击上传文件,将训练文件 ai-platform_census_algorithms_data_train.csv 和测试文件 ai-platform_census_algorithms_data_test.csv 上传到您的存储分区中。

现在数据已复制到存储分区中,您可以通过选择要使用的算法类型来启动训练作业。

选择算法

  1. 转到 Google Cloud Console 中的 AI Platform Training“作业”页面:

    AI Platform Training“作业”页面

  2. 点击新建训练作业按钮。从下方显示的选项中,点击内置算法训练创建新的训练作业页面随即显示。

  3. 训练作业的创建分为四个步骤。第一步是训练算法。选择广度和深度 (wide and deep),然后点击下一步

gcloud

为您的项目 ID、Cloud Storage 存储分区、指向训练数据的 Cloud Storage 路径以及算法选择设置环境变量。

AI Platform Training 内置算法位于 Container Registry 中托管的 Docker 容器中。

PROJECT_ID=YOUR_PROJECT_ID
BUCKET_NAME=YOUR_BUCKET_NAME
REGION="us-central1"
gcloud config set project $PROJECT_ID
gcloud config set compute/region $REGION

# Copy the training data into your Cloud Storage bucket, and set the path
# to your copy of the training data.
TRAINING_DATA_SOURCE=gs://cloud-samples-data/ai-platform/census/algorithms/data/train.csv
TRAINING_DATA_PATH=gs://$BUCKET_NAME/algorithms-demo/data/train.csv
gsutil cp $TRAINING_DATA_SOURCE $TRAINING_DATA_PATH

# Specify the Docker container URI specific to the algorithm.
IMAGE_URI="gcr.io/cloud-ml-algos/wide_deep_learner_cpu:latest"

提交训练作业

要提交作业,您必须指定一些基本的训练参数和一些与广度和深度算法相关的基本参数。

训练作业的常规参数:

训练作业参数
参数 说明
job-id 训练作业的唯一 ID。提交训练作业后,您可以使用此参数查找训练作业状态的日志。
job-dir AI Platform Training 在训练作业成功完成后用来保存训练文件的 Cloud Storage 路径。
scale-tier 指定用于训练的机器类型。使用 BASIC 选择仅使用一台机器的配置。
master-image-uri Container Registry URI,用于指定训练作业要使用的 Docker 容器。将容器用于先前定义为 IMAGE_URI 的广度和深度算法。
region 指定用于运行训练作业的可用区域。在本教程中,您可以使用 us-central1 区域。

内置广度和深度算法专用参数:

算法参数
参数 说明
preprocess 布尔值参数,说明 AI Platform Training 是否应对数据进行预处理。
model_type 指示要训练的模型类型:分类或回归。
training_data_path 指向训练数据的 Cloud Storage 位置,必须为 CSV 文件。
learning_rate 线性优化器使用的学习速率。
max_steps 训练运行的步数。
batch_size 每个训练步要使用的示例数。
dnn_learning_rate 模型的 DNN 部分要使用的学习速率。
dnn_dropout dropout 的概率。
hidden_units 以英文逗号分隔的字符串,表示每一层中隐藏单元的数量。
use_wide 如果设置此参数,则将在 DNN 模型的广度部分使用分类列。
embed_categories 如果设置此参数,则将以嵌入方式在模型的深度部分使用分类列。

如需所有其他广度和深度算法标志的详细列表,请参阅内置广度和深度参考

控制台

  1. 启用自动数据预处理保持勾选状态。

  2. 对于训练数据路径,点击浏览。在右侧面板中,点击您将训练数据上传到的存储分区的名称,然后导航到 ai-platform_census_algorithms_data_train.csv 文件。

  3. 验证数据测试数据的字段保留为默认设置。

  4. 输出目录中,输入您希望 AI Platform Training 用于存储训练作业输出的 Cloud Storage 存储分区的路径。您可以直接填写 Cloud Storage 存储分区路径,或点击浏览按钮来选择。

    为了便于管理,请在 Cloud Storage 存储分区中为此训练作业创建一个新目录。您可以在浏览窗格中执行此操作。

    点击下一步

  5. 对于模型类型,选择分类

  6. 将所有其他字段保留为默认设置,然后点击下一步

  7. 作业设置页面上,执行以下操作:

    1. 输入唯一的作业 ID(例如“wide_deep_example”)。
    2. 输入可用区域(例如“us-central1”)。
    3. 容量层级选择“BASIC”。

    点击完成,提交训练作业。

gcloud

  1. 使用 gcloud 提交训练作业之前,请先设置训练作业和算法的所有参数:

    DATASET_NAME="census"
    ALGORITHM="wide_deep"
    MODEL_TYPE="classification"
    MODEL_NAME="${DATASET_NAME}_${ALGORITHM}_${MODEL_TYPE}"
    
    # Give a unique name to your training job.
    DATE="$(date '+%Y%m%d_%H%M%S')"
    JOB_ID="${MODEL_NAME}_${DATE}"
    
    # Make sure you have access to this Cloud Storage bucket.
    JOB_DIR="gs://${BUCKET_NAME}/algorithms_training/${MODEL_NAME}/${DATE}"
    
  2. 提交作业:

    gcloud ai-platform jobs submit training $JOB_ID \
      --master-image-uri=$IMAGE_URI --scale-tier=BASIC --job-dir=$JOB_DIR \
      -- \
      --preprocess --model_type=$MODEL_TYPE --batch_size=250 --learning_rate=0.1 \
      --dnn_learning_rate=0.005 --dnn_dropout=0.1 --hidden_units=10,10,10 \
      --use_wide --embed_categories \
      --max_steps=1000 --training_data_path=$TRAINING_DATA_PATH
    

  3. 成功提交作业后,您可以使用以下 gcloud 命令查看日志:

    gcloud ai-platform jobs describe $JOB_ID
    gcloud ai-platform jobs stream-logs $JOB_ID
    

了解作业目录

训练作业成功完成后,AI Platform Training 会在您的 Cloud Storage 存储分区中创建经过训练的模型,以及其他一些工件。您可以在 JOB_DIR 中找到以下目录结构:

  • artifacts/
    • metadata.json
  • model/(亦包含 deployment_config.yaml 文件的 TensorFlow SavedModel 目录
    • saved_model.pb
    • deployment_config.yaml
  • processed_data/
    • test.csv
    • training.csv
    • validation.csv

作业目录还包含位于“实验”目录中的各种模型检查点文件。

确认您的 JOB_DIR 中的目录结构与上述结构相同:

gsutil ls -a $JOB_DIR/*

部署经过训练的模型

AI Platform Prediction 使用模型和版本资源来组织经过训练的模型。AI Platform Prediction 模型是存放机器学习模型版本的容器。

要部署模型,请在 AI Platform Prediction 中创建模型资源,创建该模型的一个版本,然后使用该模型和版本请求在线预测。

详细了解如何将模型部署到 AI Platform Prediction

控制台

  1. 作业页面上,您可以找到所有训练作业的列表。点击您刚刚提交的训练作业的名称(“wide_deep_example”或您使用的作业名称)。

  2. 作业详情页面上,您可以查看作业的整体进度,也可以点击查看日志,更详细地查看进度。

  3. 如果作业成功,顶部会显示部署模型按钮。点击部署模型

  4. 选择“部署为新模型”,然后输入模型名称,如“wide_deep_model”。然后,点击确认

  5. 创建版本页面上,输入版本名称(如“v1”),并将所有其他字段保留为默认设置。点击保存

  6. 您的版本名称会显示在模型详情页面。版本创建过程需要几分钟时间才能完成。版本准备就绪后,版本名称旁会显示一个对勾图标。

  7. 点击版本名称(“v1”)导航至版本详情页面。在本教程的下一步,您将发送预测请求

gcloud

内置广度和深度算法的训练过程会生成文件 deployment_config.yaml,该文件可让您更轻松地在 AI Platform Prediction 上部署模型以进行预测。

  1. 将该文件复制到本地目录并查看其内容:

    gsutil cp $JOB_DIR/model/deployment_config.yaml .
    cat deployment_config.yaml
    

    您的 deployment_config.yaml 文件应类似于以下内容:

    deploymentUri: gs://YOUR_BUCKET_NAME/algorithms_training/census_wide_deep_classification/20190227060114/model
    framework: TENSORFLOW
    labels:
      global_step: '1000'
      job_id: census_wide_deep_classification_20190227060114
      accuracy: '86'
    runtimeVersion: '1.14'
    pythonVersion: '2.7'
    
  2. 在 AI Platform Training 中创建模型和版本:

    MODEL_NAME="${DATASET_NAME}_${ALGORITHM}_${MODEL_TYPE}"
    gcloud ai-platform models create $MODEL_NAME --regions $REGION
    
    # Create a model and a version using the file above.
    VERSION_NAME="v_${DATE}"
    
    gcloud ai-platform versions create $VERSION_NAME \
      --model $MODEL_NAME \
      --config deployment_config.yaml
    

    版本创建过程需要几分钟时间才能完成。

获取在线预测结果

请求预测时,您需要确保输入数据与训练数据的格式设置相同。在训练之前,AI Platform Training 会通过将您的数据转换为 metadata.json 中显示的语料库来对其进行预处理。

进行预测之前,广度和深度模型会对输入数据应用类似的预处理。

控制台

  1. 在“v1”(刚刚创建的版本)的版本详情页面上,您可以发送示例预测请求。

    选择测试和使用标签页。

  2. 将以下示例复制到输入字段:

     {
       "instances": [
         {"csv_row": "44, Private, 160323, Some-college, 10, Married-civ-spouse, Machine-op-inspct, Husband, Black, Male, 7688, 0, 40, United-States", "key": "dummy-key"}
       ]
     }
    
  3. 点击测试

    示例预测结果包含多个字段。classes 列表显示了预测类 >50K'

    {
       "predictions": [
         {
           ...
           "classes": [
             ">50K"
           ],
           ...
         }
       ]
     }
    

    在这种情况下,部署的模型预测相应人员的薪资收入超过 50000 美元。(由于训练是不确定的,因此您的模型可能会有所不同。)

gcloud

  1. 查看 metadata.json 的最后几行:

    gsutil cat $JOB_DIR/artifacts/metadata.json | tail
    

    target_column.mapping 对象显示预测类在预测结果中的显示方式:

        "target_algorithm": "TensorFlow",
        "target_column": {
          "mapping": {
            "0": "<=50K",
            "1": ">50K"
          },
        "num_category": 2,
        "type": "classification"
      }
    }
    
  2. 为一个数据实例准备预测输入。请注意,您必须通过以下字段将每个数据实例作为 JSON 对象提供:

    • csv_row 是包含一行逗号分隔的特征的字符串,其格式与训练期间使用的实例相同。
    • key:每个实例独有的字符串标识符。它充当实例键,显示在预测输出结果中,因此您可以将每个预测与相应的输入实例相匹配。

      这对批量预测来说非常必要,因为批量预测处理输入并保存输出的顺序无法预知。

      在线预测中,产生输出的顺序与您提供输入的顺序相同,实例键就没有那么重要了。此示例仅对单个实例执行预测,因此实例键的值无关紧要。

    要使用 gcloud 命令行工具发送在线预测请求,请将每个实例写入以换行符分隔的 JSON 文件中的行中,如以下示例所示。

    在终端运行以下命令,为您可以发送到 AI Platform Prediction 的单个实例创建输入:

     # A sample record from census dataset. Ground truth is >50K
    RAW_DATA_POINT='44, Private, 160323, Some-college, 10, Married-civ-spouse, Machine-op-inspct, Husband, Black, Male, 7688, 0, 40, United-States'
    
     # Create a prediction request file
    echo "{\"csv_row\": \"$RAW_DATA_POINT\", \"key\": \"dummy-key\"}" > sample_input.json
    
    # Check the prediction request file.
    cat sample_input.json
    
  3. 发送预测请求:

    gcloud ai-platform predict \
      --model $MODEL_NAME \
      --version $VERSION_NAME \
      --json-instances sample_input.json \
      --format "value(predictions[0].classes[0])"
    

    此预测输出经过过滤,仅显示预测类:

    >50K
    

预测输出很有可能为 >50K。部署的模型预测相应人员的薪资收入超过 50000 美元。(由于训练是不确定的,因此您的模型可能会有所不同。)

关于数据

本示例中用于训练的人口普查收入数据集UC Irvine 机器学习代码库托管。

人口普查数据由 Lichman, M. (2013) 提供。UCI 机器学习存储库 http://archive.ics.uci.edu/ml。加利福尼亚州欧文市:加州大学信息与计算机科学学院。

后续步骤