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

Последние пару месяцев мы усердно работали над тонкой настройкой нашего API, полировкой наших документов, записью руководств, и, наконец, пришло время поделиться с вами всеми версиями PyTorch Lightning версии 1.0.0. Хотите молниеносный ответ на масштабирование моделей в облаке? продолжить чтение.

Молниеносная ДНК

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

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

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

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

Второй ключевой принцип PyTorch Lightning заключается в том, что аппаратное обеспечение и «научный» код должны быть разделены. Lightning эволюционировал, чтобы использовать массовые вычисления в масштабе, не открывая для пользователя какие-либо из этих абстракций. Выполняя это разделение, вы получаете новые возможности, которые были невозможны до , такие как отладка вашего 512 Работа графического процессора на вашем ноутбуке с использованием ЦП без необходимости изменения кода.

Наконец, Lightning был создан с целью стать фреймворком, управляемым сообществом.

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

Что нового в 1.0.0

Lightning 1.0.0 сообщает о стабильном и окончательном API.

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

Исследования и производство

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

Мы рады сообщить, что Lightning 1.0.0 теперь также, что упрощает масштабное развертывание этих моделей. Весь код Lightning гарантирует, что все можно легко экспортировать в onnx и torchscript.

Таким образом, это означает, что ваша команда специалистов по обработке данных, исследователей и т. Д. Теперь может БЫТЬ людьми, которые также запускают модели в производство. Им не нужны большие команды инженеров по машинному обучению.

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

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

Подпишитесь на ранний доступ здесь.

Веб-сайт

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

Метрики

pytorch_lightning.metrics - это API метрик, созданный для простой разработки и использования метрик в PyTorch и PyTorch Lightning. Обновленный API предоставляет встроенный метод для вычисления метрики для нескольких графических процессоров (процессов) для каждого шага, в то же время сохраняя статистику, которая позволяет вам вычислять метрику в конце эпохи, не беспокоясь о каких-либо сложностей, связанных с распределенным сервером.

Он тщательно протестирован для всех крайних случаев и включает постоянно растущий список распространенных метрических реализаций, таких как Accuracy, Precision, Recall, Fbeta, MeanSquaredError и другие.

Чтобы реализовать свою собственную метрику, просто создайте подкласс базового Metric класса и реализуйте методы __init__(), update() и compute(). Все, что вам нужно сделать, это правильно вызвать add_state(), чтобы реализовать настраиваемую метрику с DDP. reset() вызывается для переменных состояния метрики, добавленных с помощью add_state().

Ручная и автоматическая оптимизация

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

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

Сначала отключите автоматическую оптимизацию:

trainer = Trainer(automatic_optimization=False)

Теперь у вас есть петля для поезда!

логирование

Lightning делает интеграцию с регистраторами очень простой - просто вызовите log() method в любом месте вашего LightningModule, и он отправит зарегистрированное количество на выбранный вами регистратор. По умолчанию мы используем Tensorboard, но вы можете выбрать любой поддерживаемый логгер.

В зависимости от того, откуда вызывается .log(), Lightning автоматически определяет, когда должно происходить ведение журнала (на каждом шаге или в каждую эпоху), но, конечно, вы можете изменить поведение по умолчанию, вручную используя параметры on_step и on_epoch. Установка on_epoch=True будет накапливать ваши зарегистрированные значения за всю эпоху обучения.

Поток данных

Мы не рекомендовали EvalResult и TrainResult в пользу упрощения потока данных и отделения журнала от данных в циклах обучения и проверки.

Каждый цикл (обучение, проверка, тест) имеет три крючка, которые вы можете реализовать:

  • x_step
  • x_step_end
  • x_epoch_end

Чтобы проиллюстрировать потоки данных, мы воспользуемся обучающим циклом (например: x = обучение).

outs = []
for batch in data:
  out = training_step(batch)
  outs.append(out)
training_epoch_end(outs)

Все, что вы вернете в training_step, можно использовать в качестве входных данных для training_epoch_end.

То же самое касается шагов проверки и тестирования: все, что возвращается в validation_step или test_step, можно использовать в качестве входных данных для {validation/test}_step_end или {validation/test}_epoch_end. Если вы используете распределенные режимы DP или DDP2 (например, разделяете пакет по графическим процессорам), используйте x_step_end для агрегирования вручную (или не применяйте его, чтобы позволить Lightning автоматически агрегировать за вас).

Контрольные точки

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

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

  1. Рассчитайте любую метрику или другую величину, которую вы хотите отслеживать, например потерю проверки.
  2. Зарегистрируйте количество, используя метод thelog() с таким ключом, как val_loss.
  3. Инициализируйте обратный вызов ModelCheckpoint и установите монитор как ключ к вашему количеству.
  4. Передайте обратный вызов checkpoint_callback Trainer flag.

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

Спасибо

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

Хотите узнать больше о молнии? Зайдите на наш веб-сайт, прочтите документацию или присоединитесь к нашей первой в истории виртуальной встрече - Спроси меня о чем-нибудь с Уильямом Фальконом , создатель Lightning! Встреча состоится 21 октября 2020 года в 13:00 по восточному стандартному времени, так что принесите свой обед или ужин и приходите узнать больше о новых функциях, сетке или обо всем, что вы всегда хотели знать, но никогда не спрашивали. Подпишите здесь".