Obtenir des prédictions de code par lot

L'obtention de réponses par lot permet d'envoyer efficacement un grand nombre de requêtes de code sans latence importante. Contrairement aux réponses en ligne, pour lesquelles vous êtes limité à une requête d'entrée à la fois, les prédictions par lot envoient un grand nombre de requêtes de modèle de génération de code en une seule requête par lot. Comme les prédictions par lot de données tabulaires dans Vertex AI, vous déterminez votre emplacement de sortie et ajoutez votre entrée, puis les réponses sont renseignées de manière asynchrone vers votre emplacement de sortie.

Après avoir envoyé une requête par lot et examiné ses résultats, vous pouvez ajuster le modèle de base de génération de code pour améliorer le fonctionnement des résultats pour votre tâche. Après le réglage, vous pouvez envoyer le modèle réglé pour les générations par lot. Pour en savoir plus sur le réglage des modèles, consultez la section Régler les modèles de fondation.

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

  • code-bison

Préparer les entrées

L'entrée des requêtes par lot est une liste d'indications qui peuvent être stockées dans une table BigQuery ou sous forme de fichier JSON Lines (JSONL) dans Cloud Storage. Chaque requête peut inclure jusqu'à 30 000 indications.

Exemples JSONL

Cette section présente des exemples de mise en forme des fichiers d'entrée et de sortie JSONL.

Exemple d'entrée JSONL

{"prefix":"Write a Python function that determines if a year is a leap year:"}
{"prefix":"Write a unit test for Python code that reverses a string:"}

Exemple de sortie JSONL

{"instance":{"prefix":"Write..."},"predictions": [{"content":"def is_leap_year(year):...","safetyAttributes":{...}}],"status":""}
{"instance":{"prefix":"Write..."},"predictions": [{"content":"import unittest...", "safetyAttributes":{...}}],"status":""}

Exemple BigQuery

Cette section présente des exemples de mise en forme d'entrée et de sortie BigQuery.

Exemple d'entrée BigQuery

Cet exemple montre une table BigQuery à une seule colonne.

préfixe
"Écrire une fonction Python qui détermine si une année correspond à une année bissextile:"
"Écrire un test unitaire pour le code Python qui inverse une chaîne"

Exemple de sortie BigQuery

préfixe Prédictions état
"Écrire une fonction Python qui détermine si une année correspond à une année bissextile:"
{
  "predictions": [
    {
      "safetyAttributes": {
        "scores": [],
        "blocked": false,
        "categories": []
      },
      "content": "```python\ndef is_leap_year(year):\n  \"\"\"\n  Determine if a year is a leap year.\n\n  Args:\n    year: The year to check.\n\n  Returns:\n    True if the year is a leap year, False otherwise.\n  \"\"\"\n\n  if year % 4 != 0:\n    return False\n\n  if year % 100 == 0 and year % 400 != 0:\n    return False\n\n  return True\n```",
      "citationMetadata": {
        "citations": []
      },
      "score": -1.5572503805160522
    }
  ],
}
 
"Écrire un test unitaire pour le code Python qui inverse une chaîne"
{
  "predictions": [
    {
      "safetyAttributes": {
        "scores": [],
        "blocked": false,
        "categories": []
      },
      "score": -1.7523338794708252,
      "citationMetadata": {
        "citations": []
      },
      "content": "```python\nimport unittest\n\nclass TestReverseString(unittest.TestCase):\n\n    def test_reverse_string(self):\n        input_string = \"Hello World\"\n        expected_output = \"dlroW olleH\"\n        output = reverse_string(input_string)\n        self.assertEqual(output, expected_output)\n\nif __name__ == '__main__':\n    unittest.main()\n```"
    }
  ],
}

Demander une réponse par lot

Vous pouvez créer une réponse par lot pour la génération de code à l'aide de la console Google Cloud ou du SDK Vertex AI pour Python. Plus vous envoyez d'éléments d'entrée, plus le processus de génération par lot est long.

REST

Pour tester une requête de code à 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: liste de paires clé/valeur qui spécifie les paramètres du modèle et leurs valeurs. Par exemple, vous pouvez spécifier maxOutputTokens et temperature sur le modèle. Pour en savoir plus, consultez la section Paramètres de génération de code.
  • INPUT_URI : URI source de l'entrée. La source d'entrée est une table BigQuery ou un fichier JSONL dans un bucket 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 CodeGenerationModel
code_model = CodeGenerationModel.from_pretrained("code-bison")
batch_prediction_job = code_model.batch_predict(
  dataset=["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",
  },
)
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