Lightning 1.5 представляет отказоустойчивое обучение, LightningLite, настройку циклов, учебные пособия по Lightning, RichProgressBar, LightningCLI V2 и многие другие интересные функции, о которых будет объявлено позже.
PyTorch Lightning v1.5 знаменует собой значительный скачок в надежности для поддержки все более сложных требований ведущих организаций ИИ и престижных исследовательских лабораторий, которые полагаются на Lightning для разработки и развертывания ИИ в масштабе.
Амбиции PyTorch Lightning никогда не были выше, поскольку мы стремимся стать самой простой и гибкой платформой для ускорения любых исследований глубокого обучения в производство.
Следуя этому видению, выпуск Lightning v1.5 добился прогресса в нескольких важных направлениях: повышенная стабильность, улучшенная адаптация, расширенная гибкость, улучшение качества жизни и экспериментальные функции SOTA.
Найдите полные примечания к выпуску здесь.
Улучшенная Sтаблица
Отказоустойчивое обучение на уровне пакетов
Традиционно обучающие фреймворки сохраняют контрольные точки в конце эпохи или после каждых N шагов для восстановления в случае случайного сбоя.
Lightning 1.5 еще больше расширяет эту концепцию, вводя отказоустойчивый механизм обучения на уровне пакетов. Когда эта функция включена и возникает непредвиденный сбой, пользователи Lightning могут возобновить неудачное обучение из той же неудачной партии.
Пользователю не нужно ничего делать, кроме повторного запуска скрипта🤯 ! В будущем это позволит использовать Elastic Training с Lightning.
Подробнее в документации.
Поддержка BFloat16
В PyTorch 1.10 представлена torch.bloat16
поддержка как ЦП, так и графических процессоров, что обеспечивает более стабильное обучение по сравнению со встроенной автоматической смешанной точностью (AMP) с torch.float16.
Чтобы включить это в PyTorch Lightning, просто сделайте следующее:
Улучшенная регистрация
API стратегии тренера
PyTorch Lightning в версии 1.5 представляет новый флаг strategy
, обеспечивающий более чистый распределенный API обучения, который также поддерживает accelerator discovery
!
accelerator
относится к оборудованию:cpu
,gpu
,tpu
,ipu
иauto
strategy
относится к тому, как использовать оборудование:dp
,ddp
,ddp_spawn
,deepspeed
и т. д.devices
указывает, сколько устройств типаaccelerator
нужно использовать.
Передача стратегий обучения (например,
"ddp"
) вaccelerator
устарела в версии 1.5.0 и будет удалена в версии 1.7.0. Используйте аргументstrategy
, как описано выше.TrainingTypePlugin
будет переименован вStrategyPlugin
для версии 1.6.
PyTorch Lightning включает реестр, который содержит информацию о стратегиях и позволяет регистрировать новые пользовательские стратегии.
Кроме того, вы можете передать свои собственные зарегистрированные плагины типа обучения в аргумент strategy
.
Молния Лайт | Ступенька к молнии
Вы хотите сохранить полный контроль над своим кодом PyTorch, но столкнулись с проблемами, связанными с ускорением на ЦП, графических процессорах и TPU, добавлением поддержки нескольких узлов или смешанной точностью? Тогда Lite — правильный выбор для вас!
Вот как Lightning Lite упрощает добавление поддержки обучения с несколькими графическими процессорами. См. следующий 30-секундныйанимированный рисунок, показывающий, как масштабировать код, сохраняя при этом контроль над циклом обучения.
После использования LightningLite вы сможете выполнять автоматическое обнаружение ускорителей и устройств и использовать один и тот же код с GPU или TPU с любыми подключаемыми модулями, такими как DeepSpeed. Ноль 3.
Ниже у нас есть 5 примеров MNIST, показывающих, как постепенно преобразовать PyTorch в PyTorch Lightning с помощью LightningLite
.
- Этот скрипт показывает, как обучить простую CNN по MNIST с помощью ванильного PyTorch.
- Этот сценарий показывает, как масштабировать предыдущий сценарий, чтобы включить обучение GPU и нескольких GPU с использованием
LightningLite
. - Этот сценарий показывает вам, как подготовиться к переходу из
LightningLite
вLightningModule
. - Этот сценарий показывает вам результат преобразования в
LightningModule
и, наконец, все преимущества, которые вы получаете от Lightning. - Этот скрипт показывает, как извлечь компоненты, связанные с данными, в
LightningDataModule
.
Найдите специальную запись в блоге о LightningLite здесь, а также ознакомьтесь с документацией.
Учебники по молнии
Документы по Lightning 1.5 являются новыми и улучшенными и содержат новый курс Университета Амстердама (UvA), который знакомит вас с основными концепциями современного глубокого обучения и знакомит вас с основными функциями и экосистемой Lightning.
Курс знакомит с основными концепциями современного глубокого обучения и знакомит вас с основными функциями и экосистемой Lightning.
- Урок 1: Введение в PyTorch
- Урок 2: Функции активации
- Урок 3: Инициализация и оптимизация
- Урок 4: Начало, ResNet и DenseNet
- Урок 5: Трансформеры и многоголовое внимание
- Урок 6: Основы графовых нейронных сетей
- Урок 7: Генеративные модели на основе глубокой энергии
- Урок 8: Глубокие автоэнкодеры
- Урок 9: Нормализация потоков для моделирования изображений
- Урок 10: Авторегрессионное моделирование изображений
- Урок 11: Трансформеры зрения
- Урок 12: Метаобучение — научиться учиться
- Урок 13: Контрастное обучение с самоконтролем с помощью SimCLR
Найдите сопутствующую запись в блоге, чтобы узнать больше.
Вскоре PyTorch Lightning проведет спринт сообщества Lightning Tutorial, чтобы сотрудничать с академиками со всего мира, чтобы улучшить их учебную программу глубокого обучения за счет интеграции с новыми возможностями обучения Lightning. Вот проблема отслеживания текущего спринта и связанной с ним Формы Google для применения.
LightningCLI V2, отсутствие шаблонов для воспроизводимого ИИ
Выполнение нетривиальных экспериментов часто требует настройки многих различных аргументов тренажера и модели, таких как скорость обучения, размеры пакетов, количество эпох, пути данных, разделение данных, количество графических процессоров и т. эксперименты запускаются из командной строки.
Внедрение инструментов командной строки с использованием таких библиотек, как стандартная библиотека Python argparse
, для управления сотнями возможных конфигураций тренажеров, данных и моделей — это огромный источник следующего шаблонного шаблона:
Это часто приводит к тому, что базовые конфигурации жестко запрограммированы и недоступны для экспериментов и повторного использования. Кроме того, большая часть конфигурации дублируется в сигнатурах и аргументах по умолчанию, а также в строках документации и сообщениях справки по аргументам.
Вот все, что вам нужно, чтобы начать использовать LightningCLI
:
В Lightning v1.5 мы внедрили новую нотацию, позволяющую легко создавать экземпляры объектов непосредственно из командной строки. Это значительно улучшает работу с командной строкой, поскольку вы можете настроить практически любой аспект вашего обучения, ссылаясь только на имена классов.
И это работает с optimizers
и lr_schedulers
А также с LightnigModule
и DataModule
,
Наконец, вы можете зарегистрировать свои собственные компоненты в реестрах LightningCLI
следующим образом:
Для получения дополнительной информации см. специальный пост в блоге здесь и соответствующую документацию.
Расширенная гибкость
Настройка цикла
PyTorch Lightning был создан, чтобы делать за вас тяжелую работу. Lightning Trainer автоматизирует всю механику процедур обучения, проверки и тестирования. Чтобы создать свою модель, все, что вам нужно сделать, это определить архитектуру, а также этапы обучения, проверки и тестирования, и Lightning обязательно вызовет нужные вещи в нужное время.
Внутри Lightning Trainer полагается на серию вложенных циклов для надлежащего проведения оптимизации градиентного спуска, которая применима к более чем 90% случаев использования машинного обучения. Несмотря на то, что Lightning предоставляет сотни функций, за кулисами это выглядит так:
Однако некоторые новые варианты использования в исследованиях, такие как: метаобучение, активное обучение, перекрестная проверка, системы рекомендаций и т. д., требуют другой структуры цикла.
Чтобы решить эту проблему, команда Lightning реализовала общий цикл while в виде класса Python, Lightning Loop. Вот его псевдокод, а его полную реализацию можно найти там.
Использование циклов имеет несколько преимуществ:
- Вы можете заменить, подклассировать или обернуть любые циклы в Lightning, чтобы настроить их внутреннюю работу в соответствии с вашими потребностями. Это позволяет проводить любые исследования с помощью Lightning.
- Циклы стандартизированы, и каждый цикл может быть изолирован от своего родителя и потомков. С простым циклом вы можете получить больше кода, но при работе с сотнями функций эта структура является ключом к масштабированию при сохранении высокого уровня гибкости.
- Цикл может отслеживать свое состояние и сохранять его в контрольной точке модели. Это используется с отказоустойчивым обучением для включения автоматического перезапуска.
Найдите специальный пост в блоге здесь и его документацию. В сообщении блога вы узнаете, как сообщество создало пользовательские циклы для Активного обучения, Перекрестной проверки, Выход на этап обучения LightningModule.
Плагин CheckpointIO
В рамках нашей приверженности расширяемости мы абстрагировали логику контрольных точек в плагин CheckpointIO
. Это позволяет пользователям адаптировать Lightning к своей инфраструктуре. Найдите документацию здесь.
Улучшение качества жизни
Богатая полоса прогресса
Мы рады сообщить, что Lightning теперь включает поддержку RichProgressBar и RichModelSummary, чтобы сделать процесс обучения командной строки более привлекательным.
Rich — это библиотека Python для богатого текста и красивого форматирования в терминале.
Все, что вам нужно сделать, это передать обратный вызов RichProgressBar
тренеру, а Lightning сделает все остальное за вас!
Оба обратных вызова легко расширяемы, что позволяет пользователям настраивать отображение показателей индикатора выполнения и сводной таблицы модели. Наконец-то вы можете настроить его по своему вкусу. Вот наша тема Green Is Good
.
Экспериментальные функции SOTA
Инициировать метаконтекст
Прямо сейчас идет гонка за создание все более и более крупных моделей. Однако более крупные модели не подходят для одного устройства. Текущий подход к масштабированию до триллиона параметров заключается в разбиении модели, например, на фрагменты ее параметров, активаций и состояний оптимизатора, как описано в статье Zero-3. Тем не менее, создание экземпляров больших моделей по-прежнему сложно, так как для выполнения сегментирования требуется, чтобы все устройства были доступны и подключены.
Чтобы решить эту проблему, в PyTorch 1.10 появились метатензоры. Метатензоры похожи на обычные тензоры, но они не несут данных, поэтому нет риска ошибки OOMError.
Используя метатензор, можно создать экземпляр метамодели, а затем материализовать модель после подключения всех устройств.
PyTorch Lightning развивает эту идею, представляя утилиту ainit_meta_context
, где модель может быть создана на метаустройстве без изменения кода 🤯. Код можно найти здесь или здесь.
Это позволяет масштабировать minGPT до 45 миллиардов параметров с минимальными изменениями кода. Подробнее здесь.
Межпакетный параллелизм
Межпакетный параллелизм позволяет скрыть задержку копирования входных пакетов с хоста на устройство за вычислительно интенсивными операциями следующим образом:
Связанное с этим ускорение может быть очень важным при обучении большого механизма рекомендаций с помощью PyTorch Lightning. Более подробная информация будет опубликована в ближайшее время.
Включите эту экспериментальную функцию следующим образом:
Следующие шаги
Команда Lightning как никогда стремится предоставить наилучшие возможности для всех, кто занимается оптимизацией с помощью PyTorch. Поскольку PyTorch Lightning API уже является стабильным, критические изменения будут минимальными.
Если вы хотите помочь в этих усилиях, найдите нас в Slack!
Позвольте представить вам Grid.ai, созданный создателями PyTorch Lightning. Наша платформа позволяет масштабировать обучение модели, не беспокоясь об инфраструктуре, подобно тому, как Lightning автоматизирует обучение.
Вы можете начать работу с Grid.ai бесплатно, имея только учетную запись GitHub или Google.
Grid.AI позволяет масштабировать обучение с вашего ноутбука на облако без необходимости изменять ни одной строки кода. Хотя Grid поддерживает все классические фреймворки машинного обучения, такие как TensorFlow, Keras и PyTorch, вы можете использовать любые библиотеки по своему желанию. Использование функций Lightning, таких как Ранняя остановка, Интегрированное ведение журнала, Автоматическая контрольная точка и CLI, позволяет сделать традиционные MLOps, лежащие в основе обучения модели, невидимыми.