このページでは、カスタム予測ルーチン(CPR)のデプロイを AI Platform から Vertex AI に移行する方法について説明します。
このページでは、AI Platform で CPR をデプロイする際の手順について説明します。
- Vertex AI へのデプロイ用に、対応するカスタム コンテナを作成します。このカスタム コンテナは、Vertex AI の CPR で作成されたカスタム コンテナと同様に機能します。
- カスタム コンテナをローカルで実行してテストします。
- Vertex AI Model Registry にアップロードします。
- オンライン予測を提供するため、モデルを Vertex AI エンドポイントにデプロイします。
始める前に
次のソフトウェアがインストールされていることを確認します。
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 にアップロードします。
gsutil 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 の詳細をご確認ください。