1. Ringkasan
Di lab ini, Anda akan mempelajari cara menjalankan tugas pelatihan kustom di Vertex AI Training dengan fitur paket otomatis. Tugas pelatihan kustom di container penggunaan Vertex AI. Jika tidak ingin membangun image sendiri, Anda dapat menggunakan auotpackaging yang akan membangun 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 meningkatkan kualitas model BERT di set data IMDB. Model ini 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 Huging 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 Training 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 MANAGED NOTEBOOKS:
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 Anda, jalankan perintah berikut guna membuat direktori untuk kode pelatihan dan file Python tempat Anda akan menambahkan kode:
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:
CHECKPOINT
adalah model yang ingin kita sempurnakan. Dalam hal ini, kita menggunakan BERT.- Metode
TFAutoModelForSequenceClassification
akan memuat arsitektur model bahasa + bobot yang ditentukan di TensorFlow dan menambahkan kepala klasifikasi di atasnya dengan bobot yang diinisialisasi secara acak. Dalam hal ini, kita memiliki masalah klasifikasi biner (positif atau negatif) sehingga kita menentukannum_labels=2
untuk 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 sebagai container di mesin lokal. Menjalankan container secara lokal akan mengeksekusi kode pelatihan Anda dengan cara yang sama seperti yang berjalan pada Vertex AI Training, dan dapat membantu Anda men-debug masalah pada kode sebelum melakukan pelatihan kustom pada 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'
Lalu, buat bucket. Jika sudah memiliki bucket, Anda dapat menggunakannya.
BUCKET_NAME="gs://${PROJECT_ID}-bucket"
gsutil mb -l us-central1 $BUCKET_NAME
Saat menjalankan tugas pelatihan kustom pada Pelatihan Vertex AI, 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, kami menggunakan container bawaan Pelatihan Vertex AI.
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 dibangun dengan perintah run lokal.
OUTPUT_IMAGE=$PROJECT_ID-local-package-cpu:latest
Kode pelatihan kami menggunakan set data dan library transformer Hugging Face. Library ini tidak disertakan dalam gambar yang telah dipilih sebagai image dasar, sehingga kita harus menyediakannya sebagai persyaratan. Untuk melakukannya, kita akan membuat file requirements.txt
dalam direktori autopkg-codelab
.
Pastikan Anda berada di direktori autopkg-codelab
dan ketik berikut ini 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 berikut ini
datasets==1.18.2
transformers==4.16.2
Terakhir, jalankan perintah gcloud ai custom-jobs local-run
untuk memulai pelatihan di instance terkelola Workbench kami.
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 dengan pip. Proses ini mungkin memerlukan waktu beberapa menit saat pertama kali Anda menjalankan perintah ini. Setelah image dibuat, file task.py
akan mulai berjalan dan Anda akan melihat pelatihan model. Anda akan melihat sesuatu 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 tugas selesai.
Perhatikan bahwa jika ingin melakukan pengujian lebih lanjut, Anda juga dapat langsung menjalankan image yang dibangun 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 pada Pelatihan Vertex AI. Dengan satu perintah, fitur ini akan:
- Membangun image Docker kustom berdasarkan kode.
- Mengirim image ke Container Registry.
- Memulai
CustomJob
berdasarkan gambar.
Kembali ke terminal dan lakukan cd naik satu tingkat 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 ditetapkan sebagai BASE_GPU_IMAGE
. Fitur pengemasan otomatis kemudian akan menginstal set data dan library transformer seperti yang ditentukan dalam file requirements.txt
.
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
. Kode ini menentukan konfigurasi kumpulan pekerja yang digunakan oleh tugas kustom. Anda dapat menentukan beberapa spesifikasi kumpulan pekerja untuk membuat tugas kustom dengan beberapa kumpulan pekerja untuk pelatihan terdistribusi. Dalam contoh ini, kita hanya menentukan kumpulan pekerja tunggal, karena kode pelatihan kita tidak dikonfigurasi untuk pelatihan terdistribusi.
Berikut adalah beberapa kolom utama spesifikasi ini:
machine-type
(Wajib): Jenis mesin. Klik di sini untuk mengetahui jenis yang didukung.replica-count
: Jumlah replika pekerja yang akan digunakan untuk kumpulan pekerja ini, secara default nilainya adalah 1.accelerator-type
: Jenis GPU. Klik di sini untuk mengetahui jenis yang didukung. Dalam contoh ini, kami menentukan satu GPU NVIDIA Tesla V100.accelerator-count
: Jumlah GPU untuk setiap VM di kumpulan pekerja yang akan digunakan, secara default nilainya adalah 1.executor-image-uri
: URI image container yang akan menjalankan paket yang disediakan. Ini disetel ke image dasar.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 menjalankan perintah lokal, Anda akan melihat image Docker sedang dibangun, lalu tugas pelatihan dimulai. Kecuali 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 di-build dan dikirim.
Kembali ke bagian Vertex AI Training pada Cloud Console dan di bagian TUGAS KUSTOM, Anda akan melihat tugas Anda berjalan.
Tugas 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 Pelatihan Vertex AI dengan autopackaging
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: