Автор: Ритика Дхиман, Габриэль Нг

Начиная

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

Шаблон

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

Обзор

PyTorch Lightning — это легкая оболочка PyTorch для высокопроизводительных исследований искусственного интеллекта, целью которой является абстрагирование шаблона глубокого обучения и деталей обучения. Он структурирует ваш код, что делает исследования ИИ масштабируемыми и быстрыми для повторения. Он возлагает на вас основную логику обучения и проверки и автоматизирует все остальное. В одну строку…

"Уделяйте больше времени исследованиям, а не разработкам"

Молния была создана из доктора философии. Исследования ИИ в NYU CILVR и Facebook AI Research. Простой интерфейс предоставляет профессиональным производственным группам и новичкам доступ к новейшим передовым технологиям, разработанным сообществом PyTorch Lightning.

Иллюстрация того, как этот инструмент полезен в производстве

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

Обработка данных

Мы демонстрируем, как PyTorch Lightning может быть полезен в производственной системе машинного обучения, на примерах из сценария потоковой передачи фильмов. Ниже приведен пример набора данных, используемого для этого сценария, где userId, movieId, рейтинг и временная метка относятся к подписчикам, фильмам, пользовательским обзорам фильмов и времени, когда пользователь поставил оценку соответственно.

Для каждого пользователя мы берем самые ранние 80% (относительно метки времени) их оценок в качестве обучающих данных, а остальные данные используются для проверки.

Создание набора данных Torch

Чтобы использовать наши данные для обучения модели PyTorch, мы должны превратить данные в объект набора данных PyTorch. Мы делаем это, используя приведенный ниже код. Мы передаем наш Pandas DataFrame при создании экземпляра объекта, и __getitem__ используется для получения одной записи из DataFrame.

Модель PyTorch

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

Модель PyTorch Lightning

Чтобы обучить нашу модель с помощью фреймворка PyTorch Lightning, мы должны добавить код модели, выполнив следующие шаги.

  • Сначала мы устанавливаем и импортируем PyTorch Lightning, используя «pip install pytorch_lightning» и «import pytorch_lightning as pl» соответственно.
  • Класс модели должен наследовать PyTorch Lightning LightningModule вместо суперкласса nn.Module.

  • Затем мы добавляем метод класса «configure_optimizer», который сообщает тренеру PyTorch Lightning (подробнее об этом позже), какой оптимизатор использовать во время обучения модели. В этом случае мы используем оптимизатор Adam.

  • Затем добавляется метод класса «training_step», чтобы указать, что происходит на этапе обучения. Этот метод принимает два входных параметра; пакет и пакет_idx. Пакет содержит обучающие экземпляры как с функциями, так и с метками. Затем мы используем модель для прогнозирования партии, рассчитываем потери с использованием среднеквадратичной ошибки и возвращаем потери.

  • Мы также добавляем метод класса «validation_step», который автоматически указывает, что модель находится в режиме оценки.

  • Наконец, для модели добавляются методы класса «train_dataloader» и «val_dataloader» для загрузки своих данных. Они используют созданный ранее класс Dataset и PyTorch DataLoader. Поскольку мы выполняем матричную факторизацию, размер_пакета — это весь набор данных.

После выполнения предыдущих шагов мы можем создать экземпляр объекта PyTorch Lightning Trainer и нашей модели. Затем мы можем вызвать метод подгонки Trainer для модели.

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

Ведение журнала

Ведение журнала полезно для производственной системы машинного обучения, поскольку можно отслеживать и визуализировать производительность новой модели (в данном случае среднеквадратичную ошибку) как при обучении, так и при оценке. Это позволяет более тщательно сравнить новую модель и развернутую модель, чтобы увидеть, превосходит ли новая модель соответствующие показатели. Чтобы регистрировать метрики в TensorBoard, мы импортируем TensorBoardLogger, используя «from pytorch_lightning.loggers import TensorBoardLogger».

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

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

Чтобы создать TensorBoard на ноутбуке Jupyter, мы запускаем следующие команды, чтобы получить визуализацию TensorBoard ниже.

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

Профилирование

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

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

Профилировщик PyTorch показывает использование устройства (в данном случае ЦП) и время работы на устройстве. Этот профилировщик можно использовать, передав «PyTorch» в качестве профилировщика.

Сильные стороны

  • PyTorch Lightning заботится о многих мелких деталях обучения машинному обучению, таких как перемещение данных в графический процессор или пошаговое выполнение оптимизатора. Это помогает предотвратить человеческие ошибки во время разработки, ускоряя проекты.
  • Платформа также позволяет добавлять множество дополнительных полезных инструментов, таких как регистраторы и профилировщики, которые упрощают изучение характеристик модели и ее обучение. Есть много других полезных инструментов, таких как автоматический поиск скорости обучения и сокращение.

Ограничения

  • Как видно из примера использования инструмента, код обучения модели и загрузки данных должен быть написан несколько иначе, чем обычно. Хотя это может не быть проблемой при разработке моделей в PyTorch Lightning с нуля, попытка миграции больших кодовых баз машинного обучения может оказаться сложной задачей.
  • Кроме того, документация, объясняющая, как использовать инструмент, может быть немного скудной или расплывчатой ​​для некоторых функций. Это усложняет понимание того, правильно ли реализована функция, и отладку ошибок при их возникновении.

Заключение

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