Prototipe hingga Produksi: Melatih model kustom dengan Vertex AI

1. Ringkasan

Di lab ini, Anda akan menggunakan Vertex AI untuk menjalankan tugas pelatihan kustom.

Lab ini merupakan bagian dari seri video Prototipe ke Produksi. Anda akan membangun model klasifikasi image menggunakan set data Bunga. Anda dapat menonton video yang disertakan untuk mempelajari lebih lanjut:

.

Yang Anda pelajari

Anda akan mempelajari cara:

  • Membuat notebook terkelola Vertex AI Workbench
  • Mengonfigurasi dan meluncurkan tugas pelatihan kustom dari UI Vertex AI
  • Mengonfigurasi dan meluncurkan tugas pelatihan kustom dengan Vertex AI Python SDK

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

2. Pengantar Vertex AI

Lab ini menggunakan penawaran produk AI terbaru yang tersedia di Google Cloud. Vertex AI mengintegrasikan penawaran ML di Google Cloud ke dalam pengalaman pengembangan yang lancar. Sebelumnya, model yang dilatih dengan AutoML dan model kustom dapat diakses melalui layanan terpisah. Penawaran baru ini menggabungkan kedua model ini menjadi satu API, beserta produk baru lainnya. Anda juga dapat memigrasikan project yang sudah ada ke Vertex AI.

Vertex AI mencakup banyak produk yang berbeda untuk mendukung alur kerja ML secara menyeluruh. Lab ini akan berfokus pada produk yang disorot di bawah: Pelatihan dan Workbench

Ringkasan produk Vertex

3. Menyiapkan lingkungan Anda

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

Langkah 1: Aktifkan Compute Engine API

Buka Compute Engine dan pilih Aktifkan jika belum diaktifkan.

Langkah 2: Aktifkan Artifact Registry API

Buka Artifact Registry dan pilih Aktifkan jika belum diaktifkan. Anda akan menggunakannya untuk membuat container tugas pelatihan kustom.

Langkah 3: Aktifkan Vertex AI API

Buka bagian Vertex AI di Cloud Console Anda, lalu klik Aktifkan Vertex AI API.

Dasbor Vertex AI

Langkah 4: Buat instance Vertex AI Workbench

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

Menu Vertex AI

Aktifkan Notebooks API jika belum diaktifkan.

Notebook_api

Setelah diaktifkan, klik NOTEBOOK TERKELOLA:

Notebooks_UI

Kemudian, pilih NOTEBOOK BARU.

new_notebook

Namai notebook Anda, lalu di bagian Izin, pilih Akun layanan

create_notebook

Pilih Setelan Lanjutan.

Di bagian Keamanan, pilih "Aktifkan terminal" jika belum diaktifkan.

enable_terminal

Anda dapat membiarkan semua setelan lanjutan lainnya apa adanya.

Selanjutnya, klik Buat. Instance akan memerlukan waktu beberapa menit untuk disediakan.

Setelah instance dibuat, pilih BUKA JUPYTERLAB.

open_jupyterlab

4. Menyimpan kode aplikasi pelatihan dalam container

Anda akan mengirim tugas pelatihan ke Vertex AI dengan menempatkan kode aplikasi pelatihan dalam container Docker dan mengirim container ini ke Google Artifact Registry. Menggunakan pendekatan ini, Anda dapat melatih model yang dibangun dengan framework apa pun.

Untuk memulai, dari menu Peluncur, buka jendela Terminal di instance notebook Anda:

Membuka terminal di notebook

Langkah 1: Buat bucket Cloud Storage

Di tugas pelatihan ini, Anda akan mengekspor model TensorFlow terlatih ke Bucket Cloud Storage. Anda juga akan menyimpan data untuk pelatihan di bucket Cloud Storage.

Dari Terminal Anda, jalankan perintah berikut guna menentukan variabel env untuk project Anda, pastikan untuk mengganti your-cloud-project dengan ID project Anda:

PROJECT_ID='your-cloud-project'

Selanjutnya, jalankan perintah berikut di Terminal untuk membuat bucket baru dalam project Anda.

BUCKET="gs://${PROJECT_ID}-bucket"
gsutil mb -l us-central1 $BUCKET

Langkah 2: Salin data ke bucket Cloud Storage

Kita perlu memasukkan set data bunga ke Cloud Storage. Untuk tujuan demonstrasi, pertama-tama Anda perlu mendownload set data ke instance Workbench ini, lalu menyalinnya ke bucket.

Download dan untar data.

wget https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz
tar xvzf flower_photos.tgz

Lalu, salin ke bucket yang baru saja Anda buat. Kita tambahkan -r karena kita akan menyalin seluruh direktori, dan -m untuk menjalankan penyalinan multipemrosesan, yang akan mempercepat proses.

gsutil -m cp -r flower_photos $BUCKET

Langkah 3: Tulis kode pelatihan

Buat direktori baru bernama flowers dan cd ke dalamnya:

mkdir flowers
cd flowers

Jalankan perintah berikut guna membuat direktori untuk kode pelatihan dan file Python tempat Anda akan menambahkan kodenya.

mkdir trainer
touch trainer/task.py

Sekarang Anda akan memiliki kode berikut di direktori flowers/ Anda:

+ trainer/
    + task.py

Untuk mengetahui detail selengkapnya tentang cara menyusun kode aplikasi pelatihan, lihat dokumennya.

Selanjutnya, buka file task.py yang baru saja Anda buat dan salin kode di bawah.

Anda harus mengganti {your-gcs-bucket} dengan nama bucket Cloud Storage yang baru saja Anda buat.

Melalui alat Cloud Storage FUSE, tugas pelatihan di Pelatihan Vertex AI dapat mengakses data di Cloud Storage sebagai file dalam sistem file lokal. Saat Anda memulai tugas pelatihan kustom, tugas tersebut melihat direktori /gcs yang berisi semua bucket Cloud Storage Anda sebagai subdirektori. Itulah sebabnya jalur data dalam kode pelatihan dimulai dengan /gcs.

import tensorflow as tf
import numpy as np
import os

## Replace {your-gcs-bucket} !!
BUCKET_ROOT='/gcs/{your-gcs-bucket}'

# Define variables
NUM_CLASSES = 5
EPOCHS=10
BATCH_SIZE = 32

IMG_HEIGHT = 180
IMG_WIDTH = 180

DATA_DIR = f'{BUCKET_ROOT}/flower_photos'

def create_datasets(data_dir, batch_size):
  '''Creates train and validation datasets.'''

  train_dataset = tf.keras.utils.image_dataset_from_directory(
    data_dir,
    validation_split=0.2,
    subset="training",
    seed=123,
    image_size=(IMG_HEIGHT, IMG_WIDTH),
    batch_size=batch_size)

  validation_dataset = tf.keras.utils.image_dataset_from_directory(
    data_dir,
    validation_split=0.2,
    subset="validation",
    seed=123,
    image_size=(IMG_HEIGHT, IMG_WIDTH),
    batch_size=batch_size)

  train_dataset = train_dataset.cache().shuffle(1000).prefetch(buffer_size=tf.data.AUTOTUNE)
  validation_dataset = validation_dataset.cache().prefetch(buffer_size=tf.data.AUTOTUNE)

  return train_dataset, validation_dataset

def create_model():
  '''Creates model.'''

  model = tf.keras.Sequential([
    tf.keras.layers.Resizing(IMG_HEIGHT, IMG_WIDTH),
    tf.keras.layers.Rescaling(1./255, input_shape=(IMG_HEIGHT, IMG_WIDTH, 3)),
    tf.keras.layers.Conv2D(16, 3, padding='same', activation='relu'),
    tf.keras.layers.MaxPooling2D(),
    tf.keras.layers.Conv2D(32, 3, padding='same', activation='relu'),
    tf.keras.layers.MaxPooling2D(),
    tf.keras.layers.Conv2D(64, 3, padding='same', activation='relu'),
    tf.keras.layers.MaxPooling2D(),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(128, activation='relu'),
    tf.keras.layers.Dense(NUM_CLASSES, activation='softmax')
  ])
  return model

# CREATE DATASETS
train_dataset, validation_dataset = create_datasets(DATA_DIR, BATCH_SIZE)

# CREATE/COMPILE MODEL
model = create_model()
model.compile(optimizer=tf.keras.optimizers.Adam(),
              loss=tf.keras.losses.SparseCategoricalCrossentropy(),
              metrics=['accuracy'])

# TRAIN MODEL
history = model.fit(
  train_dataset,
  validation_data=validation_dataset,
  epochs=EPOCHS
)

# SAVE MODEL
model.save(f'{BUCKET_ROOT}/model_output')

Langkah 4: Buat Dockerfile

Untuk menyimpan kode dalam container, Anda harus membuat Dockerfile. Dalam Dockerfile, Anda akan menyertakan semua perintah yang diperlukan untuk menjalankan image. Tindakan ini akan menginstal semua library yang diperlukan dan menyiapkan titik entri untuk kode pelatihan.

Dari Terminal Anda, buat Dockerfile kosong dalam root direktori bunga Anda:

touch Dockerfile

Sekarang Anda akan memiliki kode berikut di direktori flowers/ Anda:

+ Dockerfile
+ trainer/
    + task.py

Buka Dockerfile dan salin kode berikut ke dalamnya:

FROM gcr.io/deeplearning-platform-release/tf2-gpu.2-8

WORKDIR /

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

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

Mari tinjau perintah dalam file ini.

Perintah FROM menentukan image dasar, yang merupakan image induk tempat image yang Anda buat akan dibangun. Sebagai image dasar, Anda akan menggunakan Image Docker GPU Deep Learning Container TensorFlow Enterprise 2.8. Deep Learning Containers di Google Cloud dilengkapi dengan banyak ML umum dan framework data science yang diinstal sebelumnya.

Perintah WORKDIR menentukan direktori pada image tempat petunjuk berikutnya dijalankan.

Perintah COPY menyalin kode pelatih ke image Docker. Perhatikan bahwa dalam contoh ini, kita hanya memiliki satu file phyton dalam direktori pelatih, tetapi untuk contoh yang lebih realistis, Anda mungkin perlu memiliki file tambahan. Mungkin satu file disebut data.py, yang menangani pra-pemrosesan data, dan file lainnya disebut model.py, yang hanya memiliki kode model, dll. Untuk kode pelatihan yang lebih kompleks, lihat dokumen Python pada project paket Python.

Jika ingin menambahkan library tambahan, Anda dapat menggunakan perintah RUN untuk menginstal pip (mis.: RUN pip install -r requirements.txt). Namun, kita tidak memerlukan tambahan apa pun sebagai contoh di sini.

Terakhir, perintah ENTRYPOINT menyiapkan titik entri untuk memanggil pelatih. Inilah yang akan dijalankan saat kita memulai tugas pelatihan. Dalam kasus kita, perintah tersebut menjalankan file task.py.

Anda dapat mempelajari lebih lanjut penulisan Dockerfile untuk Pelatihan Vertex AI di sini.

Langkah 4: Bangun container

Dari terminal notebook Workbench, jalankan perintah berikut untuk menentukan variabel env untuk project Anda, pastikan untuk mengganti your-cloud-project dengan ID project Anda:

PROJECT_ID='your-cloud-project'

Buat repositori di Artifact Registry

REPO_NAME='flower-app'

gcloud artifacts repositories create $REPO_NAME --repository-format=docker \
--location=us-central1 --description="Docker repository"

Tentukan variabel dengan URI image container Anda di Google Artifact Registry:

IMAGE_URI=us-central1-docker.pkg.dev/$PROJECT_ID/$REPO_NAME/flower_image:latest

Konfigurasi Docker

gcloud auth configure-docker \
    us-central1-docker.pkg.dev

Kemudian, bangun container dengan menjalankan perintah berikut dari root direktori flower Anda:

docker build ./ -t $IMAGE_URI

Terakhir, kirim ke Artifact Registry:

docker push $IMAGE_URI

Dengan container yang dikirim ke Artifact Registry, sekarang Anda siap untuk memulai tugas pelatihan.

5. Menjalankan tugas pelatihan kustom pada Vertex AI

Lab ini menggunakan pelatihan kustom melalui container kustom di Google Artifact Registry, tetapi Anda juga dapat menjalankan tugas pelatihan dengan Container yang telah dibangun sebelumnya.

Untuk memulai, buka bagian Pelatihan di bagian Vertex pada Konsol Cloud Anda:

menu melatih

Langkah 1: Konfigurasi tugas pelatihan

Klik Buat untuk memasukkan parameter ke tugas pelatihan Anda.

create_training

  • Di bagian Set data, pilih Tidak ada set data terkelola
  • Lalu, pilih Pelatihan kustom (lanjutan) sebagai metode pelatihan Anda dan klik Lanjutkan.
  • Pilih Latih model baru, lalu masukkan flowers-model (atau apa pun nama model yang Anda inginkan) untuk Nama model
  • Klik Lanjutkan

Dalam langkah setelan Container, pilih Container kustom:

Opsi container kustom

Di kotak pertama (Image container), masukkan nilai variabel IMAGE_URI Anda dari bagian sebelumnya. Nilainya harus: us-central1-docker.pkg.dev/{PROJECT_ID}/flower-app/flower_image:latest, dengan ID project Anda. Biarkan kolom lainnya kosong dan klik Lanjutkan.

Lewati langkah Hyperparameter dengan mengklik Lanjutkan lagi.

Langkah 2: Konfigurasi cluster komputasi

Konfigurasi kumpulan Pekerja 0 sebagai berikut:

worker_pool_0

Anda akan melewati langkah 6 untuk saat ini dan mengonfigurasi container prediksi di lab berikutnya dalam seri ini.

Klik MULAI PELATIHAN untuk memulai tugas pelatihan. Di bagian Pelatihan konsol, pada tab PIPELINE PELATIHAN, Anda akan melihat tugas yang baru saja Anda luncurkan:

Tugas pelatihan

🎉 Selamat! 🎉

Anda telah mempelajari cara menggunakan Vertex AI untuk:

  • Meluncurkan tugas pelatihan kustom untuk kode pelatihan yang disediakan dalam container kustom. Anda telah menggunakan model TensorFlow dalam contoh ini, tetapi Anda dapat melatih model yang dibangun dengan framework apa pun menggunakan container kustom atau bawaan.

Untuk mempelajari lebih lanjut berbagai bagian Vertex, lihat dokumentasinya.

6. [Opsional] Menggunakan Vertex AI Python SDK

Bagian sebelumnya menunjukkan cara meluncurkan tugas pelatihan melalui UI. Di bagian ini, Anda akan melihat cara alternatif untuk mengirim tugas pelatihan menggunakan Vertex AI Python SDK.

Kembali ke instance notebook Anda, dan buat notebook TensorFlow 2 dari Peluncur:

new_notebook

Impor Vertex AI SDK.

from google.cloud import aiplatform

Lalu, buat CustomContainerTrainingJob. Anda harus mengganti {PROJECT_ID} dalam container_uri dengan nama project Anda, dan Anda harus mengganti {BUCKET} dalam staging_bucket dengan bucket yang Anda buat sebelumnya.

my_job = aiplatform.CustomContainerTrainingJob(display_name='flower-sdk-job',
                                               container_uri='us-central1-docker.pkg.dev/{PROJECT_ID}/flower-app/flower_image:latest',
                                               staging_bucket='gs://{BUCKET}')

Lalu, jalankan tugas.

my_job.run(replica_count=1,
           machine_type='n1-standard-8',
           accelerator_type='NVIDIA_TESLA_V100',
           accelerator_count=1)

Untuk tujuan demonstrasi, tugas ini telah dikonfigurasi untuk menjalankan mesin yang lebih besar dibandingkan dengan bagian sebelumnya. Selain itu, kita menjalankannya dengan GPU. Jika Anda tidak menentukan machine-type, accelerator_type, atau accelerator_count, tugas akan berjalan secara default pada n1-standard-4.

Di bagian Pelatihan konsol, pada tab TUGAS KUSTOM, Anda akan melihat tugas pelatihan Anda.

7. Pembersihan

Karena notebook terkelola Vertex AI Workbench memiliki fitur penonaktifan tidak ada aktivitas, jangan khawatir untuk menonaktifkan instance-nya. Jika Anda ingin menonaktifkan instance secara manual, klik tombol Hentikan di bagian Vertex AI Workbench pada konsol. Jika Anda ingin menghapus notebook secara keseluruhan, klik tombol Hapus.

Hentikan instance

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

Hapus penyimpanan