Set di dati multimodali

I set di dati multimodali su Vertex AI ti consentono di creare, gestire, condividere e utilizzare set di dati multimodali per l'AI generativa. I set di dati multimodali forniscono le seguenti funzionalità chiave:

  • Puoi caricare set di dati da BigQuery, DataFrame o file JSONL in Cloud Storage.

  • Crea il tuo set di dati una sola volta e utilizzalo in diversi tipi di job, come la messa a punto supervisionata e la previsione batch, che impedisce la duplicazione dei dati e i problemi di formattazione.

  • Conserva tutti i tuoi set di dati di AI generativa in un'unica posizione gestita.

  • Convalida lo schema e la struttura e quantifica le risorse necessarie per le attività downstream, in modo da rilevare gli errori e stimare il costo prima di iniziare un'attività.

Puoi utilizzare set di dati multimodali tramite l'SDK Vertex AI per Python o l'API REST.

I set di dati multimodali sono un tipo di set di dati gestiti su Vertex AI. Si differenziano dagli altri tipi di set di dati gestiti per i seguenti motivi:

  • I set di dati multimodali possono includere dati di qualsiasi modalità (testo, immagine, audio, video). Altri tipi di set di dati gestiti sono per una sola modalità.
  • I set di dati multimodali possono essere utilizzati solo per i servizi di IA generativa su Vertex AI, ad esempio l'ottimizzazione e la previsione batch con modelli generativi. Gli altri tipi di set di dati gestiti possono essere utilizzati solo per i modelli predittivi Vertex AI.
  • I set di dati multimodali supportano metodi aggiuntivi, come assemble e assess, che vengono utilizzati per visualizzare l'anteprima dei dati, convalidare le richieste e stimare i costi.
  • I set di dati multimodali vengono archiviati in BigQuery, che è ottimizzato per set di dati di grandi dimensioni.

Prima di iniziare

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Vertex AI, BigQuery, and Cloud Storage APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Vertex AI, BigQuery, and Cloud Storage APIs.

    Enable the APIs

  8. Installa e inizializza l'SDK Vertex AI Python
  9. Importa le seguenti librerie:
    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
    
  10. Crea un set di dati

    Puoi creare un dataset multimodale da diverse fonti:

    • da un DataFrame Pandas

      my_dataset = datasets.MultimodalDataset.from_pandas(
          dataframe=my_dataframe,
          target_table_id=table_id    # optional
      )
      
    • da un DataFrame BigQuery:

      my_dataset = datasets.MultimodalDataset.from_bigframes(
          dataframe=my_dataframe,
          target_table_id=table_id    # optional
      )
      
    • da una tabella BigQuery

      my_dataset_from_bigquery = datasets.MultimodalDataset.from_bigquery(
          bigquery_uri=f"bq://projectId.datasetId.tableId"
      )
      
    • da una tabella BigQuery, utilizzando l'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"
            }
          }
        }
      }'
      
    • da un file JSONL in Cloud Storage. Nell'esempio seguente, il file JSONL contiene richieste già formattate per Gemini, quindi non è necessario alcun assemblaggio.

      my_dataset = datasets.MultimodalDataset.from_gemini_request_jsonl(
        gcs_uri = gcs_uri_of_jsonl_file,
      )
      
    • da un set di dati multimodale esistente

      # 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)
      

    Costruire e allegare un modello

    Un modello definisce come trasformare il set di dati multimodale in un formato che può essere trasmesso al modello. Questo è necessario per eseguire un job di ottimizzazione o di previsione batch.

    SDK Vertex AI per Python

    1. Costruisci un modello. Esistono due modi per creare un modello:

      • Utilizza il metodo helper 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.'
      )
      
      • Costruisci manualmente un modello da un GeminiExample, che consente una granularità più fine, ad esempio conversazioni multi-turno. Il seguente esempio di codice include anche un codice commentato facoltativo per specificare un field_mapping, che consente di utilizzare un nome segnaposto diverso dal nome della colonna del set di dati. Ad esempio:
      # 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"},
      )
      
    2. Allegalo al set di dati:

      my_dataset.attach_template_config(template_config=template_config)
      

    REST

    Chiama il metodo patch e aggiorna il campo metadata con quanto segue:

    • L'URI della tabella BigQuery. Per i set di dati creati da una tabella BigQuery, questo è il bigquery_uri di origine. Per i set di dati creati da altre origini, come JSONL o DataFrame, questa è la tabella BigQuery in cui sono stati copiati i dati.
    • Un gemini_template_config.
    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"
    

    (Facoltativo) Assemblare il set di dati

    Il metodo assemble applica il modello per trasformare il set di dati e archivia l'output in una nuova tabella BigQuery. In questo modo puoi visualizzare l'anteprima dei dati prima che vengano passati al modello.

    Per impostazione predefinita, viene utilizzato il template_config allegato al set di dati, ma puoi specificare un modello per ignorare il comportamento predefinito.

    SDK Vertex AI per 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 '{}'
    

    Ad esempio, supponiamo che il tuo set di dati multimodale contenga i seguenti dati:

    Riga image_uris etichette
    1 gs://cloud-samples-data/ai-platform/flowers/daisy/1396526833_fb867165be_n.jpg margherita

    Il metodo assemble crea quindi una nuova tabella BigQuery con il nome table_id, in cui ogni riga contiene il corpo della richiesta. Ad esempio:

    {
      "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."
          }
        ]
      }
    }
    

    Ottimizzare il modello

    Puoi ottimizzare i modelli Gemini utilizzando un set di dati multimodale.

    (Facoltativo) Convalida il set di dati

    Valuta il set di dati per verificare se contiene errori, ad esempio errori di formattazione del set di dati o del modello.

    SDK Vertex AI per Python

    Chiama il assess_tuning_validity(). Per impostazione predefinita, viene utilizzato il template_config allegato al set di dati, ma puoi specificare un modello per ignorare il comportamento predefinito.

    # 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

    Chiama il metodo assess e fornisci 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"
      }
    }'
    

    (Facoltativo) Stima l'utilizzo delle risorse

    Valuta il set di dati per ottenere il conteggio dei token e dei caratteri fatturabili per il job di ottimizzazione.

    SDK Vertex AI per Python

    Chiama il 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

    Chiama il metodo assess e fornisci 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"
      }
    }'
    

    Esegui il job di ottimizzazione

    SDK Vertex AI per 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"),
    )
    

    Per saperne di più, consulta Creare un job di ottimizzazione.

    Previsione batch

    Puoi richiedere un job di previsione in batch utilizzando un set di dati multimodale.

    (Facoltativo) Convalida il set di dati

    Valuta il set di dati per verificare se contiene errori, ad esempio errori di formattazione del set di dati o del modello.

    SDK Vertex AI per Python

    Chiama il assess_batch_prediction_validity(). Per impostazione predefinita, viene utilizzato il template_config allegato al set di dati, ma puoi specificare un modello per ignorare il comportamento predefinito.

    # 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

    Chiama il metodo assess e fornisci 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",
      }
    }'
    

    (Facoltativo) Stima l'utilizzo delle risorse

    Valuta il set di dati per ottenere il conteggio dei token per il tuo job.

    SDK Vertex AI per Python

    Chiama il 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

    Chiama il metodo assess e fornisci 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"
      }
    }'
    

    Esegui il job di previsione batch

    Puoi utilizzare il set di dati multimodale per eseguire la previsione batch passando iltable_id BigQuery dell'output assemblato:

    SDK Vertex AI per 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,
    )
    

    Per saperne di più, consulta Richiedere un job di previsione batch.

    Limitazioni

    • I set di dati multimodali possono essere utilizzati solo con le funzionalità di AI generativa. Non possono essere utilizzate con funzionalità di AI non generativa come l'addestramento AutoML e l'addestramento personalizzato.

    • I set di dati multimodali possono essere utilizzati solo con i modelli Google come Gemini. Non possono essere utilizzati con modelli di terze parti.

    Prezzi

    Quando ottimizzi un modello o esegui un job di previsione batch, ti vengono addebitati l'utilizzo dell'IA generativa e l'esecuzione di query sul set di dati in BigQuery.

    Quando crei, assembla o valuti il tuo set di dati multimodale, ti viene addebitato il costo di archiviazione e query dei set di dati multimodali in BigQuery. Nello specifico, le seguenti operazioni utilizzano questi servizi sottostanti:

    • Create set di dati

      • I set di dati creati da una tabella BigQuery o da un dataframe esistenti non comportano costi di archiviazione aggiuntivi. Questo perché utilizziamo una visualizzazione logica anziché archiviare un'altra copia dei dati.
      • I set di dati creati da altre origini copiano i dati in una nuova tabella BigQuery, il che comporta costi di archiviazione in BigQuery. Ad esempio, l'archiviazione logica attiva a 0,02 $per GiB al mese.
    • Assemble set di dati

      • Questo metodo crea una nuova tabella BigQuery che contiene l'intero set di dati nel formato della richiesta del modello, il che comporta costi di archiviazione in BigQuery. Ad esempio, l'archiviazione logica attiva a 0,02 $per GiB al mese.

      • Questo metodo legge anche il set di dati una sola volta, il che comporta costi per le query in BigQuery. Ad esempio, il calcolo on demand nei prezzi, 6,25 $ per TiB. Convalida del set di dati e stima delle risorse

    • Assess legge il set di dati una sola volta, il che comporta costi per le query in BigQuery. Ad esempio, il calcolo on demand nei prezzi, 6,25 $ per TiB.

    Utilizza il Calcolatore prezzi per generare una stima dei costi in base all'utilizzo previsto.