カスタム推論ルーティン

カスタム推論ルーティンを使用すると、HTTP サーバーの設定やコンテナのゼロからのビルドを行うことなく、前処理コードと後処理コードを使用してカスタム コンテナをビルドできます。前処理は、入力の正規化または変換や、追加データを取得するための外部サービスの呼び出しに使用できます。後処理は、モデル推論の形式の指定や、ビジネス ロジックの実行に使用できます。

次の図は、カスタム予測ルーティンを使用する場合と使用しない場合の両方のユーザー ワークフローを示しています。

主な違いは次のとおりです。

  • モデルサーバーや Dockerfile を記述する必要はありません。モデルサーバー(モデルをホストする HTTP サーバー)が用意されています。

  • モデルをローカルでデプロイしてデバッグできるため、開発中のイテレーション サイクルを高速化できます。

カスタム コンテナをビルドしてデプロイする

このセクションでは、CPR を使用して前処理と後処理のロジックを備えたカスタム コンテナをビルドし、ローカル エンドポイントとオンライン エンドポイントの両方にデプロイする方法について説明します。

設定

環境に Vertex AI SDK for PythonDocker がインストールされている必要があります。

カスタム 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 を使用したカスタムの前処理と後処理により、モデルをデプロイする複数の方法を紹介します。