カスタム コンテナを使用して予測を行うには、HTTP サーバーを実行する Docker コンテナ イメージを使用する AI Platform Prediction を指定する必要があります。このドキュメントでは、AI Platform Prediction との互換性を確保するためにコンテナ イメージが満たす必要がある要件について説明します。また、起動後に AI Platform Prediction がカスタム コンテナを処理する方法についても説明します。すなわち、このドキュメントでは、AI Platform Prediction で使用するコンテナ イメージを設計する際に考慮する必要がある点について説明します。
カスタム コンテナ イメージを使用して予測を行う方法については、カスタム コンテナの使用をご覧ください。
コンテナ イメージの要件
Docker コンテナ イメージがコンテナとして実行される場合、コンテナで HTTP サーバーを実行する必要があります。具体的には、コンテナで実行チェック、ヘルスチェック、予測リクエストをリッスンして応答する必要があります。以下のサブセクションでは、これらの要件について詳しく説明します。
このセクションの要件を満たしている限り、任意の方法で、任意のプログラミング言語を使用して HTTP サーバーを実装できます。たとえば、Flask などのウェブ フレームワークを使用してカスタム HTTP サーバーを作成できます。または TensorFlow Serving、TorchServe、KFServing Server などの HTTP サーバーを実行する機械学習(ML)配信ソフトウェアを使用できます。
HTTP サーバーの実行
HTTP サーバーを実行するには、コンテナ イメージのビルドに使用する Dockerfile で ENTRYPOINT
の手順、CMD
の手順、またはその両方を使用します。CMD
と ENTRYPOINT
の間のやり取りを確認してください。
または、コンテナ イメージの ENTRYPOINT
、CMD
をそれぞれオーバーライドするために、モデル バージョンの作成時に containerSpec.command
フィールドと containerSpec.args
フィールドを指定できます。これらのフィールドのいずれかを指定すると、ENTRYPOINT
または CMD
と互換性がない(または存在しない)ために要件を満たしていないコンテナ イメージを使用できるようになります。
ただし、コンテナの起動時に実行するコマンドを決めて、このエントリポイント コマンドを無期限で実行できるようにします。たとえば、バックグラウンドで HTTP サーバーを起動してから終了するコマンドを実行しないでください。このコマンドを実行すると、コンテナが起動後すぐに終了します。
HTTP サーバーで、任意のポートの 0.0.0.0
に対するリクエストをリッスンする必要があります。モデル バージョンの作成時に、containerSpec.ports
フィールドでこのポートを指定します。コンテナでこの値にアクセスする方法については、このドキュメントの AIP_HTTP_PORT
環境変数のセクションをご覧ください。
実行チェック
AI Platform Prediction では、コンテナの起動時に実行チェックを行い、サーバーが動作していることを確認します。バージョン作成プロセスで、AI Platform Prediction は TCP 実行プローブを使用して、構成されたポートでコンテナへの TCP 接続を確立しようとします。このプローブは、接続の確立を最大 4 回試行します。失敗するたびに 10 秒間待機します。この時点でプローブが接続を確立していない場合、AI Platform Prediction がコンテナを再起動します。
HTTP サーバーで、これらのチェックを処理するために特別な動作を行う必要はありません。構成されたポートでリクエストをリッスンしている限り、実行プローブで接続を確立できます。
ヘルスチェック
AI Platform Prediction は HTTP サーバーでヘルスチェックを断続的に実行しながら、予測リクエストを処理する準備が整っていることを確認します。このサービスでは、ヘルスプローブを使用して、サーバー上の構成可能なヘルスチェック パスに HTTP GET
リクエストを送信します。モデル バージョンの作成時に、このパスを routes.health
フィールドで指定します。コンテナでこの値にアクセスする方法については、このドキュメントの AIP_HEALTH_ROUTE
環境変数のセクションをご覧ください。
HTTP サーバーは、次のように構成して各ヘルスチェック リクエストに応答するようにします。
サーバーで予測リクエストを処理する準備ができている場合、ヘルスチェック リクエストに対してステータス コード
200 OK
を返します。レスポンスの本文の内容は関係ありません。AI Platform Prediction では無視されます。このレスポンスは、サーバーが正常であることを示しています。
サーバーで予測リクエストを処理する準備ができていない場合は、ヘルスチェック リクエストに応答しないか、
200 OK
以外のステータス コードを返します。たとえば、ステータス コード503 Service Unavailable
で応答します。このレスポンスは、サーバーが異常であることを示しています。
ヘルスプローブでサーバーから異常レスポンスを受け取った場合は、最大 3 回の追加のヘルスチェックを 10 秒間隔で送信します。その間、AI Platform Prediction ではサーバーが正常だと見なされます。プローブでいずれかのチェックへの正常性を示すレスポンスを受け取った場合、プローブはすぐに断続的なヘルスチェックのスケジュールに戻ります。ただし、プローブで 4 つの連続した異常なレスポンスを受け取った場合、AI Platform Prediction はコンテナへの予測トラフィックのルーティングを停止します(複数の予測ノードを使用するようにモデル バージョンがスケーリングされている場合、AI Platform Prediction は他の正常なコンテナに予測リクエストをルーティングします)。
AI Platform Prediction はコンテナを再起動しません。代わりに、ヘルスプローブでは引き続き、断続的にヘルスチェック リクエストを異常なサーバーに送信します。正常なレスポンスを受信した場合、そのコンテナは正常とマークされ、予測トラフィックのルーティングが再開されます。
実践的なガイダンス
コンテナ内の HTTP サーバーで、ヘルスチェックに対して常にステータス コード 200 OK
で応答するだけで十分な場合があります。サーバーの起動前にコンテナがリソースを読み込むと、起動中と HTTP サーバーで障害が発生したときに、コンテナが正常な状態でなくなります。それ以外の場合は、正常な状態としてレスポンスが返されます。
より高度な構成の場合は、特定の時間にヘルスチェックに異常ステータスで応答するように HTTP サーバーを設計することをおすすめします。たとえば、コンテナでメンテナンスを行えるように、ノードへの予測トラフィックを一定期間ブロックします。
予測リクエスト
クライアントが projects.predict
リクエストを AI Platform Training と Prediction API に送信すると、AI Platform Prediction はこのリクエストを HTTP POST
リクエストとしてサーバーの構成可能な予測パスに転送します。モデル バージョンの作成時に、このパスを routes.predict
フィールドで指定します。コンテナでこの値にアクセスする方法については、このドキュメントの AIP_PREDICT_ROUTE
環境変数のセクションをご覧ください。
AI Platform Prediction では予測のリクエストとレスポンスを検証しません。それぞれの予測リクエストを変更せずにコンテナ内の HTTP サーバーに渡し、サーバーのレスポンスをクライアントに戻します。
各予測リクエストとレスポンスは 1.5 MB 以下にする必要があります。ただし、他のリクエスト本文の要件とレスポンス本文の要件を満たす必要はありません。これらの要件は、カスタム コンテナを使用しないモデル バージョンにのみ適用されます。カスタム コンテナを使用する場合、リクエストとレスポンスの本文を任意の形式にできます。
ただし、前述のリンクで説明されているリクエストとレスポンスの要件に従うように HTTP サーバーを設計することをおすすめします。この要件に従わない場合、AI Platform Prediction の他の機能(ロギング、モニタリング、AI Explanations など)が正しく機能することは保証されません。
コンテナ イメージの公開要件
AI Platform Prediction で使用するために、コンテナ イメージを Artifact Registry に push する必要があります。コンテナ イメージを Artifact Registry に push する方法を確認します。
特に、次のロケーションと権限の要件を満たすリポジトリにコンテナ イメージを push する必要があります。
ロケーション
リポジトリは、モデル バージョンを作成する予定のリージョン エンドポイントに一致するリージョンを使用する必要があります。たとえば、us-central1-ml.googleapis.com
エンドポイントでモデル バージョンを作成する場合、コンテナ イメージの完全な名前は us-central1-docker.pkg.dev/
で始まる必要があります。
マルチリージョン リポジトリは、コンテナ イメージに使用しないでください。
権限
モデル バージョンの作成時に、AI Platform Prediction にコンテナ イメージを pull する権限が必要です。具体的には、AI Platform のサービス エージェントに、コンテナ イメージのリポジトリに対する Artifact Registry 読み取りロール(roles/artifactregistry.reader
)の権限が必要です。
AI Platform Prediction を使用している Google Cloud プロジェクトにコンテナ イメージを push している場合は、権限を構成する必要はありません。サービス エージェントに付与されているデフォルトの権限で十分です。
一方、AI Platform Prediction を使用しているプロジェクトとは別の Google Cloud プロジェクトにコンテナ イメージを push した場合は、AI Platform のサービス エージェントに Artifact Registry リポジトリに対する Artifact Registry 読み取りロールを付与する必要があります。
モデル アーティファクトへのアクセス
カスタム コンテナなしでモデル バージョンを作成する場合は、モデル アーティファクトを使用して Cloud Storage ディレクトリの URI を deploymentUri
フィールドとして指定する必要があります。カスタム コンテナを使用してモデル バージョンを作成する場合、Cloud Storage でのモデル アーティファクトの指定はオプションです。
予測に必要なモデル アーティファクトがコンテナ イメージに含まれている場合は、Cloud Storage からファイルを読み込む必要はありません。ただし、deploymentUri
フィールドを指定してモデル アーティファクトを指定する場合、コンテナで実行の開始時にそのアーティファクトを読み込む必要があります。AI Platform Prediction でのコンテナの起動時に AIP_STORAGE_URI
環境変数を、gs://
で始まる Cloud Storage URI に設定します。コンテナのエントリポイント コマンドでは、モデルのアーティファクトにアクセスするために、この URI で指定されたディレクトリをダウンロードできます。
AIP_STORAGE_URI
環境変数の値は、モデル バージョンの作成時に deploymentUri
フィールドで指定した Cloud Storage URI と同じではありません。AIP_STORAGE_URI
は、AI Platform Prediction が管理する別の Cloud Storage バケットにあるモデル アーティファクト ディレクトリのコピーを指します。AI Platform Prediction は、モデル バージョンを作成するときにこのディレクトリに入力します。ディレクトリの内容を更新することはできません。新しいモデル アーティファクトを使用する場合は、新しいモデル バージョンを作成する必要があります。
コンテナがデフォルトで使用するサービス アカウントには、この URI からの読み取りが許可されています。一方、モデル バージョンの作成時にカスタム サービス アカウントを指定する場合、AI Platform Prediction で、指定されたサービス アカウントに URI の Cloud Storage バケットに対するストレージ オブジェクト閲覧者(roles/storage.objectViewer
)ロールが自動的に付与されます。
アプリケーションのデフォルト認証情報(ADC)がサポートされるライブラリを使用して、モデル アーティファクトを読み込みます。認証を明示的に構成する必要はありません。
コンテナで、AI Platform のサービス エージェント、またはカスタム サービス アカウント(指定した場合)に対する ADC がサポートされているため、サービス アカウントに権限が付与されている他の Google Cloud サービスにアクセスすることもできます。
コンテナで使用できる環境変数
実行中に、コンテナのエントリポイント コマンドで、手動で構成した環境変数と、AI Platform Prediction によって自動的に設定された環境変数を参照できます。このセクションでは、環境変数を設定する簡単な方法と、AI Platform Prediction によって自動的に設定される変数について詳しく説明します。
コンテナ イメージで設定される変数
ビルド時にコンテナ イメージ内で環境変数を設定するには、Docker の ENV
の手順を使用します。接頭辞 AIP_
で始まる環境変数は設定しないでください。
コンテナのエントリポイント コマンドではこれらの環境変数を使用できますが、モデル バージョンの API フィールドで参照することはできません。
AI Platform Prediction によって設定される変数
AI Platform Prediction がコンテナの実行を開始すると、コンテナ環境で次の環境変数が設定されます。変数は接頭辞 AIP_
で始まります。この接頭辞を使用する環境変数は、手動で設定しないでください。
これらの変数には、コンテナの entrypoint コマンドでアクセスできます。また、これらの変数も参照できる AI Platform Training API と Prediction API のフィールドについては、ContainerSpec
の API リファレンスをご覧ください。
変数名 | デフォルト値 | 値の構成方法 | 詳細 |
---|---|---|---|
AIP_ACCELERATOR_TYPE | 設定解除 | モデル バージョンの作成時に、acceleratorConfig.type フィールドを設定します。 |
この変数は、コンテナが動作している仮想マシン(VM)インスタンスによって使用されるアクセラレータのタイプを指定します。 |
AIP_FRAMEWORK | CUSTOM_CONTAINER |
構成不可 | |
AIP_HEALTH_ROUTE | /v1/models/MODEL/versions/VERSION この文字列では、MODEL を AIP_MODEL_NAME 変数の値に置き換え、VERSION を AIP_VERSION_NAME 変数の値に置き換えます。 |
モデル バージョンの作成時に、routes.health フィールドを設定します。 |
この変数は、AI Platform Prediction でヘルスチェックを送信するコンテナの HTTP パスを指定します。 |
AIP_HTTP_PORT | 8080 |
モデル バージョンの作成時に、containerSpec.ports フィールドを設定します。このフィールドの最初のエントリは、AIP_HTTP_PORT の値になります。 |
AI Platform Prediction で、実行チェック、ヘルスチェック、予測リクエストがコンテナのこのポートに送信されます。コンテナの HTTP サーバーで、このポートでリクエストをリッスンする必要があります。 |
AIP_MACHINE_TYPE | デフォルトはありません。構成する必要があります | モデル バージョンの作成時に、machineType フィールドを設定します。 |
この変数は、コンテナが実行されている VM のタイプを指定します。 |
AIP_MODE | PREDICTION |
構成不可 | この変数は、オンライン予測のために AI Platform Prediction 上でコンテナが実行されていることを示します。この環境変数を使用すると、カスタム ロジックをコンテナに追加して、複数のコンピューティング環境で実行できます。ただし、AI Platform Prediction での実行時に特定のコードパスのみを使用してください。 |
AIP_MODE_VERSION | 1.0.0 |
構成不可 | この変数は、AI Platform Prediction でコンテナが満たしているとされるカスタム コンテナの要件(このドキュメント)のバージョンを示します。このドキュメントは、セマンティック バージョニングに従って更新されます。 |
AIP_MODEL_NAME | デフォルトはありません。構成する必要があります | モデル(コンテナを使用するモデル バージョンの親)の作成時に、name フィールドを指定します。 |
この値には、AI Platform Training と Prediction API で出力される projects/PROJECT_ID/models/ 接頭辞は含まれません。 |
AIP_PREDICT_ROUTE | /v1/models/MODEL/versions/VERSION:predict この文字列では、MODEL を AIP_MODEL_NAME 変数の値に置き換え、VERSION を AIP_VERSION_NAME 変数の値に置き換えます。 |
モデル バージョンの作成時に、routes.predict フィールドを設定します。 |
この変数では、AI Platform Prediction で予測リクエストを転送するコンテナの HTTP パスを指定します。 |
AIP_PROJECT_NUMBER | AI Platform Prediction を使用している Google Cloud プロジェクトのプロジェクト番号 | 構成不可 | |
AIP_STORAGE_URI |
|
構成不可 | この変数では、モデル アーティファクトのコピーが含まれるディレクトリを指定します(該当する場合)。 |
AIP_VERSION_NAME | デフォルトはありません。構成する必要があります | モデル バージョンの作成時に、name フィールドを設定します。 |
この値には、AI Platform Training と Prediction API で出力される projects/PROJECT_ID/models/MODEL/versions/ 接頭辞は含まれません。 |
バージョン リソースで設定される変数
モデル バージョンの作成時に、container.env
フィールドで追加の環境変数を設定できます。
これらの変数には、コンテナの entrypoint コマンドでアクセスできます。また、これらの変数も参照できる AI Platform Training API と Prediction API のフィールドについては、ContainerSpec
の API リファレンスをご覧ください。
次のステップ
- カスタム コンテナを使用して予測を行う方法を学習する。
- 特定のカスタム コンテナを使用して予測を試行する場合について、PyTorch の予測の提供に関するチュートリアルで確認する。