Выбираем видеокарту под разные задачи машинного обучения и обходим «подводные камни». Узнаем, какие карты не стоит покупать, из чего составить кластер и что делать при скромном бюджете.
1. Разница между ЦП и ГП
Центральный процессор (ЦП) не оптимизирован для одновременного выполнения большого количества простых операций. Для параллельных вычислений лучше подходит графический процессор (ГП):
- ГП состоит из множества арифметико-логических устройств (АЛУ);
- бо́льшая часть транзисторов обрабатывает данные, а не занимается кэшированием и управлением потоками;
- процесс создания, управления и удаления потоков происходит эффективнее, чем у ЦП.
2. Устройство ГП
2.1. CUDA
Графический процессор состоит из набора независимых мультипроцессоров, которые включают в себя:
- CUDA-ядра;
- модули вычисления математических функций SFU;
- конвейер;
- разделяемую память и кэш.
На одном ядре CUDA (архитектура параллельных вычислений от NVIDIA) выполняется одна нить, иначе – поток. Каждому потоку соответствует один элемент вычисляемых данных. Потоки образуют блоки, которые общаются между собой через:
- разделяемую память;
- барьерную синхронизацию.
При частоте 1 ГГц процессор делает 109 циклов в секунду. Операции занимают больше времени, чем один цикл, поэтому создается конвейер, где для начала новой операции необходимо дождаться окончания предыдущей.
Мультипроцессор на каждом такте выполняет одну и ту же инструкцию над варпом (warp) – группой из 32 потоков. Потоки одного варпа принадлежат одному блоку и могут взаимодействовать только между собой. Каждому потоку и блоку присваивается идентификатор – трехмерный целочисленный вектор:
threadIdx
– номер потока в блоке;blockIdx
– номер блока, в котором находится поток.
Блоки группируются в сетки блоков. Размеры блока и сетки блоков задаются переменными blockDim
и gridDim
при вызове ядра. Потокам из одного блока доступна разделяемая память (shared memory). Их выполнение может быть синхронизировано.
Алгоритм работы технологии CUDA выглядит следующим образом.
- Выделение памяти на ГП.
- Копирование расчетных данных в выделенную память ГП.
- Вычисления на ядрах ГП.
- Перенос результатов вычислений в оперативную память для обработки ЦП.
- Освобождение памяти ГП.
2.2. Иерархия памяти
Локальная память (local memory):
- у каждого потока есть своя локальная память;
- она существует на протяжении жизни потока.
Разделяемая память (shared memory):
- доступна потокам внутри одного блока;
- существует в течение жизни блока;
- быстрее, чем локальный и глобальный виды.
Глобальная память (global memory):
- доступна всем потокам во всех блоках;
- сохраняет состояние в течение работы программы.
Константная память (constant memory):
- кэширует данные.
Текстурная память (texture memory):
- адресует и фильтрует данные.
3. Как выбрать ГП
Последовательность шагов при выборе ГП.
- Определить область применения: соревнования в Kaggle, глубокое обучение, исследования в области компьютерного зрения, обработка естественного языка и т. д.
- Выбрать необходимый объем памяти.
- Узнать: сколько видеокарт поместится в системном блоке; правильно ли организована циркуляция воздуха в системном блоке; хватит ли мощности блока питания.
3.1. Когда достаточно менее 11 ГБ памяти
Базовые навыки в глубоком обучении можно освоить, тренируясь на небольших задачах с малыми входными параметрами, поэтому достаточно RTX 3070 (8 ГБ, GDDR6) и RTX 3080 (10 ГБ, GDDR6X). Для прототипирования лучший выбор – RTX 3080.
3.2. Когда нужно больше 11 ГБ памяти
Не менее 11 ГБ памяти нужно при работе с архитектурой Transformer, распознаванием медицинских изображений, компьютерным зрением и работой с большими изображениями.
3.3. Тензорные ядра
Тензорные ядра быстрее CUDA-ядер, потому что им требуется меньше циклов для операций с матрицами. В чипах Ampere (линейка RTX 30) стало меньше тензорных ядер, но возросла их производительность.
3.4. Пропускная способность памяти
Тензорные ядра быстрые и обычно простаивают до 70% времени, ожидая данные из глобальной памяти. Поэтому выбирайте ГП с максимальной пропускной способностью памяти. Еще нужна большая разделяемая память и кэш L1, чтобы сократить число обращений к внешней памяти и держать данные ближе к АЛУ.
Сколько нужно памяти:
- при использовании предобученных моделей в Transformer ≥ 11 ГБ;
- обучение больших моделей в Transformer или в сверточных нейронных сетях ≥ 24 ГБ;
- прототипирование нейронных сетей ≥ 10 ГБ;
- для Kaggle ≥ 8 ГБ;
- компьютерное зрение ≥ 10 ГБ.
3.5. Система охлаждения
В конструкции системы охлаждения Reference RTX 30 (NVIDIA) первый вентилятор расположен на верхней стороне видеокарты. Он выдувает воздух в пространство, где расположена оперативная память и процессор. Второй вентилятор выдувает воздух сразу из корпуса (Рис. 12).
Еще нет тестов, подтверждающих эффективность решения и необходимость замены штатной системы охлаждения. Установка нескольких ГП в одном корпусе может негативно сказаться на циркуляции потоков воздуха внутри корпуса и охлаждении видеокарт.
3.6. Электропитание
Картам может не хватить мощности блока питания. Четыре карты RTX 3090 потребляют на пике 1400 Вт. Продаются блоки питания на 1600 Вт, но остальным комплектующим 200 Вт может быть недостаточно.
3.7. Рекомендации для кластеров
Для кластеров важно надежное электропитание, доступное в дата-центрах, но по лицензионному соглашению карты RTX в них размещать запрещено. Для небольшой системы подойдет Supermicro 8 GPU.
Для кластера из 256+ ГП – NVIDIA DGX SuperPOD.
При 1024+ ГП – Google TPU Pod и NVIDIA DGX SuperPod.
3.8. Не покупайте эти карты
Не покупайте более одной видеокарты RTX Founders Editions или RTX Titans, если нет PCIe-удлинителей для решения проблем с охлаждением.
Tesla V100 или A100 рентабельны только в кластерах. Карты серии GTX 16 имеют низкую производительность, так как из них убрали тензорные ядра. Аналоги GTX 16: б/у RTX 2070, RTX 2060 или RTX 2060 Super.
При наличии RTX 2080 Ti и выше, обновление до RTX 3090 невыгодно. Прирост производительности мал, а риск получить проблемы с питанием и охлаждением в картах RTX 30 высокий. Апгрейд оправдан, если для задач требуется больше памяти.
3.9. Нужен ли PCI 4.0?
Для бюджетной домашней сборки PCI 4.0 не нужен. PCI 4.0 позволит лучше распараллелить и ускорить передачу данных на 1-7% в сравнении с PCIe 3.0 при использовании более четырех ГП. При работе с большими файлами «узким местом» может оказаться SSD-диск, но не передача данных с ГП на ЦП.
3.10. Необходимы только 8x/16x PCIe-слоты?
Использовать исключительно 8x и 16x PCIe-слоты необязательно. Допускается работа двух ГП на слотах 4х. При установке четырех ГП предпочтение отдавайте слотам 8x на каждый ГП, так как производительность слота 4x ниже на 5-10%.
3.11. Можно ли использовать разные карты вместе?
Да, можно! Но будет сложно эффективно распараллелить графические процессоры разных типов, т. к. быстрый ГП будет ждать, пока медленный ГП дойдет до точки синхронизации.
3.12. Что такое NVLink и полезно ли это?
NVLink – высокоскоростное соединение между ГП. В небольших кластерах (< 128 ГП) он не даст преимущества по сравнению с передачей по PCIe.
3.13. Что делать, если не хватает денег на топовые ГП?
Купить подержанные ГП, либо воспользоваться облачными сервисами. Бюджетные варианты (в порядке убывания цены и производительности):
- RTX 2070 или RTX 2060;
- GTX 1070 или GTX 1070 Ti;
- GTX 980 Ti (6 GB) или GTX 1650 Super.
3.14. Итог
- топовые карты:RTX 3080, RTX 3090;
- вторая лига: RTX 3070, RTX 2060 Super;
- бюджетный вариант:RTX 2070, RTX 2060, GTX 1070, GTX 1070 Ti, GTX 1650 Super, GTX 980 Ti;
- новичкам: RTX 3070;
- просто попробовать:RTX 2060 Super, GTX 1050 Ti, облачные сервисы;
- соревнования Kaggle: RTX 3070;
- компьютерное зрение, машинный перевод:четыре RTX 3090;
- NLP с простыми вычислениями:RTX 3080;
- кластеры менее 128 ГП: 66% 8x RTX 3080 и 33% 8x RTX 3090;
- кластеры от 128 до 512 ГП:8x Tesla A100;
- кластеры более 512 ГП: DGX A100 SuperPOD;
Напоследок несколько сравнительных гистограмм характеристик различных GPU.
В этом руководстве мы рассмотрели устройство графического процессора и определили параметры, которые влияют на производительность в задачах глубокого обучения. Если запускаете расчет нейросеток время от времени, то апгрейд можно проводить через одно поколение графических процессоров.
По материалам proglib.