Os conjuntos de dados multimodais no Vertex AI permitem-lhe criar, gerir, partilhar e usar conjuntos de dados multimodais para IA generativa. Os conjuntos de dados multimodais oferecem as seguintes funcionalidades principais:
Pode carregar conjuntos de dados do BigQuery, de DataFrames ou de ficheiros JSONL no Cloud Storage.
Crie o conjunto de dados uma vez e use-o em diferentes tipos de tarefas, como o ajuste fino supervisionado e a previsão em lote, o que evita a duplicação de dados e problemas de formatação.
Mantenha todos os seus conjuntos de dados de IA generativa num único local gerido.
Validar o esquema e a estrutura, e quantificar os recursos necessários para tarefas posteriores, o que ajuda a detetar erros e estimar o custo antes de iniciar uma tarefa.
Pode usar conjuntos de dados multimodais através do SDK Vertex AI para Python ou da API REST.
Os conjuntos de dados multimodais são um tipo de conjuntos de dados geridos no Vertex AI. São diferentes de outros tipos de conjuntos de dados geridos nos seguintes aspetos:
- Os conjuntos de dados multimodais podem incluir dados de qualquer modalidade (texto, imagem, áudio, vídeo). Outros tipos de conjuntos de dados geridos destinam-se apenas a uma única modalidade.
- Os conjuntos de dados multimodais só podem ser usados para serviços de IA generativa no Vertex AI, como o ajuste e a previsão em lote com modelos generativos. Outros tipos de conjuntos de dados geridos só podem ser usados para modelos preditivos do Vertex AI.
- Os conjuntos de dados multimodais suportam métodos adicionais, como
assemble
eassess
, que são usados para pré-visualizar dados, validar pedidos e estimar custos. - Os conjuntos de dados multimodais são armazenados no BigQuery, que está otimizado para grandes conjuntos de dados.
Antes de começar
- 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. - Instale e inicialize o SDK Vertex AI para Python
- Importe as seguintes 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
de um Pandas DataFrame
my_dataset = datasets.MultimodalDataset.from_pandas( dataframe=my_dataframe, target_table_id=table_id # optional )
de um DataFrame do BigQuery:
my_dataset = datasets.MultimodalDataset.from_bigframes( dataframe=my_dataframe, target_table_id=table_id # optional )
de uma tabela do BigQuery
my_dataset_from_bigquery = datasets.MultimodalDataset.from_bigquery( bigquery_uri=f"bq://projectId.datasetId.tableId" )
de uma tabela do BigQuery, através da 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" } } } }'
A partir de um ficheiro JSONL no Cloud Storage. No exemplo seguinte, o ficheiro JSONL contém pedidos que já estão formatados para o Gemini, pelo que não é necessária montagem.
my_dataset = datasets.MultimodalDataset.from_gemini_request_jsonl( gcs_uri = gcs_uri_of_jsonl_file, )
De um conjunto de dados multimodal existente
# 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)
Construa um modelo. Existem duas formas de criar um modelo:
- Use o 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.' )
- Construir manualmente um modelo a partir de um
GeminiExample
, o que permite uma granularidade mais precisa, como conversas com várias interações. O exemplo de código seguinte também inclui código comentado opcional para especificar umfield_mapping
, que lhe permite usar um nome de marcador de posição diferente do nome da coluna do conjunto de dados. Por exemplo:
# 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"}, )
- Use o método auxiliar
Anexe-o ao conjunto de dados:
my_dataset.attach_template_config(template_config=template_config)
- O URI da tabela do BigQuery. Para conjuntos de dados criados a partir de uma tabela do BigQuery, esta é a sua origem
bigquery_uri
. Para conjuntos de dados criados a partir de outras origens, como JSONL ou DataFrame, esta é a tabela do BigQuery para a qual os seus dados foram copiados. - A
gemini_template_config
. Os conjuntos de dados multimodais só podem ser usados com funcionalidades de IA generativa. Não podem ser usadas com funcionalidades de IA não generativa, como a preparação do AutoML e a preparação personalizada.
Os conjuntos de dados multimodais só podem ser usados com modelos Google, como o Gemini. Não podem ser usados com modelos de terceiros.
Create
conjunto de dados- Os conjuntos de dados criados a partir de uma tabela ou um DataFrame do BigQuery existente não incorrem em custos de armazenamento adicionais. Isto acontece porque usamos uma vista lógica em vez de armazenar outra cópia dos dados.
- Os conjuntos de dados criados a partir de outras origens copiam os dados para uma nova tabela do BigQuery, o que implica custos de armazenamento no BigQuery. Por exemplo, armazenamento lógico ativo por 0,02 USD por GiB por mês.
Assemble
conjunto de dadosEste método cria uma nova tabela do BigQuery que contém o conjunto de dados completo no formato de pedido do modelo, o que implica custos de armazenamento no BigQuery. Por exemplo, armazenamento lógico ativo por 0,02 USD por GiB por mês.
Este método também lê o conjunto de dados uma vez, o que implica custos de consulta no BigQuery. Por exemplo, computação a pedido nos preços, 6,25 USD por TiB. Validação do conjunto de dados e estimativa de recursos
Assess
lê o conjunto de dados uma vez, o que incorre em custos de consulta no BigQuery. Por exemplo, computação a pedido nos preços, 6,25 USD por TiB.
Crie um conjunto de dados
Pode criar um conteúdo multimédia multimodal dataset
a partir de diferentes origens:
Construa e anexe um modelo
Um modelo define como transformar o conjunto de dados multimodal num formato que pode ser transmitido ao modelo. Isto é necessário para executar uma tarefa de ajuste ou de previsão em lote.
SDK Vertex AI para Python
REST
Chame o método patch
e atualize o campo metadata
com o seguinte:
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) Reúna o conjunto de dados
O método assemble
aplica o modelo para transformar o seu conjunto de dados e armazena o resultado numa nova tabela do BigQuery. Isto permite-lhe pré-visualizar os dados antes de serem transmitidos ao modelo.
Por predefinição, é usado o template_config
anexado ao conjunto de dados, mas pode especificar um modelo para substituir o comportamento predefinido.
SDK 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 exemplo, suponha que o seu conjunto de dados multimodal contém os seguintes dados:
Linha | image_uris | etiquetas |
---|---|---|
1 | gs://cloud-samples-data/ai-platform/flowers/daisy/1396526833_fb867165be_n.jpg | margarida |
Em seguida, o método assemble
cria uma nova tabela do BigQuery com o nome table_id
, onde cada linha contém o corpo do pedido. Por exemplo:
{
"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."
}
]
}
}
Ajuste o modelo
Pode ajustar os modelos do Gemini com um conjunto de dados multimodal.
(Opcional) Valide o conjunto de dados
Avalie o conjunto de dados para verificar se contém erros, como erros de formatação do conjunto de dados ou erros do modelo.
SDK Vertex AI para Python
Ligar a assess_tuning_validity()
. Por predefinição, é usado o template_config
anexado ao conjunto de dados, mas pode especificar um modelo para substituir o comportamento predefinido.
# 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
Chame o método assess
e faculte um 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) Estime a utilização de recursos
Avalie o conjunto de dados para obter o token e a contagem de carateres faturáveis para a tarefa de ajuste.
SDK Vertex AI para Python
Ligar a 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
Chame o método assess
e faculte um 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"
}
}'
Execute a tarefa de otimização
SDK 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 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 mais informações, consulte o artigo Crie uma tarefa de otimização.
Previsão em lote
Pode obter previsões em lote com um conjunto de dados multimodal.
(Opcional) Valide o conjunto de dados
Avalie o conjunto de dados para verificar se contém erros, como erros de formatação do conjunto de dados ou erros do modelo.
SDK Vertex AI para Python
Ligar a assess_batch_prediction_validity()
. Por predefinição, é usado o template_config
anexado ao conjunto de dados, mas pode especificar um modelo para substituir o comportamento predefinido.
# 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
Chame o método assess
e faculte um 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) Estime a utilização de recursos
Avalie o conjunto de dados para obter a contagem de tokens da sua tarefa.
SDK Vertex AI para Python
Ligar a 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
Chame o método assess
e faculte um 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"
}
}'
Execute a tarefa de previsão em lote
Pode usar o conjunto de dados multimodal para fazer a previsão em lote transmitindo o BigQuerytable_id
da saída reunida:
SDK 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 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 mais informações, consulte o artigo Peça uma tarefa de previsão em lote.
Limitações
Preços
Quando otimiza um modelo ou executa uma tarefa de previsão em lote, a faturação é feita pela utilização da IA generativa e pela consulta do conjunto de dados no BigQuery.
Quando cria, monta ou avalia o seu conjunto de dados multimodal, é-lhe faturado o armazenamento e a consulta de conjuntos de dados multimodais no BigQuery. Especificamente, as seguintes operações usam esses serviços subjacentes:
Use a calculadora de preços para gerar uma estimativa de custos com base na sua utilização projetada.