このページでは、BigQuery を使用してバッチ予測を取得する方法について説明します。
1. 入力を準備する
BigQuery ストレージ入力
- サービス アカウントに適切な BigQuery 権限が付与されている必要があります。サービス アカウントに BigQuery ユーザーのロールを付与するには、次のように
gcloud iam service-accounts add-iam-policy-bindingコマンドを使用します。
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/bigquery.user"
次の値を置き換えます。
- PROJECT_ID: サービス アカウントが作成されたプロジェクト。
- SERVICE_ACCOUNT_ID: サービス アカウントの ID。
request列は必須で、有効な JSON である必要があります。この JSON データは、モデルの入力を表します。request列のコンテンツは、GenerateContentRequestの構造と一致している必要があります。 + 入力テーブルには、request以外の列のデータ型を含めることができます。これらの列には、配列、構造体、範囲、日時、地理情報以外の BigQuery データ型を使用できます。これらの列はコンテンツの生成では無視されますが、出力テーブルには含まれます。
| 入力の例(JSON) |
|---|
|
2. バッチジョブを送信する
バッチジョブは、 Google Cloud コンソール、Google Gen AI SDK、または REST API を使用して作成できます。
ジョブとテーブルは同じリージョンに存在する必要があります。
コンソール
- Google Cloud コンソールの [Vertex AI] セクションで、[バッチ推論] ページに移動します。
- [作成] をクリックします。
REST
バッチ予測ジョブを作成するには、projects.locations.batchPredictionJobs.create メソッドを使用します。
リクエストのデータを使用する前に、次のように置き換えます。
- LOCATION: Gemini モデルをサポートするリージョン。
- PROJECT_ID: 実際のプロジェクト ID。
- MODEL_PATH: パブリッシャー モデル名(
publishers/google/models/gemini-2.0-flash-001など)またはチューニング済みエンドポイント名(projects/PROJECT_ID/locations/LOCATION/models/MODEL_IDなど)。ここで、MODEL_ID はチューニング済みモデルのモデル ID です。 - INPUT_URI: バッチ予測入力が配置されている BigQuery テーブル(
bq://myproject.mydataset.input_tableなど)。データセットは、バッチ予測ジョブと同じリージョンに配置する必要があります。マルチリージョン データセットはサポートされていません。 - OUTPUT_FORMAT: BigQuery テーブルに出力するには、
bigqueryを指定します。Cloud Storage バケットに出力するには、jsonlを指定します。 - DESTINATION: BigQuery の場合は、
bigqueryDestinationを指定します。Cloud Storage の場合は、gcsDestinationを指定します。 - OUTPUT_URI_FIELD_NAME: BigQuery の場合は、
outputUriを指定します。Cloud Storage の場合は、outputUriPrefixを指定します。 - OUTPUT_URI: BigQuery の場合は、テーブルの場所(
bq://myproject.mydataset.output_resultなど)を指定します。BigQuery の出力データセットのリージョンは、Vertex AI バッチ予測ジョブのリージョンと同じである必要があります。Cloud Storage の場合は、バケットとディレクトリの場所(例:gs://mybucket/path/to/output)を指定します。
HTTP メソッドと URL:
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/batchPredictionJobs
リクエストの本文(JSON):
{
"displayName": "my-bigquery-batch-prediction-job",
"model": "MODEL_PATH",
"inputConfig": {
"instancesFormat": "bigquery",
"bigquerySource":{
"inputUri" : "INPUT_URI"
}
},
"outputConfig": {
"predictionsFormat": "OUTPUT_FORMAT",
"DESTINATION": {
"OUTPUT_URI_FIELD_NAME": "OUTPUT_URI"
}
}
}
リクエストを送信するには、次のいずれかのオプションを選択します。
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_ID/locations/LOCATION/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-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/batchPredictionJobs" | Select-Object -Expand Content
次のような JSON レスポンスが返されます。
レスポンスには、バッチジョブの固有識別子が含まれます。BATCH_JOB_ID を使用して、バッチジョブのステータスをポーリングできます。詳細については、ジョブのステータスをモニタリングするをご覧ください。注: カスタム サービス アカウント、ライブ進捗状況、CMEK、VPCSC のレポートはサポートされていません。Python
インストール
pip install --upgrade google-genai
詳しくは、SDK リファレンス ドキュメントをご覧ください。
Vertex AI で Gen AI SDK を使用するための環境変数を設定します。
# Replace the `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION` values # with appropriate values for your project. export GOOGLE_CLOUD_PROJECT=GOOGLE_CLOUD_PROJECT export GOOGLE_CLOUD_LOCATION=global export GOOGLE_GENAI_USE_VERTEXAI=True
3. ジョブのステータスと進行状況をモニタリングする
ジョブを送信したら、API、SDK、Cloud コンソールを使用してバッチジョブのステータスを確認できます。
コンソール
- [バッチ推論] ページに移動します。
- バッチジョブを選択して進行状況をモニタリングします。
REST
バッチ予測ジョブをモニタリングするには、projects.locations.batchPredictionJobs.get メソッドを使用して、レスポンスの CompletionStats フィールドを表示します。
リクエストのデータを使用する前に、次のように置き換えます。
- ENDPOINT_PREFIX: モデルリソースのリージョンと
-(例:us-central1-)。グローバル エンドポイントを使用する場合は、空白のままにします。注: チューニング済みモデルを使用するバッチ推論では、グローバル エンドポイントはサポートされていません。 - LOCATION: Gemini モデルをサポートするリージョン。グローバル エンドポイントを使用する場合は、「
global」と入力します。 - PROJECT_ID: プロジェクト ID。
- BATCH_JOB_ID: 実際のバッチジョブ ID。
HTTP メソッドと URL:
GET https://ENDPOINT_PREFIXaiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/batchPredictionJobs/BATCH_JOB_ID
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://ENDPOINT_PREFIXaiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/batchPredictionJobs/BATCH_JOB_ID"
PowerShell
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://ENDPOINT_PREFIXaiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/batchPredictionJobs/BATCH_JOB_ID" | Select-Object -Expand Content
次のような JSON レスポンスが返されます。
Python
インストール
pip install --upgrade google-genai
詳しくは、SDK リファレンス ドキュメントをご覧ください。
Vertex AI で Gen AI SDK を使用するための環境変数を設定します。
# Replace the `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION` values # with appropriate values for your project. export GOOGLE_CLOUD_PROJECT=GOOGLE_CLOUD_PROJECT export GOOGLE_CLOUD_LOCATION=global export GOOGLE_GENAI_USE_VERTEXAI=True
特定のバッチジョブのステータスは次のいずれかです。
JOB_STATE_PENDING: 容量のキュー。ジョブは、running状態になるまで最大 72 時間queue状態になることがあります。JOB_STATE_RUNNING: 入力ファイルが正常に検証され、バッチが現在実行されています。JOB_STATE_SUCCEEDED: バッチが完了し、結果の準備が整いましたJOB_STATE_FAILED: 入力ファイルが検証プロセスに失敗したか、RUNNING状態になってから 24 時間以内に完了できませんでした。JOB_STATE_CANCELLING: バッチはキャンセル中ですJOB_STATE_CANCELLED: バッチがキャンセルされました
4. バッチ出力を取得する
バッチ予測タスクが完了すると、リクエストで指定した BigQuery テーブルに出力が保存されます。
成功した行の場合、モデルのレスポンスは response 列に格納されます。
それ以外の場合、エラーの詳細が status 列に格納され、詳細な調査が可能です。
出力の例
成功例
{
"candidates": [
{
"content": {
"role": "model",
"parts": [
{
"text": "In a medium bowl, whisk together the flour, baking soda, baking powder."
}
]
},
"finishReason": "STOP",
"safetyRatings": [
{
"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
"probability": "NEGLIGIBLE",
"probabilityScore": 0.14057204,
"severity": "HARM_SEVERITY_NEGLIGIBLE",
"severityScore": 0.14270912
}
]
}
],
"usageMetadata": {
"promptTokenCount": 8,
"candidatesTokenCount": 396,
"totalTokenCount": 404
}
}
失敗例
リクエスト
{"contents":[{"parts":{"text":"Explain how AI works in a few words."},"role":"tester"}]}レスポンス
Bad Request: {"error": {"code": 400, "message": "Please use a valid role: user, model.", "status": "INVALID_ARGUMENT"}}