[Обработка изображений, Машинное обучение, Компьютерное железо, Видеокарты, Natural Language Processing] Играемся с Новыми GPU на базе Ampere от Nvidia и пробуем MIG
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Каждый раз, когда встает заветный вопрос, апгрейдить ли карточки в серверной или нет, я просматриваю подобные статьи и смотрю такие видосы (нет, маркетинговым материалам от Nvidia конечно верить нельзя, как показал недавний кейс с числом CUDA-ядер).
Канал "Этот Компьютер" очень сильно недооценен, но автор не занимается ML. А в целом при анализе сравнений акселераторов для ML в глаза как правило бросаются несколько вещей:
- Авторы учитывают как правило только "адекватность" для рынка новых карт в США;
- Рейтинги далеки от народа и делаются на весьма стандартных сетках (что наверное в целом хорошо) без деталей;
- Популярная мантра тренировать все более гигантские сетки вносит свои коррективы в сравнения;
Не нужно быть семи пядей во лбу, чтобы знать очевидный ответ на вопрос "а какая карта лучше?": карточки серии 20* в массы не пошли, 1080 Ti с Авито до сих очень привлекательны (и не особо дешевеют как ни странно, вероятно по этой причине).
Все это прекрасно и вряд ли стандартные бенчмарки сильно врут, но недавно я узнал про существование технологии Multi-Intance-GPU для видеокарт А100 и нативную поддержку TF32 и мне пришла идея поделиться своим опытом реального тестирования карточек на архитектуре Ampere (3090 и А100). В этой небольшой заметке я постараюсь ответить на вопросы:
- Стоит ли свеч обновление на Ampere? (спойлер для нетерпеливых — да);
- Стоят ли своих денег A100 (спойлер — в общем случае — нет);
- Есть ли кейсы, когда A100 все-таки интересны (спойлер — да);
- Полезна ли технология MIG (спойлер — да, но для инференса и для очень специфичных случаев для обучения);
За деталями прошу под кат.
Простые Вещи
Давайте сразу обратим внимание на слона в комнате. На момент написания этой заметки:
- 3090 довольно сложно купить и продаются они примерно с 30-40% премией. Причем нехватки новых карт есть не только в СНГ;
- A100 почти невозможно купить. Партнеры Nvidia говорили что в РФ наличии есть 1 штука, потом приедет еще несколько штук;
- Я не особо искал, но с наскоку я не нашел информации насколько PCIE версия A100 совместима с обычными ATX платформами (именно на этот вопрос партнеры Nvidia не ответили, но я предполагаю, что в картах нет своего кулера и предполагается установка в серверное шасси с "громким" феном);
- 3080 и более младшие модели (хотя они очень интересны по цене, а особенно для игр) не тестировали, т.к. у нас их нет, а не рассматривали их из-за размера памяти (я наивно предполагал, что получится крутить несколько сеток на 1 карте, но там все работает несколько иначе);
По понятным причинам холивор — кормить или не кормить Амазон — выносим за скобки. Уверен, что среди комментаторов найдутся свидетели церкви Амазона, но свой риг как правило "окупается" против облачных цен (особенно если собирать из дешевых компонентов) где-то за полгода-год использования.
Охлаждение
Если верить утилитам от Nvidia, то 3090 и А100 на 15-20 градусов холоднее, чем Maxwell и Pascal. Я не проводил точные замеры, но в среднем ситуация такая:
- 4 * 1080 Ti (Pascal) с минимальными хаками по охладжению работают в диапазоне 75-80С под 100% нагрузкой;
- 3 * Titan X (Maxwell) работали в районе 85С под 100% нагрузкой;
- 3 * 3090 (Ampere) работают в диапазоне 60-70С под 100% нагрузкой;
- Нигде не применялся ни разгон, ни ограничения по питанию карт или скорости кулеров, все "из коробки";
- Все карты имеют "турбину", то есть выталкивают тепло из корпуса;
На вопрос "почему" — есть 3 гипотезы:
- Новый техпроцесс;
- У 3090 немного другая форма самой карты, размер вентилятора заметно больше, размер отверстия на задней панельке сильно больше;
- 3090 кажется тяжелее (может кто-то знает где найти точные цифры, карт нет под рукой сейчас);
Наглядная иллюстрация отличий карточек, может кто-то из комментариев подскажет диаметр вентилятора?
Наивные Метрики
Сначала, чтобы удостовериться, что драйвера работают верно (а когда они работали неверно, цифры были другие совсем), давайте протестируем все доступные карточки с помощью gpu-burn. Получается такая картина, которая очень сильно коррелирует с тем, что рисуют в обзорах.
Test
GPU
Gflop/s
./gpu_burn 120
Titan X (Maxwell)
4,300
./gpu_burn 120
1080 Ti (Pascal)
8,500
./gpu_burn 120
3090 (Ampere)
16,500
./gpu_burn 120
A100 (wo MIG)
16,700
./gpu-burn -tc 120
3090 (Ampere)
38,500
./gpu-burn -tc 120
A100 (wo MIG)
81,500
MIG не тестировался тут, дальше в статье увидите почему.
Цена Вопроса
Тут важно отметить, что 1080 Ti и Titan X мы покупали с рук условно "новые" (менее года использования). Не будем останавливаться лишний раз на холиворах про майнеров и политику ценообразования Nvidia, но если бережно использовать даже б/у игровые карты — их срок службы где-то 3-4 года. Цены и характеристики указаны примерные. A100 по информации от партнеров Nvidia в России в продаже имеется до нового года одна. Когда 1080Ti были доступны новыми, цены колебались примерно от 50к до 100к рублей.
GPU
Mem
Цена
Titan X (Maxwell)
12G
10,000 рублей (Авито)
1080 Ti
11G
25,000 рублей (Авито)
3090 (Ampere)
24G
160,000+ рублей (новая)
A100 (wo MIG)
40G
US$12,500 (новая)
Думаю очевидные выводы дальше читатели сделают сами.
Пробуем 3090 и A100 c MIG
Пробуем 3090
А теперь переходим к самому интересному — к реальным тестам и собираем грабли на реальных задачах. В теории кажется, что если по памяти и вычислительным способностям 3090 или А100 в 2-3 раза превосходят 1080 Ti, то 1 такая карточка может заменить 2-3 1080 Ti и на стандартном сервере с 4 полноценными PCIE портами можно получить аналог сервера с 12 картами? Ну или можно ли взять допустим 3-4 PCIE версии A100 и получить очень мощный сервер, разделив каждую из них на несколько compute instance с использованием MIG?
Короткий ответ — нет, более длинный ответ — тоже нет, но с многочисленными оговорками.
Зачем спросите? Да просто серверные решения, которые полноценно поддерживают 8 — 16 видеокарт даже в минимальной разумной конфигурации по цене выходят в 4-5 раз дороже, чем стандартные ATX решения. А DGX Workstation или DGX продаются еще с примерно 50% премией к своей аналогичной сборке, если собирать на базе платформ от Mikrotik или Gigabyte.
Производители карт не торопятся выпускать полноценные однослотовые решения (кроме PNY c серией Quadro, но это отдельная история и скорее для дизайна или инференса). Конечно можно собрать кастомный водяной контур на 7 карточек (было несколько моделей материнских плат с 7 полноценными PCIE портами), но это "сложно" и неясно где такое размещать (да и игра не стоит свеч). С приходом PCIE 4.0 привлекательность таких решений по идее должна вырасти, но я пока не видел ничего интересного на рынке.
Пара огоровок про задачу на которой тестировали:
- Задача — тренировка Spech-to-Text сетки на украинском датасете;
- Из-за самой задачи экспериментально оптимальный размер батча на один процесс — 50 — не получается увеличивать без потерь в скорости сходимости;
- Именно на этой задаче AMP у нас не работает (хотя работает на других при прочих равных, мы пока не поняли почему), но это скорее оптимизация. То есть дело не в железе, а в задаче. На других задачах — работает, поэтому вынесем за скобки;
- Важая оговорка — поскольку по сути эта задача это sequence-to-sequence, то в общем случае построение батчей тут не совсем тривиально. Файлы разной длины попадают в батч только с файлами примерно такой же длины (чтобы снизить впустую потраченные ресурсы на обработку падинга), но размер батча статический для упрощения сравнений и более быстрой сходимости;
- Динамический размер батча и просто его увеличение тестировали, но это особо не влияет на скорость и скорость сходимости (или ухудшает);
Вопреки тренду делать все более гигантские сети, мы наоборот занимаемся миниатюризацией наших алгоритмов и пытаемся делать наши сети все более эффективными. Поэтому вопрос параллелизации и ускорения обучения сетей интересен в первую очередь за счет увеличения числа воркеров, а не размера сетей и вычислительных возможностей ускорителей.
И тут мы наталкиваемся на первый подводный камень — Distributed Data Parallel из PyTorch (DDP, оптимальный способ масштабирования сетей на "много" видеокарт) из коробки по сути настроен только на 1 процесс на 1 карте. То есть 1 процесс может использовать 1+ карту. 2 процесса не могут использовать 1 карту, даже если там есть большой запас по IO / compute / RAM. В старых версиях драйверов явного ограничения нет и на 1080 Ti 2 процесса на 1 карта запускаются (но получется прирост по скорости всего на 5-10% вместо 40-50%). На новых картах — туда уже впилили exception.
RuntimeError: NCCL error in: /opt/conda/conda-bld/pytorch_1603729096996/work/torch/lib/c10d/ProcessGroupNCCL.cpp:784, invalid usage, NCCL version 2.7.8
Но не все так печально и плохо. Может из-за какой-то низкоуровневой магии в драйверах, может из-за TF32 (надеюсь тут знатоки подскажут), может из-за наработок в MPS 3090 ведут себя немного иначе на нашем бенчмарке:
- При прочих равных и неизменных параметрах они используют больше памяти чем Titan X и 1080 Ti (~16 GB вместо 7-8 GB);
- Скорость примерно в 3 раза выше, чем с Titan X (Maxwell);
- [Нужно еще точно замерить скорость на 1080 Ti];
- Утилизация карт на высоком уровне — более 90%;
При попытках запускать 2 DDP воркера на 1 карте мы просто получаем ошибку, при попытке тренировать 2 сетки "одновременно" мы получаем кратное замедление, при увеличении батча — прирост по скорости незначительный. Тайминги на 2 * 3090 примерно такие:
| Epoch time, m | Type | Workers | Batch | Params |
|-----------------|------|---------|---------|----------------------|
| exception | DDP | 4 | 50 * 4 | |
| 3.8 | DDP | 2 | 50 * 2 | |
| 3.9 | DDP | 2 | 50 * 2 | cudnn_benchmark=True |
| 3.6 | DDP | 2 | 100 * 2 | |
Для полноты рассказа, важно еще отметить что у Nvidia есть MPS который якобы позволяет крутить 2 процесса на картах без переключения контекста а в PyTorch есть встроенный RPC-фреймворк. Но первый я просто не смог адекватно использовать без очень непонятных низкоуровневых ошибок, а второй требует радикального переписывания кода и радикально усложняет код для тренировки моделей (хотя очень интересен долгосрочно).
Так, с 3090 все понятно. Две карточки она не заменит конечно, но сама по себе, даже имея "лишнюю" память (повторюсь, мы тренируем маленькие сети), работает в 2-3 раза быстрее. Эквивалентно ли это наличию 2-3 карт, зависит от задачи.
TLDR:
- Вы можете просто заменить карты с турбиной в своем риге на 3090 (единственный момент — в 3090 2 8-пиновых коннектора для питания, но на рынке есть блоки питания по 2000-Ватт которые точно могут запитать 4-5 таких карт, опять же никто не отменял синхронизацию 2 блоков питания);
- При это скорее всего температура карт снизится на 10-20 градусов Цельсия;
- Эти карты сейчас стоят дорого и находятся в дефиците (и, наверное вряд ли пойдут в массы), но если для вас самый дорогой ресурс это время — то это интересный вариант;
- Если большой размер памяти для вас критичен — у вас по сути нет выбора;
Пробуем A100 с MIG
Посмотрев на метрики, доступность и цену карт, А100 на первый взгляд вообще не кажется интересным вариантом, разве что в облаке на 3 дня натренировать 1 большую сетку на небольшом не сильно приватном датасете. Также если вашим алгоритмам сильно помогает AMP / FP16, то А100 может существенно добавить скорости.
Но в A100 есть интересная технология MIG (Multi Instance GPU). По сути она позволяет разбить одну "большую и мощную" карточку на набор маленьких "подкарточек" и дальше создать виртуальные Compute Instances, к которым можно обращаться как к отдельным картам.
Там довольно много деталей, за ними откройте документацию, но там доступны такие пресеты:
+--------------------------------------------------------------------------+
| GPU instance profiles: |
| GPU Name ID Instances Memory P2P SM DEC ENC |
| Free/Total GiB CE JPEG OFA |
|==========================================================================|
| 0 MIG 1g.5gb 19 0/7 4.75 No 14 0 0 |
| 1 0 0 |
+--------------------------------------------------------------------------+
| 0 MIG 2g.10gb 14 0/3 9.75 No 28 1 0 |
| 2 0 0 |
+--------------------------------------------------------------------------+
| 0 MIG 3g.20gb 9 0/2 19.62 No 42 2 0 |
| 3 0 0 |
+--------------------------------------------------------------------------+
| 0 MIG 4g.20gb 5 0/1 19.62 No 56 2 0 |
| 4 0 0 |
+--------------------------------------------------------------------------+
| 0 MIG 7g.40gb 0 0/1 39.50 No 98 5 0 |
| 7 1 1 |
+--------------------------------------------------------------------------+
Доступные конфигурации
Возникает вопрос, а что если наша сетка маленькая, и A100 в теории (хотя бы на FP16) должна быть в 2 раза мощнее чем 3090? Можно ли взять 4 A100 и сделать из них допустим 12 видеокарт аналогичных по памяти и мощности 1080 Ti? Можно ли на этих многочисленных "микро-картах" тренировать нейросети так же как на нескольких обычных?
Ответим на вопросы по одному. Тут нам поможет как сама документация, так и совсем свежий блог пост от самой Nvidia.
В документации есть такой абзац:
MIG supports running CUDA applications by specifying the CUDA device on which the application should be run. With CUDA 11, only enumeration of a single MIG instance is supported.
CUDA applications treat a CI and its parent GI as a single CUDA device. CUDA is limited to use a single CI and will pick the first one available if several of them are visible. To summarize, there are two constraints:
- CUDA can only enumerate a single compute instance
- CUDA will not enumerate non-MIG GPU if any compute instance is enumerated on any other GPU
Note that these constraints may be relaxed in future NVIDIA driver releases for MIG.
Сначала, когда я его прочитал, мне показалось, что он означал только что нельзя распилить 2 карты, а можно использовать только одну. После того, как я попробовал поиграться с реальной картой, оказалось, что фреймворк внутри контейнера видит только 1 "карту" (причем видимо выбирает он только "первую"). Причем если мы внимательно прочитаем те примеры, которые Nvidia приводит в своем блоге, они по сути все относятся к сценарию "1 контейнер — 1 кусочек карты" или "тюнинг 7 маленьких моделей параллельно".
Еще там есть вот такой пассаж:
There is no GPU-to-GPU P2P (both PCIe and NVLINK) support in MIG mode, so MIG mode does not support multi-GPU or multi-node training. For large models or models trained with a large batch size, the models may fully utilize a single GPU or even be scaled to multi-GPUs or multi-nodes. In these cases, we still recommend using a full GPU or multi-GPUs, even multi-nodes, to minimize total training time.
Если использовать MIG по прямому назначению, то есть делить карту на физические кусочки (slices), назначать им Compute Instances и прокидывать их в изолированные контейнеры — то все работает как надо. It just works.
Итоговые Замеры
Тут не совсем идеальные сравнения (на Титане у меня был DP а не DDP), да и на A100 в итоге я не стал гонять эксперименты на 10, 20, 30 часов и впустую (зачем греть атмосферу), но я замерил время на 1 эпохе.
Когда крутишь 1 сетку на A100 утилизация не достигает даже и половины — ну то есть если бы ее можно было распилить на 2-3 карты, все было бы прекрасно
Avg epoch time, m
Workers
Batch
GPUs
CER @10 hours
CER @20 h
CER @30 h
Comment
4.7
2, DDP
50 * 2
2 * 3090
14.4
12.3
11.44
Close to 100% utilization
15.3
1, DP
50
2 * Titan X
21.6
17.4
15.7
Close to 100% utilization
11.4
1, DDP
50 * 1
1 * A100
NA
NA
NA
About 35-40% utilization
TBD
2, DDP
50 * 2
2 * 1080 Ti
TBD
TBD
TBD
На 1080 Ti ресурсы были только чтобы прогнать 1 эпоху.
Выводы
Выводы про 3090:
- Если вынести за скобки вопрос доступности, то апгрейд стоит делать. Вы получите минимум x2 по скорости. Если у вас работает AMP — то может даже и все x3-x4;
- С учетом роста производительности, цена кажется немного завышенной, но не заоблачной. Понижение цены где-то на 30-40% как мне кажется было бы адекватным;
- Когда выходило новое поколение карт все беспокоились насчет охлаждения. Она на удивление холодная;
- Единственная беда — карточка просит 2 8-пиновых коннектора для питания;
Выводы про A100:
- Если судить по цене деленной на производительность, карта не очень интересная (наценка в 2-3 раза против 3090);
- То, что Nvidia сделала технологию для эффективного использования для инференса — это круто, а то карты стали уж слишком большими и крутыми;
- Если вы можете использовать обычные игровые карты (те же 1080 Ti или PNY Quadro) для инференса, то они представляют сильно больший value for money;
- Есть большой нераскрытый потенциал в развитии технологии MIG;
- Если вам нужно реально 40 GB памяти и много compute, то альтернатив особо нет;
- Неясен вопрос с установкой PCIE версии в обычные ATX корпуса без кастома, "колхоза" или воды ;
===========
Источник:
habr.com
===========
Похожие новости:
- [Машинное обучение, Natural Language Processing, Голосовые интерфейсы] Как из четырёх минут речи мы воссоздали голос молодого Леонида Куравлёва
- [Java, Scala, API, Apache, Natural Language Processing] Как найти что-то в тексте
- [Компьютерное железо, Настольные компьютеры] Intel Cryo Cooling — технология термоэлектрического охлаждения процессора
- [Python, Машинное обучение, Искусственный интеллект] Делаем печатные ссылки кликабельными с помощью TensorFlow 2 Object Detection API (перевод)
- [Big Data, Машинное обучение, Data Engineering] Автоматическое обучение моделей с помощью Vowpal Wabbit
- [Типографика, Accessibility, История IT, Natural Language Processing] Загадочные субтитры на CNN
- [Python, Машинное обучение, Учебный процесс в IT, Искусственный интеллект] Участвуем в соревновании по Data Science. Первый опыт
- [Машинное обучение, Киберпанк, Робототехника, Будущее здесь, Инженерные системы] Даже у роботов хаос в голове: учёные создали ИИ со “спонтанным” поведением
- [Компьютерное железо, Старое железо, Настольные компьютеры] iMac G5 ретроспектива
- [Информационная безопасность, Python, Программирование, Машинное обучение, Искусственный интеллект] Deep Anomaly Detection
Теги для поиска: #_obrabotka_izobrazhenij (Обработка изображений), #_mashinnoe_obuchenie (Машинное обучение), #_kompjuternoe_zhelezo (Компьютерное железо), #_videokarty (Видеокарты), #_natural_language_processing, #_gpu, #_3090, #_a100, #_ampere, #_pytorch, #_obrabotka_izobrazhenij (
Обработка изображений
), #_mashinnoe_obuchenie (
Машинное обучение
), #_kompjuternoe_zhelezo (
Компьютерное железо
), #_videokarty (
Видеокарты
), #_natural_language_processing
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 14:33
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Каждый раз, когда встает заветный вопрос, апгрейдить ли карточки в серверной или нет, я просматриваю подобные статьи и смотрю такие видосы (нет, маркетинговым материалам от Nvidia конечно верить нельзя, как показал недавний кейс с числом CUDA-ядер). Канал "Этот Компьютер" очень сильно недооценен, но автор не занимается ML. А в целом при анализе сравнений акселераторов для ML в глаза как правило бросаются несколько вещей:
Не нужно быть семи пядей во лбу, чтобы знать очевидный ответ на вопрос "а какая карта лучше?": карточки серии 20* в массы не пошли, 1080 Ti с Авито до сих очень привлекательны (и не особо дешевеют как ни странно, вероятно по этой причине). Все это прекрасно и вряд ли стандартные бенчмарки сильно врут, но недавно я узнал про существование технологии Multi-Intance-GPU для видеокарт А100 и нативную поддержку TF32 и мне пришла идея поделиться своим опытом реального тестирования карточек на архитектуре Ampere (3090 и А100). В этой небольшой заметке я постараюсь ответить на вопросы:
За деталями прошу под кат. Простые Вещи Давайте сразу обратим внимание на слона в комнате. На момент написания этой заметки:
По понятным причинам холивор — кормить или не кормить Амазон — выносим за скобки. Уверен, что среди комментаторов найдутся свидетели церкви Амазона, но свой риг как правило "окупается" против облачных цен (особенно если собирать из дешевых компонентов) где-то за полгода-год использования. Охлаждение Если верить утилитам от Nvidia, то 3090 и А100 на 15-20 градусов холоднее, чем Maxwell и Pascal. Я не проводил точные замеры, но в среднем ситуация такая:
На вопрос "почему" — есть 3 гипотезы:
Наглядная иллюстрация отличий карточек, может кто-то из комментариев подскажет диаметр вентилятора?
Наивные Метрики Сначала, чтобы удостовериться, что драйвера работают верно (а когда они работали неверно, цифры были другие совсем), давайте протестируем все доступные карточки с помощью gpu-burn. Получается такая картина, которая очень сильно коррелирует с тем, что рисуют в обзорах. Test GPU Gflop/s ./gpu_burn 120 Titan X (Maxwell) 4,300 ./gpu_burn 120 1080 Ti (Pascal) 8,500 ./gpu_burn 120 3090 (Ampere) 16,500 ./gpu_burn 120 A100 (wo MIG) 16,700 ./gpu-burn -tc 120 3090 (Ampere) 38,500 ./gpu-burn -tc 120 A100 (wo MIG) 81,500 MIG не тестировался тут, дальше в статье увидите почему. Цена Вопроса Тут важно отметить, что 1080 Ti и Titan X мы покупали с рук условно "новые" (менее года использования). Не будем останавливаться лишний раз на холиворах про майнеров и политику ценообразования Nvidia, но если бережно использовать даже б/у игровые карты — их срок службы где-то 3-4 года. Цены и характеристики указаны примерные. A100 по информации от партнеров Nvidia в России в продаже имеется до нового года одна. Когда 1080Ti были доступны новыми, цены колебались примерно от 50к до 100к рублей. GPU Mem Цена Titan X (Maxwell) 12G 10,000 рублей (Авито) 1080 Ti 11G 25,000 рублей (Авито) 3090 (Ampere) 24G 160,000+ рублей (новая) A100 (wo MIG) 40G US$12,500 (новая) Думаю очевидные выводы дальше читатели сделают сами.
Пробуем 3090 и A100 c MIG Пробуем 3090 А теперь переходим к самому интересному — к реальным тестам и собираем грабли на реальных задачах. В теории кажется, что если по памяти и вычислительным способностям 3090 или А100 в 2-3 раза превосходят 1080 Ti, то 1 такая карточка может заменить 2-3 1080 Ti и на стандартном сервере с 4 полноценными PCIE портами можно получить аналог сервера с 12 картами? Ну или можно ли взять допустим 3-4 PCIE версии A100 и получить очень мощный сервер, разделив каждую из них на несколько compute instance с использованием MIG? Короткий ответ — нет, более длинный ответ — тоже нет, но с многочисленными оговорками. Зачем спросите? Да просто серверные решения, которые полноценно поддерживают 8 — 16 видеокарт даже в минимальной разумной конфигурации по цене выходят в 4-5 раз дороже, чем стандартные ATX решения. А DGX Workstation или DGX продаются еще с примерно 50% премией к своей аналогичной сборке, если собирать на базе платформ от Mikrotik или Gigabyte. Производители карт не торопятся выпускать полноценные однослотовые решения (кроме PNY c серией Quadro, но это отдельная история и скорее для дизайна или инференса). Конечно можно собрать кастомный водяной контур на 7 карточек (было несколько моделей материнских плат с 7 полноценными PCIE портами), но это "сложно" и неясно где такое размещать (да и игра не стоит свеч). С приходом PCIE 4.0 привлекательность таких решений по идее должна вырасти, но я пока не видел ничего интересного на рынке. Пара огоровок про задачу на которой тестировали:
Вопреки тренду делать все более гигантские сети, мы наоборот занимаемся миниатюризацией наших алгоритмов и пытаемся делать наши сети все более эффективными. Поэтому вопрос параллелизации и ускорения обучения сетей интересен в первую очередь за счет увеличения числа воркеров, а не размера сетей и вычислительных возможностей ускорителей. И тут мы наталкиваемся на первый подводный камень — Distributed Data Parallel из PyTorch (DDP, оптимальный способ масштабирования сетей на "много" видеокарт) из коробки по сути настроен только на 1 процесс на 1 карте. То есть 1 процесс может использовать 1+ карту. 2 процесса не могут использовать 1 карту, даже если там есть большой запас по IO / compute / RAM. В старых версиях драйверов явного ограничения нет и на 1080 Ti 2 процесса на 1 карта запускаются (но получется прирост по скорости всего на 5-10% вместо 40-50%). На новых картах — туда уже впилили exception. RuntimeError: NCCL error in: /opt/conda/conda-bld/pytorch_1603729096996/work/torch/lib/c10d/ProcessGroupNCCL.cpp:784, invalid usage, NCCL version 2.7.8
Но не все так печально и плохо. Может из-за какой-то низкоуровневой магии в драйверах, может из-за TF32 (надеюсь тут знатоки подскажут), может из-за наработок в MPS 3090 ведут себя немного иначе на нашем бенчмарке:
При попытках запускать 2 DDP воркера на 1 карте мы просто получаем ошибку, при попытке тренировать 2 сетки "одновременно" мы получаем кратное замедление, при увеличении батча — прирост по скорости незначительный. Тайминги на 2 * 3090 примерно такие: | Epoch time, m | Type | Workers | Batch | Params |
|-----------------|------|---------|---------|----------------------| | exception | DDP | 4 | 50 * 4 | | | 3.8 | DDP | 2 | 50 * 2 | | | 3.9 | DDP | 2 | 50 * 2 | cudnn_benchmark=True | | 3.6 | DDP | 2 | 100 * 2 | | Для полноты рассказа, важно еще отметить что у Nvidia есть MPS который якобы позволяет крутить 2 процесса на картах без переключения контекста а в PyTorch есть встроенный RPC-фреймворк. Но первый я просто не смог адекватно использовать без очень непонятных низкоуровневых ошибок, а второй требует радикального переписывания кода и радикально усложняет код для тренировки моделей (хотя очень интересен долгосрочно). Так, с 3090 все понятно. Две карточки она не заменит конечно, но сама по себе, даже имея "лишнюю" память (повторюсь, мы тренируем маленькие сети), работает в 2-3 раза быстрее. Эквивалентно ли это наличию 2-3 карт, зависит от задачи. TLDR:
Пробуем A100 с MIG Посмотрев на метрики, доступность и цену карт, А100 на первый взгляд вообще не кажется интересным вариантом, разве что в облаке на 3 дня натренировать 1 большую сетку на небольшом не сильно приватном датасете. Также если вашим алгоритмам сильно помогает AMP / FP16, то А100 может существенно добавить скорости. Но в A100 есть интересная технология MIG (Multi Instance GPU). По сути она позволяет разбить одну "большую и мощную" карточку на набор маленьких "подкарточек" и дальше создать виртуальные Compute Instances, к которым можно обращаться как к отдельным картам. Там довольно много деталей, за ними откройте документацию, но там доступны такие пресеты: +--------------------------------------------------------------------------+
| GPU instance profiles: | | GPU Name ID Instances Memory P2P SM DEC ENC | | Free/Total GiB CE JPEG OFA | |==========================================================================| | 0 MIG 1g.5gb 19 0/7 4.75 No 14 0 0 | | 1 0 0 | +--------------------------------------------------------------------------+ | 0 MIG 2g.10gb 14 0/3 9.75 No 28 1 0 | | 2 0 0 | +--------------------------------------------------------------------------+ | 0 MIG 3g.20gb 9 0/2 19.62 No 42 2 0 | | 3 0 0 | +--------------------------------------------------------------------------+ | 0 MIG 4g.20gb 5 0/1 19.62 No 56 2 0 | | 4 0 0 | +--------------------------------------------------------------------------+ | 0 MIG 7g.40gb 0 0/1 39.50 No 98 5 0 | | 7 1 1 | +--------------------------------------------------------------------------+ Доступные конфигурации
Ответим на вопросы по одному. Тут нам поможет как сама документация, так и совсем свежий блог пост от самой Nvidia. В документации есть такой абзац: MIG supports running CUDA applications by specifying the CUDA device on which the application should be run. With CUDA 11, only enumeration of a single MIG instance is supported.
CUDA applications treat a CI and its parent GI as a single CUDA device. CUDA is limited to use a single CI and will pick the first one available if several of them are visible. To summarize, there are two constraints: - CUDA can only enumerate a single compute instance - CUDA will not enumerate non-MIG GPU if any compute instance is enumerated on any other GPU Note that these constraints may be relaxed in future NVIDIA driver releases for MIG. Сначала, когда я его прочитал, мне показалось, что он означал только что нельзя распилить 2 карты, а можно использовать только одну. После того, как я попробовал поиграться с реальной картой, оказалось, что фреймворк внутри контейнера видит только 1 "карту" (причем видимо выбирает он только "первую"). Причем если мы внимательно прочитаем те примеры, которые Nvidia приводит в своем блоге, они по сути все относятся к сценарию "1 контейнер — 1 кусочек карты" или "тюнинг 7 маленьких моделей параллельно". Еще там есть вот такой пассаж: There is no GPU-to-GPU P2P (both PCIe and NVLINK) support in MIG mode, so MIG mode does not support multi-GPU or multi-node training. For large models or models trained with a large batch size, the models may fully utilize a single GPU or even be scaled to multi-GPUs or multi-nodes. In these cases, we still recommend using a full GPU or multi-GPUs, even multi-nodes, to minimize total training time.
Если использовать MIG по прямому назначению, то есть делить карту на физические кусочки (slices), назначать им Compute Instances и прокидывать их в изолированные контейнеры — то все работает как надо. It just works. Итоговые Замеры Тут не совсем идеальные сравнения (на Титане у меня был DP а не DDP), да и на A100 в итоге я не стал гонять эксперименты на 10, 20, 30 часов и впустую (зачем греть атмосферу), но я замерил время на 1 эпохе. Когда крутишь 1 сетку на A100 утилизация не достигает даже и половины — ну то есть если бы ее можно было распилить на 2-3 карты, все было бы прекрасно
Avg epoch time, m Workers Batch GPUs CER @10 hours CER @20 h CER @30 h Comment 4.7 2, DDP 50 * 2 2 * 3090 14.4 12.3 11.44 Close to 100% utilization 15.3 1, DP 50 2 * Titan X 21.6 17.4 15.7 Close to 100% utilization 11.4 1, DDP 50 * 1 1 * A100 NA NA NA About 35-40% utilization TBD 2, DDP 50 * 2 2 * 1080 Ti TBD TBD TBD На 1080 Ti ресурсы были только чтобы прогнать 1 эпоху. Выводы Выводы про 3090:
Выводы про A100:
=========== Источник: habr.com =========== Похожие новости:
Обработка изображений ), #_mashinnoe_obuchenie ( Машинное обучение ), #_kompjuternoe_zhelezo ( Компьютерное железо ), #_videokarty ( Видеокарты ), #_natural_language_processing |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 14:33
Часовой пояс: UTC + 5