Pytorch - одна из ведущих сред глубокого обучения, она широко используется как в исследованиях, так и в промышленности благодаря простоте использования, богатым функциям и надежности.

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

Для решения этой проблемы разрабатываются новые библиотеки и фреймворки, цель которых - улучшить общий опыт разработки сложных моделей глубокого обучения.

Мы поговорим о двух из этих фреймворков, их можно использовать отдельно с Pytorch или объединить вместе для быстрого прототипирования и разработки новых моделей:

  • Pytorch-lightning: предоставляет множество удобных функций и позволяет получить тот же результат с меньшим объемом кода, добавляя уровень абстракции в обычный код PyTorch.
  • Ray-tune: библиотека настройки гиперпараметров для расширенных стратегий настройки в любом масштабе.

Разработка модели: Pytorch Lightning

Pytorch Lightning - это фреймворк, целью которого является улучшение Pytorch за счет ускорения разработки моделей. «Тратьте больше времени на исследования, меньше на разработку»

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

Фреймворк предлагает широкий спектр функций, но эти преимущества имеют определенную цену: чтобы использовать фреймворк, вам необходимо разработать свою модель в соответствии с заданной структурой:

class MyModel(pl.LightningModule):
def__init__(self)
def forward(self, x)
def configure_optimizers(self)
def training_step(self, train_batch, batch_idx)
def training_epoch_end(self, outs)
def validation_step(self, val_batch, batch_idx)
def validation_epoch_end(self, outs)
  • Нападающий: То же, что и ванильный Pytorch
  • Этап обучения / проверки: получает входные данные от загрузчика данных, выполняет расчет потерь, вычисляет метрики и регистрирует их.
  • Эпоха обучения / проверки (необязательно): получает выходные данные всех шагов в течение эпохи, чтобы рассчитать метрики для всей эпохи.
  • Configure_optimizers: должен возвращать оптимизатор и объект планировщика для вашей модели.

После того, как вы реорганизовали свою модель в эту новую структуру и упаковали данные в загрузчики данных Pytorch, вы готовы к работе.

Существует множество различных функций, которые призваны облегчить вашу жизнь, поскольку фреймворк хорошо документирован, я перечислю только те, которые я использую постоянно:

  • Автоматическое ведение журнала на Tensorboard: с помощью простого вызова функции вы можете зарегистрировать любую метрику и получить визуализацию на Tensorboard.
  • Распределенное обучение, поддержка GPU / TPU: обучение можно разделить на разные узлы с помощью простого аргумента командной строки, поддерживая TPU и GPU.
  • Оценка для нескольких загрузчиков данных. Вы можете разделить данные проверки или тестирования на несколько загрузчиков данных (по одному для каждого языка, например, в NLP) и оценить производительность по отдельности.
  • Простое установление контрольных точек и ранняя остановка. Контрольные точки создаются путем отслеживания любых зарегистрированных показателей.
  • Отсечение градиента. Чтобы избежать "взрывающихся градиентов", которые могут нарушить тренировку, вы можете обрезать градиент с помощью простого параметра в трейнере.
  • Оценка интервала набора проверки: простой, но эффективный трюк, особенно с большими наборами данных: оценивая набор проверки более одного раза за эпоху, вы лучше понимаете производительность своей модели и можете выполнять итерацию быстрее. . Он также может предоставить вам лучшую модель, если вы используете ее с контрольными точками.

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

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

Имейте в виду, что фреймворк молодой и все еще находится в активной разработке, и новые функции добавляются регулярно.

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

Настройка гиперпараметров: Ray Tune

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

Tune - это библиотека настройки гиперпараметров, которая является частью более крупной структуры Ray, которая помогает создавать и обслуживать распределенные приложения.

Конкретно Tune позволяет вам выбрать алгоритм поиска, который будет использоваться для выбора определенного набора гиперпараметров для проверки на каждой итерации. Доступные алгоритмы включают, в частности:

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

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

Tune предлагает несколько разных планировщиков, но в основном они представляют собой вариации двух методов:

  • HyperBand, описанный в этой статье, основная идея состоит в том, чтобы объединить байесовскую оптимизацию с ранней остановкой.
  • Обучение на основе населения, разработанное OpenAI. В этом блоге они описывают, как эта техника значительно повысила эффективность их моделей обучения с глубоким подкреплением.

Tune хорошо работает с различными фреймворками, для Pytorch и Pytorch-lightning предоставляются учебные пособия, а в их галерее вы можете найти примеры кода для других фреймворков, таких как Keras.

Заключение

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

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