Prototipten Üretime: Vertex AI ile özel modeller eğitme

1. Genel Bakış

Bu laboratuvarda, özel bir eğitim işi çalıştırmak için Vertex AI'ı kullanacaksınız.

Bu laboratuvar, Prototipten Üretime video serisinin bir parçasıdır. Çiçekler veri kümesini kullanarak bir resim sınıflandırma modeli oluşturacaksınız. Daha fazla bilgi edinmek için aşağıdaki 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'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.

Vertex AI, uçtan uca makine öğrenimi iş akışlarını destekleyen birçok farklı ürün içerir. Bu laboratuvarda, aşağıda vurgulanan ürünlere odaklanılmaktadır: training ve Workbench

Vertex ürününe genel bakış

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

Artifact Registry'ye gidin ve henüz etkinleştirilmemişse Etkinleştir'i seçin. Özel eğitim işiniz için bir container oluşturmak üzere bunu kullanacaksınız.

3. 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.

Vertex AI kontrol paneli

4. Adım: Vertex AI Workbench örneği oluşturun

Cloud Console'un Vertex AI bölümünde Workbench'i tıklayın:

Vertex AI menüsü

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

Notebook_api

Etkinleştirdikten sonra YÖNETİLEN NOT KİTAPLARI'nı tıklayın:

Notebooks_UI

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

new_notebook

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

create_notebook

Gelişmiş Ayarlar'ı seçin.

Güvenlik bölümünde "Terminali etkinleştir"i seçin Etkin değilse.

enable_terminal

Diğer gelişmiş ayarların tümünü olduğu gibi bırakabilirsiniz.

Ardından Oluştur'u tıklayın. Örneğin temel hazırlığının yapılması birkaç dakika sürer.

Örnek oluşturulduktan sonra JUPYTERLAB'I AÇ'ı seçin.

open_jupyterlab

4. Eğitim uygulaması kodunu container mimarisine alın

Eğitim uygulama kodunuzu bir Docker container'ına yerleştirip bu container'ı Google Artifact Registry'ye aktararak 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şlatıcı menüsünden başlamak için not defteri örneğinizde bir Terminal penceresi açın:

Terminali not defterinde aç

1. Adım: Cloud Storage paketi oluşturun

Bu eğitim işinde, eğitilen TensorFlow modelini bir Cloud Storage Paketine aktaracaksınız. Ayrıca verileri bir Cloud Storage paketinde eğitim için depolayacaksını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 projenizde yeni bir paket oluşturmak için aşağıdaki komutu Terminal'de ç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 taşımamız gerekiyor. Gösterim amacıyla önce veri kümesini bu Workbench örneğine indirip bir pakete kopyalayacaksınız.

Verileri indirin ve kullanımdan kaldırın.

wget https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz
tar xvzf flower_photos.tgz

Ardından oluşturduğunuz pakete kopyalayın. Tüm dizini kopyalamak istediğimizden -r'yi, çok işlemli kopyalama yapmak için de -m'yi ekleyerek işlemleri hızlandırabiliriz.

gsutil -m cp -r flower_photos $BUCKET

3. Adım: Eğitim kodunu yazın

flowers adında yeni bir dizin oluşturun ve cd'ye ekleyin:

mkdir flowers
cd flowers

Eğitim kodu için bir dizin ve kodu ekleyeceğiniz Python dosyası oluşturmak için aşağıdaki komutu çalıştırın.

mkdir trainer
touch trainer/task.py

Artık flowers/ dizininizde aşağıdakilerin olması gerekir:

+ trainer/
    + task.py

Eğitim uygulama kodunuzu yapılandırma hakkında daha fazla bilgi için belgelere göz atın.

Sonra, az önce oluşturduğunuz task.py dosyasını açın ve aşağıdaki kodu kopyalayın.

{your-gcs-bucket} kısmını 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 bir eğitim işi başlattığınızda, tüm Cloud Storage paketlerinizi alt dizin olarak içeren bir dizin (/gcs) gösterilir. 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 container mimarisine almak için bir Dockerfile oluşturmanız gerekir. Dockerfile'a görüntüyü çalıştırmak için gereken tüm komutları eklersiniz. Gerekli tüm kitaplıkları yükler ve eğitim kodu için giriş noktasını ayarlar.

Terminal'inizden çiçek dizininizin kök dizininde boş bir Dockerfile oluşturun:

touch Dockerfile

Artık flowers/ dizininizde aşağıdakilerin olması gerekir:

+ Dockerfile
+ trainer/
    + task.py

Dockerfile'ı açın ve aşağıdakini bu dosyaya 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ı gözden geçirelim.

FROM komutu, oluşturduğunuz görüntünün temelini oluşturacağı üst resmi belirtir. Temel görüntü olarak Deep Learning Container TensorFlow Enterprise 2.8 GPU Docker görüntüsünü kullanırsınız. Google Cloud'daki Deep Learning Containers, yaygın olarak kullanılan birçok makine öğrenimi ve veri bilimi çerçevesi önceden yüklenmiş olarak sunulur.

WORKDIR komutu, görüntü üzerinde sonraki talimatların çalıştırılacağı dizini belirtir.

COPY komutu, eğitmen kodunu Docker görüntüsüne kopyalar. Bu örnekte, eğitmen dizinimizde yalnızca bir python dosyamız olduğunu, ancak daha gerçekçi bir örnek için muhtemelen ek dosyalarınızın olacağını unutmayın. Bunlardan biri veri ön işlemesini data.py, diğeri ise yalnızca model kodunu içeren model.py olabilir. Daha karmaşık eğitim kodları için Python projelerini paketlemeyle ilgili Python belgelerine göz atın.

Başka kitaplık eklemek isterseniz pip yükleme işlemi için RUN komutunu kullanabilirsiniz (ör. RUN pip install -r requirements.txt). Ancak buradaki örneğimiz için başka hiçbir şeye ihtiyacımız yok.

Son olarak ENTRYPOINT komutu, eğiticiyi çağırmak için giriş noktasını ayarlar. Bu, eğitim işimizi başlattığımızda çalışacak. Örneğimizde task.py dosyası yürütülüyor.

Vertex AI eğitimi için Dockerfile yazma hakkında daha fazla bilgiyi burada bulabilirsiniz.

4. Adım: Kapsayıcıyı oluşturun

Workbench not defterinizin terminalinde aşağıdaki kodu çalıştırarak projeniz için env değişkeni tanımlayın. your-cloud-project değerini projenizin kimliğiyle değiştirin:

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'sıyla 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 dizininden aşağıdaki komutu çalıştırarak container'ı oluşturun:

docker build ./ -t $IMAGE_URI

Son olarak, dosyayı Artifact Registry'ye aktarın:

docker push $IMAGE_URI

Container, Artifact Registry'ye aktarıldığında bir eğitim işi 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 üzerinden özel eğitim kullanılır. Bununla birlikte, Önceden oluşturulmuş container'larla da bir eğitim işi çalıştırabilirsiniz.

Başlamak için Cloud konsolunuzun Vertex bölümündeki Eğitim bölümüne gidin:

tren menüsü

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.

create_training

  • 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ş) seçeneğini belirleyin ve Devam'ı tıklayın.
  • Yeni modeli eğit'i seçin, ardından Model adı için flowers-model (veya modelinizi adlandırmak istediğiniz adı) girin.
  • Devam et'i tıklayın.

Kapsayıcı ayarları adımında Özel kapsayıcı'yı seçin:

Özel kapsayıcı seçeneği

İlk kutuya (Kapsayıcı resmi), önceki bölümde bulunan IMAGE_URI değişkeninizin değerini girin. Kendi proje kimliğinizi içeren 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: Compute kümesini yapılandırın

Çalışan havuzu 0'ı aşağıdaki gibi yapılandırın:

worker_pool_0

Şimdilik 6. adımı atlayıp bu serideki bir sonraki laboratuvarda tahmin kapsayıcısını yapılandıracaksınız.

Eğitim işini başlatmak için EĞİTİME BAŞLAT'ı tıklayın. Konsolunuzun EĞİTİM HATALARI sekmesinin altında Eğitim bölümünde yeni başlatılan işinizi görürsünüz:

Eğitim işleri

🎉 Tebrikler! 🎉

Vertex AI'ı kullanarak şunları öğrendiniz:

  • Özel container'da sağlanan eğitim kodu için özel bir eğitim işi başlatın. Bu örnekte bir TensorFlow modeli kullanmıştınız ancak özel veya yerleşik container'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 dokümanlara 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österiliyordu. 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 bir TensorFlow 2 not defteri oluşturun:

new_notebook

Vertex AI SDK'sını içe aktarın.

from google.cloud import aiplatform

Ardından bir CustomContainerTrainingJob oluşturun. container_uri içindeki {PROJECT_ID} yerine projenizin adını, staging_bucket öğesindeki {BUCKET} değerini ise 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)

Gösterim amacıyla bu iş, önceki bölüme göre daha büyük bir makinede çalışacak şekilde yapılandırıldı. Buna ek olarak, bir GPU ile çalışıyoruz. machine-type, accelerator_type veya accelerator_count değerini belirtmezseniz iş varsayılan olarak n1-standard-4 üzerinde çalışır.

Konsolunuzun ÖZEL İŞLER sekmesinin altındaki Eğitim bölümünde eğitim işinizi görürsünüz.

7. Temizleme

Vertex AI Workbench tarafından yönetilen not defterleri boşta kapatma özelliğine sahip olduğundan ö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.

Örneği durdur

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:

Depolama alanını sil