Menyesuaikan model klasifikasi gambar dengan data kustom di Vertex AI Pipelines

Tutorial ini menunjukkan cara menggunakan Vertex AI Pipelines untuk menjalankan alur kerja ML secara menyeluruh, termasuk tugas-tugas berikut:

  • Mengimpor dan mengubah data.
  • Menyesuaikan model klasifikasi gambar dari TFHub menggunakan data yang diubah.
  • Mengimpor model yang telah dilatih ke Vertex AI Model Registry.
  • Opsional: Men-deploy model untuk penyaluran online dengan Vertex AI Prediction.

Sebelum memulai

  1. Pastikan Anda menyelesaikan langkah 1-3 di bagian Menyiapkan project Google Cloud dan lingkungan pengembangan.

  2. Buat lingkungan Python yang terisolasi dan instal Vertex AI SDK untuk Python.

  3. Instal Kubeflow Pipelines SDK:

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

Menjalankan pipeline pelatihan model ML

Kode contoh menjalankan hal berikut:

  • Memuat komponen dari repositori komponen untuk digunakan sebagai elemen penyusun pipeline.
  • Menyusun pipeline dengan membuat tugas komponen, dan meneruskan data di antara tugas-tugas komponen menggunakan argumen.
  • Mengirimkan pipeline untuk eksekusi di Vertex AI Pipelines. Lihat Harga Vertex AI Pipelines.

Salin kode contoh berikut ke dalam lingkungan pengembangan Anda, lalu jalankan.

Klasifikasi gambar

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

Perhatikan hal-hal berikut tentang kode contoh yang diberikan:

  • Pipeline Kubeflow didefinisikan sebagai fungsi Python.
  • Langkah-langkah alur kerja pipeline dibuat menggunakan komponen pipeline Kubeflow. Dengan menggunakan output komponen sebagai input komponen lain, Anda menentukan alur kerja pipeline sebagai grafik. Misalnya, tugas komponen preprocess_image_data_op bergantung pada output tfrecord_image_data_path dari tugas komponen transcode_imagedataset_tfrecord_from_csv_op.
  • Anda membuat proses pipeline di dalam Vertex AI Pipelines menggunakan Vertex AI SDK untuk Python.

Memantau pipeline

Di Konsol Google Cloud, di bagian Vertex AI, buka halaman Pipelines, lalu buka tab Runs.

Buka Pipeline runs

Langkah selanjutnya