1. Genel Bakış
Bu laboratuvarda, özel eğitim işi çalıştırmak için Vertex AI'ı kullanacaksınız.
Bu laboratuvar, Prototype to Production (Prototipten Üretime) video serisinin bir parçasıdır. Flowers veri kümesini kullanarak bir görüntü sınıflandırma modeli oluşturacaksınız. Daha fazla bilgi edinmek için ilgili videoyu izleyebilirsiniz:
.
Öğrenecekleriniz
Öğrenecekleriniz:
- Vertex AI Workbench tarafından yönetilen not defteri oluşturma
- Vertex AI kullanıcı arayüzünden özel eğitim işi yapılandırma ve başlatma
- Vertex AI Python SDK ile özel eğitim işi yapılandırma ve başlatma
Bu laboratuvarı Google Cloud'da çalıştırmanın toplam maliyeti yaklaşık 1 ABD dolarıdır.
2. 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.
Vertex AI, uçtan uca makine öğrenimi iş akışlarını desteklemek için birçok farklı ürün içerir. Bu laboratuvarda, aşağıda vurgulanan ürünlere odaklanılacaktır: Training ve Workbench

3. 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: Artifact Registry API'yi etkinleştirin
Artifact 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.
3. 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.

4. adım: Vertex AI Workbench örneği oluşturma
Cloud Console'unuzun Vertex AI bölümünde Workbench'i tıklayın:

Henüz etkinleştirilmemişse Notebooks API'yi etkinleştirin.

Etkinleştirildikten sonra YÖNETİLEN NOT DEFTERLERİ'ni tıklayın:

Ardından YENİ NOT DEFTERİ'ni seçin.

Not defterinize bir ad verin ve İzin bölümünde Hizmet hesabı'nı seçin.

Gelişmiş Ayarlar'ı seçin.
Güvenlik bölümünde, henüz etkinleştirilmemişse "Terminali etkinleştir"i seçin.

Diğer tüm gelişmiş ayarları olduğu gibi bırakabilirsiniz.
Ardından Oluştur'u tıklayın. Örneğin sağlanması birkaç dakika sürer.
Örnek oluşturulduktan sonra JUPYTERLAB'İ AÇ'ı seçin.

4. Eğitim uygulaması kodunu kapsayıcıya alma
Eğitim uygulama kodunuzu bir Docker container'a yerleştirip bu container'ı Google Artifact Registry'ye göndererek bu eğitim işini Vertex AI'a göndereceksiniz. Bu yaklaşımı kullanarak herhangi bir çerçeveyle oluşturulmuş bir modeli eğitebilirsiniz.
Başlamak için Başlatıcı menüsünden not defteri örneğinizde bir Terminal penceresi açın:

1. adım: Cloud Storage paketi oluşturma
Bu eğitim işinde, eğitilen TensorFlow modelini bir Cloud Storage paketine aktaracaksınız. Eğitim için kullanılacak verileri de bir Cloud Storage paketinde depolayacaksını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, projenizde yeni bir paket oluşturmak için Terminal'inizde aşağıdakileri çalıştırın.
BUCKET="gs://${PROJECT_ID}-bucket"
gsutil mb -l us-central1 $BUCKET
2. adım: Verileri Cloud Storage paketine kopyalayın
Çiçek veri kümemizi Cloud Storage'a aktarmamız gerekiyor. Gösterim amacıyla, önce veri kümesini bu Workbench örneğine indirip ardından bir pakete kopyalayacaksınız.
Verileri indirip ayıklayın.
wget https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz
tar xvzf flower_photos.tgz
Ardından, az önce oluşturduğunuz pakete kopyalayın. Dizinin tamamını kopyalamak istediğimiz için -r, çoklu işlem kopyalama yapmak ve bu sayede işlemleri hızlandırmak için ise -m parametresini ekliyoruz.
gsutil -m cp -r flower_photos $BUCKET
3. adım: Eğitim kodu yazın
flowers adlı yeni bir dizin oluşturun ve bu dizine gidin:
mkdir flowers
cd flowers
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
flowers/ dizininizde artık şunlar olmalıdır:
+ trainer/
+ task.py
Eğitim uygulaması kodunuzu nasıl yapılandıracağınız hakkında daha fazla bilgi için belgeleri inceleyin.
Ardından, yeni oluşturduğunuz task.py dosyasını açın ve aşağıdaki kodu kopyalayın.
{your-gcs-bucket} ifadesini, az önce oluşturduğunuz Cloud Storage paketinin adıyla değiştirmeniz gerekir.
Vertex AI Training'deki eğitim işleri, Cloud Storage FUSE aracı aracılığıyla Cloud Storage'daki verilere yerel dosya sistemindeki dosyalar olarak erişebilir. Özel eğitim işi başlattığınızda, iş, tüm Cloud Storage paketlerinizi alt dizin olarak içeren bir /gcs dizini görür. Bu nedenle, eğitim kodundaki veri yolları /gcs ile başlar.
import tensorflow as tf
import numpy as np
import os
## Replace {your-gcs-bucket} !!
BUCKET_ROOT='/gcs/{your-gcs-bucket}'
# Define variables
NUM_CLASSES = 5
EPOCHS=10
BATCH_SIZE = 32
IMG_HEIGHT = 180
IMG_WIDTH = 180
DATA_DIR = f'{BUCKET_ROOT}/flower_photos'
def create_datasets(data_dir, batch_size):
'''Creates train and validation datasets.'''
train_dataset = tf.keras.utils.image_dataset_from_directory(
data_dir,
validation_split=0.2,
subset="training",
seed=123,
image_size=(IMG_HEIGHT, IMG_WIDTH),
batch_size=batch_size)
validation_dataset = tf.keras.utils.image_dataset_from_directory(
data_dir,
validation_split=0.2,
subset="validation",
seed=123,
image_size=(IMG_HEIGHT, IMG_WIDTH),
batch_size=batch_size)
train_dataset = train_dataset.cache().shuffle(1000).prefetch(buffer_size=tf.data.AUTOTUNE)
validation_dataset = validation_dataset.cache().prefetch(buffer_size=tf.data.AUTOTUNE)
return train_dataset, validation_dataset
def create_model():
'''Creates model.'''
model = tf.keras.Sequential([
tf.keras.layers.Resizing(IMG_HEIGHT, IMG_WIDTH),
tf.keras.layers.Rescaling(1./255, input_shape=(IMG_HEIGHT, IMG_WIDTH, 3)),
tf.keras.layers.Conv2D(16, 3, padding='same', activation='relu'),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Conv2D(32, 3, padding='same', activation='relu'),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Conv2D(64, 3, padding='same', activation='relu'),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(NUM_CLASSES, activation='softmax')
])
return model
# CREATE DATASETS
train_dataset, validation_dataset = create_datasets(DATA_DIR, BATCH_SIZE)
# CREATE/COMPILE MODEL
model = create_model()
model.compile(optimizer=tf.keras.optimizers.Adam(),
loss=tf.keras.losses.SparseCategoricalCrossentropy(),
metrics=['accuracy'])
# TRAIN MODEL
history = model.fit(
train_dataset,
validation_data=validation_dataset,
epochs=EPOCHS
)
# SAVE MODEL
model.save(f'{BUCKET_ROOT}/model_output')
4. adım: Dockerfile oluşturun
Kodunuzu kapsüllemek için bir Dockerfile oluşturmanız gerekir. Dockerfile'da, görüntüyü çalıştırmak için gereken tüm komutları eklersiniz. Bu işlem, gerekli tüm kitaplıkları yükler ve eğitim kodu için giriş noktasını ayarlar.
Terminalinizden, çiçekler dizininizin kök dizininde boş bir Dockerfile oluşturun:
touch Dockerfile
flowers/ dizininizde artık şunlar olmalıdır:
+ Dockerfile
+ trainer/
+ task.py
Dockerfile'ı açın ve aşağıdakileri kopyalayın:
FROM gcr.io/deeplearning-platform-release/tf2-gpu.2-8
WORKDIR /
# Copies the trainer code to the docker image.
COPY trainer /trainer
# Sets up the entry point to invoke the trainer.
ENTRYPOINT ["python", "-m", "trainer.task"]
Bu dosyadaki komutları inceleyelim.
FROM komutu, oluşturduğunuz görüntünün temel alınacağı üst görüntü olan temel görüntüyü belirtir. Temel görüntü olarak Deep Learning Container TensorFlow Enterprise 2.8 GPU Docker görüntüsünü kullanacaksınız. Google Cloud'daki Deep Learning Container'larında birçok yaygın makine öğrenimi ve veri bilimi çerçevesi önceden yüklenmiş olarak gelir.
WORKDIR komutu, sonraki talimatların çalıştırılacağı görüntünün dizinini belirtir.
COPY komutu, eğitici kodunu Docker görüntüsüne kopyalar. Bu örnekte eğitici dizinimizde yalnızca bir Python dosyası olduğunu ancak daha gerçekçi bir örnekte muhtemelen ek dosyalarınız olacağını unutmayın. Belki data.py adlı bir dosya (veri ön işleme) ve model.py adlı bir dosya (yalnızca model kodu) oluşturabilirsiniz. Daha karmaşık eğitim kodları için Python projelerini paketleme ile ilgili Python belgelerine göz atın.
Başka kitaplıklar eklemek isterseniz pip install için RUN komutunu kullanabilirsiniz (ör. RUN pip install -r requirements.txt). Ancak buradaki örneğimiz için ek bir şey yapmamız gerekmiyor.
Son olarak, ENTRYPOINT komutu, eğiticiyi çağırmak için giriş noktasını ayarlar. Eğitim işimizi başlattığımızda bu kod çalıştırılır. Bu örnekte, task.py dosyası yürütülüyor.
Vertex AI Training için Dockerfile yazma hakkında daha fazla bilgiyi burada bulabilirsiniz.
4. adım: Kapsayıcıyı oluşturun
Workbench not defterinizin terminalinde, 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'
Artifact Registry'de depo oluşturma
REPO_NAME='flower-app'
gcloud artifacts repositories create $REPO_NAME --repository-format=docker \
--location=us-central1 --description="Docker repository"
Google Artifact Registry'deki container görüntünüzün URI'siyle bir değişken tanımlayın:
IMAGE_URI=us-central1-docker.pkg.dev/$PROJECT_ID/$REPO_NAME/flower_image:latest
Docker'ı yapılandırma
gcloud auth configure-docker \
us-central1-docker.pkg.dev
Ardından, flower dizininizin kökünden aşağıdaki komutu çalıştırarak kapsayıcıyı oluşturun:
docker build ./ -t $IMAGE_URI
Son olarak, görüntüyü Artifact Registry'ye aktarın:
docker push $IMAGE_URI
Kapsayıcı Artifact Registry'ye aktarıldığına göre artık eğitim işini başlatmaya hazırsınız.
5. Vertex AI'da özel eğitim işi çalıştırma
Bu laboratuvarda, Google Artifact Registry'deki özel bir container aracılığıyla özel eğitim kullanılmaktadır ancak önceden oluşturulmuş container'larla da eğitim işi çalıştırabilirsiniz.
Başlamak için Cloud Console'unuzun Vertex bölümündeki Eğitim bölümüne gidin:

1. adım: Eğitim işini yapılandırın
Eğitim işinizin parametrelerini girmek için Oluştur'u tıklayın.

- Veri kümesi bölümünde Yönetilen veri kümesi yok'u seçin.
- Ardından eğitim yönteminiz olarak Özel eğitim (gelişmiş)'i seçip Devam'ı tıklayın.
- Yeni modeli eğit'i seçin, ardından Model adı için
flowers-model(veya modelinize vermek istediğiniz adı) girin. - Devam et'i tıklayın.
Kapsayıcı ayarları adımında Özel kapsayıcı'yı seçin:

İlk kutuya (Container image), önceki bölümdeki IMAGE_URI değişkeninizin değerini girin. Bu kimlik, kendi proje kimliğinizle birlikte us-central1-docker.pkg.dev/{PROJECT_ID}/flower-app/flower_image:latest olmalıdır. Diğer alanları boş bırakıp Devam'ı tıklayın.
Devam'ı tekrar tıklayarak Hiperparametreler adımını atlayın.
2. adım: İşlem kümesini yapılandırın
Çalışan havuzu 0'ı aşağıdaki gibi yapılandırın:

Şimdilik 6. adımı atlayacak ve tahmin kapsayıcısını bu serideki bir sonraki laboratuvarda yapılandıracaksınız.
Eğitim işini başlatmak için EĞİTİMİ BAŞLAT'ı tıklayın. Konsolunuzun Eğitim bölümündeki EĞİTİM İŞLEME HATTI sekmesinde yeni başlattığınız işi görürsünüz:

🎉 Tebrikler! 🎉
Vertex AI'ı kullanarak şunları yapmayı öğrendiniz:
- Özel bir container'da sağlanan kodu eğitmek için özel bir eğitim işi başlatın. Bu örnekte bir TensorFlow modeli kullanıldı ancak özel veya yerleşik kapsayıcıları kullanarak herhangi bir çerçeveyle oluşturulmuş bir modeli eğitebilirsiniz.
Vertex'in farklı bölümleri hakkında daha fazla bilgi edinmek için belgelere göz atın.
6. [İsteğe bağlı] Vertex AI Python SDK'sını kullanma
Önceki bölümde, eğitim işinin kullanıcı arayüzü üzerinden nasıl başlatılacağı gösterilmişti. Bu bölümde, Vertex AI Python SDK'yı kullanarak eğitim işini göndermenin alternatif bir yolunu göreceksiniz.
Not defteri örneğinize dönün ve Başlatıcı'dan TensorFlow 2 not defteri oluşturun:

Vertex AI SDK'yı içe aktarın.
from google.cloud import aiplatform
Ardından CustomContainerTrainingJob oluşturun. {PROJECT_ID} ifadesini container_uri içinde projenizin adıyla, {BUCKET} ifadesini ise staging_bucket içinde daha önce oluşturduğunuz paketle değiştirmeniz gerekir.
my_job = aiplatform.CustomContainerTrainingJob(display_name='flower-sdk-job',
container_uri='us-central1-docker.pkg.dev/{PROJECT_ID}/flower-app/flower_image:latest',
staging_bucket='gs://{BUCKET}')
Ardından işi çalıştırın.
my_job.run(replica_count=1,
machine_type='n1-standard-8',
accelerator_type='NVIDIA_TESLA_V100',
accelerator_count=1)
Bu iş, gösterim amacıyla önceki bölüme kıyasla daha büyük bir makinede çalışacak şekilde yapılandırılmıştır. Ayrıca GPU ile çalışıyoruz. machine-type, accelerator_type veya accelerator_count belirtmezseniz iş varsayılan olarak n1-standard-4 üzerinde çalışır.
Konsolunuzun Eğitim bölümündeki ÖZEL İŞLER sekmesinde eğitim işinizi görürsünüz.
7. Temizleme
Vertex AI Workbench yönetilen not defterlerinde boşta kalma durumunda kapatma özelliği bulunduğundan örneği kapatma konusunda endişelenmemize gerek yoktur. Ö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 Storage paketini silmek için Storage'a gidin, paketinizi seçin ve Sil'i tıklayın:
