このページでは、Cloud Storage を使用してバッチ予測を取得する方法について説明します。
1. 入力を準備する
Gemini モデルのバッチは、Cloud Storage に保存されている 1 つの JSON Lines(JSONL)ファイルを入力データとして受け入れます。バッチ入力データの各行は、Gemini API と同じ形式に従ったモデルへのリクエストです。
次に例を示します。
{"request":{"contents": [{"role": "user", "parts": [{"text": "What is the relation between the following video and image samples?"}, {"fileData": {"fileUri": "gs://cloud-samples-data/generative-ai/video/animals.mp4", "mimeType": "video/mp4"}}, {"fileData": {"fileUri": "gs://cloud-samples-data/generative-ai/image/cricket.jpeg", "mimeType": "image/jpeg"}}]}], "generationConfig": {"temperature": 0.9, "topP": 1, "maxOutputTokens": 256}}}
サンプル バッチ リクエスト ファイルをダウンロードします。
入力データを準備して Cloud Storage にアップロードしたら、AI Platform サービス エージェントに Cloud Storage ファイルに対する権限があることを確認します。
2. バッチジョブを送信する
バッチジョブは、 Google Cloud コンソール、REST API、または Google Gen AI SDK を使用して作成できます。
コンソール
- Google Cloud コンソールの [Vertex AI] セクションで、[バッチ推論] ページに移動します。
- [作成] をクリックします。
REST
バッチ予測ジョブを作成するには、projects.locations.batchPredictionJobs.create
メソッドを使用します。
リクエストのデータを使用する前に、次のように置き換えます。
- LOCATION: Gemini モデルをサポートするリージョン。
- PROJECT_ID: 実際のプロジェクト ID。
- MODEL_PATH: パブリッシャー モデル名(
publishers/google/models/gemini-2.5-flash
など)またはチューニング済みエンドポイント名(projects/PROJECT_ID/locations/LOCATION/models/MODEL_ID
など)。ここで、MODEL_ID はチューニング済みモデルのモデル ID です。 - INPUT_URI: JSONL バッチ予測入力の Cloud Storage の場所(
gs://bucketname/path/to/file.jsonl
など)。 - OUTPUT_FORMAT: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-cloud-storage-batch-prediction-job", "model": "MODEL_PATH", "inputConfig": { "instancesFormat": "jsonl", "gcsSource": { "uris" : "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. ジョブのステータスと進行状況をモニタリングする
ジョブを送信したら、 Google Cloud コンソール、REST API、または Google Gen AI SDK を使用して、バッチジョブのステータスを確認できます。
コンソール
- [バッチ推論] ページに移動します。
- バッチジョブを選択して進行状況をモニタリングします。
REST
バッチ予測ジョブをモニタリングするには、projects.locations.batchPredictionJobs.get
メソッドを使用して、レスポンスの CompletionStats
フィールドを表示します。
リクエストのデータを使用する前に、次のように置き換えます。
- LOCATION: Gemini モデルをサポートするリージョン。
- PROJECT_ID:
- BATCH_JOB_ID: 実際のバッチジョブ ID。
HTTP メソッドと URL:
GET https://LOCATION-aiplatform.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://LOCATION-aiplatform.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://LOCATION-aiplatform.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
ジョブの状態ステータスの説明については、JobState をご覧ください。
4. バッチ出力を取得する
バッチ予測ジョブが完了すると、ジョブの作成時に指定した Cloud Storage バケットに出力が保存されます。成功した行の場合、モデルのレスポンスは response
フィールドに格納されます。それ以外の場合、エラーの詳細が status
フィールドに格納され、詳細な調査が可能です。
長時間実行ジョブの間、完了した予測は指定された出力先に継続的にエクスポートされます。バッチ予測ジョブが終了すると、完了した行はすべてエクスポートされます。完了した予測に対してのみ課金されます。
出力例
成功例
{
"status": "",
"processed_time": "2024-11-01T18:13:16.826+00:00",
"request": {
"contents": [
{
"parts": [
{
"fileData": null,
"text": "What is the relation between the following video and image samples?"
},
{
"fileData": {
"fileUri": "gs://cloud-samples-data/generative-ai/video/animals.mp4",
"mimeType": "video/mp4"
},
"text": null
},
{
"fileData": {
"fileUri": "gs://cloud-samples-data/generative-ai/image/cricket.jpeg",
"mimeType": "image/jpeg"
},
"text": null
}
],
"role": "user"
}
]
},
"response": {
"candidates": [
{
"avgLogprobs": -0.5782725546095107,
"content": {
"parts": [
{
"text": "This video shows a Google Photos marketing campaign where animals at the Los Angeles Zoo take self-portraits using a modified Google phone housed in a protective case. The image is unrelated."
}
],
"role": "model"
},
"finishReason": "STOP"
}
],
"modelVersion": "gemini-2.0-flash-001@default",
"usageMetadata": {
"candidatesTokenCount": 36,
"promptTokenCount": 29180,
"totalTokenCount": 29216
}
}
}
失敗例
{
"status": "Bad Request: {\"error\": {\"code\": 400, \"message\": \"Please use a valid role: user, model.\", \"status\": \"INVALID_ARGUMENT\"}}",
"processed_time": "2025-07-09T19:57:43.558+00:00",
"request": {
"contents": [
{
"parts": [
{
"text": "Explain how AI works in a few words"
}
],
"role": "tester"
}
]
},
"response": {}
}