Chmura TensorFlow

Zobacz na TensorFlow.org Zobacz na GitHubie Pobierz notatnik Logo Kaggle'aBiegaj w Kaggle

TensorFlow Cloud to biblioteka ułatwiająca trenowanie i dostrajanie hiperparametrów modeli Keras w Google Cloud.

Korzystając z run API TensorFlow Cloud, możesz wysłać kod swojego modelu bezpośrednio na swoje konto Google Cloud i korzystać z zasobów obliczeniowych Google Cloud bez konieczności logowania się i interakcji z interfejsem użytkownika Cloud (po skonfigurowaniu projektu w konsoli).

Oznacza to, że możesz korzystać z zasobów obliczeniowych Google Cloud bezpośrednio w notatniku Python: notatniku takim jak ten! Możesz także wysyłać modele do Google Cloud ze zwykłego skryptu Pythona w formacie .py .

Prosty przykład

To prosty przykład wprowadzający pokazujący, jak zdalnie trenować model za pomocą TensorFlow Cloud i Google Cloud.

Możesz po prostu go przeczytać, aby dowiedzieć się, jak to działa, lub możesz uruchomić notatnik w Google Colab. Uruchomienie notatnika wymaga połączenia z kontem Google Cloud i wprowadzenia danych uwierzytelniających oraz identyfikatora projektu. Zobacz Konfigurowanie i łączenie się z kontem Google Cloud, jeśli nie masz jeszcze konta lub nie wiesz, jak skonfigurować projekt w konsoli.

Zaimportuj wymagane moduły

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

Konfiguracje projektu

Ustaw parametry projektu. Jeśli nie wiesz, jaki powinien być Twój GCP_PROJECT_ID lub GCS_BUCKET , zobacz Konfigurowanie i łączenie się z kontem Google Cloud .

JOB_NAME jest opcjonalny i można ustawić go na dowolny ciąg. Jeśli przeprowadzasz wiele eksperymentów szkoleniowych (na przykład) w ramach większego projektu, możesz nadać każdemu z nich unikalną nazwę JOB_NAME .

# 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")

Uwierzytelnianie notatnika w celu korzystania z projektu Google Cloud

Ten kod uwierzytelnia notatnik, sprawdzając Twoje prawidłowe dane uwierzytelniające i tożsamość Google Cloud. Znajduje się on w bloku if not tfc.remote() aby mieć pewność, że zostanie uruchomiony tylko w notatniku i nie zostanie uruchomiony po wysłaniu kodu notatnika do Google Cloud.

# 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

Konfiguracja modelu i danych

Od tego momentu postępujemy zgodnie z podstawową procedurą konfigurowania prostego modelu Keras w celu przeprowadzenia klasyfikacji na zbiorze danych MNIST.

Ładuj i dziel dane

Odczytuj surowe dane i dziel je, aby trenować i testować zestawy danych.

(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

Stwórz model i przygotuj się do szkolenia

Utwórz prosty model i skonfiguruj dla niego kilka wywołań zwrotnych.

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'])

Szybkie szkolenie weryfikacyjne

Będziemy trenować model przez jedną (1) epokę, aby upewnić się, że wszystko jest poprawnie skonfigurowane, i zapakujemy to polecenie szkoleniowe, if not tfc.remote , tak aby działo się to tylko tutaj, w środowisku wykonawczym, w którym czytają to, a nie wtedy, gdy jest on wysyłany do Google Cloud.

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)

Przygotuj się na zdalne szkolenie

Poniższy kod zostanie uruchomiony tylko po wysłaniu kodu notatnika do Google Cloud, a nie w środowisku wykonawczym, w którym to czytasz.

Najpierw skonfigurujemy wywołania zwrotne, które:

  • Utwórz dzienniki dla TensorBoard .
  • Utwórz punkty kontrolne i zapisz je w katalogu punktów kontrolnych określonym powyżej.
  • Zatrzymaj szkolenie modelu, jeśli strata nie poprawia się dostatecznie.

Następnie wywołujemy model.fit i model.save , które (kiedy ten kod działa w Google Cloud), które faktycznie uruchamiają pełne szkolenie (100 epok), a następnie zapisują wytrenowany model w Buckecie GCS i katalogu zdefiniowanym powyżej.

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)

Rozpocznij zdalne szkolenie

TensorFlow Cloud pobiera cały kod z lokalnego środowiska wykonawczego (tego notatnika), pakuje go i wysyła do Google Cloud w celu wykonania. (Dlatego opakowania if i if not tfc.remote są ważne.)

W tym kroku przygotujesz kod z tego notatnika do zdalnego wykonania, a następnie rozpoczniesz zadanie zdalnego szkolenia na Google Cloud Platform w celu wytrenowania modelu.

Najpierw dodajemy pakiet Pythona tensorflow-cloud do pliku requirements.txt , który zostanie przesłany wraz z kodem w tym notatniku. W razie potrzeby możesz tutaj dodać inne pakiety.

Następnie określany jest obraz procesora graficznego i procesora. Musisz tylko określić jedno lub drugie; procesor graficzny jest używany w poniższym kodzie.

Na koniec serce chmury TensorFlow: wywołanie tfc.run . Gdy zostanie to wykonane w tym notatniku, cały kod z tego notatnika i pozostałe pliki w tym katalogu zostaną spakowane i wysłane do Google Cloud w celu wykonania. Parametry metody run określają szczegóły obrazów procesora GPU. Musisz tylko określić jedno lub drugie; procesor graficzny jest używany w poniższym kodzie.

Na koniec serce chmury TensorFlow: wywołanie tfc.run . Gdy zostanie to wykonane w tym notatniku, cały kod z tego notatnika i pozostałe pliki w tym katalogu zostaną spakowane i wysłane do Google Cloud w celu wykonania. Parametry metody run określają szczegóły obrazów procesora graficznego i procesora. Musisz tylko określić jedno lub drugie; procesor graficzny jest używany w poniższym kodzie.

Na koniec serce chmury TensorFlow: wywołanie tfc.run . Gdy zostanie to wykonane w tym notatniku, cały kod z tego notatnika i pozostałe pliki w tym katalogu zostaną spakowane i wysłane do Google Cloud w celu wykonania. Parametry metody run określają szczegóły środowiska wykonawczego i strategii dystrybucji (jeśli istnieje), która ma zostać użyta.

Po przesłaniu zadania możesz przejść do następnego kroku i monitorować postęp zadania za pomocą Tensorboard.

# 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}
)

Wyniki szkolenia

Podłącz ponownie instancję Colab

Większość zdalnych zadań szkoleniowych ma charakter długotrwały. Jeśli korzystasz z Colab, może upłynąć limit czasu, zanim wyniki treningu będą dostępne.

W takim przypadku uruchom ponownie poniższe sekcje, aby ponownie połączyć się i skonfigurować instancję Colab w celu uzyskania dostępu do wyników uczenia.

  1. Zaimportuj wymagane moduły
  2. Konfiguracje projektu
  3. Uwierzytelnianie notatnika w celu korzystania z projektu Google Cloud

NIE uruchamiaj ponownie reszty kodu.

Załaduj Tensorboard

W trakcie szkolenia możesz przeglądać wyniki za pomocą Tensorboardu. Pamiętaj, że wyniki pojawią się dopiero po rozpoczęciu treningu. Może to potrwać kilka minut.

%load_ext tensorboard
%tensorboard --logdir $TENSORBOARD_LOGS_DIR

Załaduj wyszkolony model

Po zakończeniu uczenia możesz pobrać model z zasobnika GCS określonego powyżej.

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