バッチテキスト生成

バッチ予測では、レイテンシの影響を受けない複数のマルチモーダル プロンプトを効率的に送信できます。オンライン予測では一度に 1 つの入力プロンプトに制限されますが、バッチ予測では 1 つのバッチ リクエストで大量のマルチモーダル プロンプトを送信できます。その後、レスポンスにより BigQuery ストレージ出力ロケーションに非同期でデータが入力されます。

Gemini モデルのバッチ リクエストは、標準リクエストから 50% 割引されます。詳細については、料金のページをご覧ください。

バッチ予測をサポートするマルチモーダル モデル

次のマルチモーダル モデルはバッチ予測をサポートしています。

  • gemini-1.5-flash-002
  • gemini-1.5-flash-001
  • gemini-1.5-pro-002
  • gemini-1.5-pro-001
  • gemini-1.0-pro-002
  • gemini-1.0-pro-001

入力を準備する

マルチモーダル モデルのバッチ リクエストは、BigQuery ストレージ ソースと Cloud Storage ソースを受け入れます。

BigQuery ストレージ入力

  • request 列のコンテンツは有効な JSON である必要があります。この JSON データは、モデルの入力を表します。
  • JSON 指示のコンテンツは、GenerateContentRequest の構造と一致している必要があります。
  • 入力テーブルには、request 以外の列を含めることができます。コンテンツの生成では無視されますが、出力テーブルには含まれます。システムは、出力用に responsestatus の 2 つの列名を予約します。これらは、バッチ予測ジョブの結果に関する情報を提供するために使用されます。
  • バッチ予測は、Gemini の fileData フィールドをサポートしていません。
入力の例(JSON)
        
{
  "contents": [
    {
      "role": "user",
      "parts": {
        "text": "Give me a recipe for banana bread."
      }
    }
  ],
  "system_instruction": {
    "parts": [
      {
        "text": "You are a chef."
      }
    ]
  }
}
        
        

Cloud Storage 入力

  • ファイル形式: JSON Lines(JSONL)
  • 場所: us-central1
  • サービス アカウントの適切な読み取り権限
  • 特定の Gemini モデルの fileData 制限。
    入力の例(JSONL)
    
    {"request":{"contents": [{"role": "user", "parts": [{"text": "What is the relation between the following video and image samples?"}, {"file_data": {"file_uri": "gs://cloud-samples-data/generative-ai/video/animals.mp4", "mime_type": "video/mp4"}}, {"file_data": {"file_uri": "gs://cloud-samples-data/generative-ai/image/cricket.jpeg", "mime_type": "image/jpeg"}}]}]}}
    {"request":{"contents": [{"role": "user", "parts": [{"text": "Describe what is happening in this video."}, {"file_data": {"file_uri": "gs://cloud-samples-data/generative-ai/video/another_video.mov", "mime_type": "video/mov"}}]}]}}
        

バッチ レスポンスをリクエストする

送信した入力アイテム数によっては、バッチ生成タスクが完了するまでに時間がかかることがあります。

REST

Vertex AI API を使用してマルチモーダル プロンプトをテストするには、パブリッシャー モデル エンドポイントに POST リクエストを送信します。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: Google Cloud Platform プロジェクトの名前です。
  • BP_JOB_NAME: ジョブに付ける名前。
  • INPUT_URI: 入力ソース URI。これは、bq://PROJECT_ID.DATASET.TABLE 形式の BigQuery テーブル URI です。または、Cloud Storage バケットの URI です。
  • INPUT_SOURCE: 入力ソースのタイプ。bigquerySourcegcsSource を指定できます。
  • INSTANCES_FORMAT: 入力インスタンスの形式 - jsonl または bigquery のいずれか。
  • OUTPUT_URI: 出力テーブルまたはターゲット出力テーブルの URI(bq://PROJECT_ID.DATASET.TABLE 形式)。テーブルがまだ存在しない場合は、自動的に作成されます。

HTTP メソッドと URL:

POST https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/batchPredictionJobs

リクエストの本文(JSON):

{
    "displayName": "BP_JOB_NAME",
    "model": "publishers/google/models/gemini-1.0-pro-002",
    "inputConfig": {
      "instancesFormat":"INSTANCES_FORMAT",
      "inputSource":{ INPUT_SOURCE
        "inputUri" : "INPUT_URI"
      }
    },
    "outputConfig": {
      "predictionsFormat":"bigquery",
      "bigqueryDestination":{
        "outputUri": "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://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/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://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/batchPredictionJobs" | Select-Object -Expand Content

次のような JSON レスポンスが返されます。

{
  "name": "projects/{PROJECT_ID}/locations/us-central1/batchPredictionJobs/{BATCH_JOB_ID}",
  "displayName": "My first batch prediction",
  "model": "projects/{PROJECT_ID}/locations/us-central1/models/gemini-1.0-pro-002",
  "inputConfig": {
    "instancesFormat": "bigquery",
    "bigquerySource": {
      "inputUri": "bq://{PROJECT_ID}.mydataset.batch_predictions_input"
    }
  },
  "modelParameters": {},
  "outputConfig": {
    "predictionsFormat": "bigquery",
    "bigqueryDestination": {
      "outputUri": "bq://{PROJECT_ID}.mydataset.batch_predictions_output"
    }
  },
  "state": "JOB_STATE_PENDING",
  "createTime": "2023-07-12T20:46:52.148717Z",
  "updateTime": "2023-07-12T20:46:52.148717Z",
  "modelVersionId": "1"
}

レスポンスには、バッチジョブの固有識別子が含まれます。ジョブ stateJOB_STATE_SUCCEEDED になるまで、BATCH_JOB_ID を使用してバッチジョブのステータスをポーリングできます。例:

curl \
  -X GET \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/batchPredictionJobs/BATCH_JOB_ID

バッチ出力を取得する

バッチ予測タスクが完了すると、リクエストで指定した BigQuery テーブルに出力が保存されます。

BigQuery 出力の例

リクエスト レスポンス ステータス
'{"content":[{...}]}'
{
  "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
  }
}

Cloud Storage 出力の例

PROJECT_ID=[PROJECT ID]
REGION="us-central1"
MODEL_URI="publishers/google/models/gemini-1.0-pro-001@default"
INPUT_URI="[GCS INPUT URI]"
OUTPUT_URI="[OUTPUT URI]"

# Setting variables based on parameters
ENDPOINT="${REGION}-autopush-aiplatform.sandbox.googleapis.com"
API_VERSION=v1
ENV=autopush
BP_JOB_NAME="BP_testing_`date +%Y%m%d_%H%M%S`"

curl \
  -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  https://${ENDPOINT}/${API_VERSION}/projects/${PROJECT_ID}/locations/${REGION}/batchPredictionJobs \
-d '{
    "name": "'${BP_JOB_NAME}'",
    "displayName": "'${BP_JOB_NAME}'",
    "model": "'${MODEL_URI}'",
    "inputConfig": {
      "instancesFormat":"jsonl",
      "gcsSource":{
        "uris" : "'${INPUT_URI}'"
      }
    },
    "outputConfig": {
      "predictionsFormat":"jsonl",
      "gcsDestination":{
        "outputUriPrefix": "'${OUTPUT_URI}'"
      }
    },
    "labels": {"stage": "'${ENV}'"},
}'

次のステップ