このページでは、Vertex AI を使用して AutoML 表形式のモデルを Cloud Storage にエクスポートし、そのモデルをオンプレミス サーバーまたは別のクラウド プロバイダでホストされているサーバーにダウンロードしてから、Docker を使用してモデルを予測に使用できるようにします。
画像と動画の Edge モデルのエクスポートについては、AutoML Edge モデルのエクスポートをご覧ください。
表形式モデルをエクスポートした後に Vertex AI に再びインポートする場合は、Vertex AI へのモデルのインポートをご覧ください。
制限事項
AutoML 表形式モデルのエクスポートには次の制限があります。
AutoML 表形式の分類モデルと回帰モデルのみエクスポートできます。AutoML 表形式の予測モデルはエクスポートできません。
Vertex Explainable AI は、エクスポートされた表形式モデルを使用できません。Vertex Explainable AI を使用する必要がある場合は、Vertex AI にホストされているモデルから予測を行う必要があります。
エクスポートした表形式モデルは、Advanced Vector Extensions(AVX)命令セットをサポートする x86 アーキテクチャ CPU でのみ実行できます。
エクスポート プロセス
モデルをエクスポートする手順は以下のとおりです。
始める前に
このタスクを実行するには、次のタスクを完了しておく必要があります。
- プロジェクトと開発環境を設定するの説明に従ってプロジェクトを設定します。
- ダウンロードするモデルをトレーニングします。
- エクスポートしたモデルの実行に使用するサーバーに、Google Cloud CLI をインストールして初期化します。
- Docker をサーバーにインストールします。
モデルをエクスポートする
コンソール
Google Cloud Console の Vertex AI セクションで、[モデル] ページに移動します。
エクスポートする表形式モデルをクリックして、詳細ページを開きます。
ボタンバーの [エクスポート] をクリックして、モデルをエクスポートします。
目的の場所で Cloud Storage フォルダを選択または作成します。
バケットは、バケットの要件を満たしている必要があります。
モデルを最上位のバケットにエクスポートすることはできません。少なくとも 1 レベルのフォルダを使用する必要があります。
最良の結果を得るには、新しい空のフォルダを作成します。後の手順でフォルダのコンテンツ全体をコピーします。
[エクスポート] をクリックします。
次のセクションでは、エクスポートしたモデルをサーバーにダウンロードします。
REST
モデルを Cloud Storage にエクスポートするには、models.export メソッドを使用します。リクエストのデータを使用する前に、次のように置き換えます。
- LOCATION: 使用するリージョン。
- PROJECT: 実際のプロジェクト ID。
- MODEL_ID: エクスポートするモデルの ID。
-
GCS_DESTINATION : Cloud Storage 内の出力先フォルダ。例:
gs://export-bucket/exports
モデルを最上位のバケットにエクスポートすることはできません。少なくとも 1 レベルのフォルダを使用する必要があります。
フォルダは、バケットの要件を満たしている必要があります。
最大限の効果を得るには、新しいフォルダを作成します。後の手順でフォルダのコンテンツ全体をコピーします。
HTTP メソッドと URL:
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT/locations/LOCATION/models/MODEL_ID:export
リクエストの本文(JSON):
{ "outputConfig": { "exportFormatId": "tf-saved-model", "artifactDestination": { "outputUriPrefix": "GCS_DESTINATION" } } }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を request.json
という名前のファイルに保存して、次のコマンドを実行します。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT/locations/LOCATION/models/MODEL_ID:export"
PowerShell
リクエスト本文を request.json
という名前のファイルに保存して、次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT/locations/LOCATION/models/MODEL_ID:export" | Select-Object -Expand Content
次のような JSON レスポンスが返されます。
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/models/MODEL_ID/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.aiplatform.v1.ExportModelOperationMetadata", "genericMetadata": { "createTime": "2020-10-12T20:53:40.130785Z", "updateTime": "2020-10-12T20:53:40.130785Z" }, "outputInfo": { "artifactOutputUri": "gs://OUTPUT_BUCKET/model-MODEL_ID/EXPORT_FORMAT/YYYY-MM-DDThh:mm:ss.sssZ" } } }
Java
このサンプルを試す前に、Vertex AI クイックスタート: クライアント ライブラリの使用にある Java の設定手順を完了してください。詳細については、Vertex AI Java API のリファレンス ドキュメントをご覧ください。
Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
Node.js
このサンプルを試す前に、Vertex AI クイックスタート: クライアント ライブラリの使用にある Node.js の設定手順を完了してください。詳細については、Vertex AI Node.js API のリファレンス ドキュメントをご覧ください。
Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
Python
Vertex AI SDK for Python のインストールまたは更新の方法については、Vertex AI SDK for Python をインストールするをご覧ください。 詳細については、Python API リファレンス ドキュメントをご覧ください。
エクスポート オペレーションのステータスを取得する
一部のリクエストでは、完了までに長時間かかるオペレーションが実行されます。このようなリクエストではオペレーション名が返されます。そのオペレーション名を使用して、オペレーションのステータス確認やキャンセルを行うことができます。Vertex AI には、長時間実行オペレーションに対して呼び出しを行うためのヘルパー メソッドが用意されています。詳細については、長時間実行オペレーションによる作業をご覧ください。
モデルサーバーを pull して実行する
このタスクでは、エクスポートしたモデルを Cloud Storage からダウンロードし、Docker コンテナを起動して、モデルが予測リクエストを受信できるようにします。
モデルサーバーを pull して実行するには:
モデルを実行するマシンで、エクスポートしたモデルを保存するディレクトリに移動します。
エクスポートしたモデルをダウンロードします。
gcloud storage cp <var>gcs-destination</var> . --recursive
ここで gcs-destination はエクスポートしたモデルが存在する Cloud Storage 内の場所のパスです。
モデルは、以下のパスの現在のディレクトリにコピーされます。
./model-<model-id>/tf-saved-model/<export-timestamp>
パスには
tf-saved-model
またはcustom-trained
を指定できます。ディレクトリ名からタイムスタンプを削除します。
mv model-<model-id>/tf-saved-model/<export-timestamp> model-<model-id>/tf-saved-model/<new-dir-name>
Docker では、タイムスタンプが含まれているとディレクトリが無効になります。
モデルサーバーの Docker イメージを pull します。
sudo docker pull MODEL_SERVER_IMAGE
pull するモデルサーバーのイメージは、エクスポートされたモデル ディレクトリの
environment.json
ファイルにあります。パスは次のようになります。./model-<model-id>/tf-saved-model/<new-dir-name>/environment.json
environment.json ファイルが存在しない場合は、次のコマンドを使用します。
MULTI_REGION-docker.pkg.dev/vertex-ai/automl-tabular/prediction-server-v1
MULTI_REGION
をus
、europe
、またはasia
に置き換え、Docker イメージの取得元となる Docker リポジトリを選択します。各リポジトリは同じ Docker イメージを提供しますが、Docker を実行しているマシンに最も近い Artifact Registry マルチリージョンを選択すると、レイテンシが短縮される可能性があります。作成したディレクトリ名を使用して、Docker コンテナを起動します。
docker run -v `pwd`/model-<model-id>/tf-saved-model/<new-dir-name>:/models/default -p 8080:8080 -it MODEL_SERVER_IMAGE
モデルサーバーは、Ctrl-C
を使用していつでも停止できます。
モデルサーバーの Docker コンテナを更新する
モデルをエクスポートすると、モデルサーバーの Docker コンテナをダウンロードされます。このため、モデルサーバーを明示的に更新して、アップデートとバグの修正を取得する必要があります。次のコマンドを使用して、モデルサーバーを定期的に更新する必要があります。
docker pull MODEL_SERVER_IMAGE
Docker イメージの URI が、前に pull した Docker イメージの URI と一致することを確認します。
エクスポートされたモデルから予測を取得する
Vertex AI イメージ コンテナのモデルサーバーは予測リクエストを処理し、予測結果を返します。
バッチ予測は、エクスポートしたモデルでは使用できません。
予測データの形式
予測リクエストのデータ(payload
フィールド)には、次の JSON 形式を指定します。
{ "instances": [ { "column_name_1": value, "column_name_2": value, … } , … ] }
次の例は、カテゴリ列、数値配列、構造体の 3 つの列を持つリクエストを示しています。このリクエストには 2 つの行が含まれています。
{ "instances": [ { "categorical_col": "mouse", "num_array_col": [ 1, 2, 3 ], "struct_col": { "foo": "piano", "bar": "2019-05-17T23:56:09.05Z" } }, { "categorical_col": "dog", "num_array_col": [ 5, 6, 7 ], "struct_col": { "foo": "guitar", "bar": "2019-06-17T23:56:09.05Z" } } ] }
予測をリクエストする
リクエスト データをテキスト ファイルに入力します(
tmp/request.json
など)。ミニバッチ サイズと呼ばれる予測リクエストのデータ行数は、予測レイテンシとスループットに影響します。ミニバッチ サイズが大きいほど、レイテンシとスループットが高くなります。レイテンシを短縮するには、ミニバッチ サイズを小さくします。スループットを向上させるには、ミニバッチ サイズを増やします。最も一般的なミニバッチ サイズは、1、32、64、128、256、512、1024 です。
予測をリクエストします。
curl -X POST --data @/tmp/request.json http://localhost:8080/predict
予測結果の形式
結果の形式はモデル目標によって異なります。
分類モデルの結果
分類モデル(バイナリとマルチクラス)の予測結果は、ターゲット列の潜在値ごとに確率スコアを返します。このスコアの使用方法を決定する必要があります。たとえば、提供されたスコアからバイナリ分類を取得するには、しきい値を指定します。「A」と「B」の 2 つのクラスがある場合、「A」のスコアが選択したしきい値より大きい場合は「A」、そうでない場合は「B」と分類します。不均衡なデータセットの場合、しきい値が 100% または 0% に近づくことがあります。
分類モデルの結果ペイロードは、次の例のようになります。
{ "predictions": [ { "scores": [ 0.539999994635582, 0.2599999845027924, 0.2000000208627896 ], "classes": [ "apple", "orange", "grape" ] }, { "scores": [ 0.23999999463558197, 0.35999998450279236, 0.40000002086278963 ], "classes": [ "apple", "orange", "grape" ] } ] }
回帰モデルの結果
予測値は、予測リクエストの有効な各行に対して返されます。エクスポートしたモデルの予測間隔は返されません。
回帰モデルの結果ペイロードは、次の例のようになります。
{ "predictions": [ { "value": -304.3663330078125, "lower_bound": -56.32196807861328, "upper_bound": 126.51904296875 }, { "value": -112.3663330078125, "lower_bound": 16.32196807861328, "upper_bound": 255.51904296875 } ] }