导出 BigQuery ML 模型以进行在线预测

本教程介绍如何导出 BigQuery ML 模型,然后在 AI Platform 或本地机器上部署该模型。您将使用 BigQuery 公共数据集中的 iris,并完成以下端到端场景:

  • 训练和部署逻辑回归模型 - 也适用于线性回归、k-means 和矩阵分解模型。

费用

本教程使用 Google Cloud 的计费组件,包括:

  • BigQuery ML
  • Cloud Storage
  • AI Platform(可选,用于在线预测)

如需详细了解 BigQuery ML 费用,请参阅 BigQuery ML 价格页面。

如需详细了解 Cloud Storage 费用,请参阅 Cloud Storage 价格页面。

如需详细了解 AI Platform 费用,请参阅预测节点和资源分配页面。

准备工作

  1. 登录您的 Google 帐号。

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

  2. 在 Cloud Console 的项目选择器页面上,选择或创建 Cloud 项目。

    转到项目选择器页面

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

  4. 新项目会自动启用 BigQuery。如需在现有项目中激活 BigQuery,请转到 启用 BigQuery API。

    启用 API

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

    启用 API

  6. 安装 Google Cloud SDKgcloud 命令行工具

创建数据集

第一步是创建 BigQuery 数据集用于存储您的机器学习模型。要创建数据集,请执行以下操作:

  1. 在 Google Cloud Console 中,转到 BigQuery 网页界面。

    转到 BigQuery 网页界面

  2. 在导航面板的资源部分,点击您的项目名称。

  3. 在右侧的详细信息面板中,点击创建数据集

    创建数据集。

  4. 创建数据集页面中执行以下操作:

    • 数据集 ID 部分,输入 bqml_tutorial
    • 选择美国 (US) 作为数据位置。目前,公共数据集存储在 US 多区域位置。为简单起见,请将数据集放在同一位置。

      创建数据集页面。

  5. 保留其他所有默认设置不变,然后点击创建数据集

训练和部署逻辑回归模型

训练模型

使用 BigQuery ML CREATE MODEL语句训练一个预测鸢尾花类型的逻辑回归模型。此训练作业大约需要 1 分钟才能完成。

bq query --use_legacy_sql=false \
  'CREATE MODEL `bqml_tutorial.iris_model`
  OPTIONS (model_type="logistic_reg",
      max_iterations=10, input_label_cols=["species"])
  AS SELECT
    *
  FROM
    `bigquery-public-data.ml_datasets.iris`;'

导出模型。

使用 bq 命令行工具将模型导出到 Cloud Storage 存储分区。如需了解导出模型的其他方法,请参阅导出 BigQuery ML 模型。此提取作业应在 1 分钟内完成。

bq extract -m bqml_tutorial.iris_model gs://some/gcs/path/iris_model

本地部署和服务

您可以使用 TensorFlow Serving Docker 容器部署导出的 TensorFlow 模型。以下步骤要求您安装 Docker

将导出的模型文件下载到临时目录

mkdir tmp_dir
gsutil cp -r gs://some/gcs/path/iris_model tmp_dir

创建版本子目录

此步骤为模型设置版本号(在本例中为 1)。

mkdir -p serving_dir/iris_model/1
cp -r tmp_dir/iris_model/* serving_dir/iris_model/1
rm -r tmp_dir

拉取 Docker 映像

docker pull tensorflow/serving

运行 Docker 容器

docker run -p 8500:8500 --network="host" --mount type=bind,source=`pwd`/serving_dir/iris_model,target=/models/iris_model -e MODEL_NAME=iris_model -t tensorflow/serving &

运行预测

curl -d '{"instances": [{"sepal_length":5.0, "sepal_width":2.0, "petal_length":3.5, "petal_width":1.0}]}' -X POST http://localhost:8501/v1/models/iris_model:predict

在线部署和服务

本部分使用 gcloud 命令行工具针对导出的模型部署和运行预测。

如需详细了解如何将模型部署到 AI Platform 以进行在线/批量预测,请参阅部署模型

创建模型资源

MODEL_NAME="IRIS_MODEL"
gcloud ai-platform models create $MODEL_NAME

创建模型版本

1) 设置环境变量

MODEL_DIR="gs://some/gcs/path/iris_model"
// Select a suitable version for this model
VERSION_NAME="v1"
FRAMEWORK="TENSORFLOW"

2) 创建版本

gcloud ai-platform versions create $VERSION_NAME --model=$MODEL_NAME --origin=$MODEL_DIR --runtime-version=1.15 --framework=$FRAMEWORK

此步骤可能需要几分钟才能完成。您应该会看到如下消息:Creating version (this might take a few minutes)......

3)(可选)获取有关新版本的信息

gcloud ai-platform versions describe $VERSION_NAME --model $MODEL_NAME

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

createTime: '2020-02-28T16:30:45Z'
deploymentUri: gs://your_bucket_name
framework: TENSORFLOW
machineType: mls1-c1-m2
name: projects/[YOUR-PROJECT-ID]/models/IRIS_MODEL/versions/v1
pythonVersion: '2.7'
runtimeVersion: '1.15'
state: READY

在线预测

如需详细了解如何对已部署的模型运行在线预测,请访问 https://cloud.google.com/ai-platform/prediction/docs/online-predict#requesting_predictions

1) 为输入创建以换行符分隔的 JSON 文件,例如 instances.json 文件,其中包含以下内容

{"sepal_length":5.0, "sepal_width":2.0, "petal_length":3.5, "petal_width":1.0}
{"sepal_length":5.3, "sepal_width":3.7, "petal_length":1.5, "petal_width":0.2}

2) 设置用于预测的环境变量

INPUT_DATA_FILE="instances.json"

3) 运行预测

gcloud ai-platform predict --model $MODEL_NAME --version $VERSION_NAME --json-instances $INPUT_DATA_FILE

清理

为避免因本教程中使用的资源而导致我们向您的 Google Cloud Platform 帐号收取费用,您可以执行以下操作:

  • 您可以删除自己创建的项目。
  • 或者,您可以保留项目并删除数据集和 Cloud Storage 存储分区。

停止 Docker 容器

1) 列出所有正在运行的 Docker 容器。

docker ps

2) 停止容器列表中具有适当容器 ID 的容器。

docker stop container_id

删除 AI Platform 资源

1) 删除模型版本。

gcloud ai-platform versions delete $VERSION_NAME --model=$MODEL_NAME

2) 删除模型。

gcloud ai-platform models delete $MODEL_NAME

删除数据集

删除项目也将删除项目中的所有数据集和所有表。如果您希望重复使用该项目,则可以删除在本教程中创建的数据集:

  1. 如有必要,请打开 BigQuery 网页界面。

    转到 BigQuery 网页界面

  2. 在导航窗格中,点击您创建的 bqml_tutorial 数据集。

  3. 点击窗口右侧的删除数据集。此操作会删除相关数据集、表和所有数据。

  4. 删除数据集对话框中,输入您的数据集的名称 (bqml_tutorial),然后点击删除以确认删除命令。

删除您的 Cloud Storage 存储分区

删除项目将移除项目中的所有 Cloud Storage 存储分区。如果您希望重复使用该项目,则可以删除在本教程中创建的存储分区。

  1. 在 Google Cloud Console 中打开 Cloud Storage 浏览器。
    打开 Cloud Storage 浏览器
  2. 选中与要删除的存储分区对应的复选框。

  3. 点击删除

  4. 在出现的叠加窗口中,点击删除以确认要删除此存储分区及其内容。

删除项目

如需删除项目,请执行以下操作:

  1. 在 Cloud Console 中,转到管理资源页面。

    转到“管理资源”页面

  2. 在项目列表中,选择要删除的项目,然后点击删除
  3. 在对话框中输入项目 ID,然后点击关闭以删除项目。

后续步骤