предисловие
В этой статье рассказывается, как использовать PyTorch Lightning для создания эффективных и быстрых конвейеров глубокого обучения, в том числе почему важно оптимизировать конвейеры глубокого обучения, шесть способов использования PyTorch Lightning для ускорения цикла эксперимента, а также краткое описание эксперимента.
Эта статья взята из ********************************** из технического руководства по общедоступной учетной записи CV.Серия технических резюме********************************
Обратите внимание на техническое руководство по общедоступной учетной записи CV, уделив особое внимание техническому обзору компьютерного зрения, отслеживанию новейших технологий и интерпретации классических статей.
Когда Алекс Крижевский, Илья Суцкевер и Джеффри Хинтон разработали AlexNet в 2012 году, на обучение модели с 60 миллионами параметров ушло пять-шесть дней. Восемь лет спустя, в 2020 году, команда Microsoft DeepSpeed успешно обучила модель Large-Bert с 350 миллионами параметров менее чем за 44 минуты!
Девять лет спустя мы видим, что AlexNet — это лишь верхушка айсберга революции машинного обучения. Сегодня мы знаем, что многие неиспользованные потенциальные методы обучения и архитектуры моделей глубокого обучения находятся в пределах нашей досягаемости!
К сожалению, из-за масштаба данных и масштаба новых архитектур моделей глубокого обучения многие из этих достижений так же недоступны для среднего исследователя, как сочное яблоко для сборщика фруктов без лестницы. С таким количеством плодотворных архитектур моделей, висящих на дереве потенциала глубокого обучения, мы должны спросить себя: «Как нам добраться до них?»
Ответ прост: чтобы достичь этих производительных архитектур, нам нужны лестницы! Алекс Крижевский построил свою собственную лестницу, чтобы добраться до AlexNet блок за блоком, но сегодня такие решения, как PyTorch Lightning, дают вам собственную готовую лестницу — даже эскалатор!
В этой статье показано, как создавать эффективные и быстрые конвейеры глубокого обучения с помощью PyTorch Lightning, и объясняется, как эти оптимизации могут быстро опробовать исследовательские идеи, значительно ускоряя цикл экспериментов НИОКР!
-
Почему важна оптимизация конвейеров глубокого обучения
-
Шесть способов ускорить цикл экспериментов с PyTorch Lightning
-
Сводка результатов
Почему важна оптимизация конвейеров глубокого обучения
Независимо от того, проводите ли вы исследования в академических кругах или в промышленности, R&D имеет ограниченное время и ресурсы для изучения и опробования новых идей. Поскольку размер наборов данных и сложность моделей глубокого обучения продолжают расти, экспериментирование с современными моделями и методами машинного обучения становится все более сложным и трудоемким. То, как решить эти проблемы (и сделать цикл исследований и разработок более эффективным), играет решающую роль в общем успехе проекта.
Сегодня существуют различные решения для преодоления этих барьеров, такие как Grid.ai, WanDB и PyTorch Lightning. В этой статье основное внимание будет уделено PyTorch Lightning и объяснено, как с его помощью ускорить конвейеры глубокого обучения и эффективно использовать память за кулисами с минимальными изменениями кода. Используя эти решения, эксперименты можно сделать более масштабируемыми и итеративными, а количество потенциальных ошибок свести к минимуму. Внесение этих изменений сократит время, необходимое для экспериментов, а сэкономленное время можно использовать для проверки новых идей.
Шесть способов ускорить цикл экспериментов с PyTorch Lightning
Шесть способов оптимизировать конвейеры глубокого обучения:
-
Параллельная загрузка данных
-
Обучение работе с несколькими графическими процессорами
-
Тренировка смешанной точности
-
Разделенное обучение
-
Ранняя остановка
-
Оптимизация во время оценки модели и вывода
Для каждого метода мы кратко объясним, как он работает, как его реализовать, и, наконец, поделимся, если мы нашли его полезным для наших проектов!
Параллельная загрузка данных
Обычно этапы загрузки и дополнения данных становятся узкими местами в конвейере обучения.
Типичный конвейер данных состоит из следующих шагов:
-
Загрузить данные с диска
-
Создавайте случайные улучшения на лету
-
Разделите каждый образец на партии
Процессы загрузки и дополнения данных легко распараллеливаются и могут быть оптимизированы за счет использования нескольких процессов ЦП для параллельной загрузки данных. Таким образом, дорогостоящие ресурсы графического процессора не мешают центральному процессору во время обучения и логического вывода.
Чтобы как можно быстрее загрузить данные для обучения модели глубокого обучения, вы можете сделать следующее:
-
Установите параметр num_workers в DataLoader на количество процессоров.
-
При использовании графического процессора установите для параметра `pin_memory` в DataLoader значение True. Это размещает данные в памяти с блокировкой страниц, что ускоряет передачу данных в графический процессор.
Дополнительные инструкции:
-
При обработке потоковых данных (например, `IterableDataset`) вам также необходимо настроить каждого рабочего процесса для независимой обработки входящих данных.
-
Ошибки начальной инициализации мешают многим проектам глубокого обучения с открытым исходным кодом. Чтобы избежать этой ошибки, определите семя рабочего процесса в `worker_init_fn`. Начиная с PyTorch Lightning 1.3, это обрабатывается автоматически с помощью `seed_everything(123, workers=True)`.
-
Начиная с PyTorch 1.8, необязательный параметр prefetch_factor можно использовать для лучшего управления производительностью загрузки. Установите это значение на более высокое целое число, чтобы загружать больше пакетов раньше времени, но использовать больше памяти.
Обучение на нескольких GPU с распределенным параллелизмом данных
Графические процессоры обеспечивают значительное ускорение обучения ЦП и времени вывода. Что лучше GPU? Несколько графических процессоров!
В PyTorch есть примеры для моделей обучения с несколькими графическими процессорами. Двумя наиболее распространенными парадигмами являются «DataParallel» и «DistributedDataParallel», где «DistributedDataParallel» является более масштабируемым подходом.
Изменение конвейеров обучения в PyTorch (и других платформах) — нетривиальная задача. Нужно думать о таких вещах, как загрузка данных распределенным способом и синхронизация весов, градиентов и показателей.
Используя PyTorch Lightning, очень легко обучить модель PyTorch на нескольких графических процессорах практически без изменений кода!
смешанная точность
По умолчанию входные тензоры и веса модели определяются с одинарной точностью (float32). Однако некоторые математические операции могут выполняться с половинной точностью (float16). Это значительно увеличивает скорость и уменьшает пропускную способность памяти модели без ущерба для производительности модели.
Установив флаг смешанной точности в PyTorch Lightning, платформа автоматически использует половинную точность, где это возможно, сохраняя при этом одинарную точность в других местах. С минимальными изменениями кода можно было сократить время обучения модели в 1,5–2 раза.
ранняя остановка
Модель необходимо обучать для большого количества эпох, но на практике модель, скорее всего, будет соответствовать обучающим данным в начале процесса обучения. Поэтому ранняя остановка должна быть реализована в конвейере обучения.Ранняя остановка настроена на прекращение обучения, когда потери проверки перестают уменьшаться после предопределенного количества оценок.. Делая это, вы не только предотвратите переоснащение, но и сэкономите время на поиск лучшей модели в десятках, а не в сотнях эпох.
Разделенное обучение
Разделенное обучение основано на исследовании Microsoft ZeRO и библиотеке DeepSpeed, что делает обучение больших моделей масштабируемым и простым. Это достигается за счет использования различных оптимизаций памяти и обмена данными между ресурсами. На практике сегментированное обучение может обучать большие модели, которые в противном случае не поместились бы на одном графическом процессоре, или использовать большие размеры пакетов во время обучения и логического вывода.
PyTorch Lightning представила поддержку сегментированного обучения в версии 1.2. В нашем случае использования мы не наблюдали значительного улучшения времени обучения или объема памяти. Однако наши выводы могут не распространяться на другие проблемы и настройки, и, возможно, их стоит попробовать, особенно при работе с большими моделями, в которых не используется один графический процессор.
Оптимизация во время оценки модели и вывода
Прямой проход модели не требует градиентов во время оценки и вывода модели. следовательно,Оценочный код может быть заключен в контекстный менеджер torch.no_grad. Это предотвращает сохранение градиентов во время прямого прохода, тем самым уменьшая объем памяти. В результате в модель могут быть загружены более крупные партии, что позволяет быстрее оценивать и делать выводы..
По умолчанию PyTorch Lightning управляет этими оптимизациями за кулисами.
Сводка результатов
В наших экспериментах мы обнаружили, что все оптимизации независимо друг от друга сокращают время обучения моделей глубокого обучения, и мы не наблюдали каких-либо улучшений скорости или памяти, за исключением сегментированного обучения.
В таблице ниже показаны все оптимизации, сделанные для улучшения конвейера глубокого обучения, а также наблюдаемый прирост производительности.
С помощью этих оптимизаций мы ускорили наш конвейер глубокого обучения в 10 раз, сэкономив с двух недель до 10 часов.
Автор: грузин
Составление: Техническое руководство по резюме
Оригинальная ссылка:Блог разработчиков Друзья torchlight Ning Love/how-tower-used…
Добро пожаловать в техническое руководство CV для общедоступной учетной записи, в котором основное внимание уделяется техническому обзору компьютерного зрения, отслеживанию новейших технологий и интерпретации классических статей.
Ответьте на ключевое слово «техническое резюме» в официальном аккаунте, чтобы получить краткий PDF-файл оригинальной технической сводной статьи официального аккаунта.
Другие статьи
Инкрементальное обучение глубоких нейронных сетей
Обзор оценки позы человека в глубоком обучении
Краткое изложение распространенных методов обнаружения малых целей
Техническое руководство по CV - Резюме и классификация основных статей
Резюме методов нормализации | Краткое изложение методов недообучения и переобучения
Сводка NMS | Краткое изложение методов функции потерь
Техническое резюме механизма внимания | Краткое изложение технологии пирамиды функций
Краткое изложение технологии объединения | Краткое изложение методов увеличения данных
Краткое изложение общих идей бумажных инноваций | Сводка параллельного обучения GPU с несколькими картами
Резюме эволюции структуры CNN (1) Классическая модель
Резюме эволюции структуры CNN (2) Облегченная модель
Резюме эволюции структуры CNN (3) Принципы проектирования
Краткое изложение технологии визуализации CNN (1) Визуализация карты объектов
Краткое описание технологии визуализации CNN (2) Визуализация ядра свертки
Краткое изложение технологии визуализации CNN (три) визуализации
Краткое описание технологии визуализации CNN (4) инструменты и проекты визуализации
Резюме инструментов аннотирования изображений в компьютерном зрении
Обзор и сводка различных алгоритмов оптимизации градиентного спуска Optimizer
Резюме | Классические наборы данных с открытым исходным кодом в стране и за рубежом
Функция Softmax и ее недоразумения
Общие стратегии повышения производительности моделей машинного обучения
Резюме инструментов аннотирования изображений в компьютерном зрении
Влияние размера партии на обучение нейронной сети
Резюме методов настройки параметров для гиперпараметров нейронной сети
Загружайте модели PyTorch в 340 раз быстрее с помощью Ray
Резюме инструментов аннотирования изображений в компьютерном зрении
Обзор последних исследований по обнаружению малоразмерных целей в 2021 году
Серия Classic Paper — Капсульные сети: новая сеть глубокого обучения
Обзор непродолжительного обучения компьютерному зрению