Obtenir des générations de texte par lot

Les prédictions par lot permettent d'envoyer efficacement un grand nombre de requêtes de texte qui ne sont pas sensibles à la latence. Contrairement à la prédiction en ligne, où vous êtes limité à une requête à la fois, vous pouvez envoyer un grand nombre de requêtes LLM en une seule requête par lot. Comme pour la prédiction par lot de données tabulaires dans Vertex AI, vous déterminez votre emplacement de sortie, vous ajoutez vos requêtes d'entrée, et vos réponses sont renseignées de manière asynchrone dans votre emplacement de sortie.

Après avoir envoyé une requête par lot à un modèle de texte et examiné ses résultats, vous pouvez ajuster le modèle grâce au processus de réglage. Après le réglage, vous pouvez utiliser votre modèle mis à jour 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 section Régler les modèles de fondation.

Modèles de texte compatibles avec les prédictions par lot

  • text-bison

Préparer les entrées

L'entrée des requêtes par lot spécifie les éléments à envoyer à votre modèle pour une génération par lot. Lorsque vous utilisez la classification de texte sur des modèles, vous pouvez utiliser un fichier JSON Lines ou une table BigQuery pour spécifier une liste d'entrées. Vous stockez votre table BigQuery dans BigQuery et votre fichier JSON Lines dans Cloud Storage.

Les requêtes par lots pour les modèles textuels n'acceptent que les sources de stockage BigQuery et Cloud Storage. Les requêtes peuvent inclure jusqu'à 30 000 requêtes.

Pour en savoir plus sur la mise en forme, consultez les pages suivantes :

Exemple JSONL

Format d'entrée JSONL

{"prompt":"Give a short description of a machine learning model:"}
{"prompt":"Best recipe for banana bread:"}

Sortie JSONL

{"instance":{"prompt":"Give..."},"predictions": [{"content":"A machine","safetyAttributes":{...}}],"status":""}
{"instance":{"prompt":"Best..."},"predictions": [{"content":"Sure", "safetyAttributes":{...}}],"status":""}

Exemple BigQuery

Format d'entrée BigQuery

Cet exemple montre une table BigQuery à une seule colonne.

Requête
"Donner une brève description d'un modèle de machine learning :"
"Meilleure recette de pain à la banane :"

Résultat BigQuery

Requête Prédictions état
"Donner une brève description d'un modèle de machine learning :"
'[{
   "content": "A machine learning model is a
               statistical method",
   "safetyAttributes": {
     "blocked": false,
     "scores": [
       0.10000000149011612
     ],
     "categories": [
       "Violent"
     ]
   }
 }]'
 
"Meilleure recette de pain à la banane :"
'[{"content": "Sure, here is a recipe for banana
               bread:\n\nIngredients:\n\n*",
   "safetyAttributes": {
     "scores": [
       0.10000000149011612
     ],
     "blocked": false,
     "categories": [
       "Violent"
     ]
   }
}]'

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 de texte à l'aide de l'API Vertex AI, envoyez une requête POST au point de terminaison du modèle de l'éditeur.

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.
  • MODEL_PARAM : une carte des paramètres du modèle. Voici quelques paramètres acceptables : maxOutputTokens, topK, topP et temperature.
  • 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/text-bison",
    "model_parameters": "MODEL_PARAM"
    "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/text-bison",
  "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

Python

Pour savoir comment installer ou mettre à jour le SDK Vertex AI pour Python, consultez la section Installer le SDK Vertex AI pour Python. Pour en savoir plus, consultez la documentation de référence de l'API Python.

from vertexai.preview.language_models import TextGenerationModel
text_model = TextGenerationModel.from_pretrained("text-bison")
batch_prediction_job = text_model.batch_predict(
  source_uri=["gs://BUCKET_NAME/test_table.jsonl"],
  destination_uri_prefix="gs://BUCKET_NAME/tmp/2023-05-25-vertex-LLM-Batch-Prediction/result3",
  # Optional:
  model_parameters={
      "maxOutputTokens": "200",
      "temperature": "0.2",
      "topP": "0.95",
      "topK": "40",
  },
)
print(batch_prediction_job.display_name)
print(batch_prediction_job.resource_name)
print(batch_prediction_job.state)

Récupérer une sortie par lot

Lorsqu'une tâche de prédiction par lot est terminée, le résultat est stocké dans le bucket Cloud Storage ou la table BigQuery que vous avez spécifié dans votre requête.

Étapes suivantes