Generación de texto por lotes

Las predicciones por lotes son una forma de enviar de manera eficiente varias instrucciones multimodales que no son sensibles a la latencia. A diferencia de la predicción en línea, en la que estás limitado a una instrucción de entrada a la vez, puedes enviar una gran cantidad de instrucciones multimodales en una sola solicitud por lotes. Luego, tus respuestas se propagan de forma asincrónica en tu ubicación de salida de almacenamiento de BigQuery.

Modelos multimodales que admiten predicciones por lotes

Los siguientes modelos multimodales admiten predicciones por lotes.

  • gemini-1.5-flash-001
  • gemini-1.5-pro-001
  • gemini-1.0-pro-002
  • gemini-1.0-pro-001

Prepara tus entradas

Las solicitudes por lotes para modelos multimodales solo aceptan fuentes de almacenamiento de BigQuery. Para obtener más información, consulta Descripción general del almacenamiento de BigQuery. Almacena tu entrada en una tabla de BigQuery con una columna JSON llamada request.

  • El contenido de la columna requestdebe ser un JSON válido.
  • El contenido de las instrucciones de JSON debe coincidir con la estructura de una GenerateContentRequest.
  • La tabla de entrada puede tener columnas que no sean request. Se ignoran para la generación de contenido, pero se incluyen en la tabla de salida. El sistema reserva dos nombres de columna para la salida: response y status. Estos se usan para proporcionar información sobre el resultado del trabajo de predicción por lotes.
  • La predicción por lotes no admite el campo fileData para Gemini.

Ejemplo de entrada de BigQuery

solicitud
{
  "contents": [
    {
      "role": "user",
      "parts": {
        "text": "Give me a recipe for banana bread."
      }
    }
  ],
  "system_instruction": {
    "parts": [
      {
        "text": "You are a chef."
      }
    ]
  }
}

Solicitar una respuesta por lotes

Según la cantidad de elementos de entrada que hayas enviado, una tarea de predicción por lotes puede tardar un tiempo 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 que elijas para tu trabajo.
  • INPUT_URI: Es el URI de la fuente de entrada. Este es un URI de tabla de BigQuery con el formulario bq://PROJECT_ID.DATASET.TABLE.
  • OUTPUT_URI: el URI de BigQuery de la tabla de salida de destino, con el formato bq://PROJECT_ID.DATASET.TABLE. Si la tabla aún no existe, se creará para ti.

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

{
    "displayName": "BP_JOB_NAME",
    "model": "publishers/google/models/gemini-1.0-pro-002",
    "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 \
"https://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 "https://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": "My first batch prediction",
  "model": "projects/{PROJECT_ID}/locations/us-central1/models/gemini-1.0-pro-002",
  "inputConfig": {
    "instancesFormat": "bigquery",
    "bigquerySource": {
      "inputUri": "bq://{PROJECT_ID}.mydataset.batch_predictions_input"
    }
  },
  "modelParameters": {},
  "outputConfig": {
    "predictionsFormat": "bigquery",
    "bigqueryDestination": {
      "outputUri": "bq://{PROJECT_ID}.mydataset.batch_predictions_output"
    }
  },
  "state": "JOB_STATE_PENDING",
  "createTime": "2023-07-12T20:46:52.148717Z",
  "updateTime": "2023-07-12T20:46:52.148717Z",
  "modelVersionId": "1"
}

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" \
https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/batchPredictionJobs/BATCH_JOB_ID

Recuperar los resultados por lotes

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

Ejemplo de salida de BigQuery

solicitud respuesta estado
'{"content":[{...}]}'
{
  "candidates": [
    {
      "content": {
        "role": "model",
        "parts": [
          {
            "text": "In a medium bowl, whisk together the flour, baking soda, baking powder."
          }
        ]
      },
      "finishReason": "STOP",
      "safetyRatings": [
        {
          "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
          "probability": "NEGLIGIBLE",
          "probabilityScore": 0.14057204,
          "severity": "HARM_SEVERITY_NEGLIGIBLE",
          "severityScore": 0.14270912
        }
      ]
    }
  ],
  "usageMetadata": {
    "promptTokenCount": 8,
    "candidatesTokenCount": 396,
    "totalTokenCount": 404
  }
}

¿Qué sigue?