本教程介绍如何导出 BigQuery ML 模型,然后在 AI Platform 或本地机器上部署该模型。您将使用 BigQuery 公共数据集中的 iris
表,并完成以下三个端到端场景:
- 训练和部署逻辑回归模型 - 也适用于 DNN 分类器、DNN 回归器、k-means、线性回归和矩阵分解模型。
- 训练和部署提升树分类器模型 - 也适用于提升树回归器模型。
- 训练和部署 AutoML 分类器模型 - 也适用于 AutoML 回归器模型。
费用
本教程使用 Google Cloud 的计费组件,包括:
- BigQuery ML
- Cloud Storage
- AI Platform(可选,用于在线预测)
如需详细了解 BigQuery ML 费用,请参阅 BigQuery ML 价格。
如需详细了解 Cloud Storage 费用,请参阅 Cloud Storage 价格页面。
如需详细了解 AI Platform 费用,请参阅预测节点和资源分配页面。
准备工作
- 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.
-
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.
- 新项目会自动启用 BigQuery。如需在现有项目中激活 BigQuery,请前往
Enable the BigQuery API.
-
Enable the AI Platform Training and Prediction API and Compute Engine APIs.
- 安装 Google Cloud CLI 和 Google Cloud CLI。
创建数据集
创建 BigQuery 数据集以存储您的机器学习模型:
在 Google Cloud 控制台中,转到 BigQuery 页面。
在探索器窗格中,点击您的项目名称。
点击
查看操作 > 创建数据集。在创建数据集页面上,执行以下操作:
在数据集 ID 部分,输入
bqml_tutorial
。在位置类型部分,选择多区域,然后选择 US (multiple regions in United States)(美国[美国的多个区域])。
公共数据集存储在
US
多区域中。为简单起见,请将数据集存储在同一位置。保持其余默认设置不变,然后点击创建数据集。
训练和部署逻辑回归模型
训练模型
使用 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
gcloud storage cp gs://some/gcs/path/iris_model tmp_dir --recursive
创建版本子目录
此步骤为模型设置版本号(在本例中为 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
在线部署和服务
本部分使用 Google Cloud CLI 针对导出的模型进行部署并运行预测。
如需详细了解如何将模型部署到 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
在线预测
如需详细了解如何对已部署的模型运行在线预测,请参阅请求预测。
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
训练和部署提升树分类器模型
训练模型
使用 CREATE MODEL
语句训练一个预测鸢尾花类型的提升树分类器模型。此训练作业大约需要 7 分钟才能完成。
bq query --use_legacy_sql=false \ 'CREATE MODEL `bqml_tutorial.boosted_tree_iris_model` OPTIONS (model_type="boosted_tree_classifier", max_iterations=10, input_label_cols=["species"]) AS SELECT * FROM `bigquery-public-data.ml_datasets.iris`;'
导出模型
使用 bq 命令行工具将模型导出到 Cloud Storage 存储桶。如需了解导出模型的其他方法,请参阅导出 BigQuery ML 模型。
bq extract --destination_format ML_XGBOOST_BOOSTER -m bqml_tutorial.boosted_tree_iris_model gs://some/gcs/path/boosted_tree_iris_model
本地部署和服务
在导出的文件中,有一个用于本地运行的 main.py
文件。
将导出的模型文件下载到本地目录
mkdir serving_dir
gcloud storage cp gs://some/gcs/path/boosted_tree_iris_model serving_dir --recursive
提取预测器
tar -xvf serving_dir/boosted_tree_iris_model/xgboost_predictor-0.1.tar.gz -C serving_dir/boosted_tree_iris_model/
安装 XGBoost 库
安装 XGBoost 库 - 0.82 或更高版本。
运行预测
cd serving_dir/boosted_tree_iris_model/
python main.py '[{"sepal_length":5.0, "sepal_width":2.0, "petal_length":3.5, "petal_width":1.0}]'
在线部署和服务
本部分使用 Google Cloud CLI 针对 AI Platform 在线预测中的导出模型部署并运行预测。
如需详细了解如何使用自定义例程将模型部署到 AI Platform 以进行在线/批量预测,请参阅部署模型。
创建模型资源
MODEL_NAME="BOOSTED_TREE_IRIS_MODEL"
gcloud ai-platform models create $MODEL_NAME
创建模型版本
1) 设置环境变量:
MODEL_DIR="gs://some/gcs/path/boosted_tree_iris_model"
VERSION_NAME="v1"
2) 创建版本:
gcloud beta ai-platform versions create $VERSION_NAME --model=$MODEL_NAME --origin=$MODEL_DIR --package-uris=${MODEL_DIR}/xgboost_predictor-0.1.tar.gz --prediction-class=predictor.Predictor --runtime-version=1.15
此步骤可能需要几分钟才能完成。您应该会看到如下消息:Creating version (this might take a few minutes)......
。
3)(可选)获取有关新版本的信息
gcloud ai-platform versions describe $VERSION_NAME --model $MODEL_NAME
您应该会看到如下所示的输出:
createTime: '2020-02-07T00:35:42Z'
deploymentUri: gs://some/gcs/path/boosted_tree_iris_model
etag: rp090ebEnQk=
machineType: mls1-c1-m2
name: projects/[YOUR-PROJECT-ID]/models/BOOSTED_TREE_IRIS_MODEL/versions/v1
packageUris:
- gs://some/gcs/path/boosted_tree_iris_model/xgboost_predictor-0.1.tar.gz
predictionClass: predictor.Predictor
pythonVersion: '2.7'
runtimeVersion: '1.15'
state: READY
在线预测
如需详细了解如何对已部署的模型运行在线预测,请参阅请求预测。
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
训练和部署 AutoML 分类器模型
训练模型
使用 CREATE MODEL
语句训练一个预测鸢尾花类型的 AutoML 分类器模型。AutoML 模型至少需要 1,000 行输入数据。由于 ml_datasets.iris
只有 150 行,因此我们将数据复制 10 次。此训练作业大约需要 2 小时才能完成。
bq query --use_legacy_sql=false \ 'CREATE MODEL `bqml_tutorial.automl_iris_model` OPTIONS (model_type="automl_classifier", budget_hours=1, input_label_cols=["species"]) AS SELECT * EXCEPT(multiplier) FROM `bigquery-public-data.ml_datasets.iris`, unnest(GENERATE_ARRAY(1, 10)) as multiplier;'
导出模型
使用 bq 命令行工具将模型导出到 Cloud Storage 存储桶。如需了解导出模型的额外方法,请参阅导出 BigQuery ML 模型。
bq extract -m bqml_tutorial.automl_iris_model gs://some/gcs/path/automl_iris_model
本地部署和服务
如需详细了解如何构建 AutoML 容器,请参阅导出模型。以下步骤要求您安装 Docker。
将导出的模型文件复制到本地目录
mkdir automl_serving_dir
gcloud storage cp gs://some/gcs/path/automl_iris_model/* automl_serving_dir/ --recursive
拉取 AutoML Docker 映像
docker pull gcr.io/cloud-automl-tables-public/model_server
启动 Docker 容器
docker run -v `pwd`/automl_serving_dir:/models/default/0000001 -p 8080:8080 -it gcr.io/cloud-automl-tables-public/model_server
运行预测
1) 为输入创建以换行符分隔的 JSON 文件,例如 input.json
文件,其中包含以下内容:
{"instances": [{"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) 进行预测调用:
curl -X POST --data @input.json http://localhost:8080/predict
在线部署和服务
AI Platform 不支持 AutoML 回归器和 AutoML 分类器模型的在线预测。
清理
为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。
- 删除您在教程中创建的项目。
- 或者,您可以保留项目并删除数据集和 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
删除数据集
删除项目也将删除项目中的所有数据集和所有表。如果您希望重复使用该项目,则可以删除在本教程中创建的数据集:
如有必要,请在 Google Cloud 控制台中打开 BigQuery 页面。
在导航窗格中,点击您创建的 bqml_tutorial 数据集。
点击窗口右侧的删除数据集。此操作会删除相关数据集、表和所有数据。
在删除数据集对话框中,输入您的数据集的名称 (
bqml_tutorial
),然后点击删除以确认删除命令。
删除您的 Cloud Storage 存储桶
删除项目将移除项目中的所有 Cloud Storage 存储桶。如果您希望重复使用该项目,则可以删除在本教程中创建的存储桶。
- 在 Google Cloud 控制台中,转到 Cloud Storage 存储桶页面。
选中与要删除的存储桶对应的复选框。
点击删除。
在出现的叠加窗口中,点击删除以确认要删除此存储桶及其内容。
删除项目
要删除项目,请执行以下操作:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
后续步骤
- 如需大致了解 BigQuery ML,请参阅 BigQuery ML 简介。
- 如需了解如何导出模型,请参阅导出模型。
- 如需了解如何创建模型,请参阅
CREATE MODEL
语法页面。