Perfeziona un modello di classificazione delle immagini con dati personalizzati su Vertex AI Pipelines

Questo tutorial mostra come utilizzare Vertex AI Pipelines per eseguire un flusso di lavoro ML end-to-end, che include le attività seguenti:

  • Importa e trasforma i dati.
  • Perfeziona un modello di classificazione delle immagini da TFHub utilizzando i dati trasformati.
  • Importa il modello addestrato in Vertex AI Model Registry.
  • Facoltativo: esegui il deployment del modello per la pubblicazione online con Vertex AI Prediction.

Prima di iniziare

  1. Assicurati di aver completato i passaggi 1-3 descritti in Configurare un progetto Google Cloud e un ambiente di sviluppo.

  2. Crea un ambiente Python isolato e installa l'SDK Vertex AI per Python.

  3. Installa l'SDK Kubeflow Pipelines:

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

Esegui la pipeline di addestramento del modello ML

Il codice di esempio esegue queste operazioni:

  • Carica i componenti da un repository di componenti da utilizzare come componenti di base della pipeline.
  • Crea una pipeline creando attività del componente e passando dati tra loro utilizzando argomenti.
  • Invia la pipeline per l'esecuzione su Vertex AI Pipelines. Consulta i prezzi di Vertex AI Pipelines.

Copia il seguente codice campione nell'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('http://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('http://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('http://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('http://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('http://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('http://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.go888ogle.com.fqhub.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 per quanto riguarda il 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 Kubeflow. Utilizzando gli output di un componente come input di un altro componente, definisci il flusso di lavoro della pipeline come grafico. 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.
  • Puoi creare un'esecuzione della pipeline su Vertex AI Pipelines utilizzando l'SDK Vertex AI per Python.

Monitora la pipeline

Nella sezione Vertex AI della console Google Cloud, vai alla pagina Pipeline e apri la scheda Esecuzioni.

Vai a Esecuzioni pipeline

Passaggi successivi