本页面介绍了如何将模型部署到 AI Platform Prediction 以获取预测结果。
如需在 AI Platform Prediction 中部署经过训练的模型,您必须先执行以下操作:
- 将已保存的模型上传到 Cloud Storage 存储桶。
- 创建 AI Platform Prediction 模型资源。
- 创建 AI Platform Prediction 版本资源,指定指向已保存的模型的 Cloud Storage 路径。
准备工作
训练您的机器学习模型,并按照导出预测模型指南创建可部署到 AI Platform Prediction 的模型工件。
将模型存储在 Cloud Storage 中
通常情况下,最简单的方法是使用 AI Platform Prediction 所用的项目中的专用 Cloud Storage 存储桶。
如果您使用的是其他项目中的存储桶,则必须确保您的 AI Platform Prediction 服务账号可以访问 Cloud Storage 中的模型。如果没有适当的权限,创建 AI Platform Prediction 模型版本的请求将失败。请详细了解如何授予访问存储空间的权限。
设置 Cloud Storage 存储桶
本部分介绍如何创建新存储桶。您可以使用现有存储桶,但它所在区域必须与您计划运行 AI Platform 作业的区域相同。此外,如果该存储桶不属于您用于运行 AI Platform Prediction 的项目,则您必须明确向 AI Platform Prediction 服务账号授予访问权限。
-
为新存储桶指定名称。该名称在 Cloud Storage 的所有存储桶中必须是唯一的。
BUCKET_NAME="YOUR_BUCKET_NAME"
例如,使用附加了
-aiplatform
的项目名称:PROJECT_ID=$(gcloud config list project --format "value(core.project)") BUCKET_NAME=${PROJECT_ID}-aiplatform
-
检查您创建的存储桶名称。
echo $BUCKET_NAME
-
为您的存储桶选择一个区域,并设置
REGION
环境变量。使用您计划在其中运行 AI Platform Prediction 作业的区域。查看 AI Platform Prediction 服务的可用区域。
例如,以下代码会创建
REGION
并将其设置为us-central1
:REGION=us-central1
-
创建新的存储桶:
gcloud storage buckets create gs://$BUCKET_NAME --location=$REGION
将导出的模型上传到 Cloud Storage
以下示例展示了如何将不同类型的模型工件上传到 Cloud Storage 中的模型目录:
TensorFlow SavedModel
SAVED_MODEL_DIR=$(ls ./YOUR_EXPORT_DIR_BASE | tail -1)
gcloud storage cp $SAVED_MODEL_DIR gs://YOUR_BUCKET --recursive
从 tf.keras
或从 TensorFlow Estimator 中导出 SavedModel 后,SavedModel 会被另存为您选择的带时间戳的基本导出目录子目录,例如 YOUR_EXPORT_DIR_BASE/1487877383942
。此示例展示了如何上传带最近时间戳的目录。
如果您采用其他方式创建了 SavedModel,它可能位于本地文件系统中的其他位置。
scikit-learn 或 XGBoost 模型文件
根据您导出训练模型的方式,您可以上传 model.joblib
、model.pkl
或 model.bst
文件。
以下示例展示了如何上传 sklearn.externals.joblib
导出的文件:
gcloud storage cp ./model.joblib gs://YOUR_BUCKET/model.joblib
以下示例展示了如何上传 Python 的 pickle
模块导出的文件:
gcloud storage cp ./model.pkl gs://YOUR_BUCKET/model.pkl
以下示例展示了如何上传 xgboost.Booster
的 save_model
方法导出的文件:
gcloud storage cp ./model.bst gs://YOUR_BUCKET/model.bst
如果您要部署自定义预测例程(测试版),请将任何其他模型工件也上传到模型目录中。
如果您使用旧版 (MLS1) 机器类型,则模型目录内文件的总大小不能超过 500 MB,如果您使用 Compute Engine (N1) 机器类型,则总大小不能超过 10 GB。详细了解用于在线预测的机器类型。
在创建模型的后续版本时,您可以将每个版本放入 Cloud Storage 存储桶内的单独目录,通过这样的方式来组织它们。
上传自定义代码
如果您要部署具有自定义代码的 scikit-learn 流水线或自定义预测例程,还必须上传包含自定义代码的源代码分发软件包。例如:
gcloud storage cp dist/my_custom_code-0.1.tar.gz gs://YOUR_BUCKET/my_custom_code-0.1.tar.gz
您可以将此 tar 压缩文件上传到 Cloud Storage 中与模型文件相同的目录,但不一定非要这么做。实际上,将它们分开可以更好地进行组织,尤其是在您部署多个模型和代码版本的情况下。
使用本地预测测试模型
在将模型部署到 AI Platform Prediction 之前,您可以使用 gcloud ai-platform local predict
命令测试模型如何提供预测服务。该命令使用本地环境中的依赖项执行预测,并以 gcloud ai-platform predict
在执行在线预测时使用的同一格式返回结果。在本地测试预测有助于在产生在线预测请求费用之前发现错误。
对于 --model-dir
参数,请指定本地机器或 Cloud Storage 中包含导出的机器学习模型的目录。对于 --framework
参数,请指定 tensorflow
、scikit-learn
或 xgboost
。您不能将 gcloud ai-platform local predict
命令与自定义预测例程搭配使用。
以下示例展示了如何执行本地预测:
gcloud ai-platform local predict --model-dir LOCAL_OR_CLOUD_STORAGE_PATH_TO_MODEL_DIRECTORY/ \
--json-instances LOCAL_PATH_TO_PREDICTION_INPUT.JSON \
--framework NAME_OF_FRAMEWORK
部署模型和版本
AI Platform Prediction 使用模型和版本资源来组织经过训练的模型。AI Platform Prediction 模型是存放机器学习模型版本的容器。
如需部署模型,请在 AI Platform Prediction 中创建模型资源,创建该模型的版本,然后将模型版本关联到存储在 Cloud Storage 中的模型文件。
创建模型资源
AI Platform Prediction 使用模型资源来组织模型的不同版本。
此时,您必须确定希望属于此模型的模型版本使用区域端点还是全球端点。在大多数情况下,建议选择区域端点。如果您需要仅旧版 (MLS1) 机器类型才提供的功能,请使用全球端点。
此时,您还必须确定,是否希望属于该模型的模型版本在提供预测时导出任何日志。以下示例不启用日志记录。了解如何启用日志记录。
控制台
gcloud
区域端点
运行以下命令:
gcloud ai-platform models create MODEL_NAME \
--region=REGION
替换以下内容:
- MODEL_NAME:您为模型选择的名称。
- REGION:您希望在其中运行预测节点的区域端点的区域。它必须是支持 Compute Engine (N1) 机器类型的区域。
如果您没有指定 --region
标志,则 gcloud CLI 会提示您选择一个区域端点(或在全球端点上使用 us-central
)。
或者,您可以将 ai_platform/region
属性设置为特定区域,以确保 gcloud CLI 始终为 AI Platform Prediction 使用相应的区域端点,即使您未指定 --region
标志也是如此。(此配置不适用于 gcloud ai-platform operations
命令组中的命令。)
全球端点
运行以下命令:
gcloud ai-platform models create MODEL_NAME \
--regions=REGION
替换以下内容:
- MODEL_NAME:您为模型选择的名称。
- REGION:您希望在其中运行预测节点的全球端点上的区域。它必须是支持旧版 (MLS1) 机器类型的区域。
如果您没有指定 --regions
标志,则 gcloud CLI 会提示您选择一个区域端点(或在全球端点上使用 us-central1
)。
REST API
区域端点
通过将模型对象放在请求正文中来设置请求的格式。至少,通过替换以下示例中的 MODEL_NAME,为模型指定一个名称:
{ "name": "MODEL_NAME" }
针对以下网址进行 REST API 调用,并将 PROJECT_ID 替换为您的 Google Cloud 项目 ID:
POST https://REGION-ml.googleapis.com/v1/projects/PROJECT_ID/models/
替换以下内容:
REGION:要在其中部署模型的区域端点的区域。它必须是支持 Compute Engine (N1) 机器类型的区域。
PROJECT_ID:您的 Google Cloud 项目 ID。
例如,您可以使用
curl
命令发出以下请求。该命令使用与您的 Google Cloud CLI 安装关联的凭据向请求授权。curl -X POST -H "Content-Type: application/json" \ -d '{"name": "MODEL_NAME"}' \ -H "Authorization: Bearer `gcloud auth print-access-token`" \ "https://REGION-ml.googleapis.com/v1/projects/PROJECT_ID/models"
API 会返回类似于如下所示的响应:
{ "name": "projects/PROJECT_ID/models/MODEL_NAME", "regions": [ "REGION" ] }
全球端点
通过将模型对象放在请求正文中来设置请求的格式。至少,通过替换以下示例中的 MODEL_NAME,为模型指定一个名称,并通过将 REGION 替换为支持旧版 (MLS1) 机器类型的区域来指定区域:
{ "name": "MODEL_NAME", "regions": ["REGION"] }
针对以下网址进行 REST API 调用,并将 PROJECT_ID 替换为您的 Google Cloud 项目 ID:
POST https://ml.googleapis.com/v1/projects/PROJECT_ID/models/
例如,您可以使用
curl
命令发出以下请求。该命令使用与您的 Google Cloud CLI 安装关联的凭据向请求授权。curl -X POST -H "Content-Type: application/json" \ -d '{"name": "MODEL_NAME", "regions": ["REGION"]}' \ -H "Authorization: Bearer `gcloud auth print-access-token`" \ "https://ml.googleapis.com/v1/projects/PROJECT_ID/models"
API 会返回类似于如下所示的响应:
{ "name": "projects/PROJECT_ID/models/MODEL_NAME", "regions": [ "REGION" ] }
如需了解详情,请参阅 AI Platform Prediction 模型 API。
创建模型版本
现在,您就可以使用先前上传到 Cloud Storage 且经过训练的模型来创建模型版本了。创建版本时,您可以指定多个参数。以下列表介绍了一些常见参数,其中一些是必需的参数:
name
:在 AI Platform Prediction 模型中必须是唯一的。deploymentUri
:Cloud Storage 中模型目录的路径。- 如果您要部署 TensorFlow 模型,则此参数是 SavedModel 目录。
- 如果您要部署 scikit-learn 或 XGBoost 模型,则此参数是包含
model.joblib
、model.pkl
或model.bst
文件的目录。 - 如果您要部署自定义预测例程,则此参数是包含所有模型工件的目录。此目录的总大小不能超过 500 MB。
framework
:TENSORFLOW
、SCIKIT_LEARN
或XGBOOST
。如果您要部署自定义预测例程,请省略此参数。runtimeVersion
:基于模型所需依赖项的运行时版本。如果您要部署 scikit-learn 模型、XGBoost 模型或自定义预测例程,则此参数必须至少为 1.4。如果您计划将模型版本用于批量预测,则必须使用运行时版本 2.1 或更早版本。packageUris
(可选):Cloud Storage 中自定义代码分发软件包(.tar.gz
文件)的路径列表。只有在您要部署具有自定义代码的 scikit-learn 流水线(测试版)或自定义预测例程(测试版)时,才应提供此参数。predictionClass
(可选):Predictor 类的名称,采用module_name.class_name
格式。只有在您要部署自定义预测例程(测试版)时,才应提供此参数。serviceAccount
(可选):您可以为模型版本指定服务账号,以便在执行预测期间访问 Google Cloud 资源时使用。详细了解如何指定服务账号。只有在您使用自定义容器或自定义预测例程时,才应提供此参数。pythonVersion
:必须设置为“3.5”(对于运行时版本 1.4 到 1.14)或“3.7”(对于运行时版本 1.15 及更高版本),才能与使用 Python 3 导出的模型文件兼容。如果与运行时版本 1.15 或更早版本配合使用,也可设置为“2.7”。machineType
(可选):AI Platform Prediction 用于提供预测服务的节点的虚拟机类型。详细了解机器类型。如果未设置,则默认为在区域端点上使用n1-standard-2
以及在全球端点上使用mls1-c1-m2
。
如需详细了解上述每个参数以及其他不常见的参数,请参阅版本资源的 API 参考文档。
此外,如果您在区域端点上创建了模型,请务必在同一区域端点上创建版本。
控制台
打开 Google Cloud 控制台中的 AI Platform Prediction 模型页面:
在模型页面上,选择要用于创建版本的模型资源的名称。您随即会进入模型详情页面。
点击模型详情页面顶部的新建版本按钮。您随即会进入创建版本页面。
在名称字段中输入您的版本名称。(可选)在说明字段中,输入版本的说明。
在相应的下拉框中输入有关您如何训练模型的以下信息:
- 选择您用于训练模型的 Python 版本。
- 选择框架和框架版本。如果您要部署自定义预测例程(测试版),请为框架选择“自定义预测例程(测试版)”。
- 选择机器学习运行时版本。详细了解 AI Platform Prediction 运行时版本。
选择要运行在线预测的机器类型。
在模型 URI 字段中,输入您上传模型文件时使用的 Cloud Storage 存储桶位置。您可以使用浏览按钮查找正确的路径。
请确保指定的路径指向包含该文件的目录,而非指向模型文件本身。例如,使用
gs://your_bucket_name/model-dir/
,而不是gs://your_bucket_name/model-dir/saved_model.pb
或gs://your_bucket_name/model-dir/model.pkl
。如果您要部署具有自定义代码的 scikit-learn 流水线(测试版)或自定义预测例程(测试版),请在自定义代码和依赖项下提供所有自定义代码软件包 (
.tar.gz
) 的 Cloud Storage 路径。如果您要部署自定义预测例程,请在预测类字段中输入 Predictor 类的名称。选择用于在线预测部署的扩缩选项:
如果选择“自动扩缩”,则系统会显示可选的节点数下限字段。您可以输入当服务规模缩减时应始终保持运行的最小节点数。
如果选择“手动扩缩”,则必须输入您希望始终保持运行的节点数。
如需了解详情,请参阅预测费用的价格。
点击保存即可完成模型版本的创建。
gcloud
设置环境变量,以存储模型二进制文件所在的 Cloud Storage 目录的路径、模型名称、版本名称和框架选项。
使用 gcloud CLI 创建版本时,您可以提供带下划线的大写字母框架名称(例如
SCIKIT_LEARN
)或带连字符的小写字母框架名称(例如scikit-learn
)。这两种方式具有相同的效果。将
[VALUES_IN_BRACKETS]
替换为适当的值:MODEL_DIR="gs://your_bucket_name/" VERSION_NAME="[YOUR-VERSION-NAME]" MODEL_NAME="[YOUR-MODEL-NAME]" FRAMEWORK="[YOUR-FRAMEWORK_NAME]"
对于具有自定义代码的 scikit-learn 流水线(Beta 版),请使用自定义代码 tar 压缩文件的路径设置其他变量:
MODEL_DIR="gs://your_bucket_name/" VERSION_NAME="[YOUR-VERSION-NAME]" MODEL_NAME="[YOUR-MODEL-NAME]" FRAMEWORK="scikit-learn" CUSTOM_CODE_PATH="gs://your_bucket_name/my_custom_code-0.1.tar.gz"
对于自定义预测例程(Beta 版),请省略
FRAMEWORK
变量并使用自定义代码 tar 压缩文件的路径和 Predictor 类的名称设置其他变量:MODEL_DIR="gs://your_bucket_name/" VERSION_NAME="[YOUR-VERSION-NAME]" MODEL_NAME="[YOUR-MODEL-NAME]" CUSTOM_CODE_PATH="gs://your_bucket_name/my_custom_code-0.1.tar.gz" PREDICTOR_CLASS="[MODULE_NAME].[CLASS_NAME]"
创建版本:
gcloud ai-platform versions create $VERSION_NAME \ --model=$MODEL_NAME \ --origin=$MODEL_DIR \ --runtime-version=2.11 \ --framework=$FRAMEWORK \ --python-version=3.7 \ --region=REGION \ --machine-type=MACHINE_TYPE
替换以下内容:
对于具有自定义代码的 scikit-learn 流水线(Beta 版),请使用
gcloud beta
组件并务必设置--package-uris
标志。要部署自定义代码,您的模型必须使用全球端点。gcloud components install beta gcloud beta ai-platform versions create $VERSION_NAME \ --model=$MODEL_NAME \ --origin=$MODEL_DIR \ --runtime-version=2.11 \ --framework=$FRAMEWORK \ --python-version=3.7 \ --machine-type=mls1-c1-m2 \ --package-uris=$CUSTOM_CODE_PATH
对于自定义预测例程(Beta 版),请使用
gcloud beta
组件,省略--framework
标志并设置--package-uris
和--prediction-class
标志。要部署自定义代码,您的模型必须使用全球端点。gcloud components install beta gcloud beta ai-platform versions create $VERSION_NAME \ --model=$MODEL_NAME \ --origin=$MODEL_DIR \ --runtime-version=2.11 \ --python-version=3.7 \ --machine-type=mls1-c1-m2 \ --package-uris=$CUSTOM_CODE_PATH \ --prediction-class=$PREDICTOR_CLASS
创建版本需要几分钟时间。完成后,您应该会看到以下输出:
Creating version (this might take a few minutes)......done.
获取有关新版本的信息:
gcloud ai-platform versions describe $VERSION_NAME \ --model=$MODEL_NAME
您应该会看到如下所示的输出:
createTime: '2018-02-28T16:30:45Z' deploymentUri: gs://your_bucket_name framework: [YOUR-FRAMEWORK-NAME] machineType: mls1-c1-m2 name: projects/[YOUR-PROJECT-ID]/models/[YOUR-MODEL-NAME]/versions/[YOUR-VERSION-NAME] pythonVersion: '3.7' runtimeVersion: '2.11' state: READY
REST API
设置请求正文的格式,使其包含版本对象。以下示例指定了版本
name
、deploymentUri
、runtimeVersion
、framework
和machineType
。将[VALUES_IN_BRACKETS]
替换为适当的值:{ "name": "[YOUR-VERSION-NAME]", "deploymentUri": "gs://your_bucket_name/", "runtimeVersion": "2.11", "framework": "[YOUR_FRAMEWORK_NAME]", "pythonVersion": "3.7", "machineType": "[YOUR_MACHINE_TYPE]" }
针对以下路径进行 REST API 调用,将
[VALUES_IN_BRACKETS]
替换为适当的值:POST https://REGION-ml.googleapis.com/v1/projects/[YOUR-PROJECT-ID]/models/[YOUR-MODEL-NAME]/versions
将 REGION 替换为您在其上创建了模型的区域端点的区域。如果您是在全球端点上创建的模型,请使用
ml.googleapis.com
。例如,您可以使用
curl
命令发出以下请求:curl -X POST -H "Content-Type: application/json" \ -d '{"name": "[YOUR-VERSION-NAME]", "deploymentUri": "gs://your_bucket_name/", "runtimeVersion": "2.11", "framework": "[YOUR_FRAMEWORK_NAME]", "pythonVersion": "3.7", "machineType": "[YOUR_MACHINE_TYPE]"}' \ -H "Authorization: Bearer `gcloud auth print-access-token`" \ "https://REGION-ml.googleapis.com/v1/projects/[YOUR-PROJECT-ID]/models/[YOUR-MODEL-NAME]/versions"
创建版本需要几分钟时间。完成后,您应该会看到类似如下所示的输出:
{ "name": "projects/[YOUR-PROJECT-ID]/operations/create_[YOUR-MODEL-NAME]_[YOUR-VERSION-NAME]-[TIMESTAMP]", "metadata": { "@type": "type.googleapis.com/google.cloud.ml.v1.OperationMetadata", "createTime": "2018-07-07T02:51:50Z", "operationType": "CREATE_VERSION", "modelName": "projects/[YOUR-PROJECT-ID]/models/[YOUR-MODEL-NAME]", "version": { "name": "projects/[YOUR-PROJECT-ID]/models/[YOUR-MODEL-NAME]/versions/[YOUR-VERSION-NAME]", "deploymentUri": "gs://your_bucket_name", "createTime": "2018-07-07T02:51:49Z", "runtimeVersion": "2.11", "framework": "[YOUR_FRAMEWORK_NAME]", "machineType": "[YOUR_MACHINE_TYPE]", "pythonVersion": "3.7" } } }