本页面介绍如何将自定义预测例程 (CPR) 部署从 AI Platform 迁移到 Vertex AI。
具体而言,对于 AI Platform 上的 CPR 部署,本页面介绍如何执行以下操作:
- 创建相应的自定义容器以在 Vertex AI 上进行部署。此自定义容器的工作方式与使用 CPR on Vertex AI API 创建的任何自定义容器相同。
- 在本地运行和测试自定义容器。
- 将其上传到 vertex_model_registry_name。
- 将模型部署到
endpoint
以执行在线预测。
准备工作
确保已安装以下软件:
拥有要迁移到 Vertex AI 的 CPR on AI Platform 部署中的模型工件和自定义代码。
拥有用于存储模型工件的 Cloud Storage 存储桶。
确保已在项目中启用了 Vertex AI API。
准备 Vertex AI 部署的源文件夹
创建一个名为
model_artifacts
的本地文件夹,并复制 CPR on AI Platform 部署中的模型工件。这些模型工件应该与您部署 CPR on AI Platform 模型时在deployment_uri
(如果您使用 gcloud,则为--origin
)中指定的模型工件相同。创建一个名为
cpr_src_dir
的本地文件夹。此文件夹将保存源分发软件包adapter.py
和requirements.txt
(如下所述),用于构建自定义容器以在 Vertex AI 上进行部署。复制您在 AI Platform 上部署 CPR 时在
package_uris
中提供的所有软件包,包括包含Predictor
类的软件包。创建一个包含
AdapterPredictor
类(如下所定义)的adapter.py
文件,并将PREDICTION_CLASS
设置为Predictor
类的完全限定名称。此值与在 AI Platform 上部署 CPR 时的prediction_class
相同。该适配器将 CPR 封装在 AI Platform
Predictor
接口中,以便与 CPR on Vertex AI 接口兼容。import pydoc from google.cloud.aiplatform.utils import prediction_utils from google.cloud.aiplatform.prediction.predictor import Predictor # Fully qualified name of your CPR on CAIP Predictor class. PREDICTION_CLASS = "predictor.MyPredictor" class AdapterPredictor(Predictor): """Predictor implementation for adapting CPR on CAIP predictors.""" def __init__(self): return def load(self, artifacts_uri: str): """Loads the model artifact. Args: artifacts_uri (str): Required. The model artifacts path (may be local or on Cloud Storage). """ prediction_utils.download_model_artifacts(artifacts_uri) custom_class = pydoc.locate(PREDICTION_CLASS) self._predictor = custom_class.from_path(".") def predict(self, instances): """Performs prediction. Args: instances (Any): Required. The instance(s) used for performing prediction. Returns: Prediction results. """ return self._predictor.predict(**instances)
创建一个包含模型依赖项的
requirements.txt
文件,例如:# Required for model serving google-cloud-storage>=1.26.0,<2.0.0dev google-cloud-aiplatform[prediction]>=1.16.0 # ML dependencies numpy>=1.16.0 scikit-learn==0.20.2
第一部分列出了模型部署所需的依赖项。
第二部分列出了模型部署所需的机器学习软件包(例如 scikit-learn、xgboost 和 TensorFlow)。确保安装的库版本与之前部署模型版本时选择的运行时版本下列出的版本相同。
在本地环境中安装依赖项:
pip install -U --user -r cpr_src_dir/requirements.txt
将模型工件上传到 Cloud Storage
将模型工件上传到 Cloud Storage:
gcloud storage cp model_artifacts/* gs://BUCKET_NAME/MODEL_ARTIFACT_DIR
设置 Artifact Registry
Artifact Registry 用于存储和管理 Docker 容器映像。
确保已在项目中启用 Artifacts Registry API。
如果您还没有代码库,请创建一个。
gcloud artifacts repositories create {REPOSITORY} \ --repository-format=docker \ --location={REGION}
如需推送或拉取映像,请将 Docker 配置为使用 Google Cloud CLI 对向 Artifact Registry 发出的请求进行身份验证。
gcloud auth configure-docker {REGION}-docker.pkg.dev
构建、测试和部署自定义容器
以下 Python 脚本演示了如何使用 Vertex AI SDK 中的 API 构建、测试和部署自定义容器。确保设置脚本顶部的变量。
import json
import logging
import os
from google.cloud import aiplatform
from google.cloud.aiplatform.prediction import LocalModel
from cpr_src_dir.adapter import AdapterPredictor
##########################################################################
# CONFIGURE THE FOLLOWING
##########################################################################
# We recommend that you choose the region closest to you.
REGION = …
# Your project ID.
PROJECT_ID = …
# Name of the Artifact Repository to create or use.
REPOSITORY = …
# Name of the container image that will be pushed.
IMAGE = …
# Cloud Storage bucket where your model artifacts will be stored.
BUKCET_NAME = …
# Directory within the bucket where your model artifacts are stored.
MODEL_ARTIFACT_DIR = …
# Your model's input instances.
INSTANCES = …
##########################################################################
# Build the CPR custom container
##########################################################################
local_model = LocalModel.build_cpr_model(
"cpr_src_dir",
f"{REGION}-docker.pkg.dev/{PROJECT_ID}/{REPOSITORY}/{IMAGE}",
predictor=AdapterPredictor,
requirements_path="cpr_src_dir/requirements.txt",
extra_packages=["cpr_src_dir/my_custom_code-0.1.tar.gz"],
)
##########################################################################
# Run and test the custom container locally
##########################################################################
logging.basicConfig(level=logging.INFO)
local_endpoint =
local_model.deploy_to_local_endpoint(artifact_uri="model_artifacts")
local_endpoint.serve()
health_check_response = local_endpoint.run_health_check()
predict_response = local_endpoint.predict(
request=json.dumps({"instances": INSTANCES}),
headers={"Content-Type": "application/json"},
)
local_endpoint.stop()
print(predict_response, predict_response.content)
print(health_check_response, health_check_response.content)
local_endpoint.print_container_logs(show_all=True)
##########################################################################
# Upload and deploy to Vertex
##########################################################################
local_model.push_image()
model = aiplatform.Model.upload(\
local_model=local_model,
display_name=MODEL_DISPLAY_NAME,
artifact_uri=f"gs://{BUKCET_NAME}/{MODEL_ARTIFACT_DIR}",
)
endpoint = model.deploy(machine_type="n1-standard-4")
endpoint.predict(instances=INSTANCES)
详细了解 Vertex AI Prediction。