Vertex AI がカスタム トレーニング モデルからオンライン予測を提供する方法をカスタマイズするには、Model
リソースを作成するときに、事前にビルドされたコンテナではなくカスタム コンテナを指定します。カスタム コンテナを使用すると、Vertex AI は各予測ノードで任意の Docker コンテナを実行します。
次のような理由からカスタム コンテナの使用をおすすめします。
- ビルド済みコンテナ以外のフレームワークを使用してトレーニングされた ML モデルから予測を行う
- モデルから生成される予測リクエストの前処理または後処理を行う
- 任意のプログラミング言語で作成された予測サーバーを実行する
- 予測のカスタマイズに使用する依存関係をインストールする
このガイドでは、カスタム コンテナを使用する Model
の作成方法について説明します。Docker コンテナ イメージの設計と作成の詳細な手順については説明しません。
コンテナ イメージを準備する
カスタム コンテナを使用する Model
を作成するには、そのコンテナのベースとして Docker コンテナ イメージを指定する必要があります。このコンテナ イメージは、カスタム コンテナの要件にある要件を満たす必要があります。
信頼できる第三者によって作成された既存のコンテナ イメージを使用する場合は、次のセクションのいずれか、または両方を省略できる可能性があります。
コンテナ イメージを作成する
コンテナ イメージの要件を満たす Docker コンテナ イメージを設計してビルドします。
Docker コンテナ イメージの設計とビルドの基本については、Docker ドキュメントのクイックスタートをご覧ください。
コンテナ イメージを Artifact Registry に push する
コンテナ イメージを Artifact Registry リポジトリに push します。
コンテナ イメージを Artifact Registry に push する方法を確認します。
Model
を作成する
カスタム コンテナを使用する Model
を作成するには、次のいずれかを行います。
以下のセクションでは、このような方法で Model
を作成する際に、カスタム コンテナに関連する API フィールドを構成する方法について説明します。
コンテナ関連の API フィールド
Model
を作成する場合は、事前にビルドされたコンテナではなく、カスタム コンテナの詳細を使用して containerSpec
フィールドを構成してください。
Model.containerSpec
フィールドには、ModelContainerSpec
メッセージを指定する必要があります。このメッセージには次のサブフィールドを指定できます。
imageUri
(必須)コンテナ イメージの Artifact Registry URI。
gcloud ai models upload
コマンドを使用している場合は、--container-image-uri
フラグを使用してこのフィールドを指定できます。command
(オプション)コンテナの
ENTRYPOINT
をオーバーライドする実行可能ファイルの配列と引数。このフィールドの形式を指定する方法と、args
フィールドの操作方法の詳細については、ModelContainerSpec
の API リファレンスをご覧ください。gcloud ai models upload
コマンドを使用している場合は、--container-command
フラグを使用してこのフィールドを指定できます。args
(オプション)コンテナの
CMD
をオーバーライドする実行可能ファイルの配列と引数。このフィールドの形式を指定する方法と、command
フィールドの操作方法の詳細については、ModelContainerSpec
の API リファレンスをご覧ください。gcloud ai models upload
コマンドを使用している場合は、--container-args
フラグを使用してこのフィールドを指定できます。ports
(オプション)ポートの配列。Vertex AI では、リストの最初のポート上のコンテナ、またはデフォルトでは
8080
に実行チェック、ヘルスチェック、予測リクエストが送信されます。追加のポートを指定しても影響はありません。gcloud ai models upload
コマンドを使用している場合は、--container-ports
フラグを使用してこのフィールドを指定できます。env
(オプション)コンテナのエントリポイント コマンド、
command
フォールドとargs
フィールドで参照できる環境変数の配列。他のフィールドでこれらの環境変数を参照する方法について詳しくは、ModelContainerSpec
の API リファレンスをご覧ください。gcloud ai models upload
コマンドを使用している場合は、--container-env-vars
フラグを使用してこのフィールドを指定できます。healthRoute
(オプション)Vertex AI でヘルスチェックを送信するコンテナの HTTP サーバーのパス。
このフィールドを指定しない場合、
Model
をDeployedModel
としてEndpoint
リソースにデプロイすると、デフォルトで/v1/endpoints/ENDPOINT/deployedModels/DEPLOYED_MODEL
になります。ここで、ENDPOINT はEndpoint
のname
フィールド(endpoints/
の後)の最後のセグメントに置き換えられます。また、DEPLOYED_MODEL はDeployedModel
のid
フィールドに置き換えられます。gcloud ai models upload
コマンドを使用している場合は、--container-health-route
フラグを使用してこのフィールドを指定できます。predictRoute
(オプション)Vertex AI で予測リクエストを転送するコンテナの HTTP サーバーのパス。
このフィールドを指定しない場合、
Model
をDeployedModel
としてEndpoint
リソースにデプロイすると、デフォルトで/v1/endpoints/ENDPOINT/deployedModels/DEPLOYED_MODEL:predict
になります。ここで、ENDPOINT はEndpoint
のname
フィールド(endpoints/
の後)の最後のセグメントに置き換えられます。また、DEPLOYED_MODEL はDeployedModel
のid
フィールドに置き換えられます。gcloud ai models upload
コマンドを使用している場合は、--container-predict-route
フラグを使用してこのフィールドを指定できます。sharedMemorySizeMb
(オプション)モデルの共有メモリ ボリュームで予約する VM メモリの量(MB 単位)。
共有メモリは、複数のプロセスがメモリの共通ブロックにアクセスして操作できるようにするプロセス間通信(IPC)のメカニズムです。必要な共有メモリの量は、コンテナとモデルの実装の詳細によって異なります。ガイドラインについては、モデルサーバーのドキュメントをご覧ください。
gcloud ai models upload
コマンドを使用している場合は、--container-shared-memory-size-mb
フラグを使用してこのフィールドを指定できます。startupProbe
(オプション)コンテナ アプリケーションが起動したかどうかを確認するプローブの仕様。
gcloud ai models upload
コマンドを使用している場合は、--container-startup-probe-exec, --container-startup-probe-period-seconds, --container-startup-probe-timeout-seconds
フラグを使用してこのフィールドを指定できます。healthProbe
(オプション)コンテナがトラフィックを受け入れる準備ができているかどうかを確認するプローブの仕様。
gcloud ai models upload
コマンドを使用している場合は、--container-health-probe-exec, --container-health-probe-period-seconds, --container-health-probe-timeout-seconds
フラグを使用してこのフィールドを指定できます。
Vertex AI では、Model.containerSpec.env
フィールドで設定する変数に加えて、構成に基づいていくつかの変数が設定されます。詳細については、これらのフィールドとコンテナのエントリポイント コマンドでの環境変数の使用をご覧ください。
モデルのインポートの例
次の例は、モデルをインポートするときにコンテナ関連の API フィールドを指定する方法を示しています。
gcloud
次の例では、gcloud ai models upload
コマンドを使用します。
gcloud ai models upload \
--region=LOCATION \
--display-name=MODEL_NAME \
--container-image-uri=IMAGE_URI \
--container-command=COMMAND \
--container-args=ARGS \
--container-ports=PORTS \
--container-env-vars=ENV \
--container-health-route=HEALTH_ROUTE \
--container-predict-route=PREDICT_ROUTE \
--container-shared-memory-size-mb=SHARED_MEMORY_SIZE \
--container-startup-probe-exec=STARTUP_PROBE_EXEC \
--container-startup-probe-period-seconds=STARTUP_PROBE_PERIOD \
--container-startup-probe-timeout-seconds=STARTUP_PROBE_TIMEOUT \
--container-health-probe-exec=HEALTH_PROBE_EXEC \
--container-health-probe-period-seconds=HEALTH_PROBE_PERIOD \
--container-health-probe-timeout-seconds=HEALTH_PROBE_TIMEOUT \
--artifact-uri=PATH_TO_MODEL_ARTIFACT_DIRECTORY
--container-image-uri
フラグは必須です。--container-
で始まる他のすべてのフラグは省略可能です。フィールドの値の詳細については、このガイドの前のセクションをご覧ください。
Java
このサンプルを試す前に、Vertex AI クイックスタート: クライアント ライブラリの使用にある Java の設定手順を完了してください。詳細については、Vertex AI Java API のリファレンス ドキュメントをご覧ください。
Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
Node.js
このサンプルを試す前に、Vertex AI クイックスタート: クライアント ライブラリの使用にある Node.js の設定手順を完了してください。詳細については、Vertex AI Node.js API のリファレンス ドキュメントをご覧ください。
Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
Python
Python をインストールまたは更新する方法については、Vertex AI SDK for Python をインストールするをご覧ください。詳細については、Python API リファレンス ドキュメントをご覧ください。
詳細については、モデルのインポート ガイドをご覧ください。
予測リクエストを送信する
オンライン予測リクエストを Model
に送信するには、カスタム トレーニング モデルから予測を取得するの説明に従って操作します。このプロセスは、カスタム コンテナを使うかどうかに関係なく、同じように機能します。
詳細については、カスタム コンテナの予測リクエストとレスポンスの要件をご覧ください。
次のステップ
- カスタム コンテナの要件で、Vertex AI で使用するカスタム コンテナを設計する際に考慮すべき事項を確認する。