Когда следует использовать процессор, а когда — графический процессор для подкрепления и других алгоритмов обучения? В следующем посте будут обсуждаться преимущества и недостатки различных подходов.
Во-первых, дается общий обзор CPU GPU и TPU. . Во-вторых, будут обсуждаться архитектуры и реализации Q-Learning и DQN с OpenAI Taxi Environment. Наконец, можно найти сравнение и заключение.
Будут обсуждаться следующие моменты:
- Различия между GPU и CPU. Когда и как его использовать?
- Экскурсия: TPU Google
- Обучение RL-алгоритмам (GPU/CPU)
- Сравнение и заключение
Различия между GPU и CPU для машинного обучения?
GPU (графический процессор) — это часть компьютера, которая используется для графического рендеринга, например, для игр.
Благодаря своей архитектуре с множеством отдельных ядер он может выполнять множество небольших задач одновременно. Следовательно, это хорошо для распараллеливания небольших задач. Это полезно для обучения алгоритмов машинного обучения, таких как сверточные нейронные сети, которые сильно выигрывают от распараллеливания [1].
ЦП (центральный процессор) лучше подходит для однопоточных процессов из-за того, что у него меньше ядер, но они более мощные. ЦП также отвечает за обработку ввода-вывода и память.
Как вы, наверное, знаете, ни одна система не работает без процессора, поэтому он вам нужен всегда, по крайней мере, в фоновом режиме. Но какой из этих двух лучше подходит для обучения модели?
Как правило, вы можете сказать, что для глубокого обучения используйте графический процессор, в противном случае (для поверхностного обучения) процессора может быть достаточно, а иногда даже быстрее.
Когда использовать процессор?
Как видно на графике ниже, ЦП состоит из нескольких, но относительно мощных ALU, кэш-памяти, блока управления и DRAM. Следовательно, ЦП является многоцелевым компонентом, который может эффективно выполнять сложные вычисления.
Итак, следующие задачи обычно выполняются быстрее на CPU, чем на GPU[1]:
- классический алгоритм с логикой if-else и/или вообще без обучения
- небольшие алгоритмы/модели с неглубоким обучением или без распараллеливания
- данные, которые требуют большого количества операций ввода-вывода или не могут быть помещены в пакеты
- меньшие искусственные нейронные сети с коротким временем обучения
- быстрое прототипирование
Как использовать процессор?
- Это просто. Просто запустите программу, она автоматически использует процессор для расчета.
Если у вас уже активирован графический процессор для выполнения вычислений, деактивируйте его следующим образом:
Когда использовать графический процессор?
Как вы можете видеть на графике ниже, GPU состоит из множества меньших ALU и некоторого количества Cache, Control и DRAM. Поэтому GPU очень хорош для небольших и простых вычислений. Как будто это необходимо на этапе обучения нейронной сети.
Когда он слишком медленный на процессоре, попробуйте использовать графический процессор.
Графический процессор обычно быстрее ЦП для следующих задач [1]:
- хорошее распараллеливание — много данных и большие размеры пакетов
- глубокое обучение, особенно сверточные нейронные сети
- более крупные модели
Как использовать графический процессор?
Здесь вы можете найти руководства по работе с графическим процессором в Tensorflow, PyTorchили обычном Python.
Экскурсии: что такое ТПУ?
TPU расшифровывается как Tensor Processing Unit и представляет собой особый тип оборудования, разработанный Google. Это очень эффективно для алгебраических операций, необходимых в машинном обучении для обучения моделей. С помощью TPU время обучения может в некоторых случаях резко сократиться [4].
Для получения дополнительной информации см. этот блог от Google.
Алгоритмы обучения с подкреплением
Для базового понимания обучения с подкреплением рекомендую просмотреть этот курс на YouTube. Это введение в обучение с подкреплением с помощью ray.rllib.
Обучение алгоритма обучения с подкреплением состоит из 3 частей.
- Во-первых, вам нужна среда. Своего рода игра или симуляция, которую можно запускать неоднократно. Использование тренажерного зала считается лучшей практикой.
- Вам нужен алгоритм, который может изучить игру, и агент, который выполняет действия в среде.
- В конце концов вам нужно объединить все это, установить свои конфигурации и запустить на (надеюсь) мощном оборудовании.
Q-обучение
Q-Learning — это простой метод обучения с подкреплением. Он не использует ни сложных алгоритмов, ни нейронных сетей.
Поэтому его легко настроить самостоятельно и не требуется столько ресурсов. Но он подходит только для более простых задач.
В этом блокноте kaggle или на Github вы можете найти реализацию алгоритма Q-Learning на основе спортзала OpenAI Taxi Environment.
Реализация сравнивает время выполнения перебора с Q-Learning. Для этой простой задачи подходит подход Q-Learning, а также более быстрый, чем грубая сила.
ГП не требуется и не дает каких-либо преимуществ в производительности из-за и без того быстрого времени выполнения.
DQN — глубокая Q-сеть
Может выполняться с графическим процессором и без него. Требуется гораздо больше ресурсов, чтобы получить адекватное решение любой проблемы. Поэтому для более легкой задачи сначала попробуйте Q-Learning.
Тем не менее, для демонстрационных целей вы можете найти ту же OpenAI Taxi Environment, выполненную с DQN, здесь.
В этом примере используются Ray и Tensorflow, а также tensorboard для регистрации и представления результатов.
Для этого простого примера на графическом процессоре начального уровня (NVIDIA 1050ti) большой разницы в производительности обнаружено не было.
Как видно на изображении выше. ЦП даже лучше, чем ГП (за исключением внезапного падения минимальной награды в конце тренировки.
Важно помнить, что обе реализации (с графическим процессором и без него) не завершили свое обучение за разумное время по сравнению с базовым Q-Learning.
Сравнение и заключение
В конце концов, важно использовать правильный инструмент для работы [PL1].
Если задача проста и понятна, используйте поверхностное обучение (например, Q-Learning в области RL) без GPU.
Если это не может решить вашу проблему, попробуйте такие подходы к глубокому обучению, как DQN. Если процесс обучения недостаточно быстрый, попробуйте использовать графический процессор или, возможно, даже TPU.
Графические процессоры начального уровня, такие как NVIDIA 1050ti и старше, обычно не быстрее, чем мощный ЦП, как видно из приведенного здесь простого примера.
Для получения дополнительной информации ознакомьтесь с репозиторием GitHub:
https://github.com/BennerLukas/rl-comparison
Ресурсы и литература
[1] Игуацио. Что такое GPU для машинного обучения. Zugegriffen, 8 июня 2022 г. https://www.iguazio.com/glossary/gpu-for-machine-learning/.
[2] Бабайзаде, Мохаммад, Юрий Фросио, Стивен Тайри, Джейсон Клемонс и Ян Каутц. «GA3C: A3C на основе графического процессора для глубокого обучения с подкреплением», 18 ноября 2016 г.
[3] Шмидт, Александр, Флориан Шеллрот, Марк Фишер, Лукас Аллимант и Оливер Ридель. Методы обучения с подкреплением на основе аппаратного обеспечения промышленного управления с ускорением на GPU. Нейронные вычисления и приложения 33, Nr. 18 (1 сентября 2021 г.): 12191–207. https://doi.org/10.1007/s00521-021-05848-4.
[4] Облачные тензорные процессоры (TPU) | Облако Google. Zugegriffen, 8 июня 2022 г. https://cloud.google.com/tpu/docs/tpus.
[5] Ли, Юйси. Глубокое обучение с подкреплением: обзор. arXiv, 25 ноября 2018 г. https://doi.org/10.48550/arXiv.1701.07274.