Menjalankan pelatihan model kustom di Vertex Pipelines

1. Ringkasan

Di lab ini, Anda akan mempelajari cara menjalankan tugas pelatihan model kustom menggunakan Kubeflow Pipelines SDK di Vertex Pipelines.

Yang Anda pelajari

Anda akan mempelajari cara:

  • Menggunakan Kubeflow Pipelines SDK untuk membangun pipeline ML yang skalabel
  • Membuat dan memasukkan tugas pelatihan model Scikit-learn kustom ke dalam container yang menggunakan set data terkelola Vertex AI, dan akan berjalan di Vertex AI Training dalam pipeline
  • Menjalankan tugas prediksi batch dalam Vertex Pipelines
  • Menggunakan komponen bawaan untuk berinteraksi dengan layanan Vertex AI, yang disediakan melalui library google_cloud_pipeline_components

Total biaya untuk menjalankan lab ini di Google Cloud adalah sekitar $5.

2. Pengantar Vertex AI

Lab ini menggunakan Vertex AI, platform ML terkelola end-to-end kami di Google Cloud. Vertex AI mengintegrasikan penawaran ML Google di seluruh Google Cloud ke dalam pengalaman pengembangan yang lancar. Selain layanan deployment dan pelatihan model, Vertex AI juga mencakup berbagai produk MLOps, termasuk Vertex Pipelines (fokus lab ini), Pemantauan Model, Feature Store, dan banyak lagi. Anda dapat melihat semua penawaran produk Vertex AI pada diagram di bawah.

Ringkasan produk Vertex

Jika Anda memiliki masukan, harap lihat halaman dukungan.

Mengapa pipeline ML berguna?

Sebelum kita membahas lebih jauh, mari kita pahami terlebih dahulu mengapa Anda ingin menggunakan pipeline. Bayangkan Anda sedang membangun alur kerja ML yang mencakup pemrosesan data, melatih model, penyesuaian hyperparameter, evaluasi, dan deployment model. Masing-masing langkah ini mungkin memiliki dependensi yang berbeda, yang dapat menjadi berat jika Anda memperlakukan seluruh alur kerja sebagai monolit. Saat mulai menskalakan proses ML, Anda mungkin ingin membagikan alur kerja ML Anda kepada orang lain di tim Anda sehingga mereka dapat menjalankannya dan menyumbangkan kode. Tanpa proses yang dapat diandalkan dan dapat direproduksi, proses ini akan menjadi sulit. Dengan pipeline, setiap langkah dalam proses ML Anda adalah container-nya sendiri. Hal ini memungkinkan Anda mengembangkan langkah secara independen serta melacak input dan output dari setiap langkah dengan cara yang dapat direproduksi. Anda juga dapat menjadwalkan atau memicu pengoperasian pipeline berdasarkan peristiwa lain di lingkungan Cloud, seperti memulai operasi pipeline saat data pelatihan baru tersedia.

Pipeline tl;dr: membantu Anda menyederhanakan dan mereproduksi alur kerja ML Anda.

3. Penyiapan lingkungan cloud

Anda memerlukan project Google Cloud Platform dengan penagihan yang diaktifkan untuk menjalankan codelab ini. Untuk membuat project, ikuti petunjuk di sini.

Langkah 1: Mulai Cloud Shell

Di lab ini, Anda akan mengerjakan sesi Cloud Shell, yang merupakan penafsir perintah yang dihosting oleh virtual machine yang berjalan di cloud Google. Anda dapat dengan mudah menjalankan bagian ini secara lokal di komputer sendiri, tetapi menggunakan Cloud Shell akan memberi semua orang akses ke pengalaman yang dapat diproduksi ulang dalam lingkungan yang konsisten. Setelah lab ini, Anda dapat mencoba lagi bagian ini di komputer Anda sendiri.

Mengizinkan Cloud Shell

Mengaktifkan Cloud Shell

Dari kanan atas Konsol Cloud, klik tombol di bawah untuk Activate Cloud Shell:

Mengaktifkan Cloud Shell

Jika belum pernah memulai Cloud Shell, Anda akan melihat layar perantara (di paruh bawah) yang menjelaskan apa itu Cloud Shell. Jika demikian, klik Lanjutkan (dan Anda tidak akan pernah melihatnya lagi). Berikut tampilan layar sekali-tampil tersebut:

Penyiapan Cloud Shell

Perlu waktu beberapa saat untuk penyediaan dan terhubung ke Cloud Shell.

Init Cloud Shell

Mesin virtual ini dimuat dengan semua alat pengembangan yang Anda butuhkan. Layanan ini menawarkan direktori beranda tetap sebesar 5 GB dan beroperasi di Google Cloud, sehingga sangat meningkatkan performa dan autentikasi jaringan. Sebagian besar pekerjaan Anda dalam codelab ini dapat dilakukan hanya dengan browser atau Chromebook.

Setelah terhubung ke Cloud Shell, Anda akan melihat bahwa Anda sudah diautentikasi dan project sudah ditetapkan ke project ID Anda.

Jalankan perintah berikut di Cloud Shell untuk mengonfirmasi bahwa Anda telah diautentikasi:

gcloud auth list

Anda akan melihat yang seperti ini dalam output perintah:

Output Cloud Shell

Jalankan perintah berikut di Cloud Shell untuk mengonfirmasi bahwa perintah gcloud mengetahui project Anda:

gcloud config list project

Output perintah

[core]
project = <PROJECT_ID>

Jika tidak, Anda dapat menyetelnya dengan perintah ini:

gcloud config set project <PROJECT_ID>

Output perintah

Updated property [core/project].

Cloud Shell memiliki beberapa variabel lingkungan, termasuk GOOGLE_CLOUD_PROJECT yang berisi nama project Cloud kita saat ini. Kita akan menggunakannya di berbagai tempat di lab ini. Anda dapat melihatnya dengan menjalankan:

echo $GOOGLE_CLOUD_PROJECT

Langkah 2: Aktifkan API

Pada langkah selanjutnya, Anda akan melihat di mana layanan ini diperlukan (dan alasannya). Namun, untuk saat ini, jalankan perintah ini agar project Anda dapat mengakses layanan Compute Engine, Container Registry, dan Vertex AI:

gcloud services enable compute.googleapis.com         \
                       containerregistry.googleapis.com  \
                       aiplatform.googleapis.com

Perintah di atas akan menampilkan pesan seperti berikut yang menandakan bahwa proses berhasil:

Operation "operations/acf.cc11852d-40af-47ad-9d59-477a12847c9e" finished successfully.

Langkah 3: Buat Bucket Cloud Storage

Untuk menjalankan tugas pelatihan pada Vertex AI, kita memerlukan bucket penyimpanan untuk menyimpan aset model tersimpan. Bucket harus bersifat regional. Kita menggunakan us-central di sini, tetapi Anda dapat menggunakan region lain (cukup ganti di seluruh lab ini). Jika sudah memiliki bucket, Anda dapat melewati langkah ini.

Jalankan perintah berikut di terminal Cloud Shell Anda untuk membuat bucket:

BUCKET_NAME=gs://$GOOGLE_CLOUD_PROJECT-bucket
gsutil mb -l us-central1 $BUCKET_NAME

Selanjutnya, kita akan memberi akun layanan komputasi akses ke bucket ini. Tindakan ini akan memastikan bahwa Vertex Pipelines memiliki izin yang diperlukan untuk menulis file ke bucket ini. Jalankan perintah berikut untuk menambahkan izin ini:

gcloud projects describe $GOOGLE_CLOUD_PROJECT > project-info.txt
PROJECT_NUM=$(cat project-info.txt | sed -nre 's:.*projectNumber\: (.*):\1:p')
SVC_ACCOUNT="${PROJECT_NUM//\'/}-compute@developer.gserviceaccount.com"
gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT --member serviceAccount:$SVC_ACCOUNT --role roles/storage.objectAdmin

Langkah 4: Buat instance Vertex AI Workbench

Dari bagian Vertex AI di Cloud Console Anda, klik Workbench:

Menu Vertex AI

Dari sana, dalam Notebooks yang dikelola pengguna, klik Notebook Baru:

Buat notebook baru

Kemudian, pilih jenis instance TensorFlow Enterprise 2.3 (with LTS) tanpa GPU:

Instance TFE

Gunakan opsi default, lalu klik Create.

Langkah 5: Buka Notebook Anda

Setelah instance dibuat, pilih Open JupyterLab:

Buka Notebook

4. Penyiapan Vertex Pipelines

Ada beberapa library tambahan yang perlu kita instal agar dapat menggunakan Vertex Pipelines:

  • Kubeflow Pipelines: Ini adalah SDK yang akan kita gunakan untuk membangun pipeline. Vertex Pipelines mendukung pipeline yang berjalan yang dibangun dengan Kubeflow Pipelines atau TFX.
  • Komponen Pipeline Google Cloud: Library ini menyediakan komponen bawaan yang memudahkan interaksi dengan layanan Vertex AI dari langkah pipeline Anda.

Langkah 1: Membuat notebook Python dan menginstal library

Pertama, dari menu Peluncur di instance Notebook (yang dapat Anda akses dengan mengklik ikon + di kiri atas notebook), buat notebook dengan memilih Python 3:

Membuat notebook Python3

Anda dapat mengakses menu Peluncur dengan mengklik tanda + di kiri atas instance notebook Anda.

Untuk menginstal kedua layanan yang akan kita gunakan di lab ini, pertama-tama tetapkan flag pengguna dalam sel notebook:

USER_FLAG = "--user"

Kemudian jalankan perintah berikut dari notebook Anda:

!pip3 install {USER_FLAG} google-cloud-aiplatform==1.7.0 --upgrade
!pip3 install {USER_FLAG} kfp==1.8.9 google-cloud-pipeline-components==0.2.0

Setelah menginstal paket-paket ini, Anda harus memulai ulang kernel:

import os

if not os.getenv("IS_TESTING"):
    # Automatically restart kernel after installs
    import IPython

    app = IPython.Application.instance()
    app.kernel.do_shutdown(True)

Terakhir, periksa apakah Anda telah menginstal paket dengan benar. Versi KFP SDK harus >=1.8:

!python3 -c "import kfp; print('KFP SDK version: {}'.format(kfp.__version__))"
!python3 -c "import google_cloud_pipeline_components; print('google_cloud_pipeline_components version: {}'.format(google_cloud_pipeline_components.__version__))"

Langkah 2: Tetapkan project ID dan bucket

Sepanjang lab ini, Anda akan mereferensikan project ID Cloud dan bucket yang telah Anda buat sebelumnya. Selanjutnya kita akan membuat variabel untuk setiap variabel tersebut.

Jika tidak mengetahui project ID, Anda mungkin bisa mendapatkannya dengan menjalankan perintah berikut:

import os
PROJECT_ID = ""

# Get your Google Cloud project ID from gcloud
if not os.getenv("IS_TESTING"):
    shell_output=!gcloud config list --format 'value(core.project)' 2>/dev/null
    PROJECT_ID = shell_output[0]
    print("Project ID: ", PROJECT_ID)

Jika tidak, tetapkan di sini:

if PROJECT_ID == "" or PROJECT_ID is None:
    PROJECT_ID = "your-project-id"  # @param {type:"string"}

Kemudian, buat variabel untuk menyimpan nama bucket Anda. Jika Anda membuatnya di lab ini, berikut ini akan berfungsi. Jika tidak, Anda harus menyetelnya secara manual:

BUCKET_NAME="gs://" + PROJECT_ID + "-bucket"

Langkah 3: Impor library

Tambahkan kode berikut untuk mengimpor library yang akan kita gunakan di seluruh codelab ini:

from kfp.v2 import compiler, dsl
from kfp.v2.dsl import pipeline

from google.cloud import aiplatform
from google_cloud_pipeline_components import aiplatform as gcc_aip

Langkah 4: Menentukan konstanta

Hal terakhir yang perlu kita lakukan sebelum membangun pipeline adalah menentukan beberapa variabel konstan. PIPELINE_ROOT adalah jalur Cloud Storage tempat artefak yang dibuat oleh pipeline akan ditulis. Kita menggunakan us-central1 sebagai region di sini, tetapi jika Anda menggunakan region yang berbeda saat membuat bucket, perbarui variabel REGION pada kode di bawah:

PATH=%env PATH
%env PATH={PATH}:/home/jupyter/.local/bin
REGION="us-central1"

PIPELINE_ROOT = f"{BUCKET_NAME}/pipeline_root/"
PIPELINE_ROOT

Setelah menjalankan kode di atas, Anda akan melihat direktori root untuk pipeline Anda telah dicetak. Ini adalah lokasi Cloud Storage tempat artefak dari pipeline Anda akan ditulis. Formatnya adalah gs://YOUR-BUCKET-NAME/pipeline_root/

5. Mengonfigurasi tugas pelatihan model kustom

Sebelum menyiapkan pipeline, kita perlu menulis kode untuk tugas pelatihan model kustom. Untuk melatih model, kita akan menggunakan set data Kacang kering Machine Learning UCI, dari: KOKLU, M. dan OZKAN, I.A., (2020), "Multiclass Classification of Dry Beans Using Computer Vision and Machine Learning Techniques." upayaIn Computers and Electronics in Agriculture, 174, 105507. DOI.

Langkah pipeline pertama kita akan membuat set data terkelola di Vertex AI menggunakan tabel BigQuery yang berisi versi data biji ini. Set data akan diteruskan sebagai input ke tugas pelatihan. Dalam kode pelatihan, kita akan memiliki akses ke variabel lingkungan untuk mengakses set data terkelola ini.

Berikut adalah cara menyiapkan tugas pelatihan kustom:

  • Menulis model DecisionTreeClassifier Scikit-learn untuk mengklasifikasikan jenis kacang dalam data kita
  • Kemas kode pelatihan dalam container Docker dan kirim ke Container Registry

Dari sana, kita akan dapat memulai tugas Pelatihan Vertex AI langsung dari pipeline. Mari kita mulai!

Langkah 1: Tentukan kode pelatihan dalam container Docker

Dari instance Notebooks, buka Peluncur dan pilih Terminal:

Buka terminal

Selanjutnya, jalankan perintah berikut untuk menyiapkan direktori tempat Anda akan menambahkan kode dalam container:

mkdir traincontainer
cd traincontainer
touch Dockerfile

mkdir trainer
touch trainer/train.py

Setelah menjalankan perintah tersebut, Anda akan melihat direktori bernama traincontainer/ dibuat di sebelah kiri (Anda mungkin perlu mengklik ikon muat ulang untuk melihatnya). Anda akan melihat kode berikut di direktori traincontainer/ Anda:

+ Dockerfile
+ trainer/
    + train.py

Langkah pertama kita dalam mem-build kode dalam container adalah membuat Dockerfile. Dalam Dockerfile, kita akan menyertakan semua perintah yang diperlukan untuk menjalankan image. Tindakan ini akan menginstal semua library yang kita gunakan dan menyiapkan titik entri untuk kode pelatihan. Buka Dockerfile yang baru saja Anda buat, lalu tambahkan kode berikut:

FROM gcr.io/deeplearning-platform-release/sklearn-cpu.0-23
WORKDIR /

# Copies the trainer code to the docker image.
COPY trainer /trainer

RUN pip install sklearn google-cloud-bigquery joblib pandas google-cloud-storage

# Sets up the entry point to invoke the trainer.
ENTRYPOINT ["python", "-m", "trainer.train"]

Untuk menyimpan file saat Anda mengeditnya di instance notebook, Anda dapat menggunakan ctrl+s.

Selanjutnya, buka file train.py. Di sinilah kita akan menambahkan kode pelatihan. Salin kode berikut ke train.py. Tindakan ini akan mengambil data dari set data terkelola, memasukkannya ke dalam DataFrame Pandas, melatih model Scikit-learn, dan mengupload model terlatih ke Cloud Storage:

from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import roc_curve
from sklearn.model_selection import train_test_split
from google.cloud import bigquery
from google.cloud import storage
from joblib import dump

import os
import pandas as pd

bqclient = bigquery.Client()
storage_client = storage.Client()

def download_table(bq_table_uri: str):
    prefix = "bq://"
    if bq_table_uri.startswith(prefix):
        bq_table_uri = bq_table_uri[len(prefix):]

    table = bigquery.TableReference.from_string(bq_table_uri)
    rows = bqclient.list_rows(
        table,
    )
    return rows.to_dataframe(create_bqstorage_client=False)

# These environment variables are from Vertex AI managed datasets
training_data_uri = os.environ["AIP_TRAINING_DATA_URI"]
test_data_uri = os.environ["AIP_TEST_DATA_URI"]

# Download data into Pandas DataFrames, split into train / test
df = download_table(training_data_uri)
test_df = download_table(test_data_uri)
labels = df.pop("Class").tolist()
data = df.values.tolist()
test_labels = test_df.pop("Class").tolist()
test_data = test_df.values.tolist()

# Define and train the Scikit model
skmodel = DecisionTreeClassifier()
skmodel.fit(data, labels)
score = skmodel.score(test_data, test_labels)
print('accuracy is:',score)

# Save the model to a local file
dump(skmodel, "model.joblib")

# Upload the saved model file to GCS
bucket = storage_client.get_bucket("YOUR_GCS_BUCKET")
model_directory = os.environ["AIP_MODEL_DIR"]
storage_path = os.path.join(model_directory, "model.joblib")
blob = storage.blob.Blob.from_string(storage_path, client=storage_client)
blob.upload_from_filename("model.joblib")

Kemudian, kembali ke notebook Anda dan jalankan perintah berikut untuk mengganti YOUR_GCS_BUCKET dari skrip di atas dengan nama bucket Cloud Storage Anda:

BUCKET = BUCKET_NAME[5:] # Trim the 'gs://' before adding to train script
!sed -i -r 's@YOUR_GCS_BUCKET@'"$BUCKET"'@' traincontainer/trainer/train.py

Anda juga dapat melakukannya secara manual jika mau. Jika Anda melakukannya, pastikan untuk tidak menyertakan gs:// dalam nama bucket Anda saat mengupdate skrip.

Kode pelatihan kita sudah berada di container Docker dan siap menjalankan pelatihan di Cloud.

Langkah 2: Menerapkan container ke Container Registry

Setelah kode pelatihan selesai, kita siap untuk menerapkannya ke Google Container Registry. Nanti saat mengonfigurasi komponen pelatihan dalam pipeline, kita akan mengarahkan Vertex Pipelines pada container ini.

Kembali ke Terminal Anda, dan dari root direktori traincontainer/ Anda, tentukan variabel dengan URI untuk image container Anda di Container Registry.

PROJECT_ID=$(gcloud config get-value project)
IMAGE_URI="gcr.io/$PROJECT_ID/scikit:v1"

Kemudian, bangun container Anda dengan menjalankan perintah berikut:

docker build ./ -t $IMAGE_URI

Terakhir, kirim container ke Container Registry:

docker push $IMAGE_URI

Buka bagian Container Registry di Konsol Cloud untuk memastikan container Anda ada di sana. Hasil penelusuran akan terlihat seperti ini:

Container Registry

6. Mengonfigurasi tugas prediksi batch

Langkah terakhir dari pipeline kita akan menjalankan tugas prediksi batch. Agar hal ini berfungsi, kita perlu menyediakan file CSV di Cloud Storage yang berisi contoh yang diinginkan untuk mendapatkan prediksi. Kita akan membuat file CSV ini di notebook dan menyalinnya ke Cloud Storage menggunakan alat command line gsutil.

Menyalin contoh prediksi batch ke Cloud Storage

File berikut berisi 3 contoh dari setiap class dalam set data beans. Contoh di bawah tidak menyertakan kolom Class karena itulah yang akan diprediksi oleh model kita. Jalankan perintah berikut untuk membuat file CSV ini secara lokal di notebook Anda:

%%writefile batch_examples.csv
Area,Perimeter,MajorAxisLength,MinorAxisLength,AspectRation,Eccentricity,ConvexArea,EquivDiameter,Extent,Solidity,roundness,Compactness,ShapeFactor1,ShapeFactor2,ShapeFactor3,ShapeFactor4
23288,558.113,207.567738,143.085693,1.450653336,0.7244336162,23545,172.1952453,0.8045881703,0.9890847314,0.9395021523,0.8295857874,0.008913077034,0.002604069884,0.6882125787,0.9983578734
23689,575.638,205.9678003,146.7475015,1.403552348,0.7016945718,24018,173.6714472,0.7652721693,0.9863019402,0.8983750474,0.8431970773,0.00869465998,0.002711119968,0.7109813112,0.9978994889
23727,559.503,189.7993849,159.3717704,1.190922235,0.5430731512,24021,173.8106863,0.8037601626,0.9877607094,0.952462433,0.9157600082,0.007999299741,0.003470231343,0.8386163926,0.9987269085
31158,641.105,212.0669751,187.1929601,1.132879009,0.4699241567,31474,199.1773023,0.7813134733,0.989959967,0.9526231013,0.9392188582,0.0068061806,0.003267009878,0.8821320637,0.9993488983
32514,649.012,221.4454899,187.1344232,1.183349841,0.5346736437,32843,203.4652564,0.7849831,0.9899826447,0.9700068737,0.9188051492,0.00681077351,0.002994124691,0.8442029022,0.9989873701
33078,659.456,235.5600775,178.9312328,1.316483846,0.6503915309,33333,205.2223615,0.7877214708,0.9923499235,0.9558229607,0.8712102818,0.007121351881,0.002530662194,0.7590073551,0.9992209221
33680,683.09,256.203255,167.9334938,1.525623324,0.7552213942,34019,207.081404,0.80680321,0.9900349805,0.9070392732,0.8082699962,0.007606985006,0.002002710402,0.6533003868,0.9966903078
33954,716.75,277.3684803,156.3563259,1.773951126,0.825970469,34420,207.9220419,0.7994819873,0.9864613597,0.8305492781,0.7496238998,0.008168948587,0.001591181142,0.5619359911,0.996846984
36322,719.437,272.0582306,170.8914975,1.591993952,0.7780978465,36717,215.0502424,0.7718560075,0.9892420405,0.8818487005,0.7904566678,0.007490177594,0.001803782407,0.6248217437,0.9947124371
36675,742.917,285.8908964,166.8819538,1.713132487,0.8119506999,37613,216.0927123,0.7788277766,0.9750618137,0.8350248381,0.7558572692,0.0077952528,0.001569528272,0.5713202115,0.9787472145
37454,772.679,297.6274753,162.1493177,1.835514817,0.8385619338,38113,218.3756257,0.8016695205,0.9827093118,0.7883332637,0.7337213257,0.007946480356,0.001420623993,0.5383469838,0.9881438654
37789,766.378,313.5680678,154.3409867,2.031657789,0.8704771226,38251,219.3500608,0.7805870567,0.9879218844,0.8085170916,0.6995293312,0.008297866252,0.001225659709,0.4893412853,0.9941740339
47883,873.536,327.9986493,186.5201272,1.758516115,0.822571799,48753,246.9140116,0.7584464543,0.9821549443,0.7885506623,0.7527897207,0.006850002074,0.00135695419,0.5666923636,0.9965376533
49777,861.277,300.7570338,211.6168613,1.42123379,0.7105823885,50590,251.7499649,0.8019106536,0.9839296304,0.843243269,0.8370542883,0.00604208839,0.001829706116,0.7006598815,0.9958014989
49882,891.505,357.1890036,179.8346914,1.986207449,0.8640114945,51042,252.0153467,0.7260210171,0.9772736178,0.7886896753,0.7055518063,0.007160679276,0.001094585314,0.4978033513,0.9887407248
53249,919.923,325.3866286,208.9174205,1.557489212,0.7666552108,54195,260.3818974,0.6966846347,0.9825445152,0.7907120655,0.8002231025,0.00611066177,0.001545654241,0.6403570138,0.9973491406
61129,964.969,369.3481688,210.9473449,1.750902193,0.8208567513,61796,278.9836198,0.7501135067,0.9892064211,0.8249553283,0.7553404711,0.006042110436,0.001213219664,0.5705392272,0.9989583843
61918,960.372,353.1381442,224.0962377,1.575832543,0.7728529173,62627,280.7782864,0.7539207091,0.9886790043,0.8436218213,0.7950947556,0.005703319619,0.00140599258,0.6321756704,0.9962029945
141953,1402.05,524.2311633,346.3974998,1.513380332,0.7505863011,143704,425.1354762,0.7147107987,0.9878152313,0.9074598849,0.8109694843,0.003692991084,0.0009853172185,0.6576715044,0.9953071199
145285,1440.991,524.9567463,353.0769977,1.486805285,0.7400216694,146709,430.0960442,0.7860466375,0.9902937107,0.8792413513,0.8192980608,0.003613289371,0.001004269363,0.6712493125,0.9980170255
146153,1476.383,526.1933264,356.528288,1.475881001,0.7354662103,149267,431.3789276,0.7319360978,0.9791380546,0.8425962592,0.8198107159,0.003600290972,0.001003163512,0.6720896099,0.991924286

Kemudian, salin file ke bucket Cloud Storage Anda:

!gsutil cp batch_examples.csv $BUCKET_NAME

Kita akan mereferensikan file ini pada langkah berikutnya saat menentukan pipeline.

7. Membangun pipeline dengan komponen yang telah dibuat sebelumnya

Setelah kode pelatihan berada di cloud, kita siap memanggilnya dari pipeline. Pipeline yang akan kita tentukan akan menggunakan tiga komponen bawaan dari library google_cloud_pipeline_components yang telah kita instal sebelumnya. Komponen yang telah ditentukan ini menyederhanakan kode yang perlu ditulis untuk menyiapkan pipeline, serta akan memungkinkan kita menggunakan layanan Vertex AI seperti pelatihan model dan prediksi batch.

Inilah yang akan dilakukan pipeline tiga langkah kita:

  • Membuat set data terkelola di Vertex AI
  • Menjalankan tugas pelatihan di Vertx AI menggunakan container kustom yang telah disiapkan
  • Menjalankan tugas prediksi batch pada model klasifikasi Scikit-learn terlatih

Langkah 1: Menentukan pipeline

Karena kita menggunakan komponen bawaan, kita dapat menyiapkan seluruh pipeline dalam definisi pipeline. Tambahkan kode berikut ke sel notebook:

@pipeline(name="automl-beans-custom",
                  pipeline_root=PIPELINE_ROOT)
def pipeline(
    bq_source: str = "bq://sara-vertex-demos.beans_demo.large_dataset",
    bucket: str = BUCKET_NAME,
    project: str = PROJECT_ID,
    gcp_region: str = REGION,
    bq_dest: str = "",
    container_uri: str = "",
    batch_destination: str = ""
):
    dataset_create_op = gcc_aip.TabularDatasetCreateOp(
        display_name="tabular-beans-dataset",
        bq_source=bq_source,
        project=project,
        location=gcp_region
    )

    training_op = gcc_aip.CustomContainerTrainingJobRunOp(
        display_name="pipeline-beans-custom-train",
        container_uri=container_uri,
        project=project,
        location=gcp_region,
        dataset=dataset_create_op.outputs["dataset"],
        staging_bucket=bucket,
        training_fraction_split=0.8,
        validation_fraction_split=0.1,
        test_fraction_split=0.1,
        bigquery_destination=bq_dest,
        model_serving_container_image_uri="us-docker.pkg.dev/vertex-ai/prediction/sklearn-cpu.0-24:latest",
        model_display_name="scikit-beans-model-pipeline",
        machine_type="n1-standard-4",
    )
    batch_predict_op = gcc_aip.ModelBatchPredictOp(
        project=project,
        location=gcp_region,
        job_display_name="beans-batch-predict",
        model=training_op.outputs["model"],
        gcs_source_uris=["{0}/batch_examples.csv".format(BUCKET_NAME)],
        instances_format="csv",
        gcs_destination_output_uri_prefix=batch_destination,
        machine_type="n1-standard-4"
    )

Langkah 2: Mengompilasi dan menjalankan pipeline

Setelah menentukan pipeline, Anda siap untuk mengompilasinya. Berikut ini akan menghasilkan file JSON yang akan Anda gunakan untuk menjalankan pipeline:

compiler.Compiler().compile(
    pipeline_func=pipeline, package_path="custom_train_pipeline.json"
)

Selanjutnya, buat variabel TIMESTAMP. Kita akan menggunakannya di ID tugas:

from datetime import datetime

TIMESTAMP = datetime.now().strftime("%Y%m%d%H%M%S")

Kemudian, tentukan tugas pipeline Anda, dengan meneruskan beberapa parameter khusus project:

pipeline_job = aiplatform.PipelineJob(
    display_name="custom-train-pipeline",
    template_path="custom_train_pipeline.json",
    job_id="custom-train-pipeline-{0}".format(TIMESTAMP),
    parameter_values={
        "project": PROJECT_ID,
        "bucket": BUCKET_NAME,
        "bq_dest": "bq://{0}".format(PROJECT_ID),
        "container_uri": "gcr.io/{0}/scikit:v1".format(PROJECT_ID),
        "batch_destination": "{0}/batchpredresults".format(BUCKET_NAME)
    },
    enable_caching=True,
)

Terakhir, jalankan tugas untuk membuat eksekusi pipeline baru:

pipeline_job.submit()

Setelah menjalankan sel ini, Anda akan melihat log dengan link untuk melihat operasi pipeline yang dijalankan di konsol Anda:

Log tugas pipeline

Buka link tersebut. Anda juga dapat mengaksesnya dengan membuka dasbor Pipeline. Pipeline Anda akan terlihat seperti ini setelah selesai:

Menyelesaikan pipeline pengantar

Pipeline ini akan membutuhkan waktu 5-10 menit untuk dijalankan, tetapi Anda dapat melanjutkan ke langkah berikutnya sebelum selesai. Selanjutnya, Anda akan mempelajari lebih lanjut tentang apa yang terjadi dalam setiap langkah pipeline ini.

8. Memahami eksekusi pipeline Anda

Mari kita bahas lebih jauh masing-masing dari ketiga langkah pipeline ini.

Langkah Pipeline 1: Membuat set data terkelola

Langkah pertama di pipeline kita adalah membuat set data terkelola di Vertex AI. Jika Anda mengklik link set data berikut di bagian Pipeline pada konsol Anda:

Link ke set data dari pipeline

Anda akan melihat set data di Vertex AI, yang mencakup link ke sumber data di BigQuery beserta informasi tentang berbagai kolom dalam set data Anda. Setelah Anda mengupload set data terkelola ke Vertex AI, set data tersebut dapat digunakan untuk melatih model AutoML atau kustom.

Untuk tugas model kustom yang menggunakan set data terkelola, Vertex AI meneruskan variabel lingkungan khusus ke tugas pelatihan Anda dan menangani pembagian data menjadi set pelatihan dan pengujian. Kita akan menggunakan ini pada langkah pipeline berikutnya.

Langkah Pipeline 2: Melatih model dalam Pelatihan Vertex AI

Selagi tugas pelatihan kustom sedang berjalan, Anda dapat mengklik untuk melihat log secara langsung di konsol Vertex Pipelines:

Log pelatihan kustom

Anda juga dapat melihat detail tugas pelatihan kustom di dasbor Pelatihan Vertex AI. Setelah tugas pelatihan selesai, resource Model akan dibuat di Vertex AI. Kemudian, kita dapat men-deploy model ini ke endpoint untuk prediksi online atau membuat tugas prediksi batch, yang akan kita lakukan pada langkah pipeline berikutnya.

Langkah Pipeline 3: Menjalankan tugas prediksi batch pada model kita

Terakhir, pipeline kita akan mendapatkan prediksi berdasarkan contoh yang kita teruskan melalui file CSV. Setelah tugas prediksi batch selesai, Vertex AI akan menulis file CSV ke lokasi yang kita tentukan di Cloud Storage. Saat langkah pipeline ini mulai berjalan, Anda dapat membuka bagian Prediksi Batch di konsol Vertex AI untuk melihat tugas yang dibuat.

Klik tugas tersebut jika sudah selesai untuk melihat URL Cloud Storage dari prediksi batch Anda:

Tugas prediksi batch

Klik link tersebut untuk membuka direktori Cloud Storage tempat Anda dapat menemukan hasil prediksi, lalu klik untuk mendownload salah satu file prediction.results. Dalam file tersebut, Anda akan melihat baris yang terlihat seperti berikut:

{"instance": [33954.0, 716.75, 277.3684803, 156.3563259, 1.773951126, 0.825970469, 34420.0, 207.9220419, 0.7994819873, 0.9864613597, 0.8305492781, 0.7496238998, 0.008168948587, 0.001591181142, 0.5619359911, 0.996846984], "prediction": "HOROZ"}

Ini mencakup nilai fitur untuk instance tertentu, bersama dengan class yang diprediksi model kita. Untuk contoh ini, model kami menganggap ini adalah "HOROZ" biji kopi.

Dengan begitu, kamu sudah menyelesaikan lab!

🎉 Selamat! 🎉

Anda telah mempelajari cara menggunakan Vertex AI untuk:

  • Menggunakan Kubeflow Pipelines SDK untuk membangun pipeline end-to-end dengan komponen kustom
  • Menjalankan pipeline di Vertex Pipelines dan memulai operasi pipeline dengan SDK
  • Melihat dan menganalisis grafik Vertex Pipelines di konsol
  • Menggunakan komponen pipeline yang telah dibangun sebelumnya untuk menambahkan layanan Vertex AI ke pipeline Anda
  • Menjadwalkan tugas pipeline berulang

Untuk mempelajari lebih lanjut berbagai bagian Vertex, lihat dokumentasinya.

9. Pembersihan

Agar Anda tidak dikenai biaya, sebaiknya hapus resource yang dibuat di lab ini.

Langkah 1: Hentikan atau hapus instance Notebooks Anda

Jika ingin terus menggunakan notebook yang Anda buat di lab ini, sebaiknya nonaktifkan notebook tersebut saat tidak digunakan. Dari UI Notebooks di Konsol Cloud, pilih notebook, lalu pilih Stop. Jika Anda ingin menghapus instance secara keseluruhan, pilih Hapus:

Hentikan instance

Langkah 2: Hapus bucket Cloud Storage

Untuk menghapus Bucket Penyimpanan menggunakan menu Navigasi di Cloud Console, jelajahi Penyimpanan, pilih bucket Anda, lalu klik Hapus:

Hapus penyimpanan