このページでは、カスタム予測ルーチン(CPR)のデプロイを AI Platform から Vertex AI に移行する方法について説明します。
このページでは、AI Platform で CPR をデプロイする際の手順について説明します。
- Vertex AI へのデプロイ用に、対応するカスタム コンテナを作成します。このカスタム コンテナは、Vertex AI の CPR API で作成されたカスタム コンテナと同様に機能します。
- カスタム コンテナをローカルで実行してテストします。
- vertex_model_registry_name にアップロードします。
- オンライン予測を提供するため、モデルを Vertex AI
endpoint
にデプロイします。
始める前に
次のソフトウェアがインストールされていることを確認します。
Vertex AI に移行する AI Platform デプロイメントの CPR からのモデル アーティファクトとカスタムコードを用意します。
モデル アーティファクトを保存する Cloud Storage バケットを用意します。
プロジェクトで Vertex AI API が有効になっていることを確認します。
Vertex AI Deployment のソースフォルダを準備する
model_artifacts
という名前のローカル フォルダを作成し、AI Platform デプロイの CPR からモデル アーティファクトをコピーします。これは、AI Platform モデルに CPR をデプロイしたときにdeployment_uri
で指定したモデル アーティファクト(または gcloud を使用した場合は--origin
)と同じになります。cpr_src_dir
という名前のローカル フォルダを作成します。このフォルダには、Vertex AI でのデプロイ用でカスタム コンテナのビルドに使用されるソース配布パッケージadapter.py
とrequirements.txt
(後述)が保存されます。AI Platform に CPR をデプロイしたときに
package_uris
で指定したすべてのパッケージ(Predictor
クラスを含むパッケージ)をコピーします。AdapterPredictor
クラス(後述)を含むadapter.py
ファイルを作成し、PREDICTION_CLASS
をPredictor
クラスの完全修飾名に設定します。この値は、AI Platform に CPR をデプロイしたときのprediction_class
と同じです。アダプタは、AI Platform
Predictor
インターフェースで CPR をラップします。これにより、Vertex AI の CPR インターフェースとの互換性が維持されます。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
最初のセクションには、モデルの提供に必要な依存関係を指定します。
2 つ目のセクションには、モデルの提供に必要な ML パッケージを記述します(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}
イメージを push または pull する前に、Google Cloud CLI を使用して Artifact Registry に対するリクエストを認証するように Docker を構成します。
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 の詳細を確認する。