Облако TensorFlow

Посмотреть на TensorFlow.org Запустить в Google Colab Посмотреть на GitHub Скачать блокнот Логотип Каггл Бегать в Kaggle

TensorFlow Cloud — это библиотека, которая упрощает обучение и настройку гиперпараметров моделей Keras в Google Cloud.

Используя API run TensorFlow Cloud, вы можете отправить код своей модели непосредственно в свою учетную запись Google Cloud и использовать вычислительные ресурсы Google Cloud без необходимости входа в систему и взаимодействия с пользовательским интерфейсом Cloud (после того, как вы настроили свой проект в консоли).

Это означает, что вы можете использовать свои вычислительные ресурсы Google Cloud непосредственно из блокнота Python: такого же блокнота! Вы также можете отправлять модели в Google Cloud из простого скрипта Python .py .

Простой пример

Это простой вводный пример, демонстрирующий, как удаленно обучать модель с помощью TensorFlow Cloud и Google Cloud.

Вы можете просто прочитать его, чтобы понять, как это работает, или запустить блокнот в Google Colab. Для запуска ноутбука необходимо подключиться к учетной записи Google Cloud и ввести свои учетные данные и идентификатор проекта. См. раздел «Настройка и подключение к вашей учетной записи Google Cloud», если у вас еще нет учетной записи или вы не знаете, как настроить проект в консоли.

Импортируйте необходимые модули

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

Конфигурации проекта

Установите параметры проекта. Если вы не знаете, каким должен быть ваш GCP_PROJECT_ID или GCS_BUCKET , см. раздел Настройка и подключение к вашей учетной записи Google Cloud .

JOB_NAME является необязательным, и вы можете установить его в любую строку. Если вы проводите несколько обучающих экспериментов (например) в рамках более крупного проекта, вы можете присвоить каждому из них уникальное 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")

Аутентификация ноутбука для использования вашего проекта Google Cloud

Этот код аутентифицирует блокнот, проверяя ваши действительные учетные данные и личность Google Cloud. Он находится внутри блока if not tfc.remote() , чтобы гарантировать, что он запускается только в записной книжке и не будет запускаться при отправке кода записной книжки в 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

Настройка модели и данных

Отсюда мы следуем базовой процедуре настройки простой модели Keras для запуска классификации набора данных MNIST.

Загрузка и разделение данных

Считайте необработанные данные и разделите их для обучения и тестирования наборов данных.

(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

Создайте модель и подготовьтесь к обучению

Создайте простую модель и настройте для нее несколько обратных вызовов.

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

Обучение быстрой проверке

Мы обучим модель в течение одной (1) эпохи, просто чтобы убедиться, что все настроено правильно, и обернем эту команду обучения в if not tfc.remote , чтобы она происходила только здесь, в среде выполнения, в которой вы читают это, а не когда оно отправляется в 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)

Подготовьтесь к дистанционному обучению.

Приведенный ниже код будет выполняться только тогда, когда код блокнота отправляется в Google Cloud, а не внутри среды выполнения, в которой вы это читаете.

Сначала мы настраиваем обратные вызовы, которые будут:

  • Создавайте логи для TensorBoard .
  • Создайте контрольные точки и сохраните их в указанном выше каталоге контрольных точек.
  • Остановите обучение модели, если потери недостаточно улучшаются.

Затем мы вызываем model.fit и model.save , которые (когда этот код выполняется в Google Cloud) фактически запускают полное обучение (100 эпох), а затем сохраняют обученную модель в сегменте GCS и каталоге, определенном выше.

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)

Начать дистанционное обучение

TensorFlow Cloud берет весь код из своей локальной среды выполнения (этого блокнота), упаковывает его и отправляет в Google Cloud для выполнения. (Вот почему оболочки if и if not tfc.remote важны.)

На этом этапе ваш код из этого блокнота подготовится к удаленному выполнению, а затем начнется задание удаленного обучения на Google Cloud Platform для обучения модели.

Сначала мы добавляем пакет Python tensorflow-cloud в файл requirements.txt , который будет отправлен вместе с кодом в этом блокноте. При необходимости вы можете добавить сюда другие пакеты.

Затем указываются графический процессор и образ процессора. Вам нужно только указать одно или другое; графический процессор используется в следующем коде.

Наконец, сердце облака TensorFlow: вызов tfc.run . Когда это выполняется внутри этого блокнота, весь код из этого блокнота и остальные файлы в этом каталоге будут упакованы и отправлены в Google Cloud для выполнения. Параметры метода run указывают детали изображений процессора графического процессора. Вам нужно только указать одно или другое; графический процессор используется в следующем коде.

Наконец, сердце облака TensorFlow: вызов tfc.run . Когда это выполняется внутри этого блокнота, весь код из этого блокнота и остальные файлы в этом каталоге будут упакованы и отправлены в Google Cloud для выполнения. Параметры метода run указывают детали изображений графического процессора и процессора. Вам нужно только указать одно или другое; графический процессор используется в следующем коде.

Наконец, сердце облака TensorFlow: вызов tfc.run . Когда это выполняется внутри этого блокнота, весь код из этого блокнота и остальные файлы в этом каталоге будут упакованы и отправлены в Google Cloud для выполнения. Параметры метода run определяют детали среды выполнения и стратегии распространения (если таковая имеется), которая будет использоваться.

После отправки задания вы можете перейти к следующему шагу, чтобы отслеживать ход выполнения задания через 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}
)

Результаты обучения

Переподключите экземпляр Colab.

Большинство вакансий по удаленному обучению выполняются в течение длительного времени. Если вы используете Colab, время ожидания результатов обучения может истечь.

В этом случае повторно выполните следующие разделы, чтобы повторно подключиться и настроить экземпляр Colab для доступа к результатам обучения.

  1. Импортируйте необходимые модули
  2. Конфигурации проекта
  3. Аутентификация ноутбука для использования вашего проекта Google Cloud

НЕ повторяйте остальную часть кода.

Загрузить тензорную доску

Пока обучение продолжается, вы можете использовать Tensorboard для просмотра результатов. Обратите внимание, что результаты появятся только после начала обучения. Это может занять несколько минут.

%load_ext tensorboard
%tensorboard --logdir $TENSORBOARD_LOGS_DIR

Загрузите обученную модель

После завершения обучения вы сможете получить свою модель из указанного выше сегмента GCS.

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