Будем честны: обучение модели машинного обучения требует много времени, несмотря даже на постоянно растущую вычислительную мощность компьютеров. Даже у самых тривиальных моделей больше миллиона параметров. В более масштабных проектах количество параметров может насчитывать миллиарды. У GPT-3, например, таких параметров 175 миллиардов. Так что обучать модели приходится днями, если не неделями. Будучи дата-сайентистом, неплохо бы было следить за различными показателями модели в процессе обучения, чтобы знать, учится ли она так, как мы хотели. Но постоянно сидеть у компьютера и следить за показателями нерационально. Было бы круто, если бы все данные мы получали...  на телефон!  

Вспомните, как вы оставляли свою модель обучаться и уходили на пару часов. А когда возвращались, обнаруживали, что весь процесс крашнулся на полпути. Это пустая трата времени; еще и полнейшее разочарование. Поскольку у большинства людей нет возможности обучать модели машинного обучения на локальных машинах, они предпочитают облачные сервисы: GCP, Google Colab, AWS, Azure и так далее. Платить этим сервисам нужно за конкретное время, в течение которого вы пользовались облаком. Получается, даже если модель выйдет из строя в процессе обучения, вы должны будете заплатить за все время — в том числе, за время простоя. А что если модель уведомит вас, если что-то пойдет не так? Платить лишнего не придется.

TensorDash

TensorDash — это бесплатное приложение с открытым исходным кодом, которое позволяет отслеживать модели машинного обучения удаленно. TensorDash представляет все показатели в виде подробных графиков. Приложение предупредит вас, когда модель закончит обучаться или крашнется. TensorDash поддерживает все основные библиотеки машинного обучения: TensorFlow, Pytorch, Keras, Fastai и так далее.

Теперь не придется постоянно сидеть за компом и ждать, когда же модель закончится учиться. С TensorDash это можно делать удаленно.

Как установить TensorDash?

  1. Скачайте TensorDash из Play Market. Поддержку iOS пока не завезли, но обещают сделать это в скором времени.
  2. Создайте аккаунт.
  3. Установите python-библиотеку TensorDash с помощью команды pip install tensor-dash.

Поддержка Keras

Удаленный мониторинг можно осуществить и с Keras и tf.keras. Работать все это будет через функции обратного вызова. Импортируйте Tensordash. Определите объект TensorDash с такими параметрами: название модели, электронная почта, привязанная к вашей учетной записи, и пароль. Передайте объект TensorDash через обратные вызовы в функцию fit(). Чтобы получать уведомление в случае сбоя модели, добавьте функцию fit() в раздел обработки исключений, а в исключении вызовите метод sendCrash().

Пример использования TensorDash для Keras/tf.keras:

from tensordash.tensordash import Tensordash

histories = Tensordash(
    ModelName = '{YOUR_MODEL_NAME}',
    email = '{YOUR_EMAIL_ID}',
    password = '{YOUR PASSWORD}')
    
try:
    model.fit(
    X_train,
    y_train,
    epochs = epochs,
    validation_data = validation_data,
    batch_size = batch_size,
    callbacks = [histories])
except:
    histories.sendCrash()

Поддержка PyTorch

Импортируйте Torchdash из библиотеки Tensordash. Создайте объект Torchdash, в качестве параметров укажите название модели, электронную почту и пароль. Используйте метод sendLoss() объекта внутри цикла обучения, чтобы метрики отправлялись в вашу учетную запись. Чтобы получать уведомления в случае сбоя модели, добавьте цикл обучения в раздел «Обработка исключений», а в исключении вызовите метод sendCrash().

Пример использования TensorDash для PyTorch:

from tensordash.torchdash import Torchdash
   
histories = Torchdash(
    ModelName = '{YOUR_MODEL_NAME}',
    email = '{YOUR_EMAIL_ID}',
    password = '{YOUR PASSWORD}')
    
try:
    for epoch in range(epochs):
        losses = []
        for data in trainset:
            X, y = data
            net.zero_grad()
            output = net(X.view(data_shape))
            loss = F.nll_loss(output, y)
            loss.backward()
            optimizer.step()
        losses = np.asarray(losses)
        histories.sendLoss(loss = np.mean(losses), epoch = epoch, total_epochs = epochs)
    
except:
    histories.sendCrash()

Поддержка Fast.ai

Удаленный мониторинг при работе с Fast.ai тоже работает через обратные вызовы. Импортируйте Fastdash. Определите объект Fastdash, в качестве параметров задайте название модели, электронную почту и пароль. Передайте объект Fastdash через обратные вызовы в функции fit(). Чтобы получать уведомление в случае сбоя модели, добавьте функцию fit () в раздел обработки исключений, а в исключении вызовите метод sendCrash().

Пример использования TensorDash для Fast.ai:

from tensordash.fastdash import Fastdash

my_cb = Tensordash(
    ModelName = '{YOUR_MODEL_NAME}',
    email = '{YOUR_EMAIL_ID}',
    password = '{YOUR PASSWORD}')
    
try:
    learn.fit(epochs, learning_rate, callbacks = my_cb)
    
except:
    my_cb.sendCrash()

Поддержка TensorFlow

Импортируйте Customdash из библиотеки Tensordash. Создайте объект Customdash с такими параметрами: название модели, электронная почта и пароль. Используйте метод sendLoss() объекта внутри цикла обучения, чтобы отправить метрики модели в вашу учетную запись. Чтобы получать уведомления в случае сбоя модели, добавьте цикл обучения в раздел «Обработка исключений», а в исключении вызовите метод sendCrash().

Пример использования TensorDash для Fast.ai:

 from tensordash.tensordash import Customdash

histories = Customdash(
    ModelName = '{YOUR_MODEL_NAME}',
    email = '{YOUR_EMAIL_ID}',
    password = '{YOUR PASSWORD}')
    
try:
    
    for epoch in range(num_epochs):
        epoch_loss_avg = tf.keras.metrics.Mean()
        epoch_accuracy = tf.keras.metrics.SparseCategoricalAccuracy()

        for x, y in train_dataset:

            loss_value, grads = grad(model, x, y)
            optimizer.apply_gradients(zip(grads, model.trainable_variables))

            epoch_loss_avg(loss_value)
            epoch_accuracy(y, model(x, training=True))
    
        train_loss_results.append(epoch_loss_avg.result())
        train_accuracy_results.append(epoch_accuracy.result())
    
        histories.sendLoss(loss = epoch_loss_avg.result(), accuracy = epoch_accuracy.result(), epoch = epoch, total_epochs = epochs) // Добавить эту строку в цикл обучения
    
except:
    histories.sendCrash()

Если вам приходится часто работать с моделями машинного обучения, TensorDash — полезная штука. Конечно, не маст-хэв, как заявляют авторы, но приятное дополнение.

Перевод статьи: A Must-Have Tool for Every Data Scientist