1. Genel Bakış
Bu laboratuvarda, otomatik paketleme özelliğiyle Vertex AI Training'de özel eğitim işi çalıştırmayı öğreneceksiniz. Vertex AI'daki özel eğitim işlerinde container'lar kullanılır. Kendi görüntünüzü oluşturmak istemiyorsanız kodunuza dayalı özel bir Docker görüntüsü oluşturacak, görüntüyü Container Registry'ye gönderecek ve görüntüye dayalı bir CustomJob başlatacak olan otomatik paketlemeyi kullanabilirsiniz.
Öğrenecekleriniz
Öğrenecekleriniz:
- Kodunuzu test etmek için yerel modu kullanın.
- Otomatik paketleme ile özel 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'in kitaplıklarını kullanarak IMDB veri kümesinde bir Bert modeline ince ayar yapacaksınız. Model, film incelemelerinin olumlu mu yoksa olumsuz mu olduğunu tahmin eder. Veri kümesi Hugging Face veri kümeleri kitaplığından, Bert modeli ise Hugging Face Transformers kitaplığından indirilir.
3. Vertex AI'a giriş
Bu laboratuvarda, Google Cloud'da sunulan en yeni yapay zeka ürünü kullanılmaktadır. Vertex AI, Google Cloud'daki makine öğrenimi tekliflerini sorunsuz bir geliştirme deneyimi için entegre eder. Daha önce, AutoML ile eğitilmiş modeller ve özel modeller ayrı hizmetler üzerinden erişilebiliyordu. Yeni teklif, diğer yeni ürünlerle birlikte bu iki ürünü tek bir API'de birleştirir. Mevcut projeleri de Vertex AI'a taşıyabilirsiniz. Geri bildiriminiz varsa lütfen destek sayfasına göz atın.
Vertex AI, uçtan uca makine öğrenimi iş akışlarını desteklemek için birçok farklı ürün içerir. Bu laboratuvarda Eğitim ve Workbench üzerinde durulacaktı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 vardır. Proje oluşturmak için buradaki talimatları uygulayın.
1. adım: Compute Engine API'yi etkinleştirin
Compute Engine'e gidin ve henüz etkinleştirilmemişse Etkinleştir'i seçin.
2. adım: Vertex AI API'yi etkinleştirin
Cloud Console'unuzun Vertex AI bölümüne gidin ve Vertex AI API'yi etkinleştir'i tıklayın.

3. adım: Container Registry API'yi etkinleştirin
Container Registry'ye gidin ve henüz etkin değilse Etkinleştir'i seçin. Bu dosyayı, özel eğitim işiniz için bir kapsayıcı oluşturmak üzere kullanacaksınız.
4. adım: Vertex AI Workbench örneği oluşturma
Cloud Console'unuzun Vertex AI bölümünde Workbench'i tıklayın:

Buradan YÖNETİLEN NOT DEFTERLERİ'ni 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'da boşta kalma durumunda kapatma özelliğini etkinleştirin ve süreyi 60 dakika olarak ayarlayın. Bu sayede, gereksiz maliyetlere yol açmamak için not defteriniz kullanılmadığında otomatik olarak kapatılır.

Diğer tüm gelişmiş ayarları olduğu gibi bırakabilirsiniz.
Ardından Oluştur'u tıklayın.
Örnek oluşturulduktan sonra Open JupyterLab'i (JupyterLab'i aç) seçin.

Yeni bir örneği ilk kez kullandığınızda kimlik doğrulamanız istenir.

5. Eğitim kodu yazma
Başlamak için Başlatıcı menüsünden not defteri örneğinizde bir Terminal penceresi açın:

autopkg-codelab adlı yeni bir dizin oluşturun ve bu dizine gidin.
mkdir autopkg-codelab
cd autopkg-codelab
Terminalinizde aşağıdaki komutu çalıştırarak eğitim kodu için bir dizin ve kodu ekleyeceğiniz bir Python dosyası oluşturun:
mkdir trainer
touch trainer/task.py
autopkg-codelab/ dizininizde artık şunlar olmalıdır:
+ trainer/
+ task.py
Ardından, yeni 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:
CHECKPOINT, ince ayar yapmak istediğimiz modeldir. Bu durumda Bert'ü kullanırız.TFAutoModelForSequenceClassificationyöntemi, belirtilen dil modeli mimarisini ve ağırlıklarını TensorFlow'da yükler ve üstüne rastgele başlatılmış ağırlıklarla bir sınıflandırma başlığı ekler. Bu durumda, ikili sınıflandırma sorunumuz (pozitif veya negatif) olduğundan bu sınıflandırıcı içinnum_labels=2değerini belirtiriz.
6. Eğitim kodunu container mimarisine alma ve yerel olarak çalıştırma
Eğitim kodunuza dayalı 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. Bir container'ı yerel olarak çalıştırmak, eğitim kodunuzu Vertex AI Training'de çalıştırıldığı şekilde yürütür ve Vertex AI'da özel eğitim gerçekleştirmeden önce kodunuzla ilgili sorunları ayıklamanıza yardımcı olabilir.
Eğitim işimizde, eğitilen modelimizi bir Cloud Storage paketine aktaracağız. Terminalinizde, projeniz için bir ortam değişkeni tanımlamak üzere aşağıdakileri çalıştırın. your-cloud-project yerine projenizin kimliğini yazdığınızdan emin olun:
PROJECT_ID='your-cloud-project'
Ardından bir paket oluşturun. Mevcut bir paketiniz varsa 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ırırken GPU'dan yararlanacağız. Ancak Workbench örneğimizi GPU'larla belirtmediğimiz için yerel test için CPU tabanlı bir görüntü kullanacağız. Bu örnekte, Vertex AI Training önceden oluşturulmuş 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 oluşturulan Docker görüntüsüne bir ad ayarlayın.
OUTPUT_IMAGE=$PROJECT_ID-local-package-cpu:latest
Eğitim kodumuzda Hugging Face veri kümeleri ve Transformers kitaplıkları kullanılır. Bu kitaplıklar, temel görüntü olarak seçtiğimiz görüntüye dahil edilmediğinden bunları koşul olarak sağlamamız gerekir. Bunu yapmak 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
autopkg-codelab dizininizde artık şunlar olmalıdır:
+ requirements.txt
+ trainer/
+ task.py
Gereksinimler dosyasını açın ve aşağıdakileri yapıştırın.
datasets==1.18.2
transformers==4.16.2
Son olarak, Workbench yönetilen örneğimizde eğitimi başlatmak için gcloud ai custom-jobs local-run komutunu çalıştırı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şturulduğunu görürsünüz. requirements.txt dosyasına eklediğimiz bağımlılıklar pip ile yüklenir. Bu komutu ilk kez çalıştırdığınızda işlemin tamamlanması birkaç dakika sürebilir. Görüntü oluşturulduktan sonra task.py dosyası çalışmaya başlar ve model eğitimini görürsünüz. Aşağıdakine benzer bir tablo görürsünüz:

Yerel olarak GPU kullanmadığımız için model eğitimi uzun zaman alacaktır. İş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 resmi yeniden paketlemeden doğrudan ç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, özel eğitim işimizi Vertex AI Training'de başlatmak için otomatik paketleme özelliğini kullanacağız. Bu özellik tek bir komutla şunları yapar:
- Kodunuza göre özel bir Docker görüntüsü oluşturun.
- Görüntüyü Container Registry'ye aktarın.
- Resme dayalı bir
CustomJobbaşlatın.
Terminale dönün ve autopkg-codelab dizininizin bir üst seviyesine gidin.
+ autopkg-codelab
+ requirements.txt
+ trainer/
+ task.py
Vertex AI Training'in önceden oluşturulmuş TensorFlow GPU görüntüsünü, özel eğitim işinin temel görüntüsü olarak belirtin.
BASE_GPU_IMAGE=us-docker.pkg.dev/vertex-ai/training/tf-gpu.2-7:latest
Ardından gcloud ai custom-jobs create komutunu çalıştırın. İlk olarak bu komut, eğitim koduna dayalı özel bir Docker görüntüsü oluşturur. Temel görüntü, BASE_GPU_IMAGE olarak ayarladığımız Vertex AI Training önceden oluşturulmuş container'ıdır. Otomatik paketleme özelliği, requirements.txt dosyamızda belirtildiği gibi veri kümeleri ve dönüştürücüler kitaplıklarını pip ile 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 göz atalı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 üzere birden fazla çalışan havuzu spesifikasyonu 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 temel 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 türü. Desteklenen türler için burayı tıklayın. Bu örnekte, bir NVIDIA Tesla V100 GPU belirtildi.accelerator-count: Çalışan havuzundaki her VM'nin kullanacağı GPU sayısı. Varsayılan değer 1'dir.executor-image-uri: Sağlanan paketi çalıştıracak bir container görüntüsünün URI'si. Bu, temel resmimize ayarlanır.local-package-path: Eğitim kodu içeren bir klasörün yerel yolu.python-module: Sağlanan paket içinde çalıştırılacak Python modülünün adı.
Yerel komutu çalıştırdığınızda olduğu gibi, Docker görüntüsünün oluşturulduğunu ve ardından eğitim işinin başlatıldığını görürsünüz. Ancak eğitim işinin çıktısı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şturulup gönderilmesinin birkaç dakika sürebileceğini unutmayın.

Cloud Console'un Vertex AI Training bölümüne dönün. CUSTOM JOBS (Özel İşler) altında işinizin çalıştığını görmeniz gerekir.

İşin tamamlanması yaklaşık 20 dakika sürer.
İşlem tamamlandıktan sonra, paketinizdeki model_output dizininde aşağıdaki kaydedilmiş model yapılarını görmeniz gerekir.

🎉 Tebrikler! 🎉
Vertex AI'ı kullanarak şunları yapmayı öğrendiniz:
- Eğitim kodunu container mimarisine alma ve yerel olarak çalıştırma
- Otomatik paketleme ile Vertex AI Training'e eğitim işleri gönderme
Vertex AI'ın farklı bölümleri hakkında daha fazla bilgi edinmek için belgelere göz atın.
8. Temizleme
Not defterini 60 dakika boşta kaldıktan sonra zaman aşımına uğrayacak şekilde yapılandırdığımız için örneği kapatmamız gerekmez. Örneği manuel olarak kapatmak istiyorsanız 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.

Cloud Console'unuzdaki gezinme menüsünü kullanarak depolama paketini silmek için Storage'a gidin, paketinizi seçin ve Sil'i tıklayın:
