Obtener predicciones por lotes de un modelo de Model Garden autodesplegado

Algunos de los modelos disponibles en Model Garden se pueden implementar por tu cuenta en tu proyecto de Google Cloud y usarse para proporcionar predicciones por lotes. Las predicciones por lotes te permiten usar un modelo de forma eficiente para procesar varias peticiones de solo texto que no sean sensibles a la latencia.

Preparar la entrada

Antes de empezar, prepara las entradas en una tabla de BigQuery o como un archivo JSONL en Cloud Storage. La entrada de ambas fuentes debe seguir el formato JSON del esquema de la API de OpenAI, como se muestra en el siguiente ejemplo:

{"body": {"messages": [{"role": "user", "content": "Give me a recipe for banana bread"}], "max_tokens": 1000}}

BigQuery

La tabla de entrada de BigQuery debe cumplir el siguiente esquema:

Nombre de la columna Descripción
custom_id Un ID para cada solicitud que asocie la entrada con la salida.
método Método de solicitud.
url El endpoint de la solicitud.
body(JSON) Tu petición.
  • Tu tabla de entrada puede tener otras columnas, que el trabajo por lotes ignora y que se transfieren directamente a la tabla de salida.
  • Las tareas de predicción por lotes reservan dos nombres de columna para la salida de la predicción por lotes: response(JSON) e id. No use estas columnas en la tabla de entrada.
  • Las columnas method y url se quitan y no se incluyen en la tabla de salida.

Cloud Storage

En el caso de Cloud Storage, el archivo de entrada debe ser un archivo JSONL que se encuentre en un segmento de Cloud Storage.

Obtener los recursos necesarios para un modelo

Elige un modelo y consulta sus requisitos de recursos. Los recursos necesarios aparecen en la respuesta, en el campo dedicatedResources, que se especifica en la configuración de la tarea de predicción por lotes.

REST

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • PUBLISHER: el editor del modelo. Por ejemplo, meta, google, mistral-ai o deepseek-ai.
  • PUBLISHER_MODEL_ID: ID del modelo del editor, por ejemplo, llama3_1.
  • VERSION_ID: ID de versión del modelo del editor. Por ejemplo, llama-3.1-8b-instruct.

Método HTTP y URL:

GET "https://us-central1-aiplatform.googleapis.com/ui/publishers/PUBLISHER/models/PUBLISHER_MODEL_ID@VERSION_ID" | jq '.supportedActions.multiDeployVertex'

Para enviar tu solicitud, elige una de estas opciones:

curl

Ejecuta el comando siguiente:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: PROJECT_ID" \
""https://us-central1-aiplatform.googleapis.com/ui/publishers/PUBLISHER/models/PUBLISHER_MODEL_ID@VERSION_ID" | jq '.supportedActions.multiDeployVertex'"

PowerShell

Ejecuta el comando siguiente:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred"; "x-goog-user-project" = "PROJECT_ID" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri ""https://us-central1-aiplatform.googleapis.com/ui/publishers/PUBLISHER/models/PUBLISHER_MODEL_ID@VERSION_ID" | jq '.supportedActions.multiDeployVertex'" | Select-Object -Expand Content

Deberías recibir un código de estado que indique que la operación se ha realizado correctamente (2xx) y una respuesta vacía.

Solicitar una predicción por lotes

Haz una predicción por lotes con un modelo de Model Garden implementado por ti mismo usando datos de BigQuery o Cloud Storage. Puedes elegir de forma independiente si quieres generar las predicciones en una tabla de BigQuery o en un archivo JSONL de un segmento de Cloud Storage.

BigQuery

Especifica la tabla de entrada, el modelo y la ubicación de salida de BigQuery. La tarea de predicción por lotes y la tabla deben estar en la misma región.

REST

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • LOCATION: una región que admita modelos autodesplegados de Model Garden.
  • PROJECT_ID: tu ID de proyecto.
  • MODEL: el nombre del modelo que se va a optimizar. Por ejemplo, llama-3.1-8b-instruct.
  • PUBLISHER: el editor del modelo. Por ejemplo, meta, google, mistral-ai o deepseek-ai.
  • INPUT_URI: la tabla de BigQuery en la que se encuentra la entrada de la predicción por lotes, como myproject.mydataset.input_table.
  • OUTPUT_FORMAT: para enviar los datos a una tabla de BigQuery, especifica bigquery. Para enviar los datos a un segmento de Cloud Storage, especifica jsonl.
  • DESTINATION: en BigQuery, especifica bigqueryDestination. En el caso de Cloud Storage, especifica gcsDestination.
  • OUTPUT_URI_FIELD_NAME: En BigQuery, especifica outputUri. En el caso de Cloud Storage, especifica outputUriPrefix.
  • OUTPUT_URI: en BigQuery, especifica la ubicación de la tabla, como myproject.mydataset.output_result. En Cloud Storage, especifica la ubicación del segmento y la carpeta, como gs://mybucket/path/to/outputfile.
  • MACHINE_TYPE: define el conjunto de recursos que se van a implementar para tu modelo. Por ejemplo, g2-standard-4.
  • ACC_TYPE: especifica los aceleradores que se van a añadir al trabajo de predicción por lotes para mejorar el rendimiento al trabajar con cargas de trabajo intensivas, como NVIDIA_L4.
  • ACC_COUNT: número de aceleradores que se van a usar en el trabajo de predicción por lotes.

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

'{
  "displayName": "JOB_NAME",
  "model": "publishers/PUBLISHER/models/MODEL",
  "inputConfig": {
    "instancesFormat":"bigquery",
    "bigquerySource":{
      "inputUri" : "INPUT_URI"
    }
  },
  "outputConfig": {
    "predictionsFormat":"OUTPUT_FORMAT",
    "DESTINATION":{
      "OUTPUT_URI_FIELD_NAME": "OUTPUT_URI"
    }
  },
  "dedicated_resources": {
    "machine_spec": {
      "machine_type": "MACHINE_TYPE",
      "accelerator_type": "ACC_TYPE",
      "accelerator_count": ACC_COUNT,
    },
    "starting_replica_count": 1,
  },
}'

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://LOCATION-aiplatform.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://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/batchPredictionJobs" | Select-Object -Expand Content

Deberías recibir una respuesta JSON similar a la siguiente.

Cloud Storage

Especifica la ubicación de Cloud Storage del archivo JSONL, el modelo y la ubicación de salida.

REST

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • LOCATION: una región que admita modelos autodesplegados de Model Garden.
  • PROJECT_ID: tu ID de proyecto.
  • MODEL: el nombre del modelo que se va a optimizar. Por ejemplo, llama-3.1-8b-instruct.
  • PUBLISHER: el editor del modelo. Por ejemplo, meta, google, mistral-ai o deepseek-ai.
  • INPUT_URI: la ubicación de Cloud Storage de la entrada de predicción por lotes JSONL, como gs://bucketname/path/to/jsonl.
  • OUTPUT_FORMAT: para enviar los datos a una tabla de BigQuery, especifica bigquery. Para enviar los datos a un segmento de Cloud Storage, especifica jsonl.
  • DESTINATION: en BigQuery, especifica bigqueryDestination. En el caso de Cloud Storage, especifica gcsDestination.
  • OUTPUT_URI_FIELD_NAME: En BigQuery, especifica outputUri. En el caso de Cloud Storage, especifica outputUriPrefix.
  • OUTPUT_URI: en BigQuery, especifica la ubicación de la tabla, como myproject.mydataset.output_result. En Cloud Storage, especifica la ubicación del segmento y la carpeta, como gs://mybucket/path/to/outputfile.
  • MACHINE_TYPE: define el conjunto de recursos que se van a implementar para tu modelo. Por ejemplo, g2-standard-4.
  • ACC_TYPE: especifica los aceleradores que se van a añadir al trabajo de predicción por lotes para mejorar el rendimiento al trabajar con cargas de trabajo intensivas, como NVIDIA_L4.
  • ACC_COUNT: número de aceleradores que se van a usar en el trabajo de predicción por lotes.

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

'{
  "displayName": "JOB_NAME",
  "model": "publishers/PUBLISHER/models/MODEL",
  "inputConfig": {
    "instancesFormat":"jsonl",
    "gcsDestination":{
      "uris" : "INPUT_URI"
    }
  },
  "outputConfig": {
    "predictionsFormat":"OUTPUT_FORMAT",
    "DESTINATION":{
      "OUTPUT_URI_FIELD_NAME": "OUTPUT_URI"
    }
  },
  "dedicated_resources": {
    "machine_spec": {
        "machine_type": "MACHINE_TYPE",
        "accelerator_type": "ACC_TYPE",
        "accelerator_count": ACC_COUNT,
    },
    "starting_replica_count": 1,
  },
}'

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://LOCATION-aiplatform.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://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/batchPredictionJobs" | Select-Object -Expand Content

Deberías recibir una respuesta JSON similar a la siguiente.

Obtener el estado de una tarea de predicción por lotes

Obtén el estado de tu tarea de predicción por lotes para comprobar si se ha completado correctamente. La duración del trabajo depende del número de elementos de entrada que hayas enviado.

REST

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • PROJECT_ID: tu ID de proyecto.
  • LOCATION: la región en la que se encuentra tu trabajo por lotes.
  • JOB_ID: el ID del trabajo por lotes que se devolvió cuando creaste el trabajo.

Método HTTP y URL:

GET https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/batchPredictionJobs/JOB_ID

Para enviar tu solicitud, elige una de estas opciones:

curl

Ejecuta el comando siguiente:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/batchPredictionJobs/JOB_ID"

PowerShell

Ejecuta el comando siguiente:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/batchPredictionJobs/JOB_ID" | Select-Object -Expand Content

Deberías recibir una respuesta JSON similar a la siguiente.

Obtener el resultado

Cuando se complete una tarea de predicción por lotes, obtén la salida de la ubicación que hayas especificado:

  • En BigQuery, la salida se encuentra en la columna response(JSON) de la tabla de BigQuery de destino.
  • En Cloud Storage, la salida se guarda como un archivo JSONL en la ubicación de salida de Cloud Storage.

Modelos admitidos

Vertex AI admite predicciones por lotes para los siguientes modelos autodesplegados:

  • Llama
    • publishers/meta/models/llama3_1@llama-3.1-8b-instruct
    • publishers/meta/models/llama3_1@llama-3.1-70b-instruct
    • publishers/meta/models/llama3_1@llama-3.1-405b-instruct-fp8
    • publishers/meta/models/llama3-2@llama-3.2-1b-instruct
    • publishers/meta/models/llama3-2@llama-3.2-3b-instruct
    • publishers/meta/models/llama3-2@llama-3.2-90b-vision-instruct
  • Gemma
    • publishers/google/models/gemma@gemma-1.1-2b-it
    • publishers/google/models/gemma@gemma-7b-it
    • publishers/google/models/gemma@gemma-1.1-7b-it
    • publishers/google/models/gemma@gemma-2b-it
    • publishers/google/models/gemma2@gemma-2-2b-it
    • publishers/google/models/gemma2@gemma-2-9b-it
    • publishers/google/models/gemma2@gemma-2-27b-it
  • Mistral
    • publishers/mistral-ai/models/mistral@mistral-7b-instruct-v0.2
    • publishers/mistral-ai/models/mistral@mistral-7b-instruct-v0.3
    • publishers/mistral-ai/models/mistral@mistral-7b-instruct-v0.1
    • publishers/mistral-ai/models/mistral@mistral-nemo-instruct-2407
  • Deepseek
    • publishers/deepseek-ai/models/deepseek-r1@deepseek-r1-distill-llama-8b