Los conjuntos de datos multimodales de Vertex AI te permiten crear, gestionar, compartir y usar conjuntos de datos multimodales para la IA generativa. Los conjuntos de datos multimodales ofrecen las siguientes funciones clave:
Puede cargar conjuntos de datos de BigQuery, DataFrames o archivos JSONL en Cloud Storage.
Crea tu conjunto de datos una vez y úsalo en diferentes tipos de tareas, como el ajuste fino supervisado y la predicción por lotes, lo que evita la duplicación de datos y los problemas de formato.
Guarda todos tus conjuntos de datos de IA generativa en una única ubicación gestionada.
Valida tu esquema y estructura, y cuantifica los recursos necesarios para las tareas posteriores. De esta forma, podrás detectar errores y estimar el coste antes de empezar una tarea.
Puedes usar conjuntos de datos multimodales a través del SDK de Vertex AI para Python o la API REST.
Los conjuntos de datos multimodales son un tipo de conjuntos de datos gestionados en Vertex AI. Se diferencian de otros tipos de conjuntos de datos gestionados en los siguientes aspectos:
- Los conjuntos de datos multimodales pueden incluir datos de cualquier modalidad (texto, imagen, audio o vídeo). Otros tipos de conjuntos de datos gestionados son para una sola modalidad.
- Los conjuntos de datos multimodales solo se pueden usar en los servicios de IA generativa de Vertex AI, como el ajuste y la predicción por lotes con modelos generativos. Otros tipos de conjuntos de datos gestionados solo se pueden usar en modelos predictivos de Vertex AI.
- Los conjuntos de datos multimodales admiten métodos adicionales, como
assemble
yassess
, que se usan para previsualizar datos, validar solicitudes y estimar costes. - Los conjuntos de datos multimodales se almacenan en BigQuery, que está optimizado para conjuntos de datos de gran tamaño.
Antes de empezar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Vertex AI, BigQuery, and Cloud Storage APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Vertex AI, BigQuery, and Cloud Storage APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. - Instalar e inicializar el SDK de Vertex AI para Python
- Importa las siguientes bibliotecas:
from google.cloud.aiplatform.preview import datasets # To use related features, you may also need to import some of the following features: from vertexai.preview.tuning import sft from vertexai.batch_prediction import BatchPredictionJob from vertexai.generative_models import Content, Part, Tool, ToolConfig, SafetySetting, GenerationConfig, FunctionDeclaration
desde un DataFrame de Pandas
my_dataset = datasets.MultimodalDataset.from_pandas( dataframe=my_dataframe, target_table_id=table_id # optional )
de un DataFrame de BigQuery:
my_dataset = datasets.MultimodalDataset.from_bigframes( dataframe=my_dataframe, target_table_id=table_id # optional )
de una tabla de BigQuery
my_dataset_from_bigquery = datasets.MultimodalDataset.from_bigquery( bigquery_uri=f"bq://projectId.datasetId.tableId" )
desde una tabla de BigQuery mediante la API REST
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT/locations/LOCATION/datasets" \ -d '{ "display_name": "TestDataset", "metadataSchemaUri": "gs://google-cloud-aiplatform/schema/dataset/metadata/multimodal_1.0.0.yaml", "metadata": { "inputConfig": { "bigquery_source": { "uri": "bq://projectId.datasetId.tableId" } } } }'
desde un archivo JSONL en Cloud Storage. En el siguiente ejemplo, el archivo JSONL contiene solicitudes que ya están formateadas para Gemini, por lo que no es necesario ensamblarlas.
my_dataset = datasets.MultimodalDataset.from_gemini_request_jsonl( gcs_uri = gcs_uri_of_jsonl_file, )
a partir de un conjunto de datos multimodal
# Get the most recently created dataset first_dataset = datasets.MultimodalDataset.list()[0] # Load dataset based on its name same_dataset = datasets.MultimodalDataset(first_dataset.name)
Crea una plantilla. Hay dos formas de crear una plantilla:
- Usa el método auxiliar
construct_single_turn_template
:
template_config = datasets.construct_single_turn_template( prompt="This is the image: {image_uris}", response="{labels}", system_instruction='You are a botanical image classifier. Analyze the provided image ' 'and determine the most accurate classification of the flower.' 'These are the only flower categories: [\'daisy\', \'dandelion\', \'roses\', \'sunflowers\', \'tulips\'].' 'Return only one category per image.' )
- Crea manualmente una plantilla a partir de un
GeminiExample
, lo que te permite tener una granularidad más precisa, como conversaciones de varias interacciones. El siguiente fragmento de código también incluye código comentado opcional para especificar unfield_mapping
, que le permite usar un nombre de marcador de posición diferente del nombre de la columna del conjunto de datos. Por ejemplo:
# Define a GeminiExample gemini_example = datasets.GeminiExample( contents=[ Content(role="user", parts=[Part.from_text("This is the image: {image_uris}")]), Content(role="model", parts=[Part.from_text("This is the flower class: {label}.")]), Content(role="user", parts=[Part.from_text("Your response should only contain the class label.")]), Content(role="model", parts=[Part.from_text("{label}")]), # Optional: If you specify a field_mapping, you can use different placeholder values. For example: # Content(role="user", parts=[Part.from_text("This is the image: {uri_placeholder}")]), # Content(role="model", parts=[Part.from_text("This is the flower class: {flower_placeholder}.")]), # Content(role="user", parts=[Part.from_text("Your response should only contain the class label.")]), # Content(role="model", parts=[Part.from_text("{flower_placeholder}")]), ], system_instruction=Content( parts=[ Part.from_text( 'You are a botanical image classifier. Analyze the provided image ' 'and determine the most accurate classification of the flower.' 'These are the only flower categories: [\'daisy\', \'dandelion\', \'roses\', \'sunflowers\', \'tulips\'].' 'Return only one category per image.' ) ] ), ) # construct the template, specifying a map for the placeholder template_config = datasets.GeminiTemplateConfig( gemini_example=gemini_example, # Optional: Map the template placeholders to the column names of your dataset. # Not required if the template placesholders are column names of the dataset. # field_mapping={"uri_placeholder": "image_uris", "flower_placeholder": "labels"}, )
- Usa el método auxiliar
Adjúntalo al conjunto de datos:
my_dataset.attach_template_config(template_config=template_config)
- URI de la tabla de BigQuery. En el caso de los conjuntos de datos creados a partir de una tabla de BigQuery, esta es tu fuente
bigquery_uri
. En el caso de los conjuntos de datos creados a partir de otras fuentes, como JSONL o DataFrame, esta es la tabla de BigQuery en la que se copiaron los datos. - A
gemini_template_config
. Los conjuntos de datos multimodales solo se pueden usar con funciones de IA generativa. No se pueden usar con funciones de IA no generativas, como el entrenamiento de AutoML y el entrenamiento personalizado.
Los conjuntos de datos multimodales solo se pueden usar con modelos de Google, como Gemini. No se pueden usar con modelos de terceros.
Conjunto de datos
Create
- Los conjuntos de datos creados a partir de una tabla de BigQuery o un DataFrame no generan costes de almacenamiento adicionales. Esto se debe a que usamos una vista lógica en lugar de almacenar otra copia de los datos.
- Los conjuntos de datos creados a partir de otras fuentes copian los datos en una tabla de BigQuery, lo que conlleva costes de almacenamiento en BigQuery. Por ejemplo, el almacenamiento lógico activo cuesta 0,02 USD por GiB al mes.
Conjunto de datos
Assemble
Este método crea una tabla de BigQuery que contiene el conjunto de datos completo en formato de solicitud de modelo, lo que conlleva costes de almacenamiento en BigQuery. Por ejemplo, el almacenamiento lógico activo cuesta 0,02 USD por GiB al mes.
Este método también lee el conjunto de datos una vez, lo que incurre en costes de consulta en BigQuery. Por ejemplo, el precio de los recursos de computación bajo demanda es de 6, 25 USD por TiB. Validación de conjuntos de datos y estimación de recursos
Assess
lee el conjunto de datos una vez, lo que genera costes de consulta en BigQuery. Por ejemplo, el precio de los recursos de computación bajo demanda es de 6, 25 USD por TiB.
Crear conjunto de datos
Puedes crear un dataset
multimodal a partir de diferentes fuentes:
Construir y adjuntar una plantilla
Una plantilla define cómo transformar el conjunto de datos multimodal a un formato que se pueda transferir al modelo. Es necesario para ejecutar una tarea de ajuste o de predicción por lotes.
SDK de Vertex AI para Python
REST
Llama al método patch
y actualiza el campo metadata
con lo siguiente:
curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d $'{
"metadata": {
"input_config": {
"bigquery_source": {
"uri": "bq://projectId.datasetId.tableId"
}
},
"gemini_template_config_source": {
"gemini_template_config": {
"gemini_example": {
"contents": [
{
"role": "user",
"parts": [
{
"text": "This is the image: {image_uris}"
}
]
},
{
"role": "model",
"parts": [
{
"text": "response"
}
]
}
]
"systemInstruction": {
"parts": [
{
"text": "You are a botanical image classifier."
}
]
}
}
}
}
}
}' \
"https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID?updateMask=metadata"
(Opcional) Montar el conjunto de datos
El método assemble
aplica la plantilla para transformar el conjunto de datos y almacena el resultado en una tabla de BigQuery. De esta forma, puedes previsualizar los datos antes de que se pasen al modelo.
De forma predeterminada, se usa el template_config
adjunto al conjunto de datos, pero puedes especificar una plantilla para anular el comportamiento predeterminado.
SDK de Vertex AI para Python
table_id, assembly = my_dataset.assemble(template_config=template_config)
# Inspect the results
assembly.head()
REST
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID:assemble" \
-d '{}'
Por ejemplo, supongamos que tu conjunto de datos multimodal contiene los siguientes datos:
Acceso | image_uris | etiquetas |
---|---|---|
1 | gs://cloud-samples-data/ai-platform/flowers/daisy/1396526833_fb867165be_n.jpg | margarita |
A continuación, el método assemble
crea una tabla de BigQuery con el nombre table_id
, donde cada fila contiene el cuerpo de la solicitud. Por ejemplo:
{
"contents": [
{
"parts": [
{
"text": "This is the image: "
},
{
"fileData": {
"fileUri": "gs://cloud-samples-data/ai-platform/flowers/daisy/1396526833_fb867165be_n.jpg",
"mimeType": "image/jpeg"
}
}
],
"role": "user"
},
{
"parts": [
{
"text": "daisy"
}
],
"role": "model"
}
],
"systemInstruction": {
"parts": [
{
"text": "You are a botanical image classifier. Analyze the provided image and determine the most accurate classification of the flower.These are the only flower categories: ['daisy', 'dandelion', 'roses', 'sunflowers', 'tulips'].Return only one category per image."
}
]
}
}
Ajustar el modelo
Puedes ajustar modelos de Gemini con un conjunto de datos multimodal.
(Opcional) Validar el conjunto de datos
Evalúa el conjunto de datos para comprobar si contiene errores, como errores de formato o errores del modelo.
SDK de Vertex AI para Python
Llama al assess_tuning_validity()
. De forma predeterminada, se usa el template_config
adjunto al conjunto de datos, pero puedes especificar una plantilla para anular el comportamiento predeterminado.
# Attach template
my_dataset.attach_template_config(template_config=template_config)
# Validation for tuning
validation = my_dataset.assess_tuning_validity(
model_name="gemini-2.0-flash-001",
dataset_usage="SFT_TRAINING"
)
# Inspect validation result
validation.errors
REST
Llama al método assess
y proporciona un TuningValidationAssessmentConfig
.
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID:assess" \
-d '{
"tuningValidationAssessmentConfig": {
"modelName": "projects/PROJECT_ID/locations/LOCATION/models/gemini-2.0-flash-001",
"datasetUsage": "SFT_TRAINING"
}
}'
(Opcional) Estimar el uso de recursos
Evalúa el conjunto de datos para obtener el token y el recuento de caracteres facturables de tu tarea de ajuste.
SDK de Vertex AI para Python
Llama al assess_tuning_resources()
.
# Resource estimation for tuning.
tuning_resources = my_dataset.assess_tuning_resources(
model_name="gemini-2.0-flash-001"
)
print(tuning_resources)
# For example, TuningResourceUsageAssessmentResult(token_count=362688, billable_character_count=122000)
REST
Llama al método assess
y proporciona un TuningResourceUsageAssessmentConfig
.
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID:assess" \
-d '{
"tuningResourceUsageAssessmentConfig": {
"modelName": "projects/PROJECT_ID/locations/LOCATION/models/gemini-2.0-flash-001"
}
}'
Ejecutar la tarea de ajuste
SDK de Vertex AI para Python
from vertexai.tuning import sft
sft_tuning_job = sft.train(
source_model="gemini-2.0-flash-001",
# Pass the Vertex Multimodal Datasets directly
train_dataset=my_multimodal_dataset,
validation_dataset=my_multimodal_validation_dataset,
)
SDK de Google Gen AI
from google import genai
from google.genai.types import HttpOptions, CreateTuningJobConfig
client = genai.Client(http_options=HttpOptions(api_version="v1"))
tuning_job = client.tunings.tune(
base_model="gemini-2.0-flash-001",
# Pass the resource name of the Vertex Multimodal Dataset, not the dataset object
training_dataset={
"vertex_dataset_resource": my_multimodal_dataset.resource_name
},
# Optional
config=CreateTuningJobConfig(
tuned_model_display_name="Example tuning job"),
)
Para obtener más información, consulta Crear un trabajo de ajuste.
Predicción por lotes
Puedes obtener predicciones por lotes con un conjunto de datos multimodal.
(Opcional) Validar el conjunto de datos
Evalúa el conjunto de datos para comprobar si contiene errores, como errores de formato o errores del modelo.
SDK de Vertex AI para Python
Llama al assess_batch_prediction_validity()
. De forma predeterminada, se usa el template_config
adjunto al conjunto de datos, pero puedes especificar una plantilla para anular el comportamiento predeterminado.
# Attach template
my_dataset.attach_template_config(template_config=template_config)
# Validation for batch prediction
validation = my_dataset.assess_batch_prediction_validity(
model_name="gemini-2.0-flash-001",
dataset_usage="SFT_TRAINING"
)
# Inspect validation result
validation.errors
REST
Llama al método assess
y proporciona un batchPredictionValidationAssessmentConfig
.
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID:assess" \
-d '{
"batchPredictionValidationAssessmentConfig": {
"modelName": "projects/PROJECT_ID/locations/LOCATION/models/gemini-2.0-flash-001",
}
}'
(Opcional) Estimar el uso de recursos
Evalúa el conjunto de datos para obtener el recuento de tokens de tu trabajo.
SDK de Vertex AI para Python
Llama al assess_batch_prediction_resources()
.
batch_prediction_resources = my_dataset.assess_batch_prediction_resources(
model_name="gemini-2.0-flash"
)
print(batch_prediction_resources)
# For example, BatchPredictionResourceUsageAssessmentResult(token_count=362688, audio_token_count=122000)
REST
Llama al método assess
y proporciona un batchPredictionResourceUsageAssessmentConfig
.
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID:assess" \
-d '{
"batchPredictionResourceUsageAssessmentConfig": {
"modelName": "projects/PROJECT_ID/locations/LOCATION/models/gemini-2.0-flash-001"
}
}'
Ejecutar la tarea de predicción por lotes
Puedes usar tu conjunto de datos multimodal para hacer predicciones en lotes. Para ello, debes pasar el BigQuerytable_id
del resultado ensamblado:
SDK de Vertex AI para Python
from vertexai.batch_prediction import BatchPredictionJob
# Dataset needs to have an attached template_config to batch prediction
my_dataset.attach_template_config(template_config=template_config)
# assemble dataset to get assembly table id
assembly_table_id, _ = my_dataset.assemble()
batch_prediction_job = BatchPredictionJob.submit(
source_model="gemini-2.0-flash-001",
input_dataset=assembly_table_id,
)
SDK de Google Gen AI
from google import genai
client = genai.Client(http_options=HttpOptions(api_version="v1"))
# Attach template_config and assemble dataset
my_dataset.attach_template_config(template_config=template_config)
assembly_table_id, _ = my_dataset.assemble()
job = client.batches.create(
model="gemini-2.0-flash-001",
src=assembly_table_id,
)
Para obtener más información, consulta Solicitar un trabajo de predicción por lotes.
Limitaciones
Precios
Cuando ajustas un modelo o ejecutas un trabajo de predicción por lotes, se te cobra por el uso de la IA generativa y por consultar el conjunto de datos en BigQuery.
Cuando creas, ensamblas o evalúas tu conjunto de datos multimodal, se te cobra por almacenar y consultar conjuntos de datos multimodales en BigQuery. En concreto, las siguientes operaciones usan esos servicios subyacentes:
Usa la calculadora de precios para generar una estimación de costes en función del uso previsto.