En esta página, se describe cómo obtener inferencias por lotes con BigQuery.
1. Prepara tus entradas
Entrada de almacenamiento de BigQuery
Tu cuenta de servicio debe tener los permisos de BigQuery adecuados. Para otorgar a la cuenta de servicio el rol Usuario de BigQuery,
usa el comando gcloud iam service-accounts add-iam-policy-binding
de la siguiente manera:
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/bigquery.user"
Reemplaza los siguientes valores:
- PROJECT_ID: Es el ID del proyecto en el que se creó tu cuenta de servicio.
- SERVICE_ACCOUNT_ID: Es el ID de la cuenta de servicio.
Se requiere una columna request y debe ser JSON válido. Estos datos JSON representan tu entrada para el modelo.
El contenido de la columna request debe coincidir con la estructura de un
GenerateContentRequest.
Tu tabla de entrada puede tener tipos de datos de columna distintos de request. Estas columnas pueden tener tipos de datos de BigQuery excepto
los siguientes: array, struct, range, datetime y
geography. Estas columnas se ignoran para la generación de contenido, pero se incluyen en la tabla de salida.
| Ejemplo de entrada (JSON) |
|---|
|
2. Envía un trabajo por lotes
Puedes crear un trabajo por lotes a través de la Google Cloud consola, el SDK de IA generativa de Google, o la API de REST.
El trabajo y la tabla deben estar en la misma región.
Console
- En la sección Agent Platform del Google Cloud console, ve a la Batch Inference página.
- Haz clic en Crear.
REST
Para crear un trabajo de inferencia por lotes, usa el
projects.locations.batchPredictionJobs.create método.
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
- ENDPOINT_PREFIX: Es la región del
recurso del modelo seguida de
-. Por ejemplo,us-central1-. Si usas el extremo global, deja este campo en blanco. Nota: El extremo global no es compatible con la inferencia por lotes que usa modelos ajustados. - LOCATION: Es una región que admite
modelos de Gemini. Si usas el extremo global, ingresa
global. - PROJECT_ID: Es el ID de tu proyecto.
- MODEL_PATH: Es el nombre del modelo de publicador, por ejemplo,
publishers/google/models/gemini-2.0-flash-001; o el nombre del extremo ajustado, por ejemplo,projects/PROJECT_ID/locations/LOCATION/models/MODEL_ID, en el que MODEL_ID es el ID del modelo ajustado. - INPUT_URI: Es la tabla de BigQuery en la que se encuentra tu entrada de inferencia por lotes, como
bq://myproject.mydataset.input_table. El conjunto de datos debe estar ubicado en la misma región que el trabajo de inferencia por lotes. No se admiten los conjuntos de datos multirregionales. - OUTPUT_FORMAT: Para generar resultados en
una tabla de BigQuery, especifica
bigquery. Para generar resultados en a un bucket de Cloud Storage, especificajsonl. - DESTINATION: Para
BigQuery, especifica
bigqueryDestination. Para Cloud Storage, especificagcsDestination. - OUTPUT_URI_FIELD_NAME:
Para BigQuery, especifica
outputUri. Para Cloud Storage, especificaoutputUriPrefix. - OUTPUT_URI: Para BigQuery, especifica la ubicación de la tabla, como
bq://myproject.mydataset.output_result. La región del conjunto de datos de BigQuery de salida debe ser la misma que la del trabajo de inferencia por lotes de Agent Platform. Para Cloud Storage, especifica la ubicación del bucket y el directorio, comogs://mybucket/path/to/output.
Método HTTP y URL:
POST https://ENDPOINT_PREFIXaiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/batchPredictionJobs
Cuerpo JSON de la solicitud:
{
"displayName": "my-bigquery-batch-inference-job",
"model": "MODEL_PATH",
"inputConfig": {
"instancesFormat": "bigquery",
"bigquerySource":{
"inputUri" : "INPUT_URI"
}
},
"outputConfig": {
"predictionsFormat": "OUTPUT_FORMAT",
"DESTINATION": {
"OUTPUT_URI_FIELD_NAME": "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://ENDPOINT_PREFIXaiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/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://ENDPOINT_PREFIXaiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/batchPredictionJobs" | Select-Object -Expand Content
Deberías recibir una respuesta JSON similar a la que se muestra a continuación:
En la respuesta, se incluye un identificador único para el trabajo por lotes. Puedes consultar el estado del trabajo por lotes mediante el BATCH_JOB_ID. Para obtener más información, consulta Supervisa el estado del trabajo. Nota: No se admiten los informes personalizados de cuenta de servicio, progreso en vivo, CMEK ni VPCSC.Python
Instalar
pip install --upgrade google-genai
Para obtener más información, consulta la documentación de referencia del SDK.
Establece variables de entorno para usar el SDK de Gen AI con Vertex AI:
# Replace the `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION` values # with appropriate values for your project. export GOOGLE_CLOUD_PROJECT=GOOGLE_CLOUD_PROJECT export GOOGLE_CLOUD_LOCATION=global export GOOGLE_GENAI_USE_VERTEXAI=True
3. Supervisa el estado y el progreso del trabajo
Después de enviar el trabajo por lotes, puedes verificar su estado con la API, el SDK y la Google Cloud consola.
Console
- Ve a la Batch Inference página.
- Selecciona tu trabajo por lotes para supervisar su progreso.
REST
Para supervisar un trabajo de inferencia por lotes, usa el
projects.locations.batchPredictionJobs.get método y consulta el CompletionStats campo en la respuesta.
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
- ENDPOINT_PREFIX: Es la región del
recurso del modelo seguida de
-. Por ejemplo,us-central1-. Si usas el extremo global, deja este campo en blanco. - LOCATION: Es una región que admite
modelos de Gemini. Si usas el extremo global, ingresa
global. - PROJECT_ID: Es el ID del proyecto.
- BATCH_JOB_ID: Es el ID de tu trabajo por lotes.
Método HTTP y URL:
GET https://ENDPOINT_PREFIXaiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/batchPredictionJobs/BATCH_JOB_ID
Para enviar tu solicitud, elige una de estas opciones:
curl
Ejecuta el siguiente comando:
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://ENDPOINT_PREFIXaiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/batchPredictionJobs/BATCH_JOB_ID"
PowerShell
Ejecuta el siguiente comando:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://ENDPOINT_PREFIXaiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/batchPredictionJobs/BATCH_JOB_ID" | Select-Object -Expand Content
Deberías recibir una respuesta JSON similar a la que se muestra a continuación:
Python
Instalar
pip install --upgrade google-genai
Para obtener más información, consulta la documentación de referencia del SDK.
Establece variables de entorno para usar el SDK de Gen AI con Vertex AI:
# Replace the `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION` values # with appropriate values for your project. export GOOGLE_CLOUD_PROJECT=GOOGLE_CLOUD_PROJECT export GOOGLE_CLOUD_LOCATION=global export GOOGLE_GENAI_USE_VERTEXAI=True
El estado de un trabajo por lotes determinado puede ser cualquiera de los siguientes:
JOB_STATE_PENDING: Cola para la capacidad. El trabajo puede estar en estadoqueuehasta 72 horas antes de ingresar al estadorunning.JOB_STATE_RUNNING: El archivo de entrada se validó correctamente y se está ejecutando el lote.JOB_STATE_SUCCEEDED: El lote se completó y los resultados están listos.JOB_STATE_FAILED: El archivo de entrada no pasó el proceso de validación o no se pudo completar dentro del período de las 24 horas después de ingresar al estadoRUNNING.JOB_STATE_CANCELLING: Se está cancelando el lote.JOB_STATE_CANCELLED: Se canceló el lote.
4. Recuperar los resultados por lotes
Cuando se completa una tarea de inferencia por lotes, el resultado se almacena en la tabla de BigQuery que especificaste en la solicitud.
Para las filas correctas, las respuestas del modelo se almacenan en la columna response.
De lo contrario, los detalles del error se almacenan en la columna status para su inspección.
Ejemplo de resultado
Ejemplo sin errores
{
"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
}
}
Ejemplo con errores
Solicitud
{"contents":[{"parts":{"text":"Explain how AI works in a few words."},"role":"tester"}]}Respuesta
Bad Request: {"error": {"code": 400, "message": "Please use a valid role: user, model.", "status": "INVALID_ARGUMENT"}}