В предыдущих уроках мы рассмотрели различные классы моделей и архитектуры нейросетей. Чтобы понять, как эффективно применять эти модели, важно также разобраться, на каких аппаратных платформах они работают.
GPU (графический процессор) и CPU (центральный процессор) — два ключевых компонента любого современного компьютера, но работают они по-разному. CPU обычно лучше справляется с последовательными вычислениями и подходит для задач, где важна многофункциональность (например, при предварительной обработке данных). В то время как GPU оптимизирован для параллельных вычислений, что делает его эффективным для тренировки нейронных сетей и больших моделей машинного обучения.
Представьте, что у вас есть модель нейронной сети, обучение которой на CPU занимает около десяти часов. При использовании GPU то же обучение может занять один-два часа.
Эти цифры условны, и реальная разница зависит от специфики модели, объёма данных и характеристик оборудования, но общее соотношение показывает значительное преимущество GPU. Сокращение времени обучения позволяет быстрее проводить эксперименты и улучшать модели.
В этом уроке мы обсудим аппаратные платформы CPU и GPU. Понимание различий между ними и правильный выбор при проектировании AI-решений поможет значительно ускорить обучение моделей и снизить затраты на вычислительные ресурсы.
CPU
✏️ Центральный процессор, CPU (Central Processing Unit) — формально интегральная схема в аппаратной части ПК, предназначенная для исполнения последовательных машинных инструкций (кода).
CPU осуществляет выполнение вычислительных задач: обработку программного кода, арифметические и логические операции, управление потоками данных между различными подсистемами.
Архитектура CPU состоит из нескольких компонентов:
Арифметико-логическое устройство (ALU) — блок, отвечающий за выполнение арифметических и логических операций. Есть разные виды архитектуры процессоров, блоков ALU может быть несколько.
Контроллер — управляет выполнением инструкций и координирует работу других компонентов CPU.
Кеш-память — многоуровневая кеш-память для временного хранения данных и инструкций, к которым нужен быстрый доступ.
DRAM (dynamic RAM) — оперативная память.
1.00
Когда программа запускается, инструкции загружаются в память. CPU извлекает эти инструкции последовательно одну за другой, декодирует их и выполняет соответствующие операции. Например, при выполнении математической операции ALU обрабатывает числовые данные, а результаты сохраняются в регистре или передаются в оперативную память для дальнейшего использования. Ещё CPU управляет передачей данных между оперативной памятью и другими устройствами — так операции выполняются последовательно и синхронизированно.
GPU
✏️ Графический процессор (GPU, Graphics Processing Unit) — это тоже интегральная схема, но только с некоторым отличием по архитектуре от CPU и ориентирована на параллельные вычисления.
Изначально GPU был разработан для обработки графики и выполнения рендеринга. Но сегодня графический процессор активно используется в машинном обучении, особенно для задач, связанных с обучением моделей. Благодаря своей архитектуре, оптимизированной для параллельных вычислений, GPU позволяет эффективно обрабатывать большие объёмы данных и ускорять обучение моделей. Так тысячи однотипных операций выполняются параллельно.
Архитектура GPU выглядит следующим образом:
Потоковые мультипроцессоры (SM, Streaming Multiprocessors) — это физические компоненты, где каждый мультипроцессор содержит несколько ядер, которые могут обрабатывать множество однотипных задач и выполнять параллельные вычисления.
Кеш-память и память с произвольным доступом. GPU имеет несколько уровней кеш-памяти, включая L1 (Level 1) и L2 (Level 2). Они обеспечивают быстрый доступ к данным. Глобальная память служит для хранения данных, к которым часто обращаются, но она медленнее, чем кеш-память.
Блоки управления памятью (Memory Controllers) — это контроллеры, которые управляют доступом к различным уровням памяти и обеспечивают передачу данных между памятью и ядрами GPU.
Блоки текстур (TMU) используются в графических приложениях для обработки данных. А в задачах машинного обучения помогают ускорить обработку больших массивов данных.
1.00
GPU получает задачу, и она разбивается на множество параллельных потоков. Потоковые мультипроцессоры распределяют эти потоки между своими ядрами, и каждое ядро выполняет вычисления для своей части задачи.
Например, при обучении нейронной сети GPU может параллельно обрабатывать множества векторов весов и активаций для разных нейронов и слоёв. Кеш-память и блоки управления памятью обеспечивают быстрый доступ к данным без задержек. Параллельные операции и быстрая обработка большого объёма данных делает GPU идеальным решением для задач, требующих высокой вычислительной мощности вроде рендеринга графики и обучения моделей машинного обучения.
Как выбрать процессор?
Принципиальное отличие двух видов процессоров ― в способе обработки информации.
CPU выполняет операции последовательно или с использованием ограниченного параллелизма. Поэтому он эффективен для выполнения сложных логических операций, управления потоками, выполнения программного кода и других задач, требующих высокой производительности на каждом ядре. Например, для выполнения инструкций операционной системы, управления файлами, выполнения сложных алгоритмов, обработки небольших объёмов данных с высокой скоростью.
Когда целесообразно использовать CPU
Линейные модели, например линейная и логистическая регрессия. Эти модели относительно просты и не требуют большого объёма вычислений.
Деревья решений и ансамблевые методы, например Random Forest. Эти модели могут использоваться для задач классификации и регрессии, где объём данных не так велик и сами данные можно обрабатывать последовательно.
GPU выполняет операции параллельно, распределяя вычислительные задачи между тысячами ядер. Это делает его идеальным для обработки графики, выполнения сложных математических вычислений и параллельного обучения моделей машинного обучения. Например, в рендеринге, обработке видео, обучении моделей машинного обучения, обработке больших объёмов данных.
Когда целесообразно использовать GPU
Нейронные сети (Deep Neural Networks), например свёрточные нейронные сети (CNN), рекуррентные нейронные сети (RNN), трансформеры. Эти модели имеют множество параметров и требуют больших объёмов данных для обучения. Трансформеры, такие как GPT, требуют параллельной обработки текстовых данных для эффективного обучения.
Рекуррентные нейронные сети (RNN) и модели обработки последовательностей, например RNN для обработки временных рядов или текста. Обработка последовательностей требует параллельной работы с несколькими элементами данных, что эффективно выполняется на GPU.
Выбор между CPU и GPU при проектировании машинного обучения зависит от нескольких ключевых факторов.
Следует учитывать объём и сложность вычислений: GPU лучше подходит для задач с большими объёмами данных и параллельными вычислениями, где требуется обработка большого числа операций одновременно.
Нужно ориентироваться на тип модели: для простых моделей, например линейной регрессии, CPU может быть более эффективен, в то время как для сложных нейронных сетей GPU обеспечивает значительное ускорение.
Потребность в обучении модели — тоже важный фактор: GPU позволяет сократить время обучения сложных моделей, что важно при использовании больших наборов данных.