Google I/O — это обертка! Наверстать упущенное в сеансах TensorFlow Просмотреть сеансы

Облако TensorFlow

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

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

Используя API run TensorFlow Cloud, вы можете отправить код своей модели прямо в свою учетную запись Google Cloud и использовать вычислительные ресурсы Google 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 Project

Этот код аутентифицирует записную книжку, проверяя ваши действительные учетные данные и личность в 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) эпохи, чтобы убедиться, что все настроено правильно, и мы tfc.remote эту обучающую команду в 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 Bucket и каталоге, определенном выше.

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 для выполнения. (Вот почему tfc.remote оболочки if и if not tfc.remote .)

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

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

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

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

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

Наконец, самое главное в облаке tfc.run : вызов 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 Project

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

Загрузить Tensorboard

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

%load_ext tensorboard
%tensorboard --logdir $TENSORBOARD_LOGS_DIR

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

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

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