Obtenir des prédictions par lot pour Gemini

Les prédictions par lot 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 dans une seule requête par lot. Un workflow de prédiction par lot consiste à déterminer votre emplacement de sortie, à ajouter vos requêtes d'entrée (au format JSON) et à insérer les réponses de manière asynchrone dans votre emplacement de stockage BigQuery.

Après avoir envoyé une requête par lot à un modèle et examiné ses résultats, vous pouvez affiner le modèle pour qu'il renvoie des résultats plus précis. Vous pouvez utiliser votre modèle affiné pour les générations par lot en procédant comme d'habitude. Pour en savoir plus sur le réglage des modèles, consultez la page Présentation du réglage des modèles pour Gemini.

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-001
  • 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 n'acceptent que les sources de stockage BigQuery. Pour en savoir plus, consultez Présentation du stockage BigQuery.

Détails du format d'entrée BigQuery

  • Le contenu de la colonne Requête doit être un fichier JSON valide.
  • Le contenu des instructions JSON doit correspondre à la structure d'un GenerateContentRequest.
  • Les informations sur les modèles ou les points de terminaison inclus dans la requête sont ignorées.
  • Vous pouvez ajouter d'autres colonnes au tableau. Les colonnes ajoutées sont ignorées pour la génération de contenu. Une fois la tâche terminée, les colonnes supplémentaires sont associées aux résultats.
  • Le système réserve deux noms de colonne : Réponse et État. Elles sont utilisées pour fournir des informations sur le résultat de la requête de modèle.

Exemple d'entrée BigQuery

requête
{
  "contents": [
    {
      "role": "user",
      "parts": {
        "text": "Give me a recipe for banana bread."
      }
    }
  ],
  "system_instruction": {
    "parts": [
      {
        "text": "You are a chef."
      }
    ]
  },
  "generation_config": {
    "top_k": 5
  }
}

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

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 : le nom du job.
  • INPUT_URI : URI source de l'entrée. Il s'agit d'un URI de table BigQuery ou d'un URI de fichier JSONL dans Cloud Storage.
  • OUTPUT_URI : URI cible de sortie.

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 :

{
    "name": "BP_JOB_NAME",
    "displayName": "BP_JOB_NAME",
    "model": "publishers/google/models/gemini-1.0-pro-001",
    "inputConfig": {
      "instancesFormat":"bigquery",
      "bigquerySource":{
        "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": "BP_sample_publisher_BQ_20230712_134650",
  "model": "projects/{PROJECT_ID}/locations/us-central1/models/gemini-1.0-pro-001",
  "inputConfig": {
    "instancesFormat": "bigquery",
    "bigquerySource": {
      "inputUri": "bq://sample.text_input"
    }
  },
  "modelParameters": {},
  "outputConfig": {
    "predictionsFormat": "bigquery",
    "bigqueryDestination": {
      "outputUri": "bq://sample.llm_dataset.embedding_out_BP_sample_publisher_BQ_20230712_134650"
    }
  },
  "state": "JOB_STATE_PENDING",
  "createTime": "2023-07-12T20:46:52.148717Z",
  "updateTime": "2023-07-12T20:46:52.148717Z",
  "labels": {
    "owner": "sample_owner",
    "product": "llm"
  },
  "modelVersionId": "1",
  "modelMonitoringStatus": {}
}

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.

Étapes suivantes