Bildklassifizierungsmodell mit benutzerdefinierten Daten in Vertex AI Pipelines optimieren

In dieser Anleitung wird gezeigt, wie Sie Vertex AI Pipelines verwenden, um einen End-to-End-ML-Workflow auszuführen. Dazu gehören folgende Aufgaben:

  • Daten importieren und umwandeln
  • Ein Bildklassifizierungsmodell von TFHub mit transformierten Daten optimieren.
  • Importieren Sie das trainierte Modell in Vertex AI Model Registry.
  • Optional: Stellen Sie das Modell für die Online-Bereitstellung mit Vertex AI Prediction bereit.

Hinweis

  1. Führen Sie die Schritte 1–3 unter Google Cloud-Projekt und Entwicklungsumgebung einrichten aus.

  2. Erstellen Sie eine isolierte Python-Umgebung und installieren Sie das Vertex AI SDK für Python.

  3. Installieren Sie das Kubeflow Pipelines SDK:

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

Führen Sie die ML-Modelltrainingspipeline aus

Dieser Beispielcode tut Folgendes:

  • Lädt Komponenten aus einem Komponenten-Repository, die als Pipeline-Bausteine verwendet werden sollen.
  • Erstellt eine Pipeline; dazu werden Komponentenaufgaben erstellt und Daten zwischen ihnen über Argumente übergeben.
  • Die Pipeline wird zur Ausführung in Vertex AI Pipelines gesendet. Weitere Informationen finden Sie unter Vertex AI Pipelines: Preise.

Kopieren Sie folgenden Beispielcode in Ihre Entwicklungsumgebung und führen Sie ihn aus.

Bildklassifizierung

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

Beachten Sie folgende Hinweise zum Beispielcode:

  • Eine Kubeflow-Pipeline ist als Python-Funktion definiert.
  • Die Workflowschritte der Pipeline werden mit Kubeflow-Pipeline-Komponenten erstellt. Wenn Sie die Ausgaben einer Komponente als Eingabe einer anderen Komponente verwenden, definieren Sie den Workflow der Pipeline als Grafik. Beispielsweise hängt die Aufgabe der Komponente preprocess_image_data_op von der tfrecord_image_data_path-Ausgabe der Aufgabe der Komponente transcode_imagedataset_tfrecord_from_csv_op ab.
  • Erstellen Sie eine Pipeline in Vertex AI Pipelines mit dem Vertex AI SDK für Python.

Pipeline überwachen

Rufen Sie in der Google Cloud Console im Abschnitt „Vertex AI“ die Seite Pipelines auf und öffnen Sie den Tab Ausführungen.

Zu den Pipeline-Ausführungen

Nächste Schritte