カスタム推論ルーティンを使用すると、HTTP サーバーの設定やコンテナのゼロからのビルドを行うことなく、前処理コードと後処理コードを使用してカスタム コンテナをビルドできます。前処理は、入力の正規化または変換や、追加データを取得するための外部サービスの呼び出しに使用できます。後処理は、モデル推論の形式の指定や、ビジネス ロジックの実行に使用できます。
次の図は、カスタム予測ルーティンを使用する場合と使用しない場合の両方のユーザー ワークフローを示しています。
主な違いは次のとおりです。
モデルサーバーや Dockerfile を記述する必要はありません。モデルサーバー(モデルをホストする HTTP サーバー)が用意されています。
モデルをローカルでデプロイしてデバッグできるため、開発中のイテレーション サイクルを高速化できます。
カスタム コンテナをビルドしてデプロイする
このセクションでは、CPR を使用して前処理と後処理のロジックを備えたカスタム コンテナをビルドし、ローカル エンドポイントとオンライン エンドポイントの両方にデプロイする方法について説明します。
設定
環境に Vertex AI SDK for Python と Docker がインストールされている必要があります。
カスタム Predictor
推論インターフェースを作成する
Predictor
インターフェースを実装します。
例については、Sklearn の Predictor
の実装をご覧ください。
カスタム Handler
を作成する(省略可)
カスタム Handler は未加工のリクエスト オブジェクトにアクセスできるため、追加のリクエストやレスポンス ヘッダーのサポートや、非 JSON 形式の推論リクエストのシリアル化解除など、ウェブサーバー関連のロジックをカスタマイズする必要があるという、まれなケースで役立ちます。
Predictor と Handler の両方を実装するサンプル ノートブックをご覧ください。
必須ではありませんが、コードの編成と再利用性を高めるために、デフォルトのハンドラで示されるように、ウェブサーバー ロジックを Handler に、ML ロジックを Predictor に実装することをおすすめします。
カスタム コンテナをビルドする
イメージにパッケージをインストールする必要がある場合は、カスタムコードと追加の requirements.txt
ファイルをディレクトリに配置します。
Vertex AI SDK for Python を使用して、次のようにカスタム コンテナをビルドします。
from google.cloud.aiplatform.prediction import LocalModel
# {import your predictor and handler}
local_model = LocalModel.build_cpr_model(
{PATH_TO_THE_SOURCE_DIR},
f"{REGION}-docker.pkg.dev/{PROJECT_ID}/{REPOSITORY}/{IMAGE}",
predictor={PREDICTOR_CLASS},
handler={HANDLER_CLASS},
requirements_path={PATH_TO_REQUIREMENTS_TXT},
)
コンテナ仕様を検査して、イメージ URI や環境変数などの有用な情報を取得できます。
local_model.get_serving_container_spec()
コンテナをローカルで実行する(省略可)
この手順は、コンテナをローカルで実行してテストする場合にのみ必要です。これはイテレーションを高速化するうえで有用です。次の例では、ローカル エンドポイントにデプロイし、推論リクエストを送信します(リクエスト本文の形式)。
with local_model.deploy_to_local_endpoint(
artifact_uri={GCS_PATH_TO_MODEL_ARTIFACTS},
credential_path={PATH_TO_CREDENTIALS},
) as local_endpoint:
health_check_response = local_endpoint.run_health_check()
predict_response = local_endpoint.predict(
request_file={PATH_TO_INPUT_FILE},
headers={ANY_NEEDED_HEADERS},
)
ヘルスチェックと推論レスポンスを出力します。
print(health_check_response, health_check_response.content)
print(predict_response, predict_response.content)
すべてのコンテナログを出力します。
local_endpoint.print_container_logs(show_all=True)
Vertex AI Model Registry にアップロードする
モデルはモデル アーティファクト(トレーニングのファイル)にアクセスする必要があるため、アーティファクトが Google Cloud Storage にアップロードされていることを確認してください。
イメージを Artifact Registry に push します。
local_model.push_image()
次に、Model Registry にアップロードします。
from google.cloud import aiplatform
model = aiplatform.Model.upload(
local_model=local_model,
display_name={MODEL_DISPLAY_NAME},
artifact_uri={GCS_PATH_TO_MODEL_ARTIFACTS},
)
モデルを Model Registry にアップロードしたら、モデルを使用してバッチ推論を取得することや、Vertex AI エンドポイントにデプロイしてオンライン推論を取得できます。
Vertex AI エンドポイントにデプロイする
endpoint = model.deploy(machine_type="n1-standard-4")
モデルをデプロイすると、オンライン推論を取得できます。
ノートブックの例
このサンプルでは、Vertex AI Inference を使用したカスタムの前処理と後処理により、モデルをデプロイする複数の方法を紹介します。
- Sklearn のカスタム前処理 / 後処理を使用するカスタム Predictor。Vertex AI SDK for Python を使用して独自のコンテナをビルドします。
- シリアル化されたプリプロセッサ、前処理、後処理のメソッドのみを Predictor に読み込みます。デフォルトのモデルの読み込みを継承し、Vertex AI の分散
SklearnPredictor
からの動作を予測します。
- シリアル化されたプリプロセッサ、前処理、後処理のメソッドのみを Predictor に読み込みます。デフォルトのモデルの読み込みを継承し、Vertex AI の分散
- カスタム Predictor。Vertex AI SDK for Python を使用して独自のコンテナをビルドします。
- Predictor 全体のカスタム実装。
- カスタム Predictor と Handler。Vertex AI SDK for Python を使用して独自のコンテナをビルドします。
- Predictor と Handler のカスタム実装。
- Handler をカスタマイズすると、モデルサーバーで CSV 入力を処理できるようになります。
- カスタム Predictor。Vertex AI SDK for Python と PyTorch を使用して独自のコンテナをビルドします。
- Predictor のカスタム実装。
- 既存のイメージ。ローカルで推論をテストし、Vertex AI SDK for Python を使用してモデルをデプロイします。
- PyTorch モデルに NVIDIA Triton 推論サーバーを使用します。