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

1. Genel Bakış

Bu laboratuvarda, özel eğitim işi çalıştırmak için Vertex AI'yı 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 ekteki videoyu izleyebilirsiniz:

.

Öğrenecekleriniz

Öğrenecekleriniz:

  • Vertex AI Workbench 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'sı 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ı.

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

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 odaklanacağız: Eğitim ve Workbench

Vertex'e genel bakış

3. Ortamınızı ayarlama

Bu kod laboratuvarını çalıştırmak için faturalandırmanın etkin olduğu bir Google Cloud Platform projeniz olmalıdır. 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ştirilmediyse 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'unuzun Vertex AI bölümünden Workbench'i tıklayın:

Vertex AI menüsü

Henüz etkinleştirilmediyse Notebooks API'yi etkinleştirin.

Notebook_api

Etkinleştirdikten sonra YÖNETİLEN NOT DEFTERİ'ni 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, etkin değilse "Terminali etkinleştir"i seçin.

enable_terminal

Diğer tüm gelişmiş ayarları 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'İ AÇ'ı seçin.

open_jupyterlab

4. Eğitim uygulaması kodunu kapsayıcıya alma

Eğitim uygulamanızın kodunu bir Docker container'ına yerleştirip bu container'ı Google Artifact Registry'ye göndererek bu eğitim işini Vertex AI'a gönderirsiniz. 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:

Not defterinde terminali açma

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 Terminal'de 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, veri kümesini önce bu Workbench örneğine indirip ardından 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. Dizinin tamamını kopyalamak istediğimiz için -r, işlemleri hızlandırmak amacıyla da çoklu işleme kopyası yapmak için -m parametresini ekliyoruz.

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 bir Python dosyası oluşturmak üzere aşağıdakileri çalıştırın.

mkdir trainer
touch trainer/task.py

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

+ trainer/
    + task.py

Eğitim uygulaması kodunuzu nasıl yapılandıracağınız hakkında daha fazla bilgi için belgeleri inceleyin.

Sonra, az önce 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.

Cloud Storage FUSE aracı sayesinde Vertex AI Eğitim'deki eğitim işleri, Cloud Storage'daki verilere yerel dosya sisteminde dosya olarak erişebilir. Özel bir eğitim işi başlattığınızda iş, tüm Cloud Storage paketlerinizi alt dizin olarak içeren bir dizin /gcs 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 kapsayıcıya yerleştirmek için bir Dockerfile oluşturmanız gerekir. Dockerfile'e, görüntüyü çalıştırmak için gereken tüm komutları eklersiniz. Gerekli tüm kitaplıklar yüklenir ve eğitim kodunun giriş noktası ayarlanır.

Terminalinizde, flowers dizininizin kökünde boş bir Dockerfile oluşturun:

touch Dockerfile

flowers/ dizininde şu dosyalar bulunmalıdır:

+ Dockerfile
+ trainer/
    + task.py

Dockerfile dosyasını 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, temel resmi belirtir. Bu resim, oluşturduğunuz resmin derleneceği üst resimdir. 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 Container'ları, birçok yaygın ML ve veri bilimi çerçevesiyle önceden yüklenmiş olarak gelir.

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 dosyası olduğunu ancak daha gerçekçi bir örnek için muhtemelen ek dosyalarınız olacağını unutmayın. Veri ön işleme işlemini yapan data.py adlı bir kod ve yalnızca model kodu içeren model.py adlı bir kod olabilir. Daha karmaşık eğitim kodları için Python projelerini paketleme ile ilgili Python dokümanlarına 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 ek bir şeye ihtiyacımız yok.

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. Bizim durumumuzda bu, task.py dosyasının yürütülmesidir.

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

4. Adım: Kapsayıcıyı derleyin

Workbench not defterinizin terminalinden, projeniz için bir env değişkeni tanımlamak üzere aşağıdaki komutu çalıştırın. your-cloud-project yerine projenizin kimliğini yazın:

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ünden aşağıdakileri çalıştırarak kapsayıcıyı derleyin:

docker build ./ -t $IMAGE_URI

Son olarak, dosyayı Artifact Registry'ye gönderin:

docker push $IMAGE_URI

Kapsayıcı Artifact Registry'ye aktarıldığında eğitim işini başlatmaya hazırsınız demektir.

5. Vertex AI'da özel eğitim işi çalıştırma

Bu laboratuvar, Google Artifact Registry'deki özel bir container üzerinden özel eğitim kullanır ancak Önceden oluşturulmuş container'larla da bir 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:

eğitim 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ş)'i seçin ve Devam'ı tıklayın.
  • Yeni model eğit'i seçin, ardından Model adı için flowers-model (veya modelinizi nasıl adlandırmak isterseniz) 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ümdeki 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ın ve Devam'ı tıklayın.

Devam'ı tekrar tıklayarak Hiperparametreler adımını atlayın.

2. Adım: Hesaplama 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ı atlayacağız ve tahmin kapsayıcısını bu serinin bir sonraki laboratuvarında yapılandıracağı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 İŞ AKIŞLARI sekmesinde yeni başlatılan işinizi görürsünüz:

Eğitim işleri

🎉 Tebrikler. 🎉

Aşağıdakiler için Vertex AI'ı nasıl kullanacağınızı öğrendiniz:

  • Özel bir kapsayıcıda sağlanan eğitim kodu için özel bir eğitim işi başlatın. Bu örnekte bir TensorFlow modeli kullandık 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 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österilmiştir. Bu bölümde, Vertex AI Python SDK'sını 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)

Bu iş, açıklama 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 bir 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ştayken kapatma özelliği bulunduğundan ö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.

Örneği durdur

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:

Depolama alanını silme