このページでは、Google Cloud コンソールまたは Vertex AI API を使用して、トレーニング済みの AutoML 分類モデルまたは回帰モデルにバッチ予測リクエストを行う方法について説明します。
バッチ予測リクエストは非同期リクエストです(オンライン予測は同期リクエストです)。エンドポイントにモデルをデプロイすることなく、モデルリソースからバッチ予測を直接リクエストします。表形式のデータで、すぐにレスポンスを必要とせず 1 回のリクエストで累積データを処理したい場合は、バッチ予測を使用します。
バッチ予測リクエストでは、入力ソースと、Vertex AI が予測結果を格納する出力先を指定します。
始める前に
バッチ予測リクエストを行う前に、モデルをトレーニングする必要があります。
入力データ
バッチ予測リクエストの入力データは、モデルが予測を行う際に使用するデータです。分類モデルまたは回帰モデルの場合、入力データは次のいずれかの形式で指定できます。
- BigQuery テーブル
- Cloud Storage の CSV オブジェクト
入力データにも、モデルのトレーニングに使用した形式を使用することをおすすめします。たとえば、BigQuery のデータを使用してモデルをトレーニングした場合は、BigQuery テーブルをバッチ予測の入力として使用することをおすすめします。Vertex AI は、すべての CSV 入力フィールドを文字列として扱うため、トレーニング データ形式と入力データ形式を混在させると、エラーが発生することがあります。
データソースには、モデルのトレーニングに使用したすべての列が含まれている必要があります。ただし、順序は問いません。トレーニング データに含まれなかった列や、トレーニング データに含まれているがトレーニングへの使用からは除外された列を含めることができます。これらの追加の列は出力に含まれますが、予測結果には影響しません。
入力データの要件
BigQuery テーブル
入力として BigQuery テーブルを選択する場合は、次のことを確認する必要があります。
- BigQuery のデータソース テーブルは、100 GB 以下でなければなりません。
- テーブルが別のプロジェクトにある場合は、そのプロジェクトの Vertex AI サービス アカウントに
BigQuery Data Editor
ロールを指定する必要があります。
CSV ファイル
Cloud Storage の入力として CSV オブジェクトを選択する場合は、次のことを確認する必要があります。
- データソースの先頭は、列名を含むヘッダー行にする必要があります。
- 各データソース オブジェクトは 10 GB 以下でなければなりません。最大サイズの 100 GB に達するまで、複数のファイルを含められます。
- Cloud Storage バケットが別のプロジェクトにある場合は、そのプロジェクトの Vertex AI サービス アカウントに
Storage Object Creator
ロールを付与する必要があります。 - すべての文字列は二重引用符(")で囲む必要があります。
出力形式
バッチ予測リクエストの出力形式は、入力に使用した形式と同じにする必要はありません。たとえば、BigQuery テーブルを入力として使用した場合は、Cloud Storage の CSV オブジェクトに結果を出力できます。
モデルにバッチ予測リクエストを行う
バッチ予測リクエストを行うには、Google Cloud コンソールまたは Vertex AI API を使用します。入力データソースは、Cloud Storage バケットまたは BigQuery テーブルに格納された CSV オブジェクトです。入力として送信したデータの量によっては、バッチ予測タスクが完了するまでに時間がかかることがあります。
Google Cloud コンソール
Google Cloud コンソールを使用してバッチ予測をリクエストします。
- Google Cloud コンソールの [Vertex AI] セクションで、[バッチ予測] ページに移動します。
- [作成] をクリックして、[新しいバッチ予測] ウィンドウを開きます。
- [バッチ予測の定義] で、次の手順を完了します。
- バッチ予測の名前を入力します。
- [モデル名] で、このバッチ予測に使用するモデルの名前を選択します。
- [バージョン] で、このバッチ予測に使用するモデル バージョンを選択します。
- [ソースを選択] で、ソース入力データが Cloud Storage 上の CSV ファイルか BigQuery のテーブルかを選択します。
- CSV ファイルの場合は、CSV 入力ファイルのある Cloud Storage のロケーションを指定します。
- BigQuery テーブルの場合、テーブルが存在するプロジェクト ID、BigQuery データセット ID、BigQuery テーブルまたはビュー ID を指定します。
- [出力] で CSV または BigQuery を選択します。
- CSV の場合は、Vertex AI が出力を保存する Cloud Storage バケットを指定します。
- BigQuery の場合は、プロジェクト ID または既存のデータセットを指定します。
- プロジェクト ID を指定するには、[Google Cloud プロジェクト ID] フィールドにプロジェクト ID を入力します。Vertex AI により、新しい出力データセットが作成されます。
- 既存のデータセットを指定するには、[Google Cloud プロジェクト ID] フィールドに BigQuery パス(
bq://projectid.datasetid
など)を入力します。
- 省略可。説明(特徴アトリビューション)付きの予測をリクエストして、モデルがどのように予測を達成したかを確認できます。ローカル特徴量の重要度の値は、各特徴量が予測結果に及ぼした影響の度合いを示します。特徴アトリビューションは、Vertex Explainable AI による Vertex AI の予測に含まれています。
特徴アトリビューションを有効にするには、[このモデルの特徴アトリビューションを有効にする] を選択します。このオプションは、出力先が Cloud Storage の BigQuery または JSONL である場合に使用できます。特徴アトリビューションは Cloud Storage の CSV ではサポートされていません。
- 省略可: バッチ予測の Model Monitoring 分析はプレビュー版として提供されています。スキュー検出構成をバッチ予測ジョブに追加する方法については、前提条件をご覧ください。
- [このバッチ予測のモデルのモニタリングを有効にする] をクリックしてオンにします。
- トレーニング データソースを選択します。選択したトレーニング データソースのデータパスまたは場所を入力します。
- (省略可)[アラートのしきい値] で、アラートをトリガーするしきい値を指定します。
- [通知メール] に、モデルがアラートのしきい値を超えたときにアラートを受け取るメールアドレスを、カンマ区切り形式で 1 つ以上入力します。
- 省略可: 通知チャネルの場合、モデルがアラートのしきい値を超えたときにアラートを受け取るには、Cloud Monitoring チャネルを追加します。[通知チャンネルを管理] をクリックして、既存の Cloud Monitoring チャネルを選択するか、新しい Cloud Monitoring チャネルを作成できます。コンソールでは、PagerDuty、Slack、Pub/Sub 通知チャネルがサポートされています。
- [作成] をクリックします。
API: BigQuery
REST
バッチ予測をリクエストするには、batchPredictionJobs.create メソッドを使用します。
リクエストのデータを使用する前に、次のように置き換えます。
- LOCATION_ID: モデルを保存し、バッチ予測ジョブを実行するリージョン。例:
us-central1
- PROJECT_ID: 実際のプロジェクト ID
- BATCH_JOB_NAME: バッチジョブの表示名
- MODEL_ID: 予測に使用するモデルの ID
-
INPUT_URI: BigQuery データソースへの参照。フォームで次の操作を行います。
bq://bqprojectId.bqDatasetId.bqTableId
-
OUTPUT_URI: BigQuery の宛先への参照(予測が作成される場所)。プロジェクト ID と、必要に応じて既存のデータセット ID を指定します。プロジェクト ID のみを指定した場合は、Vertex AI によって新しい出力データセットが作成されます。次の形式を使用します。
bq://bqprojectId.bqDatasetId
- MACHINE_TYPE: このバッチ予測ジョブに使用されるマシンリソース。詳細
- STARTING_REPLICA_COUNT: このバッチ予測ジョブの開始ノード数。ノード数は負荷に応じてノードの最大数まで増減できますが、この数を下回ることはできません。
- MAX_REPLICA_COUNT: このバッチ予測ジョブの最大ノード数。ノード数は負荷に応じて増減できますが、最大値を超えることはできません。これは省略可能で、デフォルトは 10 です。
-
GENERATE_EXPLANATION:
説明(特徴アトリビューション)付きの予測をリクエストして、モデルがどのように予測を達成したかを確認できます。ローカル特徴量の重要度の値は、各特徴量が予測結果に及ぼした影響の度合いを示します。特徴アトリビューションは、Vertex Explainable AI による Vertex AI の予測に含まれています。
デフォルト値は false です。特徴アトリビューションを有効にするには、true に設定します。
HTTP メソッドと URL:
POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs
リクエストの本文(JSON):
{ "displayName": "BATCH_JOB_NAME", "model": "MODEL_ID", "inputConfig": { "instancesFormat": "bigquery", "bigquerySource": { "inputUri": "INPUT_URI" } }, "outputConfig": { "predictionsFormat": "bigquery", "bigqueryDestination": { "outputUri": "OUTPUT_URI" } }, "dedicatedResources": { "machineSpec": { "machineType": "MACHINE_TYPE", "acceleratorCount": "0" }, "startingReplicaCount": STARTING_REPLICA_COUNT, "maxReplicaCount": MAX_REPLICA_COUNT }, "generateExplanation": GENERATE_EXPLANATION }
リクエストを送信するには、次のいずれかのオプションを選択します。
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_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs"
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_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs" | Select-Object -Expand Content
次のような JSON レスポンスが返されます。
{ "name": "projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs/67890", "displayName": "batch_job_1 202005291958", "model": "projects/12345/locations/us-central1/models/5678", "state": "JOB_STATE_PENDING", "inputConfig": { "instancesFormat": "bigquery", "bigquerySource": { "inputUri": "INPUT_URI" } }, "outputConfig": { "predictionsFormat": "bigquery", "bigqueryDestination": { "outputUri": bq://12345 } }, "dedicatedResources": { "machineSpec": { "machineType": "n1-standard-32", "acceleratorCount": "0" }, "startingReplicaCount": 2, "maxReplicaCount": 6 }, "manualBatchTuningParameters": { "batchSize": 4 }, "generateExplanation": false, "outputInfo": { "bigqueryOutputDataset": "bq://12345.reg_model_2020_10_02_06_04 } "state": "JOB_STATE_PENDING", "createTime": "2020-09-30T02:58:44.341643Z", "updateTime": "2020-09-30T02:58:44.341643Z", }
Java
このサンプルを試す前に、Vertex AI クイックスタート: クライアント ライブラリの使用にある Java の設定手順を完了してください。詳細については、Vertex AI Java API のリファレンス ドキュメントをご覧ください。
Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
次のサンプルでは、INSTANCES_FORMAT と PREDICTIONS_FORMAT を「bigquery」に置き換えます。他のプレースホルダを置き換える方法については、このセクションの「REST とコマンドライン」タブをご覧ください。Python
Vertex AI SDK for Python のインストールまたは更新の方法については、Vertex AI SDK for Python をインストールするをご覧ください。 詳細については、Python API リファレンス ドキュメントをご覧ください。
次のサンプルでは、instances_format パラメータと predictions_format パラメータを bigquery に設定します。他のパラメータの設定方法については、このセクションの「REST とコマンドライン」タブをご覧ください。API: Cloud Storage
REST
バッチ予測をリクエストするには、batchPredictionJobs.create メソッドを使用します。
リクエストのデータを使用する前に、次のように置き換えます。
- LOCATION_ID: モデルを保存し、バッチ予測ジョブを実行するリージョン。例:
us-central1
- PROJECT_ID: 実際のプロジェクト ID
- BATCH_JOB_NAME: バッチジョブの表示名
- MODEL_ID: 予測に使用するモデルの ID
-
URI: トレーニング データを含む Cloud Storage バケットへのパス(URI)。複数指定することも可能です。各 URI の形式は次のとおりです。
gs://bucketName/pathToFileName
-
OUTPUT_URI_PREFIX: 予測が作成される Cloud Storage の宛先のパス。Vertex AI は、このパスのタイムスタンプ付きのサブディレクトリにバッチ予測を書き込みます。この値は、次の形式の文字列に設定します。
gs://bucketName/pathToOutputDirectory
- MACHINE_TYPE: このバッチ予測ジョブに使用されるマシンリソース。詳細
- STARTING_REPLICA_COUNT: このバッチ予測ジョブの開始ノード数。ノード数は負荷に応じてノードの最大数まで増減できますが、この数を下回ることはできません。
- MAX_REPLICA_COUNT: このバッチ予測ジョブの最大ノード数。ノード数は負荷に応じて増減できますが、最大値を超えることはできません。これは省略可能で、デフォルトは 10 です。
-
GENERATE_EXPLANATION:
説明(特徴アトリビューション)付きの予測をリクエストして、モデルがどのように予測を達成したかを確認できます。ローカル特徴量の重要度の値は、各特徴量が予測結果に及ぼした影響の度合いを示します。特徴アトリビューションは、Vertex Explainable AI による Vertex AI の予測に含まれています。
デフォルト値は false です。特徴アトリビューションを有効にするには、true に設定します。 このオプションは、出力先が JSONL の場合にのみ使用できます特徴アトリビューションは Cloud Storage の CSV ではサポートされていません。
HTTP メソッドと URL:
POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs
リクエストの本文(JSON):
{ "displayName": "BATCH_JOB_NAME", "model": "MODEL_ID", "inputConfig": { "instancesFormat": "csv", "gcsSource": { "uris": [ URI1,... ] }, }, "outputConfig": { "predictionsFormat": "csv", "gcsDestination": { "outputUriPrefix": "OUTPUT_URI_PREFIX" } }, "dedicatedResources": { "machineSpec": { "machineType": "MACHINE_TYPE", "acceleratorCount": "0" }, "startingReplicaCount": STARTING_REPLICA_COUNT, "maxReplicaCount": MAX_REPLICA_COUNT }, "generateExplanation": GENERATE_EXPLANATION }
リクエストを送信するには、次のいずれかのオプションを選択します。
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_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs"
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_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs" | Select-Object -Expand Content
次のような JSON レスポンスが返されます。
{ "name": "projects/PROJECT__ID/locations/LOCATION_ID/batchPredictionJobs/67890", "displayName": "batch_job_1 202005291958", "model": "projects/12345/locations/us-central1/models/5678", "state": "JOB_STATE_PENDING", "inputConfig": { "instancesFormat": "csv", "gcsSource": { "uris": [ "gs://bp_bucket/reg_mode_test" ] } }, "outputConfig": { "predictionsFormat": "csv", "gcsDestination": { "outputUriPrefix": "OUTPUT_URI_PREFIX" } }, "dedicatedResources": { "machineSpec": { "machineType": "n1-standard-32", "acceleratorCount": "0" }, "startingReplicaCount": 2, "maxReplicaCount": 6 }, "manualBatchTuningParameters": { "batchSize": 4 } "outputInfo": { "gcsOutputDataset": "OUTPUT_URI_PREFIX/prediction-batch_job_1 202005291958-2020-09-30T02:58:44.341643Z" } "state": "JOB_STATE_PENDING", "createTime": "2020-09-30T02:58:44.341643Z", "updateTime": "2020-09-30T02:58:44.341643Z", }
バッチ予測の結果を取得する
Vertex AI は、バッチ予測の出力を指定の宛先(BigQuery または Cloud Storage)に送信します。
BigQuery
出力データセット
BigQuery を使用している場合、バッチ予測の出力は出力データセットに保存されます。Vertex AI にデータセットを提供した場合、データセットの名前(BQ_DATASET_NAME)は前に指定した名前です。出力データセットを指定しなかった場合は、Vertex AI によって作成されます。名前(BQ_DATASET_NAME)を確認する手順は次のとおりです。
- Google Cloud コンソールで、[Vertex AI] の [バッチ予測] ページに移動します。
- 作成した予測を選択します。
-
出力データセットは [エクスポート ロケーション] に表示されます。データセット名は
prediction_MODEL_NAME_TIMESTAMP
のように構成されています。
出力データセットには、次の 3 つの出力テーブルのうち 1 つ以上が含まれます。
-
予測テーブル
このテーブルには、予測がリクエストされた入力データのすべての行が含まれています(TARGET_COLUMN_NAME = null)。
-
エラーテーブル
このテーブルには、バッチ予測中に発生した重大でないエラーの行が含まれています。重大でないエラーは、Vertex AI が予測を返せなかった入力データの行に対応しています。
予測テーブル
テーブルの名前(BQ_PREDICTIONS_TABLE_NAME)は、「predictions_」にバッチ予測ジョブの開始時のタイムスタンプが追加された形式(predictions_TIMESTAMP
)になっています。
予測を取得するには、BigQuery ページに移動します。
クエリの形式はモデルタイプによって異なります。分類:
SELECT predicted_TARGET_COLUMN_NAME.classes AS classes, predicted_TARGET_COLUMN_NAME.scores AS scores FROM BQ_DATASET_NAME.BQ_PREDICTIONS_TABLE_NAME
classes
は潜在的なクラスのリストで、scores
は対応する信頼性スコアです。
回帰:
SELECT predicted_TARGET_COLUMN_NAME.value, predicted_TARGET_COLUMN_NAME.lower_bound, predicted_TARGET_COLUMN_NAME.upper_bound FROM BQ_DATASET_NAME.BQ_PREDICTIONS_TABLE_NAME
特徴アトリビューションを有効にした場合、予測テーブルでも確認できます。特徴 BQ_FEATURE_NAME のアトリビューションにアクセスするには、次のクエリを実行します
SELECT explanation.attributions[OFFSET(0)].featureAttributions.BQ_FEATURE_NAME FROM BQ_DATASET_NAME.BQ_PREDICTIONS_TABLE_NAME
エラーテーブル
テーブルの名前(BQ_ERRORS_TABLE_NAME)は、errors_
にバッチ予測ジョブの開始時のタイムスタンプが追加された形式(errors_TIMESTAMP
)になっています。
エラー検証テーブルを取得するには:
-
コンソールで、[BigQuery] ページに移動します。
- 次のクエリを実行します。
SELECT * FROM BQ_DATASET_NAME.BQ_ERRORS_TABLE_NAME
- errors_TARGET_COLUMN_NAME.code
- errors_TARGET_COLUMN_NAME.message
Cloud Storage
Cloud Storage を出力先に指定した場合、バッチ予測リクエストの結果は、指定したバケット内の新しいフォルダに CSV オブジェクトとして返されます。フォルダの名前は、先頭に「prediction-」が追加され、バッチ予測ジョブの開始時のタイムスタンプが付加されたモデルの名前です。Cloud Storage フォルダ名は、モデルの [バッチ予測] タブで確認できます。
Cloud Storage フォルダには、次の 2 種類のオブジェクトが含まれます。-
予測オブジェクト
予測オブジェクトの名前は Predictions_1.csv、predictions_2.csv などです。予測ファイルには、列名が表示されたヘッダー行と返されたすべての予測の行が含まれています。予測オブジェクトでは、Vertex AI が予測データを返し、モデルタイプに応じて予測結果の新しい列が 1 つ以上作成されます。
-
分類: ターゲット列の各潜在値に対して、
TARGET_COLUMN_NAME_VALUE_score
という列が結果に追加されます。この列には、その値のスコアまたは信頼度の推定値が含まれます。 -
回帰: 行の予測値が、
predicted_TARGET_COLUMN_NAME
という列で返されます。CSV 出力の予測間隔は返されません。
-
分類: ターゲット列の各潜在値に対して、
-
エラー オブジェクト
エラー オブジェクトの名前は errors_1.csv、errors_2.csv などです。ヘッダー行と、Vertex AI が予測を返せなかった入力データ内の各行(null 値を許容しない特徴が null であった場合など)が含まれます。
注: 結果が大きい場合は、複数のオブジェクトに分割されます。
特徴アトリビューションは、Cloud Storage で返されるバッチ予測結果では使用できません。
予測結果を解釈する
分類
分類モデルは信頼スコアを返します。
信頼スコアは、モデルによる各クラスまたはラベルとテスト項目の関連性の強さを表します。数値が大きいほど、その項目にラベルを適用するモデルの信頼度が高くなります。モデルの結果を受け入れるのに必要な信頼スコアの高さを決定します。
回帰
回帰モデルは予測値を返します。宛先が BigQuery の場合、予測間隔も返されます。予測区間は、モデルが実際の結果を 95% の信頼度で含む値の範囲を示します。
説明の結果を解釈する
バッチ予測の結果が BigQuery に保存されていて、特徴アトリビューションを有効にした場合、予測テーブルで特徴アトリビューションの値を確認できます。
ローカル特徴量の重要度を計算するには、まず、ベースライン予測スコアを計算します。ベースライン値は、数値特徴の中央値とカテゴリ型の特徴のモードを使用して、トレーニング データから計算されます。ベースライン値から生成される予測が、ベースライン予測スコアです。ベースライン値はモデルに対して 1 回計算され、変更されることはありません。
特定の予測について、各特徴のローカル特徴量の重要度は、ベースラインの予測スコアと比較して、結果に特徴量がどのくらい加算または減算が生じたかを示します。特徴量の重要度の値をすべて合計すると、ベースラインの予測スコアと予測結果の差分と等しくなります。
分類モデルの場合、スコアは常に 0.0~1.0 にすべて含まれます。したがって、分類モデルのローカル特徴量の重要度の値は常に -1.0~1.0 になります。
特徴アトリビューション クエリの例と詳細については、分類と回帰のための特徴アトリビューションをご覧ください。次のステップ
- モデルのエクスポート方法を学習する。