Chmura TensorFlow

Zobacz na TensorFlow.org Uruchom w Google Colab Wyświetl w serwisie GitHub Pobierz notatnik Logo KaggleBiegnij w Kaggle

TensorFlow Cloud to biblioteka, która ułatwia szkolenie i dostrajanie hiperparametrów modeli Keras w Google Cloud.

Korzystając run interfejsu API TensorFlow Cloud, możesz wysłać kod modelu bezpośrednio na konto Google Cloud i korzystać z zasobów obliczeniowych Google Cloud bez konieczności logowania się i interakcji z interfejsem Cloud UI (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 .py Python.

Prosty przykład

To jest prosty przykład wprowadzający, aby zademonstrować, jak zdalnie trenować model przy użyciu TensorFlow Cloud i Google Cloud.

Możesz go po prostu przeczytać, aby dowiedzieć się, jak to działa, lub możesz uruchomić notatnik w Google Colab. Uruchomienie notatnika wymaga połączenia się z kontem Google Cloud i wprowadzenia swoich poświadczeń i 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.

Importuj 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żesz ustawić go na dowolny ciąg. Jeśli przeprowadzasz wiele eksperymentów szkoleniowych (na przykład) w ramach większego projektu, możesz zechcieć nadać każdemu z nich unikalną 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 prawidłowe dane logowania i tożsamość Google Cloud. Znajduje się wewnątrz bloku if not tfc.remote() , aby zapewnić, że jest uruchamiany tylko w notatniku i nie zostanie uruchomiony, gdy kod notatnika zostanie wysłany 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

W tym miejscu postępujemy zgodnie z podstawową procedurą konfigurowania prostego modelu Keras w celu przeprowadzenia klasyfikacji na zbiorze danych MNIST.

Ładowanie i dzielenie danych

Czytaj nieprzetworzone 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 treningu

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 walidacyjne

Będziemy trenować model przez jedną (1) epokę, aby upewnić się, że wszystko jest poprawnie skonfigurowane, i tfc.remote to polecenie treningowe, if not tfc.remote , tak, aby miało to miejsce tylko w środowisku wykonawczym, w którym czytają to, a nie wtedy, gdy jest wysyłane 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ę do zdalnego szkolenia

Poniższy kod będzie działał tylko wtedy, gdy kod notatnika zostanie wysłany do Google Cloud, a nie w środowisku wykonawczym, w którym to czytasz.

Najpierw skonfigurowaliśmy 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.
  • Przestań trenować model, jeśli strata nie poprawia się dostatecznie.

Następnie wywołujemy model.fit i model.save , które (gdy ten kod działa w Google Cloud), które faktycznie przeprowadzają pełne szkolenie (100 epok), a następnie zapisują wyuczony model w zasobniku 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 szkolenie zdalne

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

Ten krok przygotuje kod z tego notatnika do zdalnego wykonania, a następnie rozpocznie zdalne szkolenie w Google Cloud Platform, aby wytrenować model.

Najpierw dodajemy tensorflow-cloud pakiet Pythona do requirements.txt pliku, która zostanie wysłana wraz z kodem w tym zeszycie. W razie potrzeby możesz dodać inne pakiety.

Następnie określa się GPU i obraz procesora. Musisz tylko określić jedną lub drugą; GPU jest używany w poniższym kodzie.

Wreszcie serce chmury TensorFlow: połączenie z tfc.run . Po wykonaniu tego w tym notatniku cały kod z tego notatnika i reszta plików 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ć jedną lub drugą; GPU jest używany w poniższym kodzie.

Wreszcie serce chmury TensorFlow: połączenie z tfc.run . Po wykonaniu tego w tym notatniku cały kod z tego notatnika i reszta plików w tym katalogu zostaną spakowane i wysłane do Google Cloud w celu wykonania. Parametry metody run określają szczegóły obrazu GPU i procesora. Musisz tylko określić jedną lub drugą; GPU jest używany w poniższym kodzie.

Wreszcie serce chmury TensorFlow: połączenie z tfc.run . Po wykonaniu tego w tym notatniku cały kod z tego notatnika i reszta plików w tym katalogu zostaną spakowane i wysłane do Google Cloud w celu wykonania. Parametry metody run określają szczegóły środowiska wykonawczego i strategię dystrybucji (jeśli istnieje), która ma zostać użyta.

Po przesłaniu zadania możesz przejść do następnego kroku, aby monitorować postęp prac za pośrednictwem 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

Połącz ponownie swoją instancję Colab

Większość zdalnych zadań szkoleniowych trwa długo. Jeśli używasz Colab, może minąć czas, 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 szkolenia.

  1. Importuj 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 skorzystać z Tensorboard, aby wyświetlić wyniki. Zwróć uwagę, że wyniki pojawią się dopiero po rozpoczęciu treningu. To może zająć parę minut.

%load_ext tensorboard
%tensorboard --logdir $TENSORBOARD_LOGS_DIR

Załaduj wyszkolony model

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

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