TensorFlow Bulutu

TensorFlow.org'da görüntüleyin GitHub'da görüntüle Not defterini indir Kaggle logosuKaggle'da koş

TensorFlow Cloud, Google Cloud'da Keras modellerinin eğitimini ve hiperparametre ayarlamasını kolaylaştıran bir kitaplıktır.

TensorFlow Cloud'un run API'sini kullanarak model kodunuzu doğrudan Google Cloud hesabınıza gönderebilir ve oturum açmanıza ve Cloud kullanıcı arayüzüyle etkileşime girmenize gerek kalmadan (konsolda projenizi ayarladıktan sonra) Google Cloud bilgi işlem kaynaklarını kullanabilirsiniz.

Bu, Google Cloud bilgi işlem kaynaklarınızı doğrudan bir Python not defterinin içinden kullanabileceğiniz anlamına gelir: tıpkı bunun gibi bir not defteri! Modelleri Google Cloud'a düz bir .py Python komut dosyasından da gönderebilirsiniz.

Basit örnek

Bu , TensorFlow Cloud ve Google Cloud kullanılarak bir modelin uzaktan nasıl eğitileceğini gösteren basit bir giriş örneğidir.

Bunun nasıl çalıştığına dair bir fikir edinmek için tamamını okuyabilir veya not defterini Google Colab'da çalıştırabilirsiniz. Not defterini çalıştırmak, bir Google Cloud hesabına bağlanıp kimlik bilgilerinizi ve proje kimliğinizi girmenizi gerektirir. Henüz bir hesabınız yoksa veya konsolda bir projeyi nasıl kuracağınızdan emin değilseniz Google Cloud Hesabınızı Kurma ve Bağlanma konusuna bakın.

Gerekli modülleri içe aktar

import tensorflow as tf
tf.version.VERSION
'2.6.0'
! pip install -q tensorflow-cloud
import tensorflow_cloud as tfc
print(tfc.__version__)
import sys

Proje Konfigürasyonları

Proje parametrelerini ayarlayın. GCP_PROJECT_ID veya GCS_BUCKET ne olması gerektiğini bilmiyorsanız Google Cloud Hesabınızı Kurma ve Bağlama bölümüne bakın.

JOB_NAME isteğe bağlıdır ve onu herhangi bir dizeye ayarlayabilirsiniz. Daha büyük bir projenin parçası olarak birden fazla eğitim deneyi yapıyorsanız (örneğin), her birine benzersiz bir JOB_NAME vermek isteyebilirsiniz.

# Set Google Cloud Specific parameters

# TODO: Please set GCP_PROJECT_ID to your own Google Cloud project ID.
GCP_PROJECT_ID = 'YOUR_PROJECT_ID'

# TODO: set GCS_BUCKET to your own Google Cloud Storage (GCS) bucket.
GCS_BUCKET = 'YOUR_GCS_BUCKET_NAME'

# DO NOT CHANGE: Currently only the 'us-central1' region is supported.
REGION = 'us-central1'

# OPTIONAL: You can change the job name to any string.
JOB_NAME = 'mnist'

# Setting location were training logs and checkpoints will be stored
GCS_BASE_PATH = f'gs://{GCS_BUCKET}/{JOB_NAME}'
TENSORBOARD_LOGS_DIR = os.path.join(GCS_BASE_PATH,"logs")
MODEL_CHECKPOINT_DIR = os.path.join(GCS_BASE_PATH,"checkpoints")
SAVED_MODEL_DIR = os.path.join(GCS_BASE_PATH,"saved_model")

Google Cloud Projenizi kullanmak için not defterinin kimliğini doğrulama

Bu kod, geçerli Google Cloud kimlik bilgilerinizi ve kimliğinizi kontrol ederek not defterinin kimliğini doğrular. Yalnızca not defterinde çalıştırıldığından ve not defteri kodu Google Cloud'a gönderildiğinde çalıştırılmadığından emin olmak için if not tfc.remote() bloğunun içindedir.

# Using tfc.remote() to ensure this code only runs in notebook
if not tfc.remote():

    # Authentication for Kaggle Notebooks
    if "kaggle_secrets" in sys.modules:
        from kaggle_secrets import UserSecretsClient
        UserSecretsClient().set_gcloud_credentials(project=GCP_PROJECT_ID)

    # Authentication for Colab Notebooks
    if "google.colab" in sys.modules:
        from google.colab import auth
        auth.authenticate_user()
        os.environ["GOOGLE_CLOUD_PROJECT"] = GCP_PROJECT_ID

Model ve veri kurulumu

Buradan, MNIST veri kümesinde sınıflandırmayı çalıştıracak basit bir Keras modelinin kurulmasına yönelik temel prosedürü izliyoruz.

Verileri yükleme ve bölme

Ham verileri okuyun ve veri kümelerini eğitmek ve test etmek için bölün.

(x_train, y_train), (_, _) = tf.keras.datasets.mnist.load_data()

x_train = x_train.reshape((60000, 28 * 28))
x_train = x_train.astype('float32') / 255

Bir model oluşturun ve eğitime hazırlanın

Basit bir model oluşturun ve bunun için birkaç geri arama ayarlayın.

from tensorflow.keras import layers

model = tf.keras.Sequential([
  tf.keras.layers.Dense(512, activation='relu', input_shape=(28 * 28,)),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation='softmax')
])

model.compile(loss='sparse_categorical_crossentropy',
              optimizer=tf.keras.optimizers.Adam(),
              metrics=['accuracy'])

Hızlı doğrulama eğitimi

Her şeyin doğru şekilde ayarlandığından emin olmak için modeli bir (1) dönem boyunca eğiteceğiz ve bu eğitim komutunu if not tfc.remote içine saracağız, böylece bu yalnızca burada, sizin çalıştırdığınız çalışma zamanı ortamında gerçekleşecek. Bunu okuyorsunuz, Google Cloud'a gönderildiğinde değil.

if not tfc.remote():
    # Run the training for 1 epoch and a small subset of the data to validate setup
    model.fit(x=x_train[:100], y=y_train[:100], validation_split=0.2, epochs=1)

Uzaktan eğitime hazırlanın

Aşağıdaki kod, bunu okuduğunuz çalışma zamanı içinde değil, yalnızca not defteri kodu Google Cloud'a gönderildiğinde çalışacaktır.

İlk olarak, aşağıdakileri gerçekleştirecek geri aramaları ayarlıyoruz:

  • TensorBoard için günlükler oluşturun.
  • Kontrol noktaları oluşturun ve bunları yukarıda belirtilen kontrol noktaları dizinine kaydedin.
  • Kayıp yeterince iyileşmiyorsa model eğitimini durdurun.

Daha sonra model.fit ve model.save adını veririz; bunlar (bu kod Google Cloud'da çalışırken) gerçekte tüm eğitimi (100 dönem) çalıştırır ve ardından eğitilen modeli GCS Paketi'ne ve yukarıda tanımlanan dizine kaydeder.

if tfc.remote():
    # Configure Tensorboard logs
    callbacks=[
        tf.keras.callbacks.TensorBoard(log_dir=TENSORBOARD_LOGS_DIR),
        tf.keras.callbacks.ModelCheckpoint(
            MODEL_CHECKPOINT_DIR,
            save_best_only=True),
        tf.keras.callbacks.EarlyStopping(
            monitor='loss',
            min_delta =0.001,
            patience=3)]

    model.fit(x=x_train, y=y_train, epochs=100,
              validation_split=0.2, callbacks=callbacks)

    model.save(SAVED_MODEL_DIR)

Uzaktan eğitime başlayın

TensorFlow Cloud, tüm kodu yerel yürütme ortamından (bu not defteri) alır, paketler ve yürütülmek üzere Google Cloud'a gönderir. (Bu nedenle if ve if not tfc.remote sarmalayıcıları önemlidir.)

Bu adım, bu not defterindeki kodunuzu uzaktan yürütmeye hazırlayacak ve ardından modeli eğitmek için Google Cloud Platform'da bir uzaktan eğitim işi başlatacak.

Öncelikle tensorflow-cloud Python paketini bu not defterindeki kodla birlikte gönderilecek olan requirements.txt dosyasına ekliyoruz. Gerektiğinde buraya başka paketler ekleyebilirsiniz.

Daha sonra bir GPU ve bir CPU görüntüsü belirtilir. Yalnızca birini veya diğerini belirtmeniz gerekir; Aşağıdaki kodda GPU kullanılmıştır.

Son olarak TensorFlow bulutunun kalbi: tfc.run çağrısı. Bu işlem, bu not defterinde yürütüldüğünde, bu not defterindeki tüm kodlar ve bu dizindeki dosyaların geri kalanı paketlenecek ve yürütülmek üzere Google Cloud'a gönderilecektir. run yöntemindeki parametreler, belirtilen GPU CPU görüntülerinin ayrıntılarını belirtir. Yalnızca birini veya diğerini belirtmeniz gerekir; Aşağıdaki kodda GPU kullanılmıştır.

Son olarak TensorFlow bulutunun kalbi: tfc.run çağrısı. Bu işlem, bu not defterinde yürütüldüğünde, bu not defterindeki tüm kodlar ve bu dizindeki dosyaların geri kalanı paketlenecek ve yürütülmek üzere Google Cloud'a gönderilecektir. run yöntemindeki parametreler GPU ve CPU görüntülerinin ayrıntılarını belirtir. Yalnızca birini veya diğerini belirtmeniz gerekir; Aşağıdaki kodda GPU kullanılmıştır.

Son olarak TensorFlow bulutunun kalbi: tfc.run çağrısı. Bu işlem, bu not defterinde yürütüldüğünde, bu not defterindeki tüm kodlar ve bu dizindeki dosyaların geri kalanı paketlenecek ve yürütülmek üzere Google Cloud'a gönderilecektir. run yöntemindeki parametreler, yürütme ortamının ayrıntılarını ve kullanılacak dağıtım stratejisini (varsa) belirtir.

İş gönderildikten sonra Tensorboard aracılığıyla işin ilerlemesini izlemek için bir sonraki adıma geçebilirsiniz.

# If you are using a custom image you can install modules via requirements
# txt file.
with open('requirements.txt','w') as f:
    f.write('tensorflow-cloud\n')

# Optional: Some recommended base images. If you provide none the system
# will choose one for you.
TF_GPU_IMAGE= "tensorflow/tensorflow:latest-gpu"
TF_CPU_IMAGE= "tensorflow/tensorflow:latest"

# Submit a single node training job using GPU.
tfc.run(
    distribution_strategy='auto',
    requirements_txt='requirements.txt',
    docker_config=tfc.DockerConfig(
        parent_image=TF_GPU_IMAGE,
        image_build_bucket=GCS_BUCKET
        ),
    chief_config=tfc.COMMON_MACHINE_CONFIGS['K80_1X'],
    job_labels={'job': JOB_NAME}
)

Eğitim Sonuçları

Colab örneğinizi yeniden bağlayın

Uzaktan eğitim işlerinin çoğu uzun sürüyor. Colab kullanıyorsanız eğitim sonuçlarının alınmasından önce zaman aşımına uğrayabilir.

Bu durumda Colab örneğinizi yeniden bağlamak ve eğitim sonuçlarına erişecek şekilde yapılandırmak için aşağıdaki bölümleri yeniden çalıştırın .

  1. Gerekli modülleri içe aktar
  2. Proje Konfigürasyonları
  3. Google Cloud Projenizi kullanmak için not defterinin kimliğini doğrulama

Kodun geri kalanını yeniden ÇALIŞTIRMAYIN .

Tensorboard'u Yükle

Eğitim devam ederken sonuçları görüntülemek için Tensorboard'u kullanabilirsiniz. Sonuçların yalnızca antrenmanınız başladıktan sonra gösterileceğini unutmayın. Bu birkaç dakika sürebilir.

%load_ext tensorboard
%tensorboard --logdir $TENSORBOARD_LOGS_DIR

Eğitilen modelinizi yükleyin

Eğitim tamamlandıktan sonra modelinizi yukarıda belirttiğiniz GCS Kovasından alabilirsiniz.

trained_model = tf.keras.models.load_model(SAVED_MODEL_DIR)
trained_model.summary()