Русский
Русский
English
Статистика
Реклама

Играемся с Новыми GPU на базе Ampere от Nvidia и пробуем MIG


Каждый раз, когда встает заветный вопрос, апгрейдить ли карточки в серверной или нет, я просматриваю подобные статьи и смотрю такие видосы (нет, маркетинговым материалам от 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 GPUNote 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
К списку статей
Опубликовано: 02.12.2020 16:10:54
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Обработка изображений

Машинное обучение

Компьютерное железо

Видеокарты

Natural language processing

Gpu

3090

A100

Ampere

Pytorch

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru