Ottenere previsioni di codice batch

Ottenere risposte in batch è un modo per inviare in modo efficiente grandi quantità di richieste di codice quando la latenza della risposta non è importante. Diversamente dall'invio di risposte online, dove hai un limite di una richiesta di input alla volta, le previsioni batch inviano un numero elevato di richieste di modelli di generazione del codice in una singola richiesta batch. Come per le previsioni batch per i dati tabulari in Vertex AI, determina la posizione di output e aggiungi l'input, quindi le risposte vengono compilate in modo asincrono nella posizione di output.

Dopo aver inviato una richiesta batch e aver esaminato i relativi risultati, puoi ottimizzare il modello di base per la generazione di codice per migliorare il funzionamento dei risultati per la tua attività specifica. Dopo l'ottimizzazione, puoi inviare il modello ottimizzato per le generazioni in batch. Per scoprire di più sull'ottimizzazione dei modelli, consulta Modelli di base del linguaggio Tune.

Modelli di codice che supportano le previsioni batch

  • code-bison

Prepara gli input

L'input per le richieste batch è un elenco di prompt che possono essere archiviati in una tabella BigQuery o come file JSON Lines (JSONL) in Cloud Storage. Ogni richiesta può includere fino a 30.000 prompt.

Esempi JSONL

Questa sezione mostra esempi di come formattare i file JSONL di input e di output.

Esempio di input 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:"}

Esempio di output JSONL

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

Esempio di BigQuery

Questa sezione mostra esempi di come formattare l'input e l'output di BigQuery.

Esempio di input BigQuery

Questo esempio mostra una tabella BigQuery a colonna singola.

prefisso
"Scrivi una funzione Python che stabilisca se un anno è bisestile"
"Scrivi un test delle unità per il codice Python che inverte una stringa:"

Esempio di output BigQuery

prefisso previsioni. stato
"Scrivi una funzione Python che stabilisca se un anno è bisestile"
{
  "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
    }
  ],
}
 
"Scrivi un test delle unità per il codice Python che inverte una stringa:"
{
  "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```"
    }
  ],
}

Richiedere una risposta batch

Puoi creare una risposta batch di generazione di codice utilizzando la console Google Cloud o l'SDK Vertex AI per Python. Più elementi di input invii, più lungo sarà il processo di generazione batch.

REST

Per testare un prompt di codice utilizzando l'API Vertex AI, invia una richiesta POST all'endpoint del modello del publisher.

Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

  • PROJECT_ID: il nome del tuo progetto Google Cloud.
  • BP_JOB_NAME: il nome del job.
  • MODEL_PARAM: un elenco di coppie chiave-valore che specificano i parametri del modello e i relativi valori. Ad esempio, puoi specificare maxOutputTokens e temperature del modello. Per maggiori informazioni, consulta Parametri di generazione del codice.
  • INPUT_URI: l'URI di origine di input. L'origine di input è una tabella BigQuery o un file JSONL in un bucket Cloud Storage.
  • OUTPUT_URI: URI di destinazione di output.

Metodo HTTP e URL:

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

Corpo JSON della richiesta:

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

Per inviare la richiesta, scegli una delle seguenti opzioni:

arricciatura

Salva il corpo della richiesta in un file denominato request.json ed esegui questo comando:

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

Salva il corpo della richiesta in un file denominato request.json ed esegui questo comando:

$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

Dovresti ricevere una risposta JSON simile alla seguente:

{
  "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 risposta include un identificatore univoco per il job batch. Puoi eseguire il polling dello stato del job batch utilizzando BATCH_JOB_ID fino a quando il job state non è JOB_STATE_SUCCEEDED. Ad esempio:

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

Per scoprire come installare o aggiornare l'SDK Vertex AI per Python, consulta Installare l'SDK Vertex AI per Python. Per saperne di più, consulta la documentazione di riferimento dell'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)

Recupera output batch

Al termine di un'attività di previsione batch, l'output viene archiviato nel bucket Cloud Storage o nella tabella BigQuery specificato nella richiesta.

Passaggi successivi