Ricevere le risposte in un batch è un modo per inviare in modo efficiente un numero elevato di richieste di codice in cui la latenza della risposta non è importante. A differenza della ricezione di risposte online, dove sei limitato a una richiesta di input alla volta, le previsioni batch inviano un numero elevato di richieste di modelli di generazione di codice in un'unica richiesta batch. Come per le previsioni batch per i dati tabulari in Vertex AI, determini la posizione di output e aggiungi l'input, quindi le risposte vengono compilate in modo asincrono nella posizione di output.
Dopo aver inviato ed esaminato una richiesta batch ai suoi risultati, puoi ottimizzare il modello di base per la generazione del codice per migliorare i risultati per una determinata attività. Dopo l'ottimizzazione, può inviare il modello ottimizzato per le generazioni di batch. Per scoprire di più su di ottimizzazione dei modelli, consulta Ottimizzazione dei modelli di base linguistici.
Modelli di codice che supportano le previsioni batch
code-bison
Prepara gli input
L'input per le richieste collettive è 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 di JSONL
Questa sezione mostra esempi di formattazione dei file JSONL di input e 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 con una sola colonna.
prefisso |
---|
"Scrivi una funzione Python che determina se un anno è bisestile:" |
"Scrivere un test di unità per il codice Python che inverte una stringa:" |
Esempio di output BigQuery
prefisso | previsioni. | stato |
---|---|---|
"Scrivi una funzione Python che determina se un anno è 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 } ], } |
|
"Scrivere un test di 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 collettiva
Puoi creare una risposta batch di generazione del codice utilizzando la console Google Cloud oppure l'SDK Vertex AI per Python. Maggiore è il numero di elementi di input inviati, più lunga sarà la durata il processo di generazione del codice.
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 i valori
maxOutputTokens
etemperature
del modello. Per maggiori informazioni 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 dell'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:
curl
Salva il corpo della richiesta in un file denominato request.json
,
quindi esegui il comando seguente:
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 finché 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, vedi 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)
Recuperare l'output batch
Al termine di un'attività di previsione batch, l'output viene archiviato nel bucket Cloud Storage o nella tabella BigQuery specificata nella richiesta.
Passaggi successivi
- Scopri come testare le richieste di codice.
- Consulta la pagina di riferimento Generazione di codice.