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

Что такое PyTorch Lightning?

PyTorch Lighting - это легкая оболочка PyTorch для высокопроизводительных исследований искусственного интеллекта.

Проще говоря, PyTorch Lightning - это просто организованный код PyTorch.

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

Потеря плиты котла Философия конструкции PyTorch Lightning: объяснение

1. Автономные модели и данные

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

Пример графа вычислений PyTorch из документации PyTorch AutoGrad

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

Основная философия проектирования PyTorch Lightning заключается в том, что все компоненты и код, связанные с воспроизводимостью, должны быть автономными. Хороший тест, чтобы увидеть, насколько самодостаточна ваша модель, - это задать себе этот вопрос: «Может ли кто-нибудь загрузить этот файл в трейнер, ничего не зная о внутреннем устройстве?»

Модуль Lightning содержит все параметры инициализации по умолчанию, необходимые для воспроизводимости.

2. Модульный код

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

Визуализированная модуляризация кода глубокого обучения с освещением

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

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

3. Уменьшите плиту котла.

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

Lightning Trainer стандартизирует шаблон с лучшими практиками, чтобы уменьшить ~ 80% наиболее распространенных ошибок глубокого обучения.

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

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

4. Максимальная гибкость

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

Пример переопределения Auto Encoder training_step, который демонстрирует полный доступ к базовому шаблону при необходимости.

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

От воспроизводимых исследований к производственному глубокому обучению

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

Если вы хотите быстро приступить к работе, Lightning также предоставляет пример реализации общих задач глубокого обучения от суммирования текста до обнаружения объектов как часть репозитория PyTorch Lightning Flash.

PyTorchLightning / молния-вспышка

Прочтите наш блог о запуске Pip / conda pip install lightning-flash -U Pip from source pip install… github.com

Обучение производственному масштабу с помощью Grid

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

С Grid-поездами вы можете взять сценарий PyTorch Lightning, масштабировать и отслеживать сотни экспериментов следующим образом.

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

Выводы по PyTorch Lightning

В этом посте показано, как основные принципы проектирования Lightning обеспечивают более воспроизводимый и готовый к работе код глубокого обучения.

  1. Код Lightning легче читать, потому что инженерный код абстрагируется, а общие функции, такие как training_steps, process_data, стандартизированы. Lightning выполняет сложные инженерные работы, предотвращая распространенные ошибки, обеспечивая при этом доступ ко всей гибкости PyTorch, когда это необходимо.
  2. Модули Lightning не зависят от оборудования; если ваш код работает на CPU, он будет работать на GPU, TPU и кластерах, не требуя накопления градиента или управления рангом процесса. Вы даже можете реализовать свои собственные ускорители.
  3. Каждый выпуск тщательно тестируется с каждым новым PR для каждой поддерживаемой версии PyTorch и Python, ОС, нескольких графических процессоров и даже TPU. Lightning имеет десятки интеграций с популярными инструментами машинного обучения, такими как TensorBoard, CometML и Neptune.
  4. Grid позволяет масштабировать производственное обучение кода PyTorch Lightning с ноутбука в облако без необходимости изменять ни одной строчки кода.

Статья написана Ари Борнстайном и Шоном Нарентираном.

Примечание редактора: узнайте больше о PyTorch Lightning в выступлении Уильяма Фалкона на ODSC East 2021, От исследований к производству, минус шаблон здесь!