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 otomatik paketleme özelliğini kullanabilirsiniz. Bu özellik, kodunuza göre özel bir Docker görüntüsü oluşturur, görüntüyü Container Registry'ye aktarır ve görüntüye göre bir CustomJob
başlatır.
Öğ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. Model, bir film incelemesinin olumlu mu yoksa olumsuz mu olduğunu tahmin eder. Veri kümesi Hugging Face veri kümeleri kitaplığından, Bert modeli ise Hugging Face dönüştürücüler kitaplığından indirilir.
3. Vertex AI'a giriş
Bu laboratuvarda, Google Cloud'da sunulan en yeni yapay zeka ürünü kullanılır. Vertex AI, Google Cloud'daki makine öğrenimi tekliflerini sorunsuz bir geliştirme deneyiminde birleştirir. Daha önce, AutoML ile eğitilen modellere ve özel modellere ayrı hizmetler üzerinden erişilebiliyordu. Yeni teklif, diğer yeni ürünlerle birlikte her ikisini de tek bir API'de birleştirir. Mevcut projeleri Vertex AI'a da taşıyabilirsiniz. Geri bildirimde bulunmak isterseniz lütfen destek sayfasını inceleyin.
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'e odaklanacağız.
4. Ortamınızı ayarlama
Bu codelab'i çalıştırmak için faturalandırmanın etkin olduğu bir Google Cloud Platform projeniz olması gerekir. 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'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 yapmadıysanız Etkinleştir'i seçin. Özel eğitim işiniz için bir kapsayıcı oluşturmak üzere bu dosyayı kullanırsınız.
4. Adım: Vertex AI Workbench örneği oluşturun
Cloud Console'unuzun Vertex AI bölümünden Workbench'i tıklayın:
Buradan YÖNETİLEN NOT DEfterleri'ni tıklayın:
Ardından YENİ NOT DEFTERİ'ni seçin.
Not defterinize bir ad verin ve ardından 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, gereksiz maliyetlere maruz kalmamak için dizüstü bilgisayarınız kullanılmadığında otomatik olarak kapanı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 JupyterLab'i aç'ı seçin.
Yeni bir örneği ilk kez kullandığınızda kimliğinizi 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 cd komutunu kullanarak bu dizine gidin.
mkdir autopkg-codelab
cd autopkg-codelab
Terminalinizde, eğitim kodu için bir dizin ve kodu ekleyeceğiniz bir Python dosyası oluşturmak üzere aşağıdakileri çalıştırın:
mkdir trainer
touch trainer/task.py
autopkg-codelab/
dizininde şu dosyalar bulunmalı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 örnekte Bert'i kullanıyoruz.TFAutoModelForSequenceClassification
yöntemi, belirtilen dil modeli mimarisini ve ağırlıklarını TensorFlow'a yükler ve rastgele başlatılmış ağırlıklarla bir sınıflandırma başlığı ekler. Bu durumda ikili sınıflandırma problemi (pozitif veya negatif) olduğundan bu sınıflandırıcı içinnum_labels=2
değerini belirtiriz.
6. Eğitim kodunu yerel olarak kapsayıcıya alma ve çalıştırma
Eğitim kodunuzu temel alan 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 çalıştırılan bir kapsayıcı, eğitim kodunuzu Vertex AI Eğitim'de çalıştırılmasına benzer bir şekilde yürütür ve Vertex AI'da özel eğitim gerçekleştirmeden önce kodunuzdaki hata ayıklamanıza yardımcı olabilir.
Eğitim işimizde, eğitilen modelimizi bir Cloud Storage paketine aktaracağız. Projeniz için bir env değişkeni tanımlamak üzere Terminal'inizde aşağıdaki komutu çalıştırın. your-cloud-project
yerine projenizin kimliğini yazın:
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 Eğitim kapsayıcısını kullanıyoruz.
Container'ın temeli olarak kullanılacak bir Docker görüntüsünün URI'sini ayarlamak için aşağıdakileri ç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 kodumuzda Hugging Face veri kümeleri ve dönüştürücü kitaplıkları kullanılır. Bu kitaplıklar, temel görüntü olarak seçtiğimiz görüntüye dahil edilmediğinden bunları şart olarak 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
autopkg-codelab
dizininde şu dosyalar bulunmalıdır:
+ requirements.txt
+ trainer/
+ task.py
Şartlar dosyasını açıp 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 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ılar pip ile yüklenir. 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 sürer. İş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 ç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 ettikten sonra, özel eğitim işimizi Vertex AI Eğitim'de 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 geri 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. Bu komut öncelikle 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 Vertex AI Eğitimi önceden oluşturulmuş kapsayıcısı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 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 havuzu içeren özel bir iş oluşturmak üzere birden fazla çalışan havuzu özelliği belirtebilirsiniz. Bu örnekte, eğitim kodumuz dağıtık 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 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 bir kapsayıcı görüntüsünün URI'si. Bu, ana resmimiz olarak 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ü adı.
Yerel komutu çalıştırdığınızda olduğu gibi, Docker resminin 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ı doğrulayan 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örürsünüz.
🎉 Tebrikler. 🎉
Aşağıdakiler için Vertex AI'ı nasıl kullanacağınızı öğrendiniz:
- Eğitim kodunu yerel olarak kapsayıcıya alma ve çalıştırma
- Otomatik paketleme 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 dokümanlara göz atın.
8. Temizleme
Not defterini, 60 dakikalık işlem yapılmadığında zaman aşımı olacak şekilde yapılandırdığımız için örneği kapatma konusunda endişelenmenize gerek yoktur. Örneğini 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.
Depolama paketini silmek için Cloud Console'daki Gezinme menüsünü kullanarak Depolama'ya gidin, paketinizi seçin ve Sil'i tıklayın: