Ottimizzare un modello di classificazione delle immagini con dati personalizzati su Gemini Enterprise Agent Platform Pipelines

Questo tutorial mostra come utilizzare le pipeline di Gemini Enterprise Agent Platform per eseguire un flusso di lavoro di ML end-to-end, incluse le seguenti attività:

  • Importare e trasformare i dati.
  • Eseguire il fine-tuning di un modello di classificazione delle immagini da TFHub utilizzando i dati trasformati.
  • Importare il modello addestrato in Model Registry di Gemini Enterprise Agent Platform.
  • Facoltativo: esegui il deployment del modello per l'erogazione online con Vertex AI Inference.

Prima di iniziare

  1. Assicurati di aver completato i passaggi da 1 a 3 in Configurare un progetto.

  2. Crea un ambiente Python isolato e installa l' SDK Agent Platform per Python.

  3. Installa l'SDK Kubeflow Pipelines:

    python3 -m pip install "kfp<2.0.0" "google-cloud-aiplatform>=1.16.0" --upgrade --quiet
    

Eseguire la pipeline di addestramento del modello di ML

Il codice campione esegue queste operazioni:

  • Carica i componenti da un repository di componenti da utilizzare come blocchi di base della pipeline.
  • Compone una pipeline creando attività dei componenti e passando i dati tra di essi utilizzando gli argomenti.
  • Invia la pipeline per l'esecuzione sulle pipeline di Gemini Enterprise Agent Platform. Consulta i prezzi delle pipeline di Gemini Enterprise Agent Platform.

Copia il seguente codice campione nel tuo ambiente di sviluppo ed eseguilo.

Classificazione di immagini

# python3 -m pip install "kfp<2.0.0" "google-cloud-aiplatform>=1.16.0" --upgrade --quiet
from kfp import components
from kfp.v2 import dsl

# %% Loading components
upload_Tensorflow_model_to_Google_Cloud_Vertex_AI_op = components.load_component_from_url('https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/google-cloud/Vertex_AI/Models/Upload_Tensorflow_model/component.yaml')
deploy_model_to_endpoint_op = components.load_component_from_url('https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/399405402d95f4a011e2d2e967c96f8508ba5688/community-content/pipeline_components/google-cloud/Vertex_AI/Models/Deploy_to_endpoint/component.yaml')
transcode_imagedataset_tfrecord_from_csv_op = components.load_component_from_url('https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/main/community-content/pipeline_components/image_ml_model_training/transcode_tfrecord_image_dataset_from_csv/component.yaml')
load_image_classification_model_from_tfhub_op = components.load_component_from_url('https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/b5b65198a6c2ffe8c0fa2aa70127e3325752df68/community-content/pipeline_components/image_ml_model_training/load_image_classification_model/component.yaml')
preprocess_image_data_op = components.load_component_from_url('https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/main/community-content/pipeline_components/image_ml_model_training/preprocess_image_data/component.yaml')
train_tensorflow_image_classification_model_op = components.load_component_from_url('https://raw.githubusercontent.com/GoogleCloudPlatform/vertex-ai-samples/main/community-content/pipeline_components/image_ml_model_training/train_image_classification_model/component.yaml')


# %% Pipeline definition
def image_classification_pipeline():
    class_names = ['daisy', 'dandelion', 'roses', 'sunflowers', 'tulips']
    csv_image_data_path = 'gs://cloud-samples-data/ai-platform/flowers/flowers.csv'
    deploy_model = False

    image_data = dsl.importer(
        artifact_uri=csv_image_data_path, artifact_class=dsl.Dataset).output

    image_tfrecord_data = transcode_imagedataset_tfrecord_from_csv_op(
        csv_image_data_path=image_data,
        class_names=class_names
    ).outputs['tfrecord_image_data_path']

    loaded_model_outputs = load_image_classification_model_from_tfhub_op(
        class_names=class_names,
    ).outputs

    preprocessed_data = preprocess_image_data_op(
        image_tfrecord_data,
        height_width_path=loaded_model_outputs['image_size_path'],
    ).outputs

    trained_model = (train_tensorflow_image_classification_model_op(
        preprocessed_training_data_path = preprocessed_data['preprocessed_training_data_path'],
        preprocessed_validation_data_path = preprocessed_data['preprocessed_validation_data_path'],
        model_path=loaded_model_outputs['loaded_model_path']).
                   set_cpu_limit('96').
                   set_memory_limit('128G').
                   add_node_selector_constraint('cloud.google.com/gke-accelerator', 'NVIDIA_TESLA_A100').
                   set_gpu_limit('8').
                   outputs['trained_model_path'])

    vertex_model_name = upload_Tensorflow_model_to_Google_Cloud_Vertex_AI_op(
        model=trained_model,
    ).outputs['model_name']

    # Deploying the model might incur additional costs over time
    if deploy_model:
        vertex_endpoint_name = deploy_model_to_endpoint_op(
            model_name=vertex_model_name,
        ).outputs['endpoint_name']

pipeline_func = image_classification_pipeline

# %% Pipeline submission
if __name__ == '__main__':
    from google.cloud import aiplatform
    aiplatform.PipelineJob.from_pipeline_func(pipeline_func=pipeline_func).submit()

Tieni presente quanto segue sul codice campione fornito:

  • Una pipeline Kubeflow è definita come funzione Python.
  • I passaggi del flusso di lavoro della pipeline vengono creati utilizzando i componenti della pipeline di Kubeflow. Utilizzando gli output di un componente come input di un altro componente, il flusso di lavoro della pipeline viene definito come grafo. Ad esempio, l'attività del componente preprocess_image_data_op dipende dall'output tfrecord_image_data_path dell'attività del componente transcode_imagedataset_tfrecord_from_csv_op.
  • L'esecuzione di una pipeline deve essere eseguita sulle pipeline di Gemini Enterprise Agent Platform utilizzando l'SDK Agent Platform per Python.

Monitorare la pipeline

Nella Google Cloud console, nella sezione Agent Platform, vai alla pagina Pipeline e apri la scheda Esecuzioni.

Vai alle esecuzioni di pipeline

Passaggi successivi