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
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.
4. Adım: Vertex AI Workbench örneği oluşturun
Cloud Console'unuzun Vertex AI bölümünden Workbench'i tıklayın:
Henüz etkinleştirilmediyse Notebooks API'yi etkinleştirin.
Etkinleştirdikten sonra YÖNETİLEN NOT DEFTERİ'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, etkin değilse "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 temel hazırlığının yapılması birkaç dakika sürer.
Örnek oluşturulduktan sonra JUPYTERLAB'İ AÇ'ı seçin.
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:
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:
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ç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:
İ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:
Ş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:
🎉 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:
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.
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: