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
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.
4. Adım: Vertex AI Workbench örneği oluşturun
Cloud Console'un Vertex AI bölümünde Workbench'i tıklayın:
Henüz etkinleştirilmemişse Notebooks API'yi etkinleştirin.
Etkinleştirdikten sonra YÖNETİLEN NOT KİTAPLARI'nı 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 "Terminali etkinleştir"i seçin Etkin değilse.
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.
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:
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:
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ş) 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:
İ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:
Ş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:
🎉 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:
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.
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: