![]() | ![]() | ![]() | ![]() | ![]() |
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 для доступа к результатам обучения.
- Импортировать необходимые модули
- Конфигурации проекта
- Аутентификация записной книжки для использования вашего 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()