カスタム コンテナの使用

AI Platform Prediction でトレーニング済み機械学習(ML)モデルからオンライン予測を処理する方法をカスタマイズするには、モデル バージョンの作成時にランタイム バージョンではなく、カスタム コンテナを指定します。カスタム コンテナを使用する場合、AI Platform Prediction では、標準のランタイム バージョン コードを実行するのではなく、各予測ノード上の任意の Docker コンテナを実行して、互換性のあるモデル アーティファクトから予測を行います。

次のような理由からカスタム コンテナの使用をおすすめします。

  • TensorFlow、scikit-learn、XGBoost 以外のフレームワークを使用してトレーニングされた ML モデルから予測を行う
  • モデルから生成される予測リクエストの前処理または後処理を行う
  • 任意のプログラミング言語で作成された予測サーバーを実行する
  • 予測のカスタマイズに使用する依存関係をインストールする

このガイドでは、カスタム コンテナを使用するモデル バージョンの作成方法について説明します。Docker コンテナ イメージを設計して作成する方法については説明しません。コンテナ イメージを作成して AI Platform Prediction で使用する例の詳細については、スタートガイド: カスタム コンテナを使用した PyTorch 予測の提供をご覧ください。

カスタム コンテナを使用するには、モデル バージョンにリージョン エンドポイントCompute Engine(N1)マシンタイプを使用する必要があります。

コンテナ イメージの準備

カスタム コンテナを使用するモデル バージョンを作成するには、そのコンテナのベースとして Docker コンテナ イメージを提供する必要があります。このコンテナ イメージは、カスタム コンテナの要件にある要件を満たす必要があります。

信頼できる第三者によって作成された既存のコンテナ イメージを使用する場合は、次のセクションのいずれか、または両方を省略できる可能性があります。

コンテナ イメージを作成する

コンテナ イメージの要件を満たす Docker コンテナ イメージを設計してビルドします。

Docker コンテナ イメージの設計とビルドの基本については、Docker ドキュメントのクイックスタートをご覧ください。

コンテナ イメージを Artifact Registry に push する

コンテナ イメージの公開要件を満たす Artifact Registry リポジトリにコンテナ イメージを push します。

コンテナ イメージを Artifact Registry に push する方法を確認します。

モデルとモデル バージョンの作成

モデルの作成時にいくつかの構成オプションを指定して、後でモデルに作成するモデル バージョンがカスタム コンテナとの互換性を持つようにします。

次に、モデル バージョンの作成時にコンテナの構成の大部分を指定します。

モデルの作成

モデルを作成するには、モデルリソースの作成手順を行います。モデルは、コンテナ イメージが格納されている Artifact Registry リポジトリのリージョンと一致するリージョン エンドポイントに作成する必要があります。詳細については、コンテナ イメージの公開要件をご覧ください。

モデル バージョンの作成

カスタム コンテナを使用するモデル バージョンを作成する場合は、モデル バージョンに指定したその他のフィールドに加えて、コンテナに固有の次の API フィールドを構成します。

以降のセクションでは、これらのフィールドの構成方法について説明します。

また、他の API フィールドを構成する際のコンテナに固有の相違点は次のとおりです。

Version.container の構成

Version.container フィールドには、ContainerSpec メッセージを指定する必要があります。このメッセージには次のサブフィールドを指定できます。gcloud beta ai-platform versions create コマンドを使用してモデル バージョンを作成する場合は、コマンドライン フラグを使用して各サブフィールドを指定できます。

image(必須)

コンテナ イメージの Artifact Registry URI。

gcloud CLI フラグ: --image

command(オプション)

コンテナの ENTRYPOINT をオーバーライドする実行可能ファイルの配列と引数。このフィールドの形式を指定する方法と、args フィールドの操作方法の詳細については、ContainerSpec の API リファレンスをご覧ください。

gcloud CLI フラグ: --command

args(オプション)

コンテナの CMD をオーバーライドする実行可能ファイルの配列と引数。このフィールドの形式を指定する方法と、command フィールドの操作方法の詳細については、ContainerSpec の API リファレンスをご覧ください。

gcloud CLI フラグ: --args

ports(オプション)

ポートの配列。AI Platform Prediction では、リストの最初のポート上のコンテナ、またはデフォルトでは 8080実行チェック、ヘルスチェック、予測リクエストが送信されます。追加のポートを指定しても影響はありません。

gcloud CLI フラグ: --ports

env(オプション)

コンテナのエントリポイント コマンド、command フォールドと args フィールドで参照できる環境変数の配列。他のフィールドでこれらの環境変数を参照する方法について詳しくは、ContainerSpec の API リファレンスをご覧ください。

gcloud CLI フラグ: --env-vars

Version.container.env フィールドに設定された変数に加えて、AI Platform Prediction では構成に基づいてその他の変数が設定されます。詳細については、これらのフィールドとコンテナのエントリポイント コマンドでの環境変数の使用をご覧ください。

次の例は、Google Cloud CLI を使用してモデル バージョンを作成するときに、これらのフィールドを指定する方法を示しています。

gcloud beta ai-platform versions create VERSION \
  --region=REGION \
  --model=MODEL \
  --machine-type=n1-standard-4 \
  --image=IMAGE_URI \
  --command=executable,param1,param2 \
  --args=param3,param4 \
  --ports=8081 \
  --env-vars \
    VAR1='value 1' \
    VAR2='value 2'

次のように置き換えます。

Version.routes の構成

Version.routes フィールドで RouteMap メッセージを指定できます。このメッセージには次のサブフィールドを指定できます。gcloud beta ai-platform versions create コマンドを使用してモデル バージョンを作成する場合は、コマンドライン フラグを使用して各サブフィールドを指定できます。

health(省略可)

AI Platform Prediction でヘルスチェックを送信するコンテナの HTTP サーバーのパス。

このフィールドを指定しない場合のデフォルトは /v1/models/MODEL/versions/VERSION で、MODELVERSION は、モデル名とモデルのバージョンにそれぞれ置き換えられます。

gcloud CLI フラグ: --health-route

predict(オプション)

AI Platform Prediction で予測リクエストを転送するコンテナの HTTP サーバーのパス。

このフィールドを指定しない場合のデフォルトは /v1/models/MODEL/versions/VERSION:predict で、MODELVERSION は、モデル名とモデルのバージョンにそれぞれ置き換えられます。

gcloud CLI フラグ: --predict-route

次の例は、gcloud CLI を使用してモデル バージョンを作成するときに、これらのフィールドを指定する方法を示しています。

gcloud beta ai-platform versions create VERSION \
  --region=REGION \
  --model=MODEL \
  --machine-type=n1-standard-4 \
  --image=IMAGE_URI \
  --command=executable,param1,param2 \
  --args=param3,param4 \
  --ports=8081 \
  --env-vars \
    VAR1='value 1' \
    VAR2='value 2' \
  --health-route=/health \
  --predict-route=/predict

次のように置き換えます。

予測リクエストの送信

オンライン予測リクエストをモデル バージョンに送信するには、オンライン予測のガイドに従ってください。このプロセスは、カスタム コンテナを使用しているかどうかにかかわらず、同様に機能します。

ただし、カスタム コンテナを使用する場合、各予測リクエストの本文で、ランタイム バージョンを使用するモデル バージョンのリクエスト本文の要件を満たす必要はありません。コンテナを設計する際は、可能な限りリクエストの本文を標準形式にすることをおすすめします。詳細については、カスタム コンテナの予測リクエストとレスポンスの要件をご覧ください。

次のステップ