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.

  1. Этот скрипт показывает, как обучить простую CNN по MNIST с помощью ванильного PyTorch.
  2. Этот сценарий показывает, как масштабировать предыдущий сценарий, чтобы включить обучение GPU и нескольких GPU с использованием LightningLite.
  3. Этот сценарий показывает вам, как подготовиться к переходу из LightningLite в LightningModule.
  4. Этот сценарий показывает вам результат преобразования в LightningModule и, наконец, все преимущества, которые вы получаете от Lightning.
  5. Этот скрипт показывает, как извлечь компоненты, связанные с данными, в LightningDataModule.

Найдите специальную запись в блоге о LightningLite здесь, а также ознакомьтесь с документацией.



Учебники по молнии

Документы по Lightning 1.5 являются новыми и улучшенными и содержат новый курс Университета Амстердама (UvA), который знакомит вас с основными концепциями современного глубокого обучения и знакомит вас с основными функциями и экосистемой Lightning.

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

Найдите сопутствующую запись в блоге, чтобы узнать больше.

Вскоре 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, лежащие в основе обучения модели, невидимыми.