Membangun pipeline

Dengan Vertex AI Pipelines, Anda dapat mengorkestrasi alur kerja machine learning (ML) dengan cara serverless. Sebelum Vertex AI Pipelines dapat mengorkestrasikan alur kerja ML, Anda harus mendeskripsikan alur kerja sebagai pipeline. Pipeline ML adalah alur kerja ML portabel dan skalabel yang didasarkan pada container dan layanan Google Cloud.

Panduan ini menjelaskan cara mulai membangun pipeline ML.

SDK pipeline mana yang harus saya gunakan?

Vertex AI Pipelines dapat menjalankan pipeline yang dibuat menggunakan salah satu SDK berikut:

  • Kubeflow Pipelines SDK v1.8 atau yang lebih baru (v2 direkomendasikan)

  • TensorFlow Extended v0.30.0 atau yang lebih baru

Jika menggunakan TensorFlow dalam alur kerja ML yang memproses data terstruktur atau data teks berukuran terabyte, sebaiknya Anda membangun pipeline menggunakan TFX.

Untuk kasus penggunaan lainnya, sebaiknya Anda membangun pipeline menggunakan Kubeflow Pipelines SDK. Dengan membangun pipeline menggunakan Kubeflow Pipelines SDK, Anda dapat mengimplementasikan alur kerja dengan membangun komponen kustom atau menggunakan kembali komponen bawaan, seperti Google Cloud Pipeline Components. Google Cloud Pipeline Components mempermudah penggunaan layanan Vertex AI seperti AutoML di pipeline Anda.

Panduan ini menjelaskan cara membangun pipeline menggunakan Kubeflow Pipelines SDK.

Sebelum memulai

Sebelum Anda membangun dan menjalankan pipeline, gunakan petunjuk berikut untuk menyiapkan project Google Cloud dan lingkungan pengembangan Anda.

  1. Agar project Google Cloud Anda siap menjalankan pipeline ML, ikuti petunjuk dalam panduan untuk mengonfigurasi project Google Cloud.

  2. Untuk membangun pipeline menggunakan Kubeflow Pipelines SDK, instal Kubeflow Pipelines SDK v1.8 atau yang lebih baru.

  3. Untuk menggunakan klien Python Vertex AI di pipeline Anda, instal library klien Vertex AI v1.7 atau yang lebih baru.

  4. Untuk menggunakan layanan Vertex AI di pipeline Anda, instal Google Cloud Pipeline Components SDK.

Mulai membangun pipeline

Untuk mengorkestrasi alur kerja ML di Vertex AI Pipelines, Anda harus menjelaskan terlebih dahulu alur kerja Anda sebagai pipeline. Contoh berikut menunjukkan cara menggunakan Google Cloud Pipeline Components dengan Vertex AI untuk membuat set data, melatih model menggunakan AutoML, dan men-deploy model terlatih untuk prediksi.

Sebelum menjalankan contoh kode berikut, Anda harus menyiapkan autentikasi.

Cara menyiapkan autentikasi

Untuk menyiapkan autentikasi, Anda harus membuat kunci akun layanan dan menetapkan variabel lingkungan untuk jalur ke kunci akun layanan.

  1. Membuat akun layanan:

    1. Di konsol Google Cloud, buka halaman Buat akun layanan.

      Buka Buat akun layanan

    2. Di kolom Nama akun layanan, masukkan nama.
    3. Opsional: Di kolom Deskripsi akun layanan, masukkan deskripsi.
    4. Klik Buat.
    5. Klik kolom Pilih peran. Di bagian Semua peran, pilih Vertex AI > Pengguna Vertex AI.
    6. Klik Selesai untuk membuat akun layanan.

      Jangan tutup jendela browser Anda. Anda akan menggunakannya pada langkah berikutnya.

  2. Membuat kunci akun layanan untuk autentikasi:

    1. Di konsol Google Cloud, klik alamat email untuk akun layanan yang telah dibuat.
    2. Klik Kunci.
    3. Klik Tambahkan kunci, lalu Buat kunci baru.
    4. Klik Buat. File kunci JSON akan didownload ke komputer Anda.
    5. Klik Tutup.
  3. Beri akun layanan baru Anda akses ke akun layanan yang digunakan untuk menjalankan pipeline.
    1. Klik untuk kembali ke daftar akun layanan.
    2. Klik nama akun layanan yang Anda gunakan untuk menjalankan pipeline. Halaman Detail akun layanan akan muncul.

      Jika Anda mengikuti petunjuk dalam panduan mengonfigurasi project untuk Vertex AI Pipelines, akun layanan ini sama dengan yang Anda buat di bagian Konfigurasikan akun layanan dengan izin terperinci. Jika tidak, Vertex AI akan menggunakan akun layanan default Compute Engine untuk menjalankan pipeline. Akun layanan default Compute Engine diberi nama seperti berikut: PROJECT_NUMBER-compute@developer.gserviceaccount.com

    3. Klik tab Izin.
    4. Klik Berikan akses. Panel Tambahkan akun utama akan muncul.
    5. Di kotak Akun utama baru, masukkan alamat email untuk akun layanan yang Anda buat di langkah sebelumnya.
    6. Di menu drop-down Peran, pilih Akun layanan > Pengguna akun layanan.
    7. Klik Simpan
  4. Tetapkan variabel lingkungan GOOGLE_APPLICATION_CREDENTIALS ke jalur file JSON yang berisi kunci akun layanan Anda. Variabel ini hanya berlaku untuk sesi shell Anda saat ini. Jadi, jika Anda membuka sesi baru, tetapkan variabel kembali.

    Contoh: Linux atau macOS

    Ganti [PATH] dengan jalur file JSON yang berisi kunci akun layanan Anda.

    export GOOGLE_APPLICATION_CREDENTIALS="[PATH]"

    Contoh:

    export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-account-file.json"

    Contoh: Windows

    Ganti [PATH] dengan jalur file JSON yang berisi kunci akun layanan Anda, dan [FILE_NAME] dengan nama file.

    Dengan PowerShell:

    $env:GOOGLE_APPLICATION_CREDENTIALS="[PATH]"

    Contoh:

    $env:GOOGLE_APPLICATION_CREDENTIALS="C:\Users\username\Downloads\[FILE_NAME].json"

    Dengan command prompt:

    set GOOGLE_APPLICATION_CREDENTIALS=[PATH]

Menentukan alur kerja Anda menggunakan paket Kubeflow Pipelines DSL

Paket kfp.dsl berisi bahasa khusus domain (DSL) yang dapat Anda gunakan untuk menentukan dan berinteraksi dengan pipeline dan komponen.

Komponen pipeline Kubeflow adalah fungsi factory yang membuat langkah-langkah pipeline. Setiap komponen menjelaskan input, output, dan implementasi komponen. Misalnya, dalam contoh kode di bawah, ds_op adalah komponen.

Komponen digunakan untuk membuat langkah-langkah pipeline. Saat pipeline berjalan, langkah-langkah dieksekusi saat data yang menjadi dependensinya tersedia. Misalnya, komponen pelatihan dapat mengambil file CSV sebagai input dan menggunakannya untuk melatih model.

import kfp
from google.cloud import aiplatform
from google_cloud_pipeline_components.v1.dataset import ImageDatasetCreateOp
from google_cloud_pipeline_components.v1.automl.training_job import AutoMLImageTrainingJobRunOp
from google_cloud_pipeline_components.v1.endpoint import EndpointCreateOp, ModelDeployOp

project_id = PROJECT_ID
pipeline_root_path = PIPELINE_ROOT

# Define the workflow of the pipeline.
@kfp.dsl.pipeline(
    name="automl-image-training-v2",
    pipeline_root=pipeline_root_path)
def pipeline(project_id: str):
    # The first step of your workflow is a dataset generator.
    # This step takes a Google Cloud Pipeline Component, providing the necessary
    # input arguments, and uses the Python variable `ds_op` to define its
    # output. Note that here the `ds_op` only stores the definition of the
    # output but not the actual returned object from the execution. The value
    # of the object is not accessible at the dsl.pipeline level, and can only be
    # retrieved by providing it as the input to a downstream component.
    ds_op = ImageDatasetCreateOp(
        project=project_id,
        display_name="flowers",
        gcs_source="gs://cloud-samples-data/vision/automl_classification/flowers/all_data_v2.csv",
        import_schema_uri=aiplatform.schema.dataset.ioformat.image.single_label_classification,
    )

    # The second step is a model training component. It takes the dataset
    # outputted from the first step, supplies it as an input argument to the
    # component (see `dataset=ds_op.outputs["dataset"]`), and will put its
    # outputs into `training_job_run_op`.
    training_job_run_op = AutoMLImageTrainingJobRunOp(
        project=project_id,
        display_name="train-iris-automl-mbsdk-1",
        prediction_type="classification",
        model_type="CLOUD",
        dataset=ds_op.outputs["dataset"],
        model_display_name="iris-classification-model-mbsdk",
        training_fraction_split=0.6,
        validation_fraction_split=0.2,
        test_fraction_split=0.2,
        budget_milli_node_hours=8000,
    )

    # The third and fourth step are for deploying the model.
    create_endpoint_op = EndpointCreateOp(
        project=project_id,
        display_name = "create-endpoint",
    )

    model_deploy_op = ModelDeployOp(
        model=training_job_run_op.outputs["model"],
        endpoint=create_endpoint_op.outputs['endpoint'],
        automatic_resources_min_replica_count=1,
        automatic_resources_max_replica_count=1,
    )

Ganti kode berikut:

  • PROJECT_ID: Project Google Cloud tempat pipeline ini berjalan.
  • PIPELINE_ROOT_PATH: Menentukan Cloud Storage URI yang dapat diakses oleh akun layanan pipeline. Artefak operasi pipeline disimpan di dalam root pipeline.

    Root pipeline dapat ditetapkan sebagai argumen anotasi @kfp.dsl.pipeline pada fungsi pipeline, atau dapat ditetapkan saat Anda memanggil create_run_from_job_spec untuk membuat operasi pipeline.

Mengompilasi pipeline Anda menjadi file YAML

Setelah alur kerja pipeline ditentukan, Anda dapat melanjutkan mengompilasi pipeline ke dalam format YAML. File YAML mencakup semua informasi untuk menjalankan pipeline di Vertex AI Pipelines.

from kfp import compiler

compiler.Compiler().compile(
    pipeline_func=pipeline,
    package_path='image_classif_pipeline.yaml'
)

Mengirimkan operasi pipeline Anda

Setelah alur kerja pipeline dikompilasi ke dalam format YAML, Anda dapat menggunakan klien Python Vertex AI untuk mengirimkan dan menjalankan pipeline.

import google.cloud.aiplatform as aip

# Before initializing, make sure to set the GOOGLE_APPLICATION_CREDENTIALS
# environment variable to the path of your service account.
aip.init(
    project=project_id,
    location=PROJECT_REGION,
)

# Prepare the pipeline job
job = aip.PipelineJob(
    display_name="automl-image-training-v2",
    template_path="image_classif_pipeline.yaml",
    pipeline_root=pipeline_root_path,
    parameter_values={
        'project_id': project_id
    }
)

job.submit()

Ganti kode berikut:

  • PROJECT_REGION: Region tempat pipeline ini berjalan.

Dalam contoh sebelumnya:

  1. Pipeline Kubeflow didefinisikan sebagai fungsi Python. Fungsi ini dianotasi dengan dekorator @kfp.dsl.pipeline, yang menentukan nama pipeline dan jalur root. Jalur root pipeline adalah lokasi tempat artefak pipeline disimpan.
  2. Langkah-langkah alur kerja pipeline dibuat menggunakan Google Cloud Pipeline Components. Dengan menggunakan output komponen sebagai input komponen lain, Anda menentukan alur kerja pipeline sebagai grafik. Misalnya: training_job_run_op bergantung pada output dataset dari ds_op.
  3. Anda mengompilasi pipeline menggunakan kfp.compiler.Compiler.
  4. Anda membuat pipeline yang dijalankan di Vertex AI Pipelines menggunakan klien Python Vertex AI. Saat menjalankan pipeline, Anda dapat mengganti nama pipeline dan jalur root pipeline. Operasi pipeline dapat dikelompokkan menggunakan nama pipeline. Mengganti nama pipeline dapat membantu Anda membedakan antara operasi pipeline produksi dan eksperimental.

Untuk mempelajari lebih lanjut cara membangun pipeline, baca bagian membangun pipeline Kubeflow, serta ikuti contoh dan tutorial.

Menguji pipeline secara lokal (opsional)

Setelah menentukan pipeline dan komponen, Anda dapat menguji kode komponen dengan mengeksekusi kode di lingkungan pembuatan lokal Anda. Dengan menjalankan pipeline atau komponen secara lokal, Anda dapat mengidentifikasi dan melakukan debug potensi masalah sebelum membuat pipeline run di remote lain, seperti Vertex AI Pipelines. Untuk mengetahui informasi selengkapnya tentang menjalankan pipeline dan komponen secara lokal, lihat Eksekusi lokal dalam dokumentasi KFP.

Halaman ini menunjukkan cara menetapkan dan menjalankan pipeline yang terdiri dari dua tugas.

Menyiapkan lingkungan lokal Anda

  1. Instal versi minor terbaru dari Kubeflow Pipelines (KFP) SDK v2:

    pip install --upgrade kfp>=2,<3
    
  2. Opsional: Instal Docker.

  3. Gunakan contoh kode berikut untuk menentukan pipeline sederhana:

    from kfp import dsl
    
    # Define a component to add two numbers.
    @dsl.component
    def add(a: int, b: int) -> int:
        return a + b
    
    # Define a simple pipeline using the component.
    @dsl.pipeline
    def addition_pipeline(x: int, y: int, z: int) -> int:
        task1 = add(a=x, b=y)
        task2 = add(a=task1.output, b=z)
        return task2.output
    

Memanggil eksekusi lokal

Inisialisasi sesi lokal menggunakan fungsi local.init(). Saat Anda menggunakan local.init(), KFP SDK mengeksekusi pipeline dan komponen Anda secara lokal saat Anda menyebutnya.

Saat menggunakan local.init(), Anda harus menentukan jenis runner. Jenis runner menunjukkan bagaimana KFP harus menjalankan setiap tugas.

Gunakan contoh berikut untuk menentukan jenis runner DockerRunner guna menjalankan setiap tugas dalam container. Untuk mengetahui informasi selengkapnya tentang pelari lokal yang didukung oleh KFP, lihat Local runner dalam dokumentasi KFP.

from kfp import local

local.init(runner=local.DockerRunner())

pipeline_task = addition_pipeline(x=1, y=2, z=3)

Gunakan kode berikut untuk melihat output tugas pipeline setelah eksekusi lokal:

print(f'Result: {pipeline_task.output}')

Membangun pipeline Kubeflow

Gunakan proses berikut untuk membangun pipeline.

  1. Desain pipeline Anda sebagai serangkaian komponen. Untuk mendorong penggunaan kembali, setiap komponen harus memiliki satu tanggung jawab. Jika memungkinkan, desain pipeline Anda untuk menggunakan kembali komponen yang telah terbukti seperti Google Cloud Pipeline Components.

    Pelajari lebih lanjut cara mendesain pipeline.

  2. Buat komponen kustom apa pun yang diperlukan untuk mengimplementasikan alur kerja ML Anda menggunakan Kubeflow Pipelines SDK. Komponen adalah kumpulan kode mandiri yang melakukan langkah dalam alur kerja ML Anda. Gunakan opsi berikut untuk membuat komponen pipeline.

  3. Bangun pipeline Anda sebagai fungsi Python.

    Pelajari lebih lanjut cara menentukan pipeline sebagai fungsi Python.

  4. Gunakan compiler Kubeflow Pipelines SDK untuk mengompilasi pipeline.

    from kfp import compiler
    
    compiler.Compiler().compile(
        pipeline_func=PIPELINE_FUNCTION,
        package_path=PIPELINE_PACKAGE_PATH)
    

    Ganti kode berikut:

    • PIPELINE_FUNCTION: Nama fungsi pipeline Anda.
    • PIPELINE_PACKAGE_PATH: Jalur menuju tempat penyimpanan pipeline yang dikompilasi.
  5. Jalankan pipeline menggunakan Konsol Google Cloud atau Python.

Mengakses resource Google Cloud di pipeline

Jika Anda tidak menentukan akun layanan saat menjalankan pipeline, Vertex AI Pipelines akan menggunakan akun layanan default Compute Engine untuk menjalankan pipeline Anda. Vertex AI Pipelines juga menggunakan akun layanan yang dijalankan pipeline untuk mengizinkan pipeline mengakses resource Google Cloud. Akun layanan default Compute Engine memiliki peran Project Editor secara default. Hal ini dapat memberi pipeline Anda akses berlebihan ke resource Google Cloud di project Google Cloud.

Sebaiknya buat akun layanan untuk menjalankan pipeline Anda, lalu beri akun ini izin terperinci ke resource Google Cloud yang diperlukan untuk menjalankan pipeline Anda.

Pelajari lebih lanjut cara menggunakan Identity and Access Management untuk membuat akun layanan dan mengelola akses yang diberikan ke akun layanan.

Memastikan pipeline selalu terbaru

Klien SDK dan image container yang Anda gunakan untuk membangun dan menjalankan pipeline diupdate secara berkala ke versi baru untuk mem-patch kerentanan keamanan dan menambahkan fungsi baru. Agar pipeline Anda selalu diupdate dengan versi terbaru, sebaiknya lakukan hal berikut:

Langkah berikutnya