Génération de texte par lots

Les prédictions par lots permettent d'envoyer efficacement plusieurs requêtes multimodales qui ne sont pas sensibles à la latence. Contrairement à la prédiction en ligne, où vous êtes limité à une requête d'entrée à la fois, vous pouvez envoyer un grand nombre de requêtes multimodales en une seule requête par lot. Vos réponses sont ensuite insérées de manière asynchrone dans l'emplacement de sortie de votre stockage BigQuery.

Remarque : Les requêtes par lots pour les modèles Gemini font l'objet d'une remise de 50 % par rapport aux requêtes standards. Pour en savoir plus, consultez la page des tarifs.

Modèles multimodaux compatibles avec les prédictions par lot

Les modèles multimodaux suivants sont compatibles avec les prédictions par lot.

  • 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

Préparer les entrées

Les requêtes par lots pour les modèles multimodaux acceptent les sources de stockage BigQuery et Cloud Storage.

Entrée de stockage BigQuery

  • Le contenu de la colonne request doit correspondre à du code JSON valide. Ces données JSON représentent votre entrée pour le modèle.
  • Le contenu des instructions JSON doit correspondre à la structure d'une requête GenerateContentRequest.
  • Votre table d'entrée peut contenir des colonnes autres que request. Elles sont ignorées pour la génération de contenu, mais sont incluses dans la table de sortie. Le système réserve deux noms de colonne pour la sortie: response et status. Ils permettent de fournir des informations sur le résultat de la tâche de prédiction par lot.
  • La prédiction par lots n'est pas compatible avec le champ fileData pour Gemini.
Exemple d'entrée (JSON)
        
{
  "contents": [
    {
      "role": "user",
      "parts": {
        "text": "Give me a recipe for banana bread."
      }
    }
  ],
  "system_instruction": {
    "parts": [
      {
        "text": "You are a chef."
      }
    ]
  }
}
        
        

Entrée Cloud Storage

  • Format de fichier : JSON Lines (JSONL)
  • Emplacement : us-central1
  • Autorisations de lecture appropriées pour le compte de service
  • Limitations fileData applicables à certains modèles Gemini
    Exemple d'entrée (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"}}]}]}}
        

Demander une réponse par lot

Selon le nombre d'éléments d'entrée envoyés, la tâche de génération par lot peut prendre un certain temps.

REST

Pour tester une requête multimodale à l'aide de l'API Vertex AI, envoyez une requête POST au point de terminaison du modèle du diffuseur.

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • PROJECT_ID : le nom de votre projet Google Cloud
  • BP_JOB_NAME: nom que vous avez choisi pour votre tâche.
  • INPUT_URI : URI source de l'entrée. Il s'agit d'un URI de table BigQuery au format bq://PROJECT_ID.DATASET.TABLE. Ou de l'URI de votre bucket Cloud Storage.
  • INPUT_SOURCE : type de source d'entrée. Les options sont bigquerySource et gcsSource.
  • INSTANCES_FORMAT : format des instances d'entrée (peut être "jsonl" ou "bigquery").
  • OUTPUT_URI : URI de la table de sortie ou de la table de sortie cible, au format bq://PROJECT_ID.DATASET.TABLE. Si la table n'existe pas déjà, elle est créée automatiquement.

Méthode HTTP et URL :

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

Corps JSON de la requête :

{
    "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"
        }
    }
}

Pour envoyer votre requête, choisissez l'une des options suivantes :

curl

Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

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

Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

$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

Vous devriez recevoir une réponse JSON de ce type :

{
  "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"
}

La réponse inclut un identifiant unique pour le job par lot. Vous pouvez interroger l'état de la tâche par lot à l'aide de BATCH_JOB_ID jusqu'à ce que le paramètre state soit défini sur JOB_STATE_SUCCEEDED. Exemple :

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

Récupérer une sortie par lot

Une fois la tâche de prédiction par lot terminée, le résultat est stocké dans la table BigQuery que vous avez spécifiée dans votre requête.

Exemple de sortie BigQuery

requête réponse état
'{"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
  }
}

Exemple de sortie 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}'"},
}'

Étape suivante