使用入门

在使用本教程中的 Cloud Machine Learning Engine 之前,您应该熟悉机器学习和 TensorFlow。要了解详情,请参阅使用 TensorFlow API 的机器学习速成课程。如需详细了解有关机器学习的培训资源,请参阅与 Google AI 一同成长

概览

本文档提供了有关 Cloud Machine Learning Engine 训练与预测的详尽无遗的入门级演示。您会看到一个使用人口普查数据集执行以下任务的示例:

  • 创建一个 TensorFlow 训练应用,并在本地对其执行验证。
  • 在云中的单个工作器实例上运行您的训练作业。
  • 将您的训练作业作为云端分布式训练作业运行。
  • 利用超参数微调,优化您的超参数。
  • 部署模型以支持预测。
  • 请求在线预测并查看响应。
  • 请求批量预测。

您将构建的模型

本示例构建了一个广泛而深入的模型,用于根据美国人口普查收入数据集预测收入分类。两种收入分类(也称为标签)如下:

  • >50K — 50000 美元以上
  • <=50K — 50000 美元或以下

这种广泛而深入的模型使用深度神经网络 (DNN) 学习有关复杂特征或此类特征间的交互作用的高级抽象信息。随后,这些模型将 DNN 的输出与对更简单的特征执行的线性回归相结合。从而实现了功能与速度的平衡,能够有效解决许多结构化数据问题。

您可以阅读名为广泛而深入的学习:借助 TensorFlow 实现强强联合的 Google 研究博文 ,了解更多详情。

该示例使用 TensorFlow 的预构建 DNNCombinedLinearClassifier 类定义模型。示例中定义了人口普查数据集特有的数据转换,然后将这些(有可能)经过转换的特征分配给 DNN,或者分配给模型的线性部分。

费用

本演示使用 Google Cloud Platform 的可计费组件,包括:

  • Cloud Machine Learning Engine,用于实现以下目的:
    • 训练
    • 预测
  • Cloud Storage,用于实现以下目的:
    • 存储用于训练的输入数据
    • 暂存训练应用软件包
    • 编写训练软件工件
    • 存储执行批量预测所需的输入数据文件

您可使用价格计算器根据您的预计使用情况来估算费用。

设置并测试云环境

完成以下步骤以设置 GCP 帐号,激活 Cloud ML Engine API,然后安装并激活 Cloud SDK。

设置 GCP 项目

  1. 登录您的 Google 帐号。

    如果您还没有 Google 帐号,请注册新帐号

  2. Select or create a Google Cloud Platform project.

    Go to the Manage resources page

  3. 确保您的项目已启用结算功能。

    了解如何启用结算功能

  4. 启用Cloud Machine Learning Engine 和 Compute Engine API。

    启用 API

  5. Install and initialize the Cloud SDK.

设置环境

选择以下一个选项,在 macOS 本地设置环境,或者在 Cloud Shell 的远程环境中设置环境。

如果您是 macOS 用户,我们建议您使用下面的 MACOS 标签设置环境。您可以在 macOS、Linux 和 Windows 系统上使用 CLOUD SHELL 标签上显示的 Cloud Shell。Cloud Shell 提供了一种快速试用 Cloud Machine Learning Engine 的方法,但该方法并不适合正在进行的开发工作。

macOS

  1. 检查 Python 的安装情况
    确认您是否已安装 Python;如果没有,请安装。

    python -V
  2. 检查 pip 的安装情况
    pip 是 Python 的软件包管理器,包含在当前版本的 Python 中。请运行 pip --version 来检查您是否已安装 pip。如果未安装,请参阅如何安装 pip

    您可以使用以下命令升级 pip

    pip install -U pip

    如需了解详情,请参阅 pip 文档

  3. 安装 virtualenv
    virtualenv 是一个用于创建独立 Python 环境的工具。请运行 virtualenv --version 来检查您是否已安装 virtualenv。如果未安装,请安装 virtualenv

    pip install --user --upgrade virtualenv

    要为本指南创建一个独立开发环境,请在 virtualenv 中创建新的虚拟环境。例如,使用以下命令来激活名为 cmle-env 的环境:

    virtualenv cmle-env
    source cmle-env/bin/activate
  4. 在本教程中,请在您的虚拟环境中运行其余命令。

    查看有关如何使用 virtualenv 的详细信息。要退出 virtualenv,请运行 deactivate

Cloud Shell

  1. 打开 Google Cloud Platform Console。

    Google Cloud Platform Console

  2. 点击 Console 窗口顶部的激活 Google Cloud Shell 按钮。

    激活 Google Cloud Shell

    一个 Cloud Shell 会话随即会在 Console 底部的新框内打开,并显示命令行提示符。该 Shell 会话可能需要几秒钟来完成初始化。

    Cloud Shell 会话

    您的 Cloud Shell 会话已就绪,可以使用了。

  3. 配置 gcloud 命令行工具以使用您所选择的项目。

    gcloud config set project [selected-project-id]

    其中,[selected-project-id] 是您的项目 ID。(忽略中括号)。

验证 Google Cloud SDK 组件

要验证是否已安装 Google Cloud SDK 组件,请执行以下操作:

  1. 列出您的模型:

    gcloud ml-engine models list
  2. 如果之前未创建过任何模型,则此命令将返回一个空列表:

    Listed 0 items.

    开始创建模型后,您可以使用此命令查看模型列表。

  3. 如果您之前安装了 gcloud,请更新 gcloud

    gcloud components update

安装 TensorFlow

要安装 TensorFlow,请运行以下命令:

pip install --user --upgrade tensorflow

验证安装:

python -c "import tensorflow as tf; print('TensorFlow version {} is installed.'.format(tf.VERSION))"

您可以忽略 TensorFlow 库未编译为使用特定指示的任何警告。

如需详细了解如何安装 TensorFlow,包括其他安装选项和问题排查信息,请参阅 TensorFlow 文档

Python 版本支持

默认情况下,Cloud ML Engine 运行 Python 2.7,本教程中的示例使用的是 Python 2.7。

如果您使用 Cloud ML Engine 运行时 1.4 或更高版本,则可以使用 Python 3.5 进行训练。无论是使用 Python 2 还是 Python 3 训练模型,在线预测和批量预测都可以使用经过训练的模型。

了解如何使用 Python 3.5 提交训练作业

下载本教程的代码

  1. 从 GitHub 代码库下载示例

macOS

  1. 下载并解压缩 Cloud ML Engine 示例 zip 文件。

    下载 zip 文件

  2. 打开终端窗口,然后转到已提取 cloudml-samples-master 目录所在的目录。

  3. 转到 cloudml-samples-master > census > estimator 目录。本演示中的命令必须从 estimator 目录运行。

    cd cloudml-samples-master/census/estimator
    

Cloud Shell

  1. 输入以下命令,下载 Cloud ML Engine 示例 zip 文件:

    wget https://github.com/GoogleCloudPlatform/cloudml-samples/archive/master.zip
    
  2. 解压缩文件,以提取 cloudml-samples-master 目录。

    unzip master.zip
    
  3. 转到 cloudml-samples-master > census > estimator 目录。本演示中的命令必须从 estimator 目录运行。

    cd cloudml-samples-master/census/estimator
    

在本地开发和验证训练应用

在云端运行训练应用之前,请先在本地运行它。本地环境提供高效的开发和验证工作流,让您可以快速迭代。在本地调试应用时,您也不必为云资源付费。

获取训练数据

相关数据文件 adult.dataadult.test 托管在一个公开的 Cloud Storage 存储分区中。出于此示例的目的,请使用 Cloud Storage 上的版本,这些版本已经过一些简单的清理,而不是原始源数据。有关数据的更多信息,请参见下文。

您可以直接从 Cloud Storage 读取数据文件,也可以将其复制到本地环境。在本示例中,您将下载用于本地训练的示例,然后将其上传到您自己的 Cloud Storage 存储分区中,以便进行云训练。

  1. 将数据下载到本地文件目录中,并设置指向已下载的数据文件的变量。

    mkdir data
    gsutil -m cp gs://cloud-samples-data/ml-engine/census/data/* data/
    
  2. TRAIN_DATAEVAL_DATA 变量设置为本地文件路径。例如,以下命令展示了如何将变量设置为本地路径。

    TRAIN_DATA=$(pwd)/data/adult.data.csv
    EVAL_DATA=$(pwd)/data/adult.test.csv
    

数据以英文逗号分隔值的格式存储,如以下 adult.data 文件预览所示:

39, State-gov, 77516, Bachelors, 13, Never-married, Adm-clerical, Not-in-family, White, Male, 2174, 0, 40, United-States, <=50K
50, Self-emp-not-inc, 83311, Bachelors, 13, Married-civ-spouse, Exec-managerial, Husband, White, Male, 0, 0, 13, United-States, <=50K
38, Private, 215646, HS-grad, 9, Divorced, Handlers-cleaners, Not-in-family, White, Male, 0, 0, 40, United-States, <=50K
53, Private, 234721, 11th, 7, Married-civ-spouse, Handlers-cleaners, Husband, Black, Male, 0, 0, 40, United-States, <=50K
...

安装依赖项

macOS

要在本地安装 TensorFlow,我们推荐使用虚拟环境。了解如何执行以下操作:

如果您熟悉 Docker,则可以在 TensorFlow 容器中完成本教程。了解如何使用 Docker 安装 TensorFlow

该示例提供了一个 requirements.txt 文件,您可以使用该文件来安装项目所需的依赖项。在虚拟环境中,输入以下命令:

  pip install --user -r ../requirements.txt

运行此命令即可安装本教程中使用的 TensorFlow 1.10。

Cloud Shell

虽然 TensorFlow 安装在 Cloud Shell 上,但您必须运行示例的 requirements.txt 文件,以确保使用示例所需的 TensorFlow 版本。

  pip install --user -r ../requirements.txt

运行此命令即可安装本教程中使用的 TensorFlow 1.10。

运行本地训练作业

本地训练作业会加载您的 Python 训练程序,并在类似于实时 Cloud ML Engine 云训练作业的环境中启动训练流程。

  1. 指定输出目录并设置 MODEL_DIR 变量。以下命令展示了如何将 MODEL_DIR 的值设置为 output

    MODEL_DIR=output
    
  2. 如果保留了先前运行的训练的数据,那么最好删除输出目录中的内容。以下命令会删除 output 目录中的所有数据。

    rm -rf $MODEL_DIR/*
    
  3. 要在本地运行训练,请运行以下命令:

    gcloud ml-engine local train \
        --module-name trainer.task \
        --package-path trainer/ \
        --job-dir $MODEL_DIR \
        -- \
        --train-files $TRAIN_DATA \
        --eval-files $EVAL_DATA \
        --train-steps 1000 \
        --eval-steps 100
    

默认情况下,系统会关闭详细日志记录。您可以通过将 --verbosity 标记设置为 DEBUG 来启用详细日志记录。稍后的示例会为您展示如何启用此功能。

使用 Tensorboard 检查摘要日志

要查看评估结果,您可以使用名为 TensorBoard 的虚拟化工具。您可以使用 TensorBoard 来直观呈现 TensorFlow 图表,为您的图表绘制执行情况的量化指标并显示其他数据,例如通过图表传递的图片。Tensorboard 作为 TensorFlow 安装的一部分提供。

按照以下步骤启动 TensorBoard 并将其指向训练期间生成的摘要日志,包括执行期间和执行之后。

macOS

  1. 启动 TensorBoard:

    tensorboard --logdir=$MODEL_DIR
    
  2. 开始运行 TensorBoard 后,您可以在浏览器中输入 http://localhost:6006 以访问 TensorBoard

Cloud Shell

  1. 启动 TensorBoard:

    tensorboard --logdir=$MODEL_DIR --port=8080
    
  2. 从命令行顶部的网络预览菜单中选择“在以下端口上预览:8080”。

点击准确度,通过图形化方式查看随着作业的推进,准确度会如何变化。

Tensorboard 准确率图表

您可以通过在命令行中输入 ctrl+c 随时关闭 TensorBoard。

以分布式模式运行本地训练作业

您可以使用 --distributed 标记运行本地训练作业,测试您的模型是否支持 Cloud ML Engine 的分布式执行环境。

  1. 指定输出目录并再次设置 MODEL_DIR 变量。以下命令展示了如何将 MODEL_DIR 的值设置为 output-dist

    MODEL_DIR=output-dist
    
  2. 如果保留了先前运行的训练的数据,请删除 output 目录的内容。

    rm -rf $MODEL_DIR/*
    
  3. 使用 --distributed 选项运行 local train 命令。请务必将标志置于将用户参数与命令行参数分隔开来的 -- 上方。

    gcloud ml-engine local train \
        --module-name trainer.task \
        --package-path trainer/ \
        --job-dir $MODEL_DIR \
        --distributed \
        -- \
        --train-files $TRAIN_DATA \
        --eval-files $EVAL_DATA \
        --train-steps 1000 \
        --eval-steps 100
    

检查输出

输出文件写入 --job-dir 指定的目录,该参数设置为 output-dist

ls -R output-dist/

您应该会看到如下所示的输出:

checkpoint
eval
events.out.tfevents.1488577094.<host-name>
export
graph.pbtxt
model.ckpt-1000.data-00000-of-00001
model.ckpt-1000.index
model.ckpt-1000.meta
model.ckpt-2.data-00000-of-00001
model.ckpt-2.index
model.ckpt-2.meta

output-dist//eval:
events.out.tfevents.<timestamp>.<host-name>
events.out.tfevents.<timestamp><host-name>
events.out.tfevents.<timestamp>.<host-name>

output-dist//export:
census

output-dist//export/census:
<timestamp>

output-dist//export/census/<timestamp>:
saved_model.pb
variables
...

检查日志

使用 Tensorboard 检查摘要日志的方法与单实例训练作业中采用的方法大体相同,唯一的区别就是要更改 --logdir 值,以匹配用于分布式模式的输出目录名称。

macOS

  1. 启动 TensorBoard:

    tensorboard --logdir=$MODEL_DIR
    
  2. 开始运行 TensorBoard 后,您可以在浏览器中输入 http://localhost:6006 以访问 TensorBoard

Cloud Shell

  1. 启动 TensorBoard:

    tensorboard --logdir=$MODEL_DIR --port=8080
    
  2. 从命令行顶部的网络预览菜单中选择“在以下端口上预览:8080”。

设置 Cloud Storage 存储分区

本部分介绍如何创建新存储分区。您可以使用现有存储分区,但如果现有存储分区不属于您用来运行 Cloud ML Engine 的项目,您必须明确地向 Cloud ML Engine 服务帐号授予访问权限

  1. 为新存储分区指定名称。该名称在 Cloud Storage 的所有存储分区中必须是唯一的。

    BUCKET_NAME="your_bucket_name"

    例如,使用附加了 -mlengine 的项目名称:

    PROJECT_ID=$(gcloud config list project --format "value(core.project)")
    BUCKET_NAME=${PROJECT_ID}-mlengine
  2. 检查您创建的存储分区名称。

    echo $BUCKET_NAME
  3. 为您的存储分区选择一个区域,并设置 REGION 环境变量。

    例如,以下代码会创建 REGION 并将其设置为 us-central1

    REGION=us-central1
  4. 创建新的存储分区:

    gsutil mb -l $REGION gs://$BUCKET_NAME

    注意:使用您计划在其中运行 Cloud ML Engine 作业的同一区域。该示例使用 us-central1,因为这是入门说明中使用的区域。

将数据文件上传到您的 Cloud Storage 存储分区。

  1. 使用 gsutil 将两个文件复制到您的 Cloud Storage 存储分区。

    gsutil cp -r data gs://$BUCKET_NAME/data
    
  2. TRAIN_DATAEVAL_DATA 变量设置为指向这些文件。

    TRAIN_DATA=gs://$BUCKET_NAME/data/adult.data.csv
    EVAL_DATA=gs://$BUCKET_NAME/data/adult.test.csv
    
  3. 再次使用 gsutil 将 JSON 测试文件 test.json 复制到您的 Cloud Storage 存储分区。

    gsutil cp ../test.json gs://$BUCKET_NAME/data/test.json
    
  4. TEST_JSON 变量设置为指向该文件。

    TEST_JSON=gs://$BUCKET_NAME/data/test.json
    

在云端运行单实例训练作业

通过在单实例和分布式模式下运行经过验证的训练作业,您现在可以在云端运行训练作业了。首先,您要请求一个单实例训练作业。

使用默认的 BASIC 扩缩层级来运行单实例训练作业。初始作业请求可能需要几分钟才能开始,但后续作业会运行得更快。这让您可以在开发和验证训练作业时实现快速迭代。

  1. 选择初始训练运行的名称,以与任何后续训练运行区分开。例如,您可以附加一个数字来表示迭代。

    JOB_NAME=census_single_1
    
  2. 设置一个 OUTPUT_PATH 变量,以在请求训练和预测作业时添加此变量,从而为 Cloud ML Engine 生成的输出指定目录。OUTPUT_PATH 表示模型检查点、摘要和导出的完全限定形式的 Cloud Storage 位置。您可以使用在上一步中定义的 BUCKET_NAME 变量。

    建议将作业名称用作输出目录。例如,以下 OUTPUT_PATH 指向名为 census_single_1 的目录。

    OUTPUT_PATH=gs://$BUCKET_NAME/$JOB_NAME
    
  3. 运行以下命令,以在云端提交使用单个进程的训练作业。这次,将 --verbosity 标记设置为 DEBUG,以便您检查完整的日志记录输出并检索准确度、损失和其他指标。输出还包含其他许多警告消息,对于本示例,您可以忽略这些警告。

    gcloud ml-engine jobs submit training $JOB_NAME \
        --job-dir $OUTPUT_PATH \
        --runtime-version 1.10 \
        --module-name trainer.task \
        --package-path trainer/ \
        --region $REGION \
        -- \
        --train-files $TRAIN_DATA \
        --eval-files $EVAL_DATA \
        --train-steps 1000 \
        --eval-steps 100 \
        --verbosity DEBUG
    

要监控训练作业的进度,您可以观察命令行输出,或在 Google Cloud Platform Console 上的 ML Engine > 作业中监控。

检查输出

在云训练中,输出会生成到 Cloud Storage 之中。在此示例中,输出保存到 OUTPUT_PATH 内;请运行以下命令列出这些输出:

gsutil ls -r $OUTPUT_PATH

输出结果应类似于本地训练的输出(见上文)

检查 Stackdriver 日志

日志是一种有用的工具,可以帮助您了解训练代码在云端的行为。在 Cloud ML Engine 运行训练作业时,它会捕获所有 stdoutstderr 流以及日志语句。这些日志存储在 Stackdriver Logging 中;在执行期间和执行后均为可见。

要查找您的作业的对应日志,最简单的方法是在 GCP Console 上的 ML Engine > 作业中选择您的作业,然后点击“查看日志”。

如果选中“所有日志”,则会看到所有工作器的全部日志。您还可以选择某项特定任务;master-replica-0 从主实例的角度提供了作业执行概况。

由于您选择了详细日志记录,因此可以查看完整的日志记录输出。在日志中查找 accuracy 这个词:

ML Engine 作业的 Stackdriver Logging 控制台屏幕截图

如果要在终端中查看这些日志,可以在命令行中执行以下命令:

gcloud ml-engine jobs stream-logs $JOB_NAME

查看 gcloud ml-engine jobs stream-logs 的所有选项。

使用 Tensorboard 检查摘要日志

在执行期间和执行之后,您都可以启动 TensorBoard,并将其指向训练期间生成的摘要日志,从而检查训练作业的行为。

由于训练程序直接将摘要写入 Cloud Storage 位置,因此 Tensorboard 可以自动从中读取内容,而无需手动复制事件文件。

macOS

  1. 启动 TensorBoard:

    tensorboard --logdir=$OUTPUT_PATH
    
  2. 开始运行 TensorBoard 后,您可以在浏览器中输入 http://localhost:6006 以访问 TensorBoard

Cloud Shell

  1. 启动 TensorBoard:

    tensorboard --logdir=$OUTPUT_PATH --port=8080
    
  2. 从命令行顶部的网络预览菜单中选择“在以下端口上预览:8080”。

点击准确度,通过图形化方式查看随着作业的推进,准确度会如何变化。

您可以通过在命令行中输入 ctrl+c 随时关闭 TensorBoard。

在云端运行分布式训练

要在运行训练作业时利用 Google 的可扩展基础架构,请将您的训练作业配置为以分布式模式运行。

无需更改代码即可将此模型作为 Cloud ML Engine 中的分布式进程运行。

要运行分布式作业,请将 --scale-tier 设置为“基本”以上的任何层级。如需详细了解扩缩层级,请参阅调节层级文档

  1. 选择分布式训练作业的名称,以与其他训练作业区分开。例如,您可以使用 dist 来表示分布式作业,使用数字来表示迭代作业。

    JOB_NAME=census_dist_1
    
  2. 指定 OUTPUT_PATH 以添加作业名称,保证您不会无意中为不同作业使用相同的检查点。如果您在上次定义 BUCKET_NAME 之后,启动了新的命令行会话,那么可能必须重新定义此变量。例如,以下 OUTPUT_PATH 指向名为 census-dist-1 的目录。

    OUTPUT_PATH=gs://$BUCKET_NAME/$JOB_NAME
    
  3. 运行以下命令,以在云端提交使用多个工作器的训练作业。请注意,该作业可能需要几分钟才能开始。

    --scale-tier 置于 --(将用户参数与命令行参数分隔开来)上方。例如,以下命令使用扩缩层级 STANDARD_1

    gcloud ml-engine jobs submit training $JOB_NAME \
        --job-dir $OUTPUT_PATH \
        --runtime-version 1.10 \
        --module-name trainer.task \
        --package-path trainer/ \
        --region $REGION \
        --scale-tier STANDARD_1 \
        -- \
        --train-files $TRAIN_DATA \
        --eval-files $EVAL_DATA \
        --train-steps 1000 \
        --verbosity DEBUG  \
        --eval-steps 100
    

您可以通过观察命令行输出,或在 Google Cloud Platform Console 上的 ML Engine > 作业中监控作业的进度。

检查日志

按照与单实例训练作业中相同的方法检查 Stackdriver 日志和摘要日志。

对于 Stackdriver 日志:在 GCP Console 上的 ML Engine > 作业中选择您的作业,然后点击查看日志,或者在您的终端使用以下命令:

gcloud ml-engine jobs stream-logs $JOB_NAME

对于 TensorBoard:

macOS

  1. 启动 TensorBoard:

    tensorboard --logdir=$OUTPUT_PATH
    
  2. 开始运行 TensorBoard 后,您可以在浏览器中输入 http://localhost:6006 以访问 TensorBoard

Cloud Shell

  1. 启动 TensorBoard:

    tensorboard --logdir=$OUTPUT_PATH --port=8080
    
  2. 从命令行顶部的网络预览菜单中选择“在以下端口上预览:8080”。

超参数调节

Cloud ML Engine 支持超参数调整,可以帮助您最大限度提升模型的预测准确率。人口普查示例将超参数配置设置存储在名为 hptuning_config.yaml 的 YAML 文件中,并使用 --config 变量在训练请求中添加该文件。

  1. 选择新作业名称并创建引用配置文件的变量。

    HPTUNING_CONFIG=../hptuning_config.yaml
    JOB_NAME=census_core_hptune_1
    TRAIN_DATA=gs://$BUCKET_NAME/data/adult.data.csv
    EVAL_DATA=gs://$BUCKET_NAME/data/adult.test.csv
    
  2. 指定 OUTPUT_PATH 以添加作业名称,保证您不会无意中为不同作业使用相同的检查点。如果您在上次定义 BUCKET_NAME 之后,启动了新的命令行会话,那么可能必须重新定义此变量。例如,以下 OUTPUT_PATH 指向名为 census_core_hptune_1 的目录。

    OUTPUT_PATH=gs://$BUCKET_NAME/$JOB_NAME
    
  3. 运行以下命令以提交一个训练作业,该训练作业不仅使用多个工作器,还使用超参数调节。

    gcloud ml-engine jobs submit training $JOB_NAME \
        --stream-logs \
        --job-dir $OUTPUT_PATH \
        --runtime-version 1.10 \
        --config $HPTUNING_CONFIG \
        --module-name trainer.task \
        --package-path trainer/ \
        --region $REGION \
        --scale-tier STANDARD_1 \
        -- \
        --train-files $TRAIN_DATA \
        --eval-files $EVAL_DATA \
        --train-steps 1000 \
        --verbosity DEBUG  \
        --eval-steps 100
    

如需详细了解超参数调节,请参阅超参数调节概览

部署模型以支持预测

  1. 选择模型的名称;此名称必须以字母开头,并且只包含字母、数字和下划线。例如:

    MODEL_NAME=census
    
  2. 创建 Cloud ML Engine 模型:

    gcloud ml-engine models create $MODEL_NAME --regions=$REGION
    
  3. 选择要使用的作业输出。以下示例使用名为 census_dist_1 的作业。

    OUTPUT_PATH=gs://$BUCKET_NAME/census_dist_1
    
  4. 查找已导出的训练模型二进制文件的完整路径:

    gsutil ls -r $OUTPUT_PATH/export
    
  5. 找到名为 $OUTPUT_PATH/export/census/<timestamp> 的目录并复制此目录路径(不复制末尾处的 :),并将环境变量 MODEL_BINARIES 设置为该值。例如:

    MODEL_BINARIES=gs://$BUCKET_NAME/census_dist_1/export/census/1487877383942/

    $BUCKET_NAME 是 Cloud Storage 存储分区的名称,census_dist_1 是输出目录。

  6. 运行以下命令以创建版本 v1

    gcloud ml-engine versions create v1 \
        --model $MODEL_NAME \
        --origin $MODEL_BINARIES \
        --runtime-version 1.10
    

您可以使用 models list 命令获取模型列表。

gcloud ml-engine models list

向已部署的模型发送在线预测请求

您现在可以向模型发送预测请求。例如,以下命令使用您作为示例 GitHub 代码库的一部分下载的 test.json 文件,发送在线预测请求。

gcloud ml-engine predict \
    --model $MODEL_NAME \
    --version v1 \
    --json-instances ../test.json

响应包含各标签的概率(>50K<=50K,基于 test.json 中的数据条目),从而指示预测收入是大于还是小于 50000 美元。

响应如下所示:

CLASSES       PROBABILITIES
[u'0', u'1']  [0.9969545602798462, 0.0030454816296696663]

提交批量预测作业

如果您有大量数据,并且在接收预测结果时没有延迟方面的要求,那么批量预测服务非常有用。该服务使用与在线预测相同的格式,但需要将数据存储在 Cloud Storage 中。

  1. 为作业设置名称。

    JOB_NAME=census_prediction_1
    
  2. 设置输出路径。

    OUTPUT_PATH=gs://$BUCKET_NAME/$JOB_NAME
    
  3. 提交预测作业。

    gcloud ml-engine jobs submit prediction $JOB_NAME \
        --model $MODEL_NAME \
        --version v1 \
        --data-format text \
        --region $REGION \
        --input-paths $TEST_JSON \
        --output-path $OUTPUT_PATH/predictions
    

与之前的命令不同,这条命令会立即返回。检查作业的进度,等待它运行完成:

gcloud ml-engine jobs describe $JOB_NAME

在作业完成后(可能需要几分钟时间),您应该会看到 state: SUCCEEDED。您还可以使用以下命令在终端内查看作业日志:

gcloud ml-engine jobs stream-logs $JOB_NAME

或者,您可以在 GCP Console 上的 ML Engine > 作业中检查进度。

作业成功执行后,您可以执行如下操作:

  • 读取输出汇总:

    gsutil cat $OUTPUT_PATH/predictions/prediction.results-00000-of-00001
    

    您应该会看到类似如下所示的输出结果:

    {"probabilities": [0.9962924122810364, 0.003707568161189556], "logits": [-5.593664646148682], "classes": 0, "logistic": [0.003707568161189556]}
    
  • 使用 gsutil ls 命令列出作业生成的其他文件:

    gsutil ls -r $OUTPUT_PATH
    

与在线预测相比,批量预测具有以下特点:

  • 对于这种实例较少的情况,运行速度较慢(但更适合存在大量实例的情况)。
  • 可以按照与输入顺序不同的顺序返回输出结果(但数字索引允许各输出与其对应的输入实例相匹配;而这对于在线预测不是必需的,因为在线预测的输出结果会按照与原始输入实例相同的顺序返回)。

在预测可用之后,下一步通常是将这些预测提取到数据库或数据处理流水线中。

在此示例中,您在运行批量预测之前部署了模型,但在提交批量预测作业时,可以通过指定模型二进制文件 URI 来跳过这个步骤。在部署模型之前通过模型生成预测的一项优势是,您可以评估模型在不同评估数据集上的性能,以帮助您确定模型是否符合部署标准。

清理

如果您已完成对训练和预测运行输出的分析,则我们不会为本指南中所用 Cloud Storage 目录而向您的 GCP 帐号收费:

  1. 打开终端窗口(如果尚未打开)。

  2. 使用带有 -r 标志的 gsutil rm 命令删除您最近的作业所在的目录:

    gsutil rm -r gs://$BUCKET_NAME/$JOB_NAME
    

如果成功,该命令将返回类似于以下内容的消息:

Removing gs://my-awesome-bucket/just-a-folder/cloud-storage.logo.png#1456530077282000...
Removing gs://my-awesome-bucket/...

对于您为此示例创建的任何其他目录,重复该命令。

如果您没有在存储分区存储其他数据,则可以对该存储分区本身运行 gsutil rm -r 命令。

关于数据

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

人口普查数据由 Lichman, M. (2013) 提供。UCI 机器学习库 http://archive.ics.uci.edu/ml。加利福尼亚州欧文市:加州大学信息与计算机科学学院。此数据集公开提供给所有人使用,但需遵循数据集来源提供的以下条款:http://archive.ics.uci.edu/ml。Google“按原样”提供此数据集,不作任何明示或暗示的保证。对于因使用数据集而导致的任何直接或间接损害,Google 不承担任何责任。

后续步骤

使用人口普查数据进行训练和预测的 Cloud ML Engine 示例演示至此结束。您在本地验证了训练作业,在云端以单实例和分布式模式运行了该作业,使用超参数调节改进了模型,还使用该模型进行了在线预测和批量预测。

以下资源可以帮助您继续了解 Cloud ML Engine。

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
适用于 TensorFlow 的 Cloud ML Engine