1. Genel Bakış
Bu laboratuvarda, Vertex AI Training'de otomatik paketleme özelliğiyle özel bir eğitim işinin nasıl çalıştırılacağını öğreneceksiniz. Vertex AI'daki özel eğitim işleri, container'ları kullanır. Kendi görüntünüzü oluşturmak istemiyorsanız auotpackaging'i kullanabilirsiniz. Bu sayede kodunuza göre özel bir Docker görüntüsü oluşturabilir, görüntüyü Container Registry'ye aktarabilir ve görüntüye göre bir CustomJob
başlatabilirsiniz.
Öğrenecekleriniz
Öğrenecekleriniz:
- Kodunuzu test etmek için yerel modu kullanın.
- Otomatik paketleme ile özel bir eğitim işi yapılandırıp başlatın.
Bu laboratuvarı Google Cloud'da çalıştırmanın toplam maliyeti yaklaşık 2 ABD dolarıdır.
2. Kullanım Alanına Genel Bakış
Hugging Face kitaplıklarını kullanarak IMDB veri kümesi üzerinde bir Bert modelinde ince ayar yapabilirsiniz. Bu model bir film incelemesinin olumlu mu yoksa olumsuz mu olduğunu tahmin eder. Veri kümesi, Hugging Face veri kümesi kitaplığından ve Bert modeli Hugging Face dönüştürücüler kitaplığından indirilir.
3. Vertex AI'a giriş
Bu laboratuvarda, Google Cloud'daki en yeni AI ürün teklifi kullanılmaktadır. Vertex AI, Google Cloud'daki makine öğrenimi tekliflerini sorunsuz bir geliştirme deneyimiyle entegre eder. Önceden, AutoML ve özel modellerle eğitilen modellere ayrı hizmetler üzerinden erişilebiliyordu. Yeni teklif, her ikisi de tek bir API'de ve diğer yeni ürünlerle birleştirilir. Dilerseniz mevcut projeleri Vertex AI'a taşıyabilirsiniz. Geri bildiriminiz varsa lütfen destek sayfasını inceleyin.
Vertex AI, uçtan uca makine öğrenimi iş akışlarını destekleyen birçok farklı ürün içerir. Bu laboratuvar, Eğitim ve Çalışma Alanı konularına odaklanacaktır.
4. Ortamınızı ayarlama
Bu codelab'i çalıştırmak için faturalandırmanın etkin olduğu bir Google Cloud Platform projesine ihtiyacınız var. Proje oluşturmak için buradaki talimatları uygulayın.
1. Adım: Compute Engine API'yi etkinleştirin
Compute Engine'e gidin ve zaten etkinleştirilmemişse Etkinleştir'i seçin.
2. adım: Vertex AI API'yi etkinleştirin
Cloud Console'un Vertex AI bölümüne gidip Enable Vertex AI API'yi (Vertex AI API'yi etkinleştir) tıklayın.
3. Adım: Container Registry API'yi etkinleştirin
Container Registry'ye gidin ve henüz yapmadıysanız Etkinleştir'i seçin. Özel eğitim işiniz için bir container oluşturmak üzere bunu kullanacaksınız.
4. Adım: Vertex AI Workbench örneği oluşturun
Cloud Console'un Vertex AI bölümünde Workbench'i tıklayın:
Burada, YÖNETİLEN NOT KİTAPLARI'nı tıklayın:
Ardından YENİ NOT DEFTERİ'ni seçin.
Not defterinize bir ad verin ve Gelişmiş Ayarlar'ı tıklayın.
Gelişmiş Ayarlar altından boşta kalma özelliğini etkinleştirin ve dakika sayısını 60 olarak ayarlayın. Bu sayede not defteriniz kullanılmadığında otomatik olarak kapatılır, böylece gereksiz maliyetlere neden olmazsınız.
Diğer gelişmiş ayarların tümünü olduğu gibi bırakabilirsiniz.
Ardından Oluştur'u tıklayın.
Örnek oluşturulduktan sonra JupyterLab'i aç'ı seçin.
Yeni bir örneği ilk kez kullandığınızda kimliğinizi doğrulamanız istenir.
5. Eğitim kodunu yazma
Başlatıcı menüsünden başlamak için not defteri örneğinizde bir Terminal penceresi açın:
autopkg-codelab
adında yeni bir dizin oluşturun ve cd'ye yapıştırın.
mkdir autopkg-codelab
cd autopkg-codelab
Terminal'inizden aşağıdaki komutu çalıştırarak eğitim kodu için bir dizin ve kodu ekleyeceğiniz Python dosyası oluşturun:
mkdir trainer
touch trainer/task.py
Artık autopkg-codelab/
dizininizde aşağıdakilerin olması gerekir:
+ trainer/
+ task.py
Sonra, az önce oluşturduğunuz task.py
dosyasını açın ve aşağıdaki kodu kopyalayın.
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()
Kodla ilgili dikkat edilmesi gereken birkaç nokta:
- İnce ayar yapmak istediğimiz model
CHECKPOINT
. Bu örnekte Bert'i kullanıyoruz. TFAutoModelForSequenceClassification
yöntemi, TensorFlow'da belirtilen dil modeli mimarisini ve ağırlıkları yükler ve rastgele başlatılmış ağırlıkların üzerine bir sınıflandırma başlığı ekler. Bu örnekte, ikili bir sınıflandırma sorunumuz (pozitif veya negatif) olduğundan bu sınıflandırıcı içinnum_labels=2
değerini belirtiyoruz.
6. Eğitim kodunu yerel olarak container mimarisine alın ve çalıştırın
Eğitim kodunuza göre bir Docker container görüntüsü oluşturmak ve görüntüyü yerel makinenizde container olarak çalıştırmak için gcloud ai custom-jobs local-run
komutunu kullanabilirsiniz. Yerel olarak container çalıştırmak, eğitim kodunuzu Vertex AI Training'deki çalıştırmaya benzer şekilde yürütür ve Vertex AI'da özel eğitim gerçekleştirmeden önce kodla ilgili sorunları gidermenize yardımcı olabilir.
Eğitim işimizde, eğitilen modelimizi bir Cloud Storage Paketine aktaracağız. Terminalinizde projeniz için bir env değişkeni tanımlamak üzere aşağıdaki komutu çalıştırın. your-cloud-project
kısmına projenizin kimliğini girdiğinizden emin olun:
PROJECT_ID='your-cloud-project'
Ardından bir paket oluşturun. Mevcut bir paketiniz varsa bunun yerine onu kullanabilirsiniz.
BUCKET_NAME="gs://${PROJECT_ID}-bucket"
gsutil mb -l us-central1 $BUCKET_NAME
Vertex AI Training'de özel eğitim işini çalıştırdığımızda GPU'dan yararlanırız. Ancak Workbench örneğimizi GPU'lu olarak belirtmediğimizden yerel test için CPU tabanlı bir görüntü kullanacağız. Bu örnekte, önceden oluşturulmuş bir Vertex AI Training container'ı kullanıyoruz.
Container'ın temeli olarak kullanılacak Docker görüntüsünün URI'sini ayarlamak için aşağıdaki komutu çalıştırın.
BASE_CPU_IMAGE=us-docker.pkg.dev/vertex-ai/training/tf-cpu.2-7:latest
Ardından, yerel çalıştırma komutuyla derlenen Docker görüntüsü için bir ad belirleyin.
OUTPUT_IMAGE=$PROJECT_ID-local-package-cpu:latest
Eğitim kodumuz Hugging Face veri kümelerini ve dönüştürücü kitaplıklarını kullanır. Bu kitaplıklar, temel görüntümüz olarak seçtiğimiz resimde yer almadığından bunları sağlamamız gerekir. Bunun için, autopkg-codelab
dizinimizde bir requirements.txt
dosyası oluşturacağız.
autopkg-codelab
dizininde olduğunuzdan emin olun ve terminalinize aşağıdakileri yazın.
touch requirements.txt
Artık autopkg-codelab
dizininizde aşağıdakilerin olması gerekir:
+ requirements.txt
+ trainer/
+ task.py
Koşullar dosyasını açın ve aşağıdakini yapıştırın
datasets==1.18.2
transformers==4.16.2
Son olarak, Workbench tarafından yönetilen örneğimizde eğitimi başlatmak için gcloud ai custom-jobs local-run
komutunu yürütün.
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
Docker görüntüsünün oluşturulmakta olduğunu göreceksiniz. requirements.txt
dosyasına eklediğimiz bağımlılıklar pip yüklenecek. Bu komutu ilk kez çalıştırdığınızda işlemin tamamlanması birkaç dakika sürebilir. Görüntü oluşturulduğunda task.py
dosyası çalışmaya başlar ve model eğitimi gösterilir. Aşağıdakine benzer bir tablo görürsünüz:
Yerel olarak GPU kullanmadığımız için model eğitimi uzun zaman alacak. İşin tamamlanmasını beklemek yerine Ctrl+c tuşlarına basarak yerel eğitimi iptal edebilirsiniz.
Daha fazla test yapmak isterseniz yukarıda oluşturulan görüntüyü yeniden paketlemeden doğrudan da çalıştırabileceğinizi unutmayın.
gcloud beta ai custom-jobs local-run \
--executor-image-uri=$OUTPUT_IMAGE \
-- \
--job_dir=$BUCKET_NAME \
--epochs=1
7. Özel iş oluşturma
Yerel modu test ettiğimize göre Vertex AI Training'de özel eğitim işimizi başlatmak için otomatik paketleme özelliğini kullanacağız. Bu özellik, tek bir komutla şunları yapar:
- Kodunuza dayalı özel bir Docker görüntüsü oluşturun.
- Görüntüyü Container Registry'ye aktarın.
- Resme dayalı bir
CustomJob
başlatın.
Terminale dönün ve autopkg-codelab
dizininizin bir seviye üzerinde cd'yi kullanın.
+ autopkg-codelab
+ requirements.txt
+ trainer/
+ task.py
Özel eğitim işinin temel görüntüsü olarak önceden oluşturulmuş TensorFlow GPU görüntüsünü belirtin.
BASE_GPU_IMAGE=us-docker.pkg.dev/vertex-ai/training/tf-gpu.2-7:latest
Ardından gcloud ai custom-jobs create
komutunu yürütün. İlk olarak, bu komut eğitim koduna göre özel bir Docker görüntüsü oluşturur. Temel görüntü, BASE_GPU_IMAGE
olarak ayarladığımız önceden oluşturulmuş Vertex AI Training container'ıdır. Ardından otomatik paketleme özelliği, requirements.txt
dosyamızda belirtilen veri kümelerini ve dönüştürücü kitaplıklarını pip yükler.
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
worker-pool-spec
bağımsız değişkenine bakalım. Bu, özel iş tarafından kullanılan çalışan havuzu yapılandırmasını tanımlar. Dağıtılmış eğitim için birden fazla çalışan havuzuna sahip özel bir iş oluşturmak istiyorsanız birden fazla çalışan havuzu özelliği belirtebilirsiniz. Bu örnekte, eğitim kodumuz dağıtılmış eğitim için yapılandırılmadığından yalnızca tek bir çalışan havuzu belirtiyoruz.
Bu spesifikasyonun önemli alanlarından bazıları şunlardır:
machine-type
(Zorunlu): Makinenin türü. Desteklenen türler için burayı tıklayın.replica-count
: Bu çalışan havuzu için kullanılacak çalışan replikalarının sayısı (varsayılan olarak değer 1'dir).accelerator-type
: GPU'ların türü. Desteklenen türler için burayı tıklayın. Bu örnekte bir NVIDIA Tesla V100 GPU belirttik.accelerator-count
: Çalışan havuzunda kullanılacak her sanal makine için GPU sayısı. Varsayılan değer 1'dir.executor-image-uri
: Sağlanan paketi çalıştıracak container görüntüsünün URI'sı. Bu, temel resmimiz olarak ayarlanmıştır.local-package-path
: Eğitim kodunu içeren bir klasörün yerel yolu.python-module
: Sağlanan paket içinde çalıştırılacak Python modülü adı.
Yerel komut çalıştırmanıza benzer şekilde, Docker görüntüsünün oluşturulduğunu ve eğitim işinin başladığını görürsünüz. Eğitim işinin çıkışını görmek yerine eğitim işinizin başlatıldığını onaylayan aşağıdaki mesajı görürsünüz. custom-jobs create
komutunu ilk kez çalıştırdığınızda, görüntünün oluşturulmasının ve aktarılmasının birkaç dakika sürebileceğini unutmayın.
Cloud Console'un Vertex AI Eğitimi bölümüne dönün. ÖZEL İŞLER bölümünde işinizin çalıştığını görebilirsiniz.
İşin tamamlanması yaklaşık 20 dakika sürer.
İşlem tamamlandığında, paketinizdeki model_output
dizininde aşağıdaki kayıtlı model yapılarını göreceksiniz.
🎉 Tebrikler! 🎉
Vertex AI'ı kullanarak şunları öğrendiniz:
- Eğitim kodunu yerel olarak container mimarisine alın ve çalıştırın
- Autopackaging ile eğitim işlerini Vertex AI Training'e gönderme
Vertex AI'ın farklı bölümleri hakkında daha fazla bilgi edinmek için belgeleri inceleyin.
8. Temizleme
Not defterini 60 dakika boşta kalma dakikasının sonunda zaman aşımına uğrayacak şekilde yapılandırdığımızdan örneği kapatma konusunda endişelenmemize gerek yoktur. Örneği manuel olarak kapatmak isterseniz konsolun Vertex AI Workbench bölümündeki Durdur düğmesini tıklayın. Not defterini tamamen silmek isterseniz Sil düğmesini tıklayın.
Storage Paketini silmek için Cloud Console'unuzdaki gezinme menüsünü kullanarak Storage'a gidin, paketinizi seçin ve Sil'i tıklayın: