借助 AI Platform Training 中的内置算法,您可以提交训练数据、 选择算法,让 AI Platform Training 处理预处理和训练 而无需为训练应用编写任何代码。 利用内置图片算法,您只需进行极少的配置即可在 TPU 上进行训练。 生成的 TensorFlow SavedModel 可在 CPU 和 GPU 上运行。
概览
在本教程中,您无需编写任何代码即可训练图片分类模型。您可以将花卉数据集提交给 AI Platform Training 进行训练,然后在 AI Platform Training 上部署该模型以获取预测结果。生成的模型会根据物种(雏菊、郁金香、玫瑰、向日葵或蒲公英)对花卉图片进行分类。
准备工作
如需通过命令行完成本教程的学习,请使用 Cloud Shell 或已安装 Google Cloud CLI 的任何环境。
完成以下步骤以设置 GCP 账号,启用所需的 API,以及安装和激活 Google Cloud CLI。
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the AI Platform Training & Prediction and Compute Engine APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the AI Platform Training & Prediction and Compute Engine APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
授权 Cloud TPU 访问项目
请按照以下步骤为 Google Cloud 项目所关联的 Cloud TPU 服务账号名称授权:
通过调用
projects.getConfig
获取 Cloud TPU 服务账号名称。例如:PROJECT_ID=PROJECT_ID curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \ https://ml.googleapis.com/v1/projects/$PROJECT_ID:getConfig
保存 API 返回的
serviceAccountProject
和tpuServiceAccount
字段的值。初始化 Cloud TPU 服务账号:
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" -d '{}' \ https://serviceusage.googleapis.com/v1beta1/projects/<serviceAccountProject>/services/tpu.googleapis.com:generateServiceIdentity
现在,将该 Cloud TPU 服务账号添加为项目的成员,并为其授予 Cloud ML Service Agent 角色。在
或使用 gcloud
命令来 Google Cloud 控制台:
控制台
- 登录 Google Cloud 控制台,然后选择您要使用 TPU 的项目。
- 选择 IAM 和管理 > IAM。
- 点击添加按钮向项目添加成员。
- 在成员文本框中输入 TPU 服务账号。
- 点击角色下拉列表。
- 启用 Cloud ML Service Agent 角色 (Service Agent > Cloud ML Service Agent)。
gcloud
设置包含项目 ID 和 Cloud TPU 服务账号的环境变量:
PROJECT_ID=PROJECT_ID SVC_ACCOUNT=your-tpu-sa-123@your-tpu-sa.google.com.iam.gserviceaccount.com
将
ml.serviceAgent
角色授予 Cloud TPU 服务账号:gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SVC_ACCOUNT --role roles/ml.serviceAgent
如需详细了解如何为服务账号授予角色,请参阅 IAM 文档。
设置
我们已针对本教程中的操作修改了 TensorFlow Flowers 数据集,并将该数据集托管在公开的 Cloud Storage 存储分区 (gs://cloud-samples-data/ai-platform/built-in/image/flowers/
) 中。
控制台
选择算法
转到 Google Cloud Console 中的 AI Platform Training“作业”页面:
点击新建训练作业按钮。从下方显示的选项中,点击内置算法训练。创建新的训练作业页面随即显示。
训练作业的创建分为四个步骤。第一步是训练算法。选择图片分类,然后点击下一步。
训练数据
在训练数据部分,选择示例数据集的训练数据,该数据集托管在我们的公开 Cloud Storage 存储分区中:
选择使用存储在一个 Cloud Storage 目录中的多个文件。
在目录路径部分,填入“cloud-samples-data/ai-platform/built-in/image/flowers/”
在通配符名称部分,填入“flowers_train*”以选择该目录中的所有训练文件。
完整 GCS 路径 (Complete GCS path) 部分显如下:“gs://cloud-samples-data/ai-platform/built-in/image/flowers/flowers_train*”
在验证数据部分,选择示例数据集的验证数据,该数据集托管在我们的公开 Cloud Storage 存储分区中:
选择使用存储在一个 Cloud Storage 目录中的多个文件。
在目录路径部分,填入“cloud-samples-data/ai-platform/built-in/image/flowers/”
在通配符名称部分,填入“flowers_validation*”以选择该目录中的所有验证文件。
完整 GCS 路径 (Complete GCS path) 部分显示如下:“gs://cloud-samples-data/ai-platform/built-in/image/flowers/flowers_validation*”
指定您的 Cloud Storage 存储分区中的所需输出目录,以供 AI Platform Training 用来存储经过训练的模型、检查点和其他训练作业输出。您可以填写存储分区中的确切路径,或使用浏览按钮来选择路径。
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
# Set paths to the training and validation data.
TRAINING_DATA_PATH="gs://cloud-samples-data/ai-platform/built-in/image/flowers/flowers_train*"
VALIDATION_DATA_PATH="gs://cloud-samples-data/ai-platform/built-in/image/flowers/flowers_validation*"
# Specify the Docker container for your built-in algorithm selection.
IMAGE_URI="gcr.io/cloud-ml-algos/image_classification: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 。 |
内置图片分类算法专用参数:
算法参数 | |
---|---|
参数 | 说明 |
training_data_path |
用于训练的 TFRecord 路径模式的路径。 |
validation_data_path |
用于验证的 TFRecord 路径模式的路径。 |
pretrained_checkpoint_path |
预训练的检查点的路径。您可以使用一些已发布的检查点。 |
num_classes |
训练/验证数据中的类别数。 |
max_steps |
训练作业将运行的步数。 |
train_batch_size |
每个训练步要使用的图片数。 |
num_eval_images |
用于评估的图片总数。 如果为 0,则 validation_data_path 中的所有图片都将用于评估。
|
learning_rate_decay_type |
训练期间使用的学习速率衰减方法。 |
warmup_learning_rate |
预热阶段开始时的学习速率。 |
warmup_steps |
需要在预热阶段运行的步数,或预热阶段的长度(以步为单位)。
训练作业在预热阶段使用 warmup_learning_rate 。当预热阶段结束时,训练作业使用 initial_learning_rate 。
|
initial_learning_rate |
预热阶段完成后的初始学习速率。 |
stepwise_learning_rate_steps |
学习速率衰减类型为阶梯式时学习速率的衰减/变化步。 例如,100,200 表示学习速率将在第 100 步和第 200 步发生变化(相对于 stepwise_learning_rate_levels )。请注意,只有在将 learning_rate_decay_type 设置为“阶梯式”时,才会遵循此参数的设置。
|
stepwise_learning_rate_levels |
学习速率衰减类型为阶梯式时每步的学习速率值。请注意,只有在将 learning_rate_decay_type 设置为“阶梯式”时,才会遵循此参数的设置。
|
image_size |
用于训练的图片大小(宽度和高度)。 |
optimizer_type |
用于训练的优化器。应为以下项之一:{momentum, adam, rmsprop}
|
optimizer_arguments |
优化器的参数。这是以英文逗号分隔的“名称=值”对列表。该参数必须与 optimizer_type 兼容。示例:
|
model_type |
用于训练模型的模型架构类型。该参数可为以下项之一:
|
label_smoothing |
在 softmax_cross_entropy 中使用的标签平滑参数。
|
weight_decay |
用于 L2 正则化的权重衰减系数。
loss = cross_entropy + params['weight_decay'] * l2_loss
|
如需所有其他图片分类算法标志的详细列表,请参阅内置图片分类参考文档。
控制台
算法参数
在算法参数标签页的第一部分中,按如下所示填入值:
- 类别数 (Number of classes):5
- 步数上限 (Max steps):15000
- 训练批次大小 (Train batch size):128
- 评估图片数 (Number of evaluation images):1
在算法参数标签页的模型部分 (Model Section) 中,执行以下操作:
- 在模型类型部分,选择 Efficientnet-b4。
- 将预训练的检查点路径 (Pretrained checkpoint path) 留空。
- 将标签平滑 (Label smoothing) 和权重衰减 (Weight Decay) 保留为默认值。
作业设置
在作业设置标签页上,执行以下操作:
- 在作业 ID 部分,输入唯一的 ID(例如“image_classification_example”)。
- 输入可用区域(例如“us-central1”)。
- 如需选择机器类型,请在容量层级部分选择“CUSTOM”。
此时,系统会显示一个提供自定义集群规范的部分。
- 在主机器类型部分,选择 complex_model_m。
- 在工作器类型部分,选择 cloud_tpu。“工作器计数”默认为 1。
点击完成,提交训练作业。
gcloud
使用
gcloud
提交训练作业之前,请先设置训练作业和算法的所有参数:DATASET_NAME="flowers" ALGORITHM="image_classification" MODEL_NAME="${DATASET_NAME}_${ALGORITHM}_model" # 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}"
提交作业:
gcloud ai-platform jobs submit training $JOB_ID \ --region=$REGION \ --config=config.yaml \ --master-image-uri=$IMAGE_URI \ -- \ --training_data_path=$TRAINING_DATA_PATH \ --validation_data_path=$VALIDATION_DATA_PATH \ --job-dir=$JOB_DIR \ --max_steps=30000 \ --train_batch_size=128 \ --num_classes=5 \ --num_eval_images=100 \ --initial_learning_rate=0.128 \ --warmup_steps=1000 \ --model_type='efficientnet-b4'
成功提交作业后,您可以使用以下
gcloud
命令查看日志:gcloud ai-platform jobs describe $JOB_ID gcloud ai-platform jobs stream-logs $JOB_ID
了解作业目录
训练作业成功完成后,AI Platform Training 会在您的 Cloud Storage 存储分区中创建经过训练的模型,以及其他一些工件。您可以在 JOB_DIR
中找到以下目录结构:
- model/(TensorFlow SavedModel
目录
还包含
deployment_config.yaml
文件)- saved_model.pb
- deployment_config.yaml
- eval/
- events.out.tfevents.[timestamp].cmle-training-[timestamp]
- events.out.tfevents...
- …
- variables/
- variables.data-00000-of-00001
- variables.index
作业目录还包含各种模型检查点文件。
确认您的 JOB_DIR
中的目录结构与上述结构相同:
gcloud storage ls $JOB_DIR/* --all-versions
部署经过训练的模型
AI Platform Training 使用模型和版本资源来组织经过训练的模型。AI Platform Training 模型是存放机器学习模型版本的容器。
如需部署模型,请在 AI Platform Training 中创建模型资源,创建该模型的版本,然后使用所创建的模型和版本请求在线预测。
如需详细了解如何将模型部署到 AI Platform Training,请参阅如何部署 TensorFlow 模型。
控制台
在作业页面上,您可以找到包含所有训练作业的列表。点击您刚刚提交的训练作业的名称(“image_classification”或您使用的作业名称)。
在作业详情页面上,您可以查看作业的整体进度,也可以点击查看日志,更详细地查看进度。
如果作业成功,顶部会显示部署模型按钮。点击部署模型。
选择部署为新模型,并输入模型名称,如“algorithms_image_classification_model”。然后,点击确认。
在创建版本页面上,输入版本名称(如“v1”),并将所有其他字段保留为默认设置。点击保存。
gcloud
使用内置图片分类算法的训练过程会生成一个 deployment_config.yaml
文件,这让您可以更轻松地在 AI Platform Training 上部署模型进行预测。
将该文件复制到本地目录并查看其内容:
gcloud storage cp $JOB_DIR/model/deployment_config.yaml . cat deployment_config.yaml
您的
deployment_config.yaml
文件应类似于以下内容:deploymentUri: gs://BUCKET_NAME/algorithms_training/flowers_image_classification/model framework: TENSORFLOW labels: global_step: '1000' job_id: flowers_image_classification_20190227060114 runtimeVersion: '1.14'
在 AI Platform Training 中创建模型和版本:
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
版本创建过程需要几分钟时间才能完成。
获取在线预测结果
请求预测时,您需要确保输入数据为 JSON 格式。
下载训练工件文件:
gcloud storage cp $JOB_DIR/artifacts/* .
为一张图片准备预测输入。
要使用 Google Cloud CLI 发送在线预测请求,请将每个实例写入以换行符分隔的 JSON 文件中的一行,如以下示例所示。
在终端运行以下命令,为您可以发送到 AI Platform Prediction 的单个实例创建输入:
以下 Python 脚本使用
base64
对单张图片进行编码,设置其格式以用于预测,添加实例键,并将结果写入名为prediction_instances.json
的文件:import json import base64 import tensorflow as tf IMAGE_URI='gs://cloud-samples-data/ai-platform/built-in/image/tutorial_examples/daisy.jpg' with tf.gfile.Open(IMAGE_URI, 'rb') as image_file: encoded_string = base64.b64encode(image_file.read()).decode('utf-8') image_bytes = {'b64': str(encoded_string)} instances = {'image_bytes': image_bytes, 'key': '1'} with open("prediction_instances.json","w") as f: f.write(json.dumps(instances))
发送预测请求:
gcloud ai-platform predict --model $MODEL_NAME \ --version $VERSION_NAME \ --json-instances prediction_instances.json
预测输出最有可能包含 daisy
类别,表示已部署的模型已将输入图片归类为雏菊(由于训练具有不确定性,因此您的模型可能会有所不同)。
关于数据
Flowers 数据集 本示例用于训练的 由 TensorFlow 团队提供。
后续步骤
- 详细了解如何使用内置图片分类算法。