Obtén predicciones de código por lotes

Obtener respuestas en lote es una forma de enviar de manera eficiente grandes cantidades de solicitudes de código en las que la latencia de la respuesta no es importante. A diferencia de obtener respuestas en línea, en las que estás limitado a una solicitud de entrada a la vez, las predicciones por lotes envían una gran cantidad de solicitudes de modelo de generación de código en una sola solicitud por lotes. Al igual que las predicciones por lotes para datos tabulares en Vertex AI, debes determinar la ubicación de salida y agregar la entrada; luego, las respuestas se propagan de forma asíncrona en la ubicación de salida.

Después de enviar una solicitud por lotes y revisar sus resultados, puedes ajustar el modelo de base de generación de código para mejorar el funcionamiento de los resultados en tu tarea en particular. Después del ajuste, puedes enviar el modelo ajustado para las generaciones por lotes. Para obtener más información sobre la configuración de modelos, consulta Ajusta los modelos de base de lenguaje.

Modelos de código que admiten predicciones por lotes

  • code-bison

Prepara tus entradas

La entrada para las solicitudes por lotes es una lista de instrucciones que se puede almacenar en una tabla de BigQuery o como un archivo de Líneas JSON (JSONL) en Cloud Storage. Cada solicitud puede incluir hasta 30,000 instrucciones.

Ejemplos de JSONL

En esta sección, se muestran ejemplos de cómo dar formato a los archivos JSONL de entrada y salida.

Ejemplo de entrada 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:"}

Ejemplo de salida JSONL

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

Ejemplo de BigQuery

En esta sección, se muestran ejemplos de cómo dar formato a la entrada y la salida de BigQuery.

Ejemplo de entrada de BigQuery

En este ejemplo, se muestra una tabla de BigQuery de una sola columna.

prefijo
"Escribe una función de Python que determine si un año es bisiesto:"
"Escribe una prueba de unidades para código de Python que revierta una string:"

Ejemplo de salida de BigQuery

prefijo predicciones status
"Escribe una función de Python que determine si un año es bisiesto:"

{
  "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
    }
  ],
}
 
"Escribe una prueba de unidades para código de Python que revierta una string:"

{
  "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```"
    }
  ],
}

Solicitar una respuesta por lotes

Puedes crear una respuesta por lotes de generación de código con la consola de Google Cloud o el SDK de Vertex AI para Python. Cuantos más elementos de entrada envíes, más tiempo tardará el proceso de generación por lotes en completarse.

REST

Para probar una instrucción de texto con la API de Vertex AI, envía una solicitud POST al extremo del modelo de publicador.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: Es el nombre de tu proyecto de Google Cloud.
  • BP_JOB_NAME: El nombre del trabajo.
  • MODEL_PARAM: Una lista de pares clave-valor que especifican parámetros del modelo y sus valores. Por ejemplo, puedes especificar maxOutputTokens y temperature del modelo. Para obtener más información, consulta Parámetros de generación de código.
  • INPUT_URI: Es el URI de la fuente de entrada. La fuente de entrada es una tabla de BigQuery o un archivo JSONL en un bucket de Cloud Storage.
  • OUTPUT_URI: URI de destino de salida.

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

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

Para enviar tu solicitud, elige una de estas opciones:

curl

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"http://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/batchPredictionJobs"

PowerShell

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente 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 "http://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/batchPredictionJobs" | Select-Object -Expand Content

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

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

En la respuesta, se incluye un identificador único para el trabajo por lotes. Puedes consultar el estado del trabajo por lotes mediante BATCH_JOB_ID hasta que el state sea JOB_STATE_SUCCEEDED. Por ejemplo:

curl \
  -X GET \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
http://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/batchPredictionJobs/BATCH_JOB_ID

Python

Si deseas obtener información para instalar o actualizar el SDK de Vertex AI para Python, consulta Instala el SDK de Vertex AI para Python. Si deseas obtener más información, consulta la documentación de referencia de la API de 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)

Recuperar los resultados por lotes

Cuando se completa una tarea de predicción por lotes, el resultado se almacena en el bucket de Cloud Storage o en la tabla de BigQuery que especificaste en la solicitud.

¿Qué sigue?