Пошаговое руководство по использованию бесплатных ресурсов GPU и TPU Kaggle для повышения производительности по сравнению с Colab и GitPod.

Введение

Kaggle Notebooks предлагает бесплатные ресурсы GPU и TPU, что делает их отличным выбором для обучения нейронных сетей. В этой статье мы обсудим различия между Colab, GitPod и Kaggle и подчеркнем огромные преимущества использования Kaggle Notebooks для нейронных сетей. Затем мы проведем вас через процесс создания учетной записи, включения ускорителей GPU и TPU и обучения нейронной сети. Наконец, мы задокументируем время обучения и сравним его с производительностью Colab и GitPod.

Сравнение Kaggle, Colab и GitPod

Прежде чем мы углубимся в преимущества Kaggle Notebooks, давайте кратко сравним его с его аналогами, Colab и GitPod:

Преимущества использования ноутбуков Kaggle

Блокноты Kaggle предоставляют бесплатный доступ к мощным ускорителям GPU и TPU, которые могут значительно ускорить такие задачи, как обучение нейронных сетей на данных изображений. Кроме того, ноутбуки Kaggle поставляются с предварительно настроенными средами, что экономит ваше время и нервы при настройке программного обеспечения и пакетов, готовых к работе с GPU.

Начало работы с блокнотами Kaggle

Шаг 1: Создайте учетную запись

Чтобы начать использовать Kaggle Notebooks, сначала необходимо создать учетную запись:

  1. Посетите Kaggle.com
  2. Нажмите «Зарегистрироваться» в правом верхнем углу
  3. Заполните необходимую информацию и завершите процесс регистрации

Шаг 2. Включите графический процессор

Чтобы добавить бесплатный графический процессор NVIDIA Tesla P100:

  1. Откройте новую или существующую записную книжку Kaggle.

2. Перейдите на панель «Настройки» из редактора блокнота (три точки).

3. Щелкните раскрывающееся меню «Ускоритель» и выберите «GPU».

4. Ваш сеанс будет перезапущен, и вам, возможно, придется ждать в очереди, чтобы получить доступ к машине с поддержкой GPU.

Шаг 3. Включите ТПУ

Чтобы добавить бесплатный TPU v3–8:

  1. Откройте новую или существующую записную книжку Kaggle.
  2. Перейдите на панель «Настройки» из редактора блокнота.
  3. Щелкните раскрывающееся меню «Ускоритель» и выберите «TPU v3–8».
  4. Ваш сеанс будет перезапущен, и вам, возможно, придется подождать в очереди, чтобы получить доступ к машине с поддержкой TPU.

Обучение нейронной сети на ноутбуках Kaggle

Теперь, когда в вашем ноутбуке Kaggle установлены ускорители GPU и TPU, вы можете обучать нейронную сеть. В демонстрационных целях мы будем использовать простую модель нейронной сети для классификации изображений:

  1. Импортировать необходимые библиотеки
import numpy as np
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout, BatchNormalization
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.datasets import cifar10
from tensorflow.keras.utils import to_categorical

2. Загрузите и предварительно обработайте набор данных

(x_train, y_train), (x_test, y_test) = cifar10.load_data()
x_train = x_train.astype('float32') / 255.0
x_test = x_test.astype('float32') / 255.0
y_train = to_categorical(y_train, 10)
y_test = to_categorical(y_test, 10)

3. Определите архитектуру нейронной сети

def create_model():
    model = Sequential([
        Conv2D(32, (3, 3), activation='relu', padding='same', input_shape=(32, 32, 3)),
        BatchNormalization(),
        Conv2D(32, (3, 3), activation='relu', padding='same'),
        BatchNormalization(),
        MaxPooling2D(pool_size=(2, 2)),
        Dropout(0.3),

        Conv2D(64, (3, 3), activation='relu', padding='same'),
        BatchNormalization(),
        Conv2D(64, (3, 3), activation='relu', padding='same'),
        BatchNormalization(),
        MaxPooling2D(pool_size=(2, 2)),
        Dropout(0.5),

        Conv2D(128, (3, 3), activation='relu', padding='same'),
        BatchNormalization(),
        Conv2D(128, (3, 3), activation='relu', padding='same'),
        BatchNormalization(),
        MaxPooling2D(pool_size=(2, 2)),
        Dropout(0.5),

        Flatten(),
        Dense(128, activation='relu'),
        BatchNormalization(),
        Dropout(0.5),
        Dense(10, activation='softmax')
    ])
    return model

4. Инициализируйте TPU и скомпилируйте модель

tpu = tf.distribute.cluster_resolver.TPUClusterResolver.connect()
tpu_strategy = tf.distribute.experimental.TPUStrategy(tpu)
with tpu_strategy.scope():
    model = create_model()
    model.compile(optimizer=Adam(learning_rate=0.001),
                  loss='categorical_crossentropy',
                  metrics=['accuracy'])

5. Обучите модель

import time

start_time = time.time()

history = model.fit(x_train, y_train,
                    batch_size=64 * tpu_strategy.num_replicas_in_sync,
                    epochs=50,
                    validation_data=(x_test, y_test),
                    verbose=2)

end_time = time.time()

training_time = end_time - start_time
print(f"Training time: {training_time:.2f} seconds")

Ключевое изменение заключается в использовании batch_size=64 * strategy.num_replicas_in_sync вместо batch_size=64. Это гарантирует, что TPU используется во время обучения. Значение strategy.num_replicas_in_sync представляет количество реплик (ядер), доступных на TPU.

6. Оцените производительность модели

test_loss, test_accuracy = model.evaluate(x_test, y_test)
print(f"Test loss: {test_loss:.4f}, Test accuracy: {test_accuracy:.4f}")

Следуя описанным выше шагам, вы можете обучить простую модель CNN для классификации изображений, используя набор данных CIFAR-10 в ноутбуке Kaggle с ускорителями GPU и TPU. Код здесь.

Сравнение производительности: ноутбуки Kaggle и Colab и GitPod

Когда вы обучаете свою нейронную сеть на Kaggle Notebooks, важно документировать время обучения для сравнения производительности. Вы можете использовать встроенный в Python модуль time для измерения продолжительности обучения.

import time

start_time = time.time()
# Train your neural network here
end_time = time.time()

training_time = end_time - start_time
print(f"Training time: {training_time:.2f} seconds")

Чтобы оценить улучшение производительности Kaggle Notebooks по сравнению с Colab и GitPod, учтите следующее:

  1. Графический процессор: Kaggle предоставляет графические процессоры NVIDIA Tesla P100, которые быстрее, чем графические процессоры NVIDIA K80/T4, доступные в Colab. GitPod не предлагает бесплатный доступ к GPU.
  2. TPU: и Kaggle, и Colab предлагают бесплатный доступ к TPU, но Kaggle предоставляет ускорители TPU v3–8, более мощные, чем ускорители Colab TPU v2/v3. GitPod не предлагает бесплатный доступ к TPU.
  3. Предварительно настроенная среда: Kaggle и Colab предлагают предварительно настроенные среды, в то время как GitPod требует ручной настройки.

Учитывая эти факторы, ноутбуки Kaggle обычно обеспечивают более высокую производительность для обучения нейронных сетей по сравнению с Colab и GitPod. Имейте в виду, что фактические улучшения производительности могут различаться в зависимости от вашего конкретного варианта использования и доступности ресурсов в часы пик.

Заключение

Kaggle Notebook предлагает значительные преимущества при обучении нейронных сетей благодаря бесплатному доступу к мощным ускорителям GPU и TPU, предварительно настроенным средам и сохранению хранилища. Следуя этому пошаговому руководству, вы сможете легко настроить блокнот Kaggle с поддержкой GPU и TPU для обучения моделей нейронных сетей. Более того, преимущества Kaggle в производительности по сравнению с Colab и GitPod делают его идеальным выбором для ученых, занимающихся данными, которые хотят ускорить процессы обучения своих нейронных сетей.

Документация: https://www.kaggle.com/docs/tpu