1. Ringkasan
Di lab ini, Anda akan mempelajari cara menjalankan tugas pelatihan kustom di Vertex AI Training dengan fitur pengemasan otomatis. Tugas pelatihan kustom di Vertex AI menggunakan container. Jika tidak ingin membuat image sendiri, Anda dapat menggunakan pengemasan otomatis, yang akan membuat image Docker kustom berdasarkan kode Anda, mengirim image ke Container Registry, dan memulai CustomJob berdasarkan image tersebut.
Yang Anda pelajari
Anda akan mempelajari cara:
- Gunakan mode lokal untuk menguji kode Anda.
- Mengonfigurasi dan meluncurkan tugas pelatihan kustom dengan pengemasan otomatis.
Total biaya untuk menjalankan lab ini di Google Cloud adalah sekitar $2.
2. Ringkasan Kasus Penggunaan
Dengan menggunakan library dari Hugging Face, Anda akan menyesuaikan model Bert pada set data IMDB. Model akan memprediksi apakah ulasan film itu positif atau negatif. Set data akan didownload dari library set data Hugging Face, dan model Bert dari library transformer Hugging Face.
3. 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. Jika Anda memiliki masukan, harap lihat halaman dukungan.
Vertex AI mencakup banyak produk yang berbeda untuk mendukung alur kerja ML secara menyeluruh. Lab ini akan berfokus pada Pelatihan dan Workbench.

4. 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 Vertex AI API
Buka bagian Vertex AI di Cloud Console Anda, lalu klik Aktifkan Vertex AI API.

Langkah 3: Aktifkan Container Registry API
Buka Container Registry dan pilih Aktifkan jika belum melakukannya. Anda akan menggunakannya untuk membuat container tugas pelatihan kustom.
Langkah 4: Buat instance Vertex AI Workbench
Dari bagian Vertex AI di Cloud Console Anda, klik Workbench:

Dari sana, klik NOTEBOOK TERKELOLA:

Kemudian, pilih NOTEBOOK BARU.

Beri nama notebook Anda, lalu klik Setelan Lanjutan.

Di bagian Setelan Lanjutan, aktifkan penonaktifan tidak ada aktivitas dan setel jumlah menit ke 60. Artinya, notebook Anda akan otomatis dinonaktifkan saat tidak digunakan agar tidak menimbulkan biaya tambahan.

Anda dapat membiarkan semua setelan lanjutan lainnya apa adanya.
Selanjutnya, klik Buat.
Setelah instance dibuat, pilih Buka JupyterLab.

Saat pertama kali menggunakan instance baru, Anda akan diminta untuk mengautentikasi.

5. Menulis kode pelatihan
Untuk memulai, dari menu Peluncur, buka jendela Terminal di instance notebook Anda:

Buat direktori baru bernama autopkg-codelab dan cd ke dalamnya.
mkdir autopkg-codelab
cd autopkg-codelab
Dari Terminal, 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 autopkg-codelab/ Anda:
+ trainer/
+ task.py
Selanjutnya, buka file task.py yang baru saja Anda buat dan salin kode di bawah.
import argparse
import tensorflow as tf
from datasets import load_dataset
from transformers import AutoTokenizer
from transformers import TFAutoModelForSequenceClassification
CHECKPOINT = "bert-base-cased"
def get_args():
'''Parses args.'''
parser = argparse.ArgumentParser()
parser.add_argument(
'--epochs',
required=False,
default=3,
type=int,
help='number of epochs')
parser.add_argument(
'--job_dir',
required=True,
type=str,
help='bucket to store saved model, include gs://')
args = parser.parse_args()
return args
def create_datasets():
'''Creates a tf.data.Dataset for train and evaluation.'''
raw_datasets = load_dataset('imdb')
tokenizer = AutoTokenizer.from_pretrained(CHECKPOINT)
tokenized_datasets = raw_datasets.map((lambda examples: tokenize_function(examples, tokenizer)), batched=True)
# To speed up training, we use only a portion of the data.
# Use full_train_dataset and full_eval_dataset if you want to train on all the data.
small_train_dataset = tokenized_datasets['train'].shuffle(seed=42).select(range(1000))
small_eval_dataset = tokenized_datasets['test'].shuffle(seed=42).select(range(1000))
full_train_dataset = tokenized_datasets['train']
full_eval_dataset = tokenized_datasets['test']
tf_train_dataset = small_train_dataset.remove_columns(['text']).with_format("tensorflow")
tf_eval_dataset = small_eval_dataset.remove_columns(['text']).with_format("tensorflow")
train_features = {x: tf_train_dataset[x] for x in tokenizer.model_input_names}
train_tf_dataset = tf.data.Dataset.from_tensor_slices((train_features, tf_train_dataset["label"]))
train_tf_dataset = train_tf_dataset.shuffle(len(tf_train_dataset)).batch(8)
eval_features = {x: tf_eval_dataset[x] for x in tokenizer.model_input_names}
eval_tf_dataset = tf.data.Dataset.from_tensor_slices((eval_features, tf_eval_dataset["label"]))
eval_tf_dataset = eval_tf_dataset.batch(8)
return train_tf_dataset, eval_tf_dataset
def tokenize_function(examples, tokenizer):
'''Tokenizes text examples.'''
return tokenizer(examples['text'], padding='max_length', truncation=True)
def main():
args = get_args()
train_tf_dataset, eval_tf_dataset = create_datasets()
model = TFAutoModelForSequenceClassification.from_pretrained(CHECKPOINT, num_labels=2)
model.compile(
optimizer=tf.keras.optimizers.Adam(learning_rate=0.01),
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=tf.metrics.SparseCategoricalAccuracy(),
)
model.fit(train_tf_dataset, validation_data=eval_tf_dataset, epochs=args.epochs)
model.save(f'{args.job_dir}/model_output')
if __name__ == "__main__":
main()
Beberapa hal yang perlu diperhatikan tentang kode:
CHECKPOINTadalah model yang ingin kita sesuaikan. Dalam kasus ini, kita menggunakan Bert.- Metode
TFAutoModelForSequenceClassificationakan memuat arsitektur model bahasa + bobot yang ditentukan di TensorFlow dan menambahkan head klasifikasi di atas dengan bobot yang diinisialisasi secara acak. Dalam kasus ini, kita memiliki masalah klasifikasi biner (positif atau negatif), jadi kita menentukannum_labels=2untuk pengklasifikasi ini.
6. Menyimpan data dalam container dan menjalankan kode pelatihan secara lokal
Anda dapat menggunakan perintah gcloud ai custom-jobs local-run untuk membangun image container Docker berdasarkan kode pelatihan dan menjalankan image tersebut sebagai container di komputer lokal. Menjalankan container secara lokal akan mengeksekusi kode pelatihan dengan cara yang sama seperti saat dijalankan di Vertex AI Training, dan dapat membantu Anda men-debug masalah pada kode sebelum melakukan pelatihan kustom di Vertex AI.
Dalam tugas pelatihan, kita akan mengekspor model terlatih ke Bucket Cloud Storage. Dari Terminal Anda, 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'
Kemudian, buat bucket. Jika Anda sudah memiliki bucket, silakan gunakan bucket tersebut.
BUCKET_NAME="gs://${PROJECT_ID}-bucket"
gsutil mb -l us-central1 $BUCKET_NAME
Saat menjalankan tugas pelatihan kustom di Vertex AI Training, kita akan menggunakan GPU. Namun, karena kita tidak menentukan instance Workbench dengan GPU, kita akan menggunakan image berbasis CPU untuk pengujian lokal. Dalam contoh ini, kita menggunakan container bawaan Vertex AI Training.
Jalankan perintah berikut untuk menetapkan URI image Docker yang akan digunakan sebagai dasar container.
BASE_CPU_IMAGE=us-docker.pkg.dev/vertex-ai/training/tf-cpu.2-7:latest
Kemudian, tetapkan nama untuk image Docker yang dihasilkan, yang dibuat oleh perintah run lokal.
OUTPUT_IMAGE=$PROJECT_ID-local-package-cpu:latest
Kode pelatihan kami menggunakan library dataset dan transformer Hugging Face. Library ini tidak disertakan dalam image yang telah kita pilih sebagai image dasar, jadi kita perlu menyediakannya sebagai persyaratan. Untuk melakukannya, kita akan membuat file requirements.txt di direktori autopkg-codelab.
Pastikan Anda berada di direktori autopkg-codelab dan ketik perintah berikut di terminal Anda.
touch requirements.txt
Sekarang Anda akan memiliki kode berikut di direktori autopkg-codelab Anda:
+ requirements.txt
+ trainer/
+ task.py
Buka file persyaratan dan tempelkan kode berikut
datasets==1.18.2
transformers==4.16.2
Terakhir, jalankan perintah gcloud ai custom-jobs local-run untuk memulai pelatihan di instance terkelola Workbench.
gcloud ai custom-jobs local-run \
--executor-image-uri=$BASE_CPU_IMAGE \
--python-module=trainer.task \
--output-image-uri=$OUTPUT_IMAGE \
-- \
--job_dir=$BUCKET_NAME
Anda akan melihat image Docker sedang dibangun. Dependensi yang kita tambahkan ke file requirements.txt akan diinstal pip. Mungkin perlu waktu beberapa menit untuk menyelesaikan perintah ini pertama kali Anda menjalankannya. Setelah image dibuat, filetask.py akan mulai berjalan dan Anda akan melihat pelatihan model. Anda akan melihat yang seperti ini:

Karena kita tidak menggunakan GPU secara lokal, pelatihan model akan memakan waktu lama. Anda dapat menekan Ctrl+c dan membatalkan pelatihan lokal, bukan menunggu hingga tugas selesai.
Perhatikan bahwa jika Anda ingin melakukan pengujian lebih lanjut, Anda juga dapat menjalankan langsung image yang dibuat di atas, tanpa mengemas ulang.
gcloud beta ai custom-jobs local-run \
--executor-image-uri=$OUTPUT_IMAGE \
-- \
--job_dir=$BUCKET_NAME \
--epochs=1
7. Membuat tugas kustom
Setelah menguji mode lokal, kita akan menggunakan fitur pengemasan otomatis untuk meluncurkan tugas pelatihan kustom di Vertex AI Training. Dengan satu perintah, fitur ini akan:
- Membangun image Docker kustom berdasarkan kode.
- Mengirim image ke Container Registry.
- Memulai
CustomJobberdasarkan gambar.
Kembali ke terminal dan cd naik satu level di atas direktori autopkg-codelab Anda.
+ autopkg-codelab
+ requirements.txt
+ trainer/
+ task.py
Tentukan image GPU TensorFlow bawaan Vertex AI Training sebagai image dasar untuk tugas pelatihan kustom.
BASE_GPU_IMAGE=us-docker.pkg.dev/vertex-ai/training/tf-gpu.2-7:latest
Selanjutnya, jalankan perintah gcloud ai custom-jobs create. Pertama, perintah ini akan membangun image Docker kustom berdasarkan kode pelatihan. Image dasar adalah container bawaan Vertex AI Training yang kita tetapkan sebagai BASE_GPU_IMAGE. Kemudian, fitur pengemasan otomatis akan menginstal library set data dan transformer menggunakan pip seperti yang ditentukan dalam file requirements.txt kita.
gcloud ai custom-jobs create \
--region=us-central1 \
--display-name=fine_tune_bert \
--args=--job_dir=$BUCKET_NAME \
--worker-pool-spec=machine-type=n1-standard-4,replica-count=1,accelerator-type=NVIDIA_TESLA_V100,executor-image-uri=$BASE_GPU_IMAGE,local-package-path=autopkg-codelab,python-module=trainer.task
Mari kita lihat argumen worker-pool-spec. Ini menentukan konfigurasi kumpulan pekerja yang digunakan oleh tugas kustom. Anda dapat menentukan beberapa spesifikasi kumpulan worker untuk membuat tugas kustom dengan beberapa kumpulan worker untuk pelatihan terdistribusi. Dalam contoh ini, kita hanya menentukan satu worker pool, karena kode pelatihan kita tidak dikonfigurasi untuk pelatihan terdistribusi.
Berikut beberapa kolom utama spesifikasi ini:
machine-type(Wajib): Jenis mesin. Klik di sini untuk mengetahui jenis yang didukung.replica-count: Jumlah replika worker yang akan digunakan untuk kumpulan worker ini, secara default nilainya adalah 1.accelerator-type: Jenis GPU. Klik di sini untuk mengetahui jenis yang didukung. Dalam contoh ini, kita menentukan satu GPU NVIDIA Tesla V100.accelerator-count: Jumlah GPU yang akan digunakan setiap VM di pool pekerja, secara default nilainya adalah 1.executor-image-uri: URI image container yang akan menjalankan paket yang disediakan. Ini ditetapkan ke gambar dasar kita.local-package-path: Jalur lokal folder yang berisi kode pelatihan.python-module: Nama modul Python yang akan dijalankan dalam paket yang disediakan.
Mirip dengan saat Anda menjalankan perintah lokal, Anda akan melihat image Docker sedang dibuat, lalu tugas pelatihan dimulai. Namun, alih-alih melihat output tugas pelatihan, Anda akan melihat pesan berikut yang mengonfirmasi bahwa tugas pelatihan Anda telah diluncurkan. Perhatikan bahwa saat pertama kali Anda menjalankan perintah custom-jobs create, mungkin perlu waktu beberapa menit hingga image dibuat dan dikirim.

Kembali ke bagian Vertex AI Training di konsol cloud dan di bagian CUSTOM JOBS, Anda akan melihat tugas Anda sedang berjalan.

Tugas ini akan memerlukan waktu sekitar 20 menit untuk diselesaikan.
Setelah selesai, Anda akan melihat artefak model tersimpan berikut di direktori model_output di bucket Anda.

🎉 Selamat! 🎉
Anda telah mempelajari cara menggunakan Vertex AI untuk:
- Menyimpan data dalam container dan menjalankan kode pelatihan secara lokal
- Mengirimkan tugas pelatihan ke Vertex AI Training dengan pemaketan otomatis
Untuk mempelajari lebih lanjut berbagai bagian Vertex AI, lihat dokumentasinya.
8. Pembersihan
Karena sebelumnya kita telah mengonfigurasi notebook agar kehabisan waktu setelah 60 menit 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.

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