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

Ampere

Перевод NVIDIA Ampere против AMD RDNA 2 битва архитектур

05.03.2021 14:13:31 | Автор: admin

Спустя два года после запуска Turing в сентябре 2020 года NVIDIA сменила архитектуру своих видеокарт на Ampere. AMD не осталась в стороне и вскоре после этого тоже обновила архитектуру RDNA до второй версии.

Всем хотелось, чтобы новые видеокарты RX 6000 могли составить конкуренцию лучшим продуктам NVIDIA. И теперь, когда обе серии вышли в продажу, геймеры оказались избалованы выбором (по крайней мере, теоретически), куда вложить свои деньги.

Но что насчет чипов, лежащих в их основе? Какой из них лучше?

Размеры кристаллов

На протяжении долгих лет графические процессоры были больше центральных и продолжают неуклонно расти. Площадь последнего ГП AMD составляет примерно 520 мм2, что более чем в два раза больше их предыдущего чипа Navi. При этом он все еще не самый большой: эта честь принадлежит графическому процессору в новом ускорителе Instinct MI100 с площадью порядка 750 мм2.

В последний раз AMD производила игровой процессор размером примерно с Navi 21 для карт Radeon R9 Fury и Nano, которые имели архитектуру GCN 3.0 в чипе Fiji. Его площадь составляла 596 мм2.

С 2018 года AMD использует в работе 7-нм процесс от TSMC, и самым большим чипом из этой производственной линейки был Vega 20 (из Radeon VII) с площадью 331 мм2. Все графические процессоры Navi созданы на основе слегка обновленной версии этого процесса, называемой N7P.

И все же, что касается размеров кристалла, корона остается за NVIDIA, но не то чтобы это было хорошо. Последний чип на базе Ampere, GA102, имеет площадь 628 мм2. Это примерно на 17% меньше, чем у его предка, TU102: он имел ошеломляющую площадь кристалла в 754 мм2. Но все это ничто по сравнению с монструозным чипом NVIDIA GA100: используемый в ИИ и обработке данных, этот 7-нм графический процессор имеет площадь 826 мм2. Он наглядно показывает, каких размеров может достичь графический процессор.

По сравнению с ГП NVIDIA Navi 21 выглядит довольно стройно, хотя стоит помнить, что процессор это не только кристалл. GA102 содержит около 28,3 миллиарда транзисторов, тогда как новый чип AMD на 5% меньше 26,8 миллиарда.

Мы не знаем, из скольких слоев состоит каждый из этих ГП, поэтому все, что мы можем сравнить, это отношение транзисторов к площади кристалла, обычно называемое плотностью кристалла. Navi 21 имеет примерно 51,5 млн транзисторов на квадратный мм, в GA102 она заметно ниже 41,1 млн.

Navi 21 производится у TSMC в соответствии с процессом N7P, который дает небольшое увеличение производительности по сравнению с N7. Свои новые чипы GA102 NVIDIA предпочла производить у Samsung. В них используется модифицированная специально для NVIDIA версия так называемого 8-нм узла (обозначаемого как 8N или 8NN). Значения узлов 7 и 8 имеют мало общего с фактическим размером компонентов: это просто маркетинговые термины, используемые для различения производственных технологий.

Теперь давайте углубимся в компоновку каждого графического процессора и посмотрим, что находится у них под капотами.

Внутри кристаллов

Общая структура Ampere GA102 и RDNA 2 Navi 21

Схемы ниже не обязательно показывают, как все устроено физически, но они дают четкое представление о том, из каких компонентов состоят процессоры.

В обоих случаях макеты очень знакомы, поскольку они по сути являются расширенными версиями своих предшественников. Добавление большего количества компонентов повышает производительность, что особенно полезно при условии, что при высоких разрешениях в современных 3D-приложениях рабочие нагрузки рендеринга включают огромное число параллельных вычислений.

Такие схемы полезны, но для нашего анализа интереснее посмотреть, где находятся различные компоненты внутри самих кристаллов. При проектировании крупномасштабного процессора обычно требуется, чтобы общие ресурсы, такие как контроллеры и кэш, находились в центре, чтобы гарантировать, что все компоненты имеют одинаковый путь к ним.

Интерфейсные системы вроде контроллеров локальной памяти или видеовыходов должны располагаться по краям микросхемы, чтобы упростить их подключение к тысячам отдельных проводов, соединяющих графический процессор с остальной частью карты.

Ниже приведены изображения кристаллов AMD Navi 21 и NVIDIA GA102 в искусственных цветах. Оба изображения были подчищены и показывают только один слой внутри чипа, однако при этом дают хорошее представление о внутренностях современного графического процессора

Наиболее очевидное различие между конструкциями заключается в том, что NVIDIA не следует централизованному подходу к компоновке микросхем: все системные контроллеры и основной кэш находятся внизу, а логические блоки расположены в длинных столбцах. Они проделывали это и раньше, но только с моделями среднего и нижнего ценового сегмента.

Например, Pascal GP106 (используемый в GeForce GTX 1060) был буквально вдвое меньше GP104 (из GeForce GTX 1070). В более ранней версии размер кристалла был больше, а кэш-память и контроллер располагались посередине. У младшего брата они переместились в сторону.

Pascal GP104 и GP106Pascal GP104 и GP106

Для всех предыдущих топовых ГП NVIDIA использовала классическую централизованную компоновку. Зачем же было менять подход? Интерфейсы здесь ни при чем, ведь контроллеры памяти и PCI Express работают на краю кристалла. С тепловыми проблемами это тоже не связано, ведь даже если кэш-часть или контроллер кристалла будут нагреваться сильнее, чем логические секции, вам наверняка захочется, чтобы посередине схемы было больше теплопоглощающего кремния. Хотя причина этого изменения не вполне понятна, есть подозрение, что она связана с реализацией блоков вывода рендеринга (ROP).

Позже мы рассмотрим их более подробно, а пока просто скажем, что, хотя изменение макета выглядит странно, оно не оказывает существенного влияния на производительность. Это связано с тем, что 3D-рендеринг сопровождается большим количеством длительных задержек как правило, из-за необходимости ожидания данных. Таким образом, дополнительные наносекунды, добавленные за счет того, что некоторые логические блоки находятся дальше от кэша, скрываются в общей схеме чипа.

Прежде чем мы продолжим, стоит отметить инженерные изменения, реализованные AMD в компоновке Navi 21 по сравнению с Navi 10, установленном в Radeon RX 5700 XT. Несмотря на то, что новый чип в два раза больше предыдущего как по площади, так и по количеству транзисторов, разработчикам удалось улучшить тактовые частоты без значительного увеличения энергопотребления. Например, Radeon RX 6800 XT имеет базовую частоту и частоту разгона 1825 и 2250 МГц, соответственно, при TDP, равном 300 Вт. Те же показатели для Radeon RX 5700 XT: 1605 МГц, 1905 МГц и 225 Вт.

Исследование производительности на ватт карт Ampere и RDNA 2 показало, что оба производителя добились значительных улучшений в этой области, но AMD и TSMC достигли чего-то весьма примечательного сравните разницу между Radeon RX 6800 и Radeon VII на графике выше.

Radeon VII первая коллаборация AMD и TSMC с использованием 7-нм технологии, и менее чем за два года они увеличили производительность на ватт на 64%. Отсюда возникает вопрос: насколько лучше мог бы быть Ampere GA102, если бы NVIDIA осталась с TSMC.

Управление ГП

Как все устроено внутри чипов

Драйверы, которые AMD и NVIDIA создают для своих чипов, по сути работают как трансляторы: они преобразуют процедуры, выданные через API, в последовательность операций, понятную графическим процессорам. Затем все зависит от аппаратного обеспечения: какие инструкции выполняются в первую очередь, какая часть микросхемы их выполняет и так далее.

Этот начальный этап управления инструкциями обрабатывается набором модулей в микросхеме. В RDNA 2 графические и вычислительные шейдеры маршрутизируются через отдельные конвейеры, которые планируют и отправляют инструкции остальной части микросхемы: первый называется Graphics Command Processor, второй асинхронными вычислительными блоками (ACE).

Графические процессоры достигают высокой производительности за счет параллельного выполнения задач, поэтому следующий уровень организации дублируется в чипе. Если проводить аналогию с реальным заводом, это будет похоже на компанию с центральным офисом в одном месте, но производством в нескольких других местах.

AMD называет это Shader Engine (SE), тогда как в NVIDIA они имеют название графических кластеров (GPC): названия разные, но суть одна.

Причина такого разделения проста: блоки обработки графики просто не могут справиться со всем и сразу. Так что имеет смысл продвинуть некоторые обязанности по планированию и организации дальше. Это также означает, что каждый блок может делать что-то независимо от других: скажем, один обрабатывать графические, другой вычислительные шейдеры.

В случае RDNA 2 каждый SE содержит собственный набор фиксированных функциональных блоков схем, предназначенных для выполнения одной конкретной задачи:

  • Блок Primitive Setup подготавливает вершины к обработке, а также генерирует больше вершин (тесселяция) и отбраковывает их;

  • Растеризатор преобразует трехмерный мир треугольников в двухмерную сетку пикселей;

  • Блоки вывода рендеринга (ROP) считывают, записывают и смешивают пиксели.

Блок Primitive Setup работает с частотой 1 треугольник за такт. Параметр может показаться не очень большим, но не забывайте, что эти чипы работают на частотах между 1,8 и 2,2 ГГц, и эта настройка не должна оказываться узким местом ГП. Для Ampere этот блок находится на следующем уровне организации, и об этом мы еще поговорим позже.

Ни AMD, ни NVIDIA не особенно распространяются о своих растеризаторах. NVIDIA называют их Raster Engines. Мы знаем, что они обрабатывают 1 треугольник за такт, но больше никакой информации о них нет например, о субпиксельной точности.

Каждый SE в чипе Navi 21 содержит 128 ROP; GA102 от NVIDIA включает в себя 112 ROP. Может показаться, что у AMD здесь есть преимущество, ведь большее количество ROP означает, что за такт может обрабатываться больше пикселей. Но такие устройства нуждаются в хорошем доступе к кэш-памяти и локальной памяти, и мы поговорим об этом позже в этой статье. А пока давайте дальше рассмотрим на разделение SE/GPC.

Shader Engines AMD разделены на то, что они сами называют двойными вычислительными блоками (DCU), при этом чип Navi 21 использует десять DCU для каждого SE обратите внимание, что в некоторых документах они также классифицируются как Workgroup Processors (WGP). В случае Ampere и GA102 они называются кластерами обработки текстур (TPC), причем каждый графический процессор содержит 6 TPC. Они также работают со скоростью 1 треугольник за такт, и хотя графические процессоры NVIDIA работают на меньшей частоте, чем AMD, и у них намного больше TPC, чем у Navi 21 SE. Таким образом, при той же тактовой частоте GA102 имеет здесь заметное преимущество, поскольку весь чип содержит 42 блока Primitive Setup, тогда как новый RDNA 2 от AMD только 4. Но поскольку на один Raster Engine приходится шесть TPC, GA102 фактически имеет 7 систем примитивов, в то время как Navi 21 четыре. Кажется, что NVIDIA имеет здесь явное лидерство.

Последний уровень организации чипов вычислительные блоки (CU) в RDNA 2 и потоковые мультипроцессоры (SM) в Ampere производственные линии в наших ГП-заводах.

В значительной степени они составляют основную начинку ГП, поскольку содержат все программируемые блоки, используемые для обработки графики, вычислений, а теперь еще и трассировки лучей. На изображении выше видно, что каждый из них занимает очень небольшую часть общего пространства кристалла, но они по-прежнему чрезвычайно сложны и очень важны для общей производительности чипа.

Итак, номенклатура у чипов разная, но функции во многом схожи. И поскольку многое из того, что они делают, ограничивается программируемостью и гибкостью, любые преимущества одного из них по сравнению с другим сводятся к простому ощущению масштаба.

Но в случае с CU и SM AMD и NVIDIA используют разные подходы к обработке шейдеров. И пусть в некоторых областях у них много общего, но много и различий.

Подсчет ядер по методу NVIDIA

Если Turing имела множество существенных отличий от Pascal, то Ampere кажется довольно мягким обновлением предыдущей архитектуры по крайней мере, на первый взгляд. Впрочем, мы точно знаем, что по сравнению с Turing новая архитектура имеет более чем в два раза большее количество ядер CUDA в каждом SM.

В Turing потоковые мультипроцессоры содержат четыре раздела (иногда называемых блоками обработки), каждый из которых содержит логические блоки 16x INT32 и 16x FP32. Эти схемы предназначены для выполнения очень специфических математических операций с 32-битными значениями данных: блоки INT обрабатывают целые числа, а FP числа с плавающей запятой.

NVIDIA заявляет, что SM Ampere имеет в общей сложности 128 ядер CUDA, но, строго говоря, это неправда или с таким же успехом можно считать, что у Turing их было столько же. Блоки INT32 действительно могли обрабатывать значения с плавающей запятой, но только в очень небольшом количестве простых операций. Для Ampere NVIDIA увеличила поддерживаемый диапазон математических операций с плавающей запятой, чтобы соответствовать другим модулям FP32. Это означает, что общее количество ядер CUDA на SM действительно не изменилось, просто половина из них теперь имеет больше возможностей.

Поскольку блоки INT/FP могут работать независимо, SM Ampere может обрабатывать до 128 вычислений FP32 за цикл или 64 операций FP32 и 64 операций INT32 одновременно. Turing же умела делать только последнее.

Таким образом, новый графический процессор может потенциально вдвое увеличить производительность FP32 по сравнению с предшественником. Для вычислительных рабочих нагрузок это большой шаг вперед, но для игр польза окажется гораздо меньшей. Это стало очевидно после тестирования GeForce RTX 3080, в которой используется чип GA102 с 68 включенными SM.

Несмотря на то, что пиковая пропускная способность FP32 составляет 121% по сравнению с GeForce 2080 Ti, в среднем она увеличивает частоту кадров только на 31%. Так почему же вся эта вычислительная мощность тратится зря?

Простой ответ: зря она не тратится, просто игры не всегда запускают инструкции FP32.

Когда NVIDIA выпустила Turing в 2018 году, компания отметила, что в среднем около 36% инструкций, обрабатываемых графическим процессором, связаны с процедурами INT32. Эти вычисления обычно выполняются для определения адресов памяти, сравнения двух значений и логического управления.

Таким образом, для этих операций функция двойной скорости FP32 не используется, поскольку блоки с двумя путями данных могут работать только с целыми числами или с плавающей запятой. SM переключится в этот режим только в том случае, если все выстроенные в очередь 32 потока, обрабатываемые им в данный момент, выполняют одну и ту же операцию FP32. Во всех остальных случаях SM в Ampere работают так же, как и в Turing.

Это означает, что GeForce RTX 3080 имеет только 11-процентное преимущество FP32 над 2080 Ti при работе в режиме INT+FP. Вот почему реальный прирост производительности в играх не так высок, как предполагают исходные данные.

Какие тут еще улучшения? На каждый SM приходится меньше тензорных ядер, но каждое из них оказывается намного более мощным, чем в Turing. Эти схемы выполняют очень специфические вычисления (например, умножают два значения FP16 и складывают ответ с другим FP16), и теперь каждое ядро выполняет 32 таких операции за цикл.

Также есть поддержка новой функции Fine-Grained Structured Sparsity. Если кратко, то с ее помощью математическая скорость может быть удвоена путем удаления данных, которые не влияют на ответ. Опять же, это хорошая новость для профессионалов, работающих с нейронными сетями и искусственным интеллектом, но на данный момент в этом нет никаких значительных преимуществ для игровых разработчиков.

Ядра трассировки лучей также претерпели доработки: теперь они могут работать независимо от ядер CUDA, поэтому, пока они выполняют обход BVH или математику пересечения примитивов лучей, остальная часть SM все еще может обрабатывать шейдеры. Часть ядер трассировки лучей, отвечающая за проверку пересечений, также имеет вдвое большую производительность.

Ядра трассировки лучей также оснащены дополнительным оборудованием, которое помогает применять трассировку лучей к размытию движения, но эта функция в настоящее время доступна только через собственный Optix API от NVIDIA.

Есть и другие хитрости, но в целом подход основан на разумной, но неуклонной эволюции, а не на совершенно новом дизайне. Но учитывая, что в исходных возможностях Turing с самого начала не было ничего особенно плохого, это и неудивительно.

Что же насчет AMD что они сделали с вычислительными модулями в RDNA 2?

Трассировка лучей по-особенному

На первый взгляд, AMD не сильно изменила вычислительные блоки: они по-прежнему содержат два набора векторных блоков SIMD32, скалярный блок SISD, блоки наложения текстур и стек различных кэшей. Произошли некоторые изменения в отношении того, какие типы данных и связанные с ними математические операции они могут выполнять. Но наиболее заметным изменением для обычного потребителя является то, что AMD теперь предлагает аппаратное ускорение для определенных процедур трассировки лучей.

Эта часть вычислительных блоков выполняет проверки пересечения лучевого бокса или лучевого треугольника то же самое, что и ядра трассировки лучей в Ampere. Однако последние также ускоряют алгоритмы обхода BVH, тогда как в RDNA 2 это делается с помощью вычислительных шейдеров с использованием модулей SIMD 32.

Независимо от того, сколько у вас шейдерных ядер или насколько высоки их тактовые частоты, использование специализированных схем, предназначенных для выполнения только одной задачи, всегда будет предпочтительнее, чем обобщенный подход. Именно поэтому и были изобретены графические процессоры: все в мире рендеринга можно сделать с помощью ЦП, но общий характер делает их непригодными для графических применений.

Блоки Ray Accelerator находятся рядом с текстурными процессорами, поскольку они фактически являются частью одной и той же структуры. Хотя эта система действительно предлагает большую гибкость и устраняет необходимость в том, чтобы части кристалла занимались только трассировкой лучей и ничем другим одновременно с ней, первая реализация ее имеет некоторые недостатки. Наиболее примечательным из них является то, что текстурные процессоры могут обрабатывать только операции, связанные с текстурами или пересечениями примитивов лучей. Учитывая, что ядра трассировки лучей NVIDIA теперь работают полностью независимо от остальной части SM, это дает Ampere явное преимущество по сравнению с RDNA 2 в проработке структур ускорения и тестах пересечений, необходимых для трассировки лучей.

Пока производительность трассировки лучей в новейших видеокартах AMD была исследована лишь вкратце, но уже заметно, что влияние трассировки лучей очень зависит от игры.

Например, в Gears 5 видеокарта Radeon RX 6800 (в которой используется вариант графического процессора Navi 21 с 60 CU) при включении трассировки лучей снизила частоту кадров только на 17%, тогда как в Shadow of the Tomb Raider аж на 52%. Для сравнения, у NVIDIA RTX 3080 (с использованием 68 SM GA102) средняя потеря частоты кадров в этих двух играх составила 23% и 40% соответственно.

Чтобы больше рассказать о реализации AMD, необходим более подробный анализ трассировки лучей, однако в качестве первой итерации технологии она кажется вполне конкурентоспособной, но чувствительной к тому, какое приложение выполняет трассировку.

Как упоминалось ранее, вычислительные блоки в RDNA 2 теперь поддерживают больше типов данных: наиболее заметными из них являются типы данных с низкой точностью, такие как INT4 и INT8. Они используются для тензорных операций в алгоритмах машинного обучения, и хотя AMD имеет отдельную архитектуру (CDNA) для ИИ и центров обработки данных, это обновление предназначено для использования с DirectML.

Этот API является недавним дополнением к семейству Microsoft DirectX 12. Комбинация аппаратного и программного обеспечения обеспечивает лучшее ускорение шумоподавления в алгоритмах трассировки лучей и временного масштабирования. В случае с последним у NVIDIA, конечно же, есть своя технология под названием DLSS. Она использует тензорные ядра в SM для выполнения части вычислений но учитывая, что аналогичный процесс может быть построен и через DirectML, может показаться, что эти компоненты в некоторой степени избыточны. Однако и в Turing, и в Ampere тензорные ядра также обрабатывают все математические операции, связанные с форматами данных FP16.

В RDNA 2 такие вычисления выполняются с использованием шейдерных блоков и упакованных форматов то есть, каждый 32-битный векторный регистр содержит два 16-битных.

Какой же подход лучше?

AMD преподносит свои блоки SIMD32 как векторные процессоры, поскольку они выдают одну инструкцию для нескольких значений данных. Один векторный блок содержит 32 потоковых процессора, и поскольку каждый из них работает только с одним фрагментом данных, по факту операции носят скалярный характер. По сути, это то же самое, что и SM в Ampere, где каждый блок обработки также применяет одну инструкцию для 32 значений данных.

Но если у NVIDIA весь SM может обрабатывать до 128 вычислений FMA FP32 за цикл , один вычислительный блок RDNA 2 производит только 64 таких вычисления. Использование FP16 увеличивает это значение до 128 FMA за цикл, что совпадает с тем, что делают тензорные ядра в Ampere при стандартных вычислениях FP16.

SM NVIDIA могут выполнять инструкции для одновременной обработки целочисленных значений и значений с плавающей запятой (например, 64 FP32 и 64 INT32) и имеют независимые блоки для операций FP16, тензорной математики и процедур трассировки лучей. Блоки управления AMD выполняют большую часть рабочей нагрузки блоков SIMD32, хотя у них есть отдельные скалярные блоки, которые поддерживают простую целочисленную математику.

Таким образом, может показаться, что у Ampere здесь преимущество: у GA102 больше SM, чем у Navi 21, и у них больше возможностей, когда дело доходит до пиковой пропускной способности, гибкости и предлагаемых функций. Но у AMD есть свой джокер в рукаве.

Система памяти и многоуровневые кэши

Давайте сначала взглянем на Ampere. В целом, внутри произошли некоторые заметные изменения: объем кэша 2-го уровня увеличился на 50% (Turing TU102 имел 4096 КБ, соответственно), а кэши 1-го уровня в каждом SM увеличились вдвое.

Как и раньше, кэш-память L1 здесь настраивается с точки зрения того, сколько места в кэше можно выделить для данных, текстур или общих вычислений. Для графических шейдеров (например, вершинных или пиксельных) и асинхронных вычислений кэш фактически установлен на:

  • 64 КБ для данных и текстур;

  • 48 КБ для общей памяти;

  • 16 КБ для конкретных операций.

Остальная часть внутренней памяти осталась прежней, но за пределами графического процессора ждет приятный сюрприз. NVIDIA стала работать с Micron и теперь использует модифицированную версию GDDR6 для своих потребностей в локальной памяти. По сути, это тот же GDDR6, но шина данных полностью заменена. Вместо того, чтобы использовать обычную настройку 1 бит на вывод, при которой сигнал очень быстро колеблется между двумя значениями напряжения (PAM), GDDR6X использует четыре значения напряжения:

PAM2 в GDDR6 (сверху) и PAM4 в GDDR6X (снизу)PAM2 в GDDR6 (сверху) и PAM4 в GDDR6X (снизу)

Благодаря этому GDDR6X эффективно передает 2 бита данных на вывод за цикл, поэтому при той же тактовой частоте и количестве выводов полоса пропускания удваивается. GeForce RTX 3090 поддерживает 24 модуля GDDR6X, работающих в одноканальном режиме и рассчитанных на 19 Гбит/с, что дает пиковую пропускную способность 936 ГБ/с. Это на 52% больше, чем у GeForce RTX 2080 Ti. Таких показателей пропускной способности в прошлом можно было достигнуть только при помощи HBM2, реализация которого может быть куда более дорогостоящей, чем GDDR6.

Однако такую память производит только Micron, а использование PAM4 добавляет дополнительной сложности производственному процессу, требуя гораздо более жестких допусков при передаче сигналов. AMD пошла по другому пути: вместо того, чтобы обращаться за помощью к стороннему поставщику, они использовали свое подразделение ЦП, чтобы изобрести что-то новое. Общая система памяти в RDNA 2 не сильно преобразилась по сравнению с предшественницей но есть два существенных изменения.

Каждый шейдерный движок теперь имеет два набора кэшей первого уровня. Но как можно втиснуть в графический процессор 128 МБ кэш-памяти третьего уровня? Используя конструкцию SRAM для кэша L3, AMD встроила в чип два набора кэш-памяти высокой плотности объемом 64 МБ. Транзакции данных обрабатываются 16 наборами интерфейсов, каждый из них сдвигает 64 байта за такт.

Так называемый Infinity Cache имеет свой собственный тактовый домен и может работать на частоте 1,94 ГГц, что дает пиковую внутреннюю пропускную способность 1986,6 ГБ/с. И поскольку это не внешняя DRAM, задержки здесь исключительно низкие. Такой кэш идеально подходит для хранения структур ускорения трассировки лучей, и поскольку обход BVH включает в себя множество проверок данных, Infinity Cache должен в этом особенно помочь.

На данный момент не ясно, работает ли кеш третьего уровня в RDNA 2 так же, как в ЦП Zen 2: то есть, как кэш жертвы (victim cache) второго уровня. Обычно, когда необходимо очистить последний уровень кэша, чтобы освободить место для новых данных, любые новые запросы этой информации должны поступать в DRAM.

В кэше жертвы хранятся данные, помеченные для удаления из следующего уровня памяти, и имея под рукой 128 МБ, Infinity Cache потенциально может хранить 32 полных набора кэша L2. Эта система снижает нагрузку на контроллеры GDDR6 и DRAM.

Старые конструкции графических процессоров AMD боролись с нехваткой внутренней пропускной способности особенно после увеличения тактовой частоты, но дополнительный кэш во многом поможет при решении этой проблемы.

Так что же лучше?

Использование GDDR6X дает GA102 огромную полосу пропускания для локальной памяти, а большие кэши помогают уменьшить влияние промахов кэша. Массивная кэш-память 3-го уровня Navi 21 позволяет реже использовать DRAM, при этом графический процессор может работать на более высоких тактовых частотах без дефицита данных.

Решение AMD придерживаться GDDR6 означает, что сторонним поставщикам доступно больше источников памяти, в то время как любая компания, производящая GeForce RTX 3080 или 3090, будет вынуждена использовать Micron. И хотя GDDR6 поставляется с модулями различной плотности, GDDR6X в настоящее время ограничен 8 Гб.

Система кэширования в RDNA 2, возможно, является лучшим подходом, чем та, что используется в Ampere, поскольку использование нескольких уровней встроенной SRAM всегда обеспечивает более низкие задержки и лучшую производительность для заданного диапазона мощности, чем внешняя DRAM, независимо от пропускной способности последней.

Пайплайны рендеринга

Обе архитектуры содержат множество обновлений для фронтэнда и бэкэнда пайплайнов рендеринга. Ampere и RDNA 2 полностью поддерживают mesh-шейдеры и variable rate-шейдеры в DirectX12 Ultimate, хотя чип NVIDIA обладает большей геометрической производительностью благодаря большему количеству процессоров для этих задач.

Хотя использование mesh-шейдеров позволит разработчикам создавать еще более реалистичное окружение, ни в одной игре никогда не будет полной привязки производительности к этому этапу процесса рендеринга. Это связано с тем, что основная часть самой сложной работы приходится на этапы трассировки пикселей или лучей.

Именно здесь вступает в игру использование variable rate-шейдеров. В основном этот процесс включает применение шейдеров для освещения и цвета на блоке пикселей, а не на отдельных пикселях. Это похоже на уменьшение разрешения игры для повышения производительности, но, поскольку его можно применить только к выбранным областям, потеря визуального качества не всегда очевидна.

Обе архитектуры также получили обновление для блоков вывода рендеринга (ROP), поскольку это улучшит производительность при высоких разрешениях независимо от того, используются ли variable rate-шейдеры. Во всех предыдущих поколениях своих графических процессоров NVIDIA привязывала ROP к контроллерам памяти и кэшу 2-го уровня.

В Turing восемь блоков ROP были напрямую связаны с одним контроллером и фрагментом кэша размером 512 КБ. Добавление большего количества ROP представляется проблематичным, поскольку для этого требуется больше контроллеров и кэша, поэтому для Ampere ROP теперь полностью выделены для GPC. GA102 поддерживает 12 ROP на один GPC (каждый обрабатывает 1 пиксель за такт), что дает в общей сложности 112 блоков для всего чипа.

AMD следует системе, аналогичной старому подходу NVIDIA (т. е. привязке к контроллеру памяти и кэш-памяти L2), хотя их ROP в основном используют кэш первого уровня для чтения/записи и смешивания пикселей. В чипе Navi 21 ROP теперь обрабатывает 8 пикселей за цикл в 32-битном цвете и 4 пикселя в 64-битном.

RTX IO в NVIDIA система обработки данных, которая позволяет графическому процессору напрямую обращаться к накопителю, копировать необходимые данные, а затем распаковывать их с помощью ядер CUDA.

Современные методы предполагают, что всем этим управляет центральный процессор: он получает запрос данных от драйверов графического процессора, копирует данные с накопителя в системную память, распаковывает их, а затем копирует в DRAM графической карты.

Этот механизм по своей природе является последовательным: ЦП обрабатывает один запрос за раз. NVIDIA заявляет о таких цифрах, как 100-кратная пропускная способность и 20-кратное снижение нагрузки на ЦП, но до тех пор, пока система не будет протестирована в реальных условиях, их никак нельзя будет исследовать дальше.

Когда AMD представила RDNA 2 и новые видеокарты Radeon RX 6000, вместе с ними была представлена и так называемая Smart Access Memory. Это не ответ на RTX IO на самом деле, это даже не новая функция. По умолчанию контроллер PCI Express в ЦП может адресовать до 256 МБ памяти видеокарты для каждого отдельного запроса доступа. Это значение устанавливается размером регистра базового адреса (BAR), и еще в 2008 году в спецификации PCI Express 2.0 была дополнительная функция, позволяющая изменять его размер. Преимущество его состоит в том, что нет нужды обрабатывать большое количество запросов на доступ, чтобы адресовать всю DRAM карты.

Функция требует поддержки операционной системой, центральным процессором, материнской платой, графическим процессором и его драйверами. В настоящее время на ПК с Windows система ограничена определенной комбинацией процессоров Ryzen 5000, материнских плат серии 500 и видеокарт Radeon RX 6000.

Эта простая функция дала поразительные результаты на тестах: повышение производительности на 15% при разрешении 4K. Неудивительно, что вскоре NVIDIA заявила, что реализует эту функцию для RTX 3000 в ближайшем будущем.

Мультимедиа-движок и видеовыход

Обе архитектуры обеспечивают вывод изображения через HDMI 2.1 и DisplayPort 1.4a. Первый предлагает более широкую полосу пропускания сигнала, но оба они рассчитаны на 4K при 240 Гц с HDR и 8K при 60 Гц. Это достигается при помощи либо цветовой субдискретизации 4:2:0, либо DSC 1.2a. Это алгоритмы сжатия видеосигнала, обеспечивающие значительное снижение требований к полосе пропускания без большой потери визуального качества. Без них даже пиковой пропускной способности HDMI 2.1 в 6 ГБ/с было бы недостаточно для передачи изображений 4K с частотой 6 Гц.

48-дюймовый OLED-монитор LG CK: 4K при 120 Гц требует HDMI 2.148-дюймовый OLED-монитор LG CK: 4K при 120 Гц требует HDMI 2.1

Ampere и RDNA 2 также поддерживают системы с переменной частотой обновления (FreeSync для AMD, G-Sync для NVIDIA), в кодировании и декодировании видеосигналов между ними также нет заметной разницы.

Независимо от того, какой процессор рассматривать, в обоих есть поддержка декодирования 8K AV1, 4K H.264 и 8K H.265, хотя и еще не было тщательно изучено, насколько хорошо они оба работают в таких ситуациях. Ни одна из компаний не раскрывает подробностей о внутреннем устройстве в этих областях. Какими бы важными они ни были в наши дни, все внимание по-прежнему привлекают другие аспекты графических процессоров.

Созданы для вычислений, созданы для игр

Раньше AMD и NVIDIA использовали разные подходы к выбору архитектуры и конфигурации. Но по мере того, как 3D-графика набирала все большую популярность, они становились все более похожими.

На данный момент у NVIDIA есть три чипа, использующих технологию Ampere: GA100, GA102 и GA104.

GA104 используется в GeForce RTX 3060 TiGA104 используется в GeForce RTX 3060 Ti

Последний урезанная версия GA102. GA100 совсем другое дело.

В нем нет ядер трассировки лучей и CUDA с поддержкой INT32+FP32 вместо этого он содержит множество дополнительных модулей FP64, еще больше load/store систем и огромный объем кэш-памяти L1/L2. Все это объясняется тем, что он разработан для вычислений ИИ и анализа данных.

GA102/104, в свою очередь, должны охватывать все остальные рынки, на которые нацелена NVIDIA: геймеров, профессиональных графических художников и инженеров, а также маломасштабный ИИ и вычислительные системы. Ampere должен быть мастером на все руки а это задача не из легких.

Arcturus CDNA площадью 750 мм2Arcturus CDNA площадью 750 мм2

RDNA 2 была разработана только для игр на ПК и консолях, хотя могла с таким же успехом работать в тех же областях, что и Ampere. Однако AMD решила сохранить свою архитектуру GCN и обновить ее в соответствии с требованиями сегодняшних клиентов.

Там, где RDNA 2 породила Big Navi, можно сказать, что CDNA породила Big Vega: в Instinct MI100 находится их чип Arcturus 50-миллиардный транзисторный графический процессор с 128 вычислительными блоками.

Хотя NVIDIA в значительной степени доминирует на профессиональном рынке с моделями Quadro и Tesla, Navi 21 просто не нацелена на конкуренцию с ними. Ограничивает ли это каким-либо образом требование, чтобы Ampere вписалась на несколько рынков?

Правильный ответ: нет.

Скоро AMD выпустит Radeon RX 6900 XT, в котором используется полная версия Navi 21 (без отключенных CU), которая сможет работать так же хорошо, как GeForce RTX 3090 или даже лучше. Но GA102 на этой карте также не полностью включен, поэтому у NVIDIA всегда есть возможность обновить эту модель до супер-версии, как они это сделали с Turing в прошлом году.

Можно утверждать, что, поскольку RDNA 2 используется в Xbox Series X/S и PlayStation 5, разработчики игр будут отдавать предпочтение этой архитектуре для своих игровых движков. Но стоит просто вспомнить времена, когда GCN использовался в Xbox One и PlayStation 4, чтобы получить представление, как это, вероятно, будет происходить.

Первая версия, выпущенная в 2013 году, использовала графический процессор, построенный на архитектуре GCN 1.0, не появлявшийся в видеокартах для настольных ПК вплоть до следующего года. Xbox One X, выпущенный в 2017 году, использовал GCN 2.0, которому к тому времени было уже более 3 лет.

Так что же все игры, созданные для Xbox One или PS4, а затем портированные на ПК, по умолчанию лучше работали на видеокартах AMD? А вот и нет. Поэтому мы не можем предположить, что на этот раз с RDNA 2 все будет иначе, несмотря на впечатляющий набор функций.

Но все это в конечном итоге не имеет значения, поскольку оба графических процессора обладают исключительными возможностями и представляют собой чудо того, что может быть достигнуто в производстве полупроводников. NVIDIA и AMD предлагают разные инструменты, поскольку пытаются решать разные проблемы: Ampere стремится быть всем для всех, RDNA 2 только для игр.

На этот раз битва зашла в тупик, хотя каждый может претендовать на победу в определенной области. Войны ГП еще продолжатся в течение следующего года, когда в бой вступит новый участник: Intel со своей серией Xe. По крайней мере, нам не придется ждать еще два года, чтобы увидеть, как протекает эта борьба.

Подробнее..

Перевод Что покупать для глубокого обучения личный опыт и советы использования GPU

28.09.2020 16:10:09 | Автор: admin
Перевод статьи Тима Деттмерса, кандидата наук из Вашингтонского университета, специалиста по глубокому обучению и обработке естественного языка

Глубокое обучение (ГО) область с повышенными запросами к вычислительным мощностям, поэтому ваш выбор GPU фундаментально определит ваш опыт в этой области. Но какие свойства важно учесть, если вы покупаете новый GPU? Память, ядра, тензорные ядра? Как сделать лучший выбор по соотношению цены и качества? В данной статье я подробно разберу все эти вопросы, распространённые заблуждения, дам вам интуитивное представление о GPU а также несколько советов, которые помогут вам сделать правильный выбор.

Статья написана так, чтобы дать вам несколько разных уровней понимания GPU, в т.ч. новой серии Ampere от NVIDIA. У вас есть выбор:
  1. Если вам не интересны детали работы GPU, что именно делает GPU быстрым, чего уникального есть в новых GPU серии NVIDIA RTX 30 Ampere можете пропустить начало статьи, вплоть до графиков по быстродействию и быстродействию на $1 стоимости, а также раздела рекомендаций. Это ядро данной статьи и наиболее ценное содержимое.
  2. Если вас интересуют конкретные вопросы, то наиболее частые из них я осветил в последней части статьи.
  3. Если вам нужно глубокое понимание того, как работают GPU и тензорные ядра, лучше всего будет прочесть статью от начала и до конца. В зависимости от ваших знаний по конкретным предметам вы можете пропустить главу-другую.


Каждая секция предваряется небольшим резюме, которое поможет вам решить, читать её целиком или нет.

Содержание


Обзор
Как работают GPU?
Самые важные характеристики GPU, влияющие на скорость обработки
Тензорные ядра
Перемножение матриц без тензорных ядер
Перемножение матриц с тензорными ядрами
Пропускная способность памяти
Общая память / Кэш L1 / Регистры
Оценка эффективности Ampere в ГО
Теоретические оценки скорости Ampere
Практические оценки скорости Ampere
Возможные неточности оценок
Что ещё следует учесть в случае с Ampere / RTX 30
Разреженное обучение
Вычисления с низкой точностью
Новый дизайн вентилятора и проблемы с теплоотводом
Трёхслотовые карты и проблемы питания
Эффективность GPU при глубоком обучении
Скорость глубокого обучения GPU в пересчёте на стоимость
Рекомендации по выбору GPU
Когда мне понадобится более 11 ГБ памяти?
Когда можно обойтись памятью менее 11 ГБ?
Общие рекомендации
Рекомендации для GPU-кластеров
Какие GPU лучше не покупать
Когда лучше не покупать новых GPU?
Ответы на вопросы и заблуждения
Нужна ли мне PCIe 4.0?
Нужны ли мне линии PCIe 8x/16x?
Как впихнуть четыре RTX 3090, если каждая из них занимает по 3 слота PCIe?
Как охлаждать 4 RTX 3090 или 4 RTX 3080?
Можно ли использовать GPU нескольких разных типов?
Что такое NVLink, и нужно ли оно мне?
У меня нет денег даже на самые дешёвые ваши рекомендации. Что делать?
Что нужно для параллелизации проекта между двумя машинами?
Подходят ли алгоритмы перемножения разреженных матриц для любых разреженных матриц?
Нужен ли мне процессор от Intel для работы с несколькими GPU?
Имеет ли значение для охлаждения форма корпуса?
Догонят ли AMD GPU + ROCm когда-нибудь NVIDIA GPU + CUDA?
Когда лучше использовать облачные сервисы, а когда специальный компьютер с GPU?
Советы для тех, кому лень читать

Обзор


Данная статья структурирована следующим образом. Сначала я объясняю, что делает GPU быстрым. Я опишу разницу между процессорами и GPU, тензорные ядра, пропускную способность памяти, иерархию памяти GPU, и как это всё связано с быстродействием в задачах ГО. Эти объяснения, возможно, помогут вам лучше понять, какие параметры GPU вам нужны. Потом я дам теоретические оценки быстродействия GPU и их соответствие с некоторыми тестами на скорость от NVIDIA, чтобы получить надёжные данные по быстродействию без предвзятости. Я опишу уникальные особенности GPU серии NVIDIA RTX 30 Ampere, которые стоит рассмотреть при покупке. Затем я дам рекомендации по GPU для вариантов с 1-2 чипами, 4, 8, и GPU-кластеров. Потом пойдёт раздел ответов на частые вопросы, которые мне задавали в твиттере. Там же будут развеяны распространённые заблуждения и освещены разные проблемы типа облаков против настольных компьютеров, охлаждения, AMD против NVIDIA, и др.

Как работают GPU?


Если вы часто пользуетесь GPU, полезно понимать, как они работают. Это знание пригодится вам, чтобы разобраться, почему в некоторых случаях GPU оказываются медленнее, а в других быстрее. И тогда вы, возможно, поймёте, нужен ли вам вообще GPU, и какие варианты железа смогут соревноваться с ним в будущем. Вы можете пропустить этот раздел, если просто хотите получить полезную информацию по быстродействию и аргументы в пользу выбора определённого GPU. Лучше всего на общем уровне я объяснил принципы работы GPU в ответе на сайте Quora.

Это общее объяснение, хорошо раскрывающее вопрос о том, почему для ГО GPU подходят лучше, чем процессоры. Если мы изучим детали, мы сможем понять, чем GPU отличаются друг от друга.

Самые важные характеристики GPU, влияющие на скорость обработки


Этот раздел поможет вам более интуитивно мыслить на тему быстродействия в области ГО. Это понимание поможет вам оценивать будущие GPU самостоятельно.

Тензорные ядра


Резюме:
  • Тензорные ядра уменьшают количество тактов, необходимых для подсчёта умножений и сложений в 16 раз в моём примере для матрицы 3232 с 128 до 8 тактов.
  • Тензорные ядра уменьшают зависимость от повторяющегося доступа в общую память, экономя такты доступа в память.
  • Тензорные ядра работают так быстро, что вычисления перестают быть узким местом. Единственным узким местом остаётся передача им данных.


Сегодня существует настолько много недорогих GPU, что почти каждый может позволить себе GPU с тензорными ядрами. Поэтому я всегда рекомендую GPU с тензорными ядрами. Полезно разобраться в принципах их работы, чтобы оценить важность этих вычислительных модулей, специализирующихся на перемножении матриц. На простом примере перемножения матриц A*B=C, где размер всех матриц равен 3232, я покажу вам, как выглядит перемножение с тензорными ядрами и без них.

Чтобы разобраться в этом, сначала вам нужно понять концепцию тактов. Если процессор работает с частотой 1 ГГц, он проделывает 109 тактов в секунду. Каждый такт это возможность для вычислений. Но по большей части операции идут дольше, чем один такт. Получается конвейер чтобы начать выполнение одной операции, нужно сначала подождать столько тактов, сколько требуется на выполнение предыдущей операции. Это также называется задержкой операции.

Вот некоторые важные длительности, или задержки операции в тактах:
  • Доступ к глобальной памяти до 48 Гб: ~200 тактов.
  • Доступ к общей памяти (до 164 КБ на потоковый мультипроцессор): ~20 тактов.
  • Совмещённое умножение-сложение (СУС): 4 такта.
  • Перемножение матриц в тензорных ядрах: 1 такт.


Также вам нужно знать, что самая малая единица нитей в GPU пакет из 32 нитей называется варп [warp]. Варпы обычно работают синхронно всем нитям внутри варпа нужно дождаться друг друга. Все операции в памяти GPU оптимизированы под варпы. К примеру, загрузка из глобальной памяти идёт по 32*4 байта по 32 числа с плавающей запятой, по одному такому числу на каждую нить в варпе. В потоковом мультипроцессоре (эквивалент ядра процессора для GPU) может быть до 32 варпов = 1024 нити. Ресурсы мультипроцессора делятся между всеми активными варпами. Поэтому иногда нам нужно, чтобы работало меньше варпов, чтобы на один варп приходилось больше регистров, общей памяти и ресурсов тензорных ядер.

В обоих примерах предположим, что у нас есть одинаковые вычислительные ресурсы. В этом небольшом примере перемножения матриц 3232 мы используем 8 мультипроцессоров (~10% от RTX 3090) и по 8 варпов на мультипроцессоре.

Перемножение матриц без тензорных ядер


Если нам нужно перемножить матрицы A*B=C, каждая из которых имеет размер 3232, тогда нам нужно загрузить данные из памяти, к которой мы постоянно обращаемся, в общую память, поскольку задержки доступа к ней примерно в 10 раз меньше (не 200 тактов, а 20 тактов). Блок памяти в общей памяти часто называют плиткой памяти [memory tile], или просто плиткой. Загрузку двух 3232 чисел с плавающей запятой в плитку общей памяти можно провести параллельно, используя 2*32 варпа. У нас есть 8 мультипроцессоров по 8 варпов каждый, поэтому благодаря параллелизации нам нужно провести одну последовательную загрузку из глобальной в общую память, на что уйдёт 200 тактов.

Для перемножения матриц нам нужно загрузить вектор из 32 чисел из общей памяти А и общей памяти В, и провести СУС, а потом сохранить выход в регистрах С. Мы разделяем эту работу так, чтобы каждый мультипроцессор занимался 8-ю скалярными произведениями (3232) для вычисления 8 выходных данных для С. Почему их ровно 8 (в старых алгоритмах 4), это уже чисто техническая особенность. Чтобы разобраться с этим, рекомендую прочесть статью Скотта Грэя. Это означает, что у нас пройдёт 8 доступов к общей памяти стоимостью в 20 тактов каждый, и 8 операций СУС (32 параллельных), стоимостью 4 такта каждая. В сумме стоимость получится:

200 тактов (глобальная память) + 8*20 тактов (общая память) + 8*4 такта (СУС) = 392 такта

Теперь посмотрим на эту стоимость для тензорных ядер.

Перемножение матриц с тензорными ядрами


При помощи тензорных ядер можно перемножить матрицы 44 за один цикл. Для этого нам нужно скопировать память в тензорные ядра. Как и выше, нам нужно прочесть данные из глобальной памяти (200 тактов) и сохранить их в общей. Для перемножения матриц 3232 нам нужно произвести 88=64 операций в тензорных ядрах. В одном мультипроцессоре находится 8 тензорных ядер. С 8 мультипроцессорами у нас будет 64 тензорных ядра как раз столько, сколько надо! Мы можем передать данные из общей памяти в тензорные ядра за 1 передачу (20 тактов), а потом провести все эти 64 операции параллельно (1 такт). Это значит, что общая стоимость перемножения матриц в тензорных ядрах будет:

200 тактов (глобальная память) + 20 тактов (общая память) + 1 такт (тензорные ядра) = 221 такт

Таким образом, используя тензорные ядра, мы значительно уменьшаем стоимость перемножения матриц, с 392 до 221 такта. В нашем упрощённом примере тензорные ядра уменьшили стоимость как доступа к общей памяти, так и операций СУС.

Хотя в данном примере примерно соблюдается последовательность вычислительных шагов с использованием тензорных ядер и без них, учтите, что это очень упрощённый пример. В реальных случаях перемножения матриц участвуют куда как большие плитки памяти и немного другие последовательности действий.

Однако, как мне кажется, из этого примера становится понятно, почему следующий атрибут, пропускная способность памяти, так важна для GPU с тензорными ядрами. Поскольку глобальная память наиболее затратная вещь при перемножении матриц с тензорными ядрами, наши GPU были бы гораздо быстрее, если бы удалось уменьшить задержки доступа к глобальной памяти. Это можно сделать, либо увеличив тактовую частоту памяти (больше тактов в секунду, но больше тепла и энергопотребления), либо увеличив количество элементов, которые можно передавать за раз (ширину шины).

Пропускная способность памяти


В предыдущем разделе мы увидели, насколько быстры тензорные ядра. Настолько быстры, что большую часть времени они простаивают, ожидая, пока к ним поступят данные из глобальной памяти. К примеру, во время обучения по проекту BERT Large, где использовались очень большие матрицы чем больше, тем для тензорных ядер лучше утилизация тензорных ядер в TFLOPS составила порядка 30%, что означает, что 70% времени тензорные ядра простаивали.

Это означает, что при сравнении двух GPU с тензорными ядрами одним из лучших индикаторов быстродействия каждого из них будет служить пропускная способность памяти. К примеру, у A100 GPU пропускная способность составляет 1,555 ГБ/с, а у V100 900 ГБ/с. Простейший подсчёт говорит, что A100 будет быстрее V100 в 1555/900 = 1,73 раза.

Общая память / Кэш L1 / Регистры


Поскольку ограничивающим быстродействие фактором является передача данных в память тензорных ядер, мы должны обратиться к другим свойствам GPU, позволяющим ускорить передачу к ним данных. С этим связаны общая память, кэш L1 и количество регистров. Чтобы понять, как иерархия памяти ускоряет передачу данных, полезно понять, как в GPU происходит перемножение матриц.

Для перемножения матриц мы пользуемся иерархией памяти, идущей от медленной глобальной памяти к быстрой локальной общей памяти, и затем к сверхбыстрым регистрам. Однако чем быстрее память, тем она меньше. Поэтому нам нужно делить матрицы на меньшие, а потом выполнять перемножение этих меньших плиток в местной общей памяти. Тогда оно будет происходить быстро и ближе к потоковому мультипроцессору (ПМ) эквиваленту ядра процессора. Тензорные ядра позволяют нам сделать ещё один шаг: мы берём все плитки и грузим их часть в тензорные ядра. Общая память обрабатывает матричные плитки в 10-50 раз быстрее, чем глобальная память GPU, а регистры тензорных ядер обрабатывают её в 200 раз быстрее, чем глобальная память GPU.

Увеличение размера плиток позволяет нам повторно использовать больше памяти. Подробно я писал об этом в моей статье TPU vs GPU. В TPU на каждое тензорное ядро приходится по очень, очень большой плитке. TPU могут повторно использовать гораздо больше памяти с каждой новой передачей данных из глобальной памяти, из-за чего они чуть более эффективно справляются с перемножением матриц по сравнению с GPU.

Размеры плитки определяются объёмами памяти на каждый из ПМ эквивалент ядра процессора на GPU. В зависимости от архитектур эти объёмы составляют:
  • Volta: 96 кБ общей памяти / 32 кБ L1
  • Turing: 64 кБ общей памяти / 32 кБ L1
  • Ampere: 164 кБ общей памяти / 32 кБ L1


Видно, что у Ampere обща память гораздо больше, что позволяет использовать плитки большего размера, что уменьшает количество обращений к глобальной памяти. Поэтому Ampere эффективнее пользуется пропускной способностью памяти GPU. Это увеличивает быстродействие на 2-5%. Особенно увеличение заметно на огромных матрицах.

У тензорных ядер Ampere есть ещё одно преимущество объём общих для нескольких нитей данных у них больше. Это уменьшает количество обращений к регистрам. Объём регистров ограничен 64 к на ПМ или 255 на нить. Если сравнить с Volta, тензорные ядра Ampere используют в 3 раза меньше регистров, благодаря чему на каждую плитку в общей памяти имеется больше активных тензорных ядер. Иначе говоря, мы можем загрузить в 3 раза больше тензорных ядер тем же количеством регистров. Однако поскольку пропускная способность остаётся узким местом, увеличение TFLOPS на практике будет мизерным, по сравнению с теоретическим. Новые тензорные ядра улучшили быстродействие примерно на 1-3%.

В целом видно, что архитектура Ampere оптимизирована так, чтобы более эффективно использовать пропускную способность памяти посредством улучшенной иерархии от глобальной памяти к плиткам общей памяти, и к регистрам тензорных ядер.

Оценка эффективности Ampere в ГО


Резюме:
  • Теоретические оценки на основе пропускной способности памяти и улучшенной иерархии памяти у Ampere GPU предсказывают ускорение в 1,78 1,87 раз.
  • NVIDIA опубликовала данные по измерениям скорости для Tesla A100 и V100 GPU. Они больше маркетинговые, но на их основе можно построить непредвзятую модель.
  • Непредвзятая модель говорит о том, что по сравнению с V100 на Tesla A100 в 1,7 раз быстрее работает обработка естественного языка и в 1,45 раз быстрее компьютерное зрение.


Этот раздел предназначен для тех, кто хочет углубиться в технические детали того, как я получил оценки быстродействия Ampere GPU. Если вам это неинтересно, его спокойно можно пропустить.

Теоретические оценки скорости Ampere


Учитывая вышеизложенные аргументы, можно было бы ожидать, что разница между двумя GPU-архитектурами с тензорными ядрами должна была заключаться в основном в пропускной способности памяти. Дополнительные преимущества получаются за счёт увеличения общей памяти и кэша L1, а также эффективного использования регистров.

Пропускная способность Tesla A100 GPU по сравнению с Tesla V100 увеличивается в 1555/900 = 1,73 раз. Также разумно ожидать увеличения скорости на 2-5% из-за большей общей памяти, и на 1-3% из-за улучшения тензорных ядер. Получается, что ускорение должно составить от 1,78 до 1,87 раза.

Практические оценки скорости Ampere


Допустим, у нас есть оценка одного GPU для такой архитектуры, как Ampere, Turing или Volta. Легко экстраполировать эти результаты на другие GPU такой же архитектуры или серии. К счастью, NVIDIA уже провела тесты сравнения A100 и V100 на разных задачах, связанных с компьютерным зрением и пониманием естественного языка. К несчастью, NVIDIA сделала всё возможное, чтобы эти числа нельзя было сравнивать напрямую в тестах использовали различные размеры пакетов данных и разное количество GPU, чтобы A100 не могла выиграть. Так что, в каком-то смысле, полученные показатели быстродействия частично честные, частично рекламные. В целом можно утверждать, что увеличение размера пакетов данных обосновано, поскольку у A100 больше памяти однако, для сравнения GPU-архитектур нам нужно сравнивать непредвзятые данные по быстродействию на задачах с одинаковым размером пакета данных.

Чтобы получить непредвзятые оценки, можно масштабировать результаты измерений V100 и A100 двумя способами: учитывать разницу в размере пакета данных, или учитывать разницу в количестве GPU 1 против 8. Нам повезло, и мы можем найти подобные оценки для обоих случаев в представленных NVIDIA данных.

Удвоение размера пакета увеличивает пропускную способность на 13,6% в изображениях в секунду (для свёрточных нейросетей, СНС). Я измерил скорость той же задачи с архитектурой Transformer на моём RTX Titan, и, как ни удивительно, получил такой же результат 13,5%. Судя по всему, это надёжная оценка.

Увеличивая параллелизацию сетей, увеличивая количество GPU, мы теряем в быстродействии из-за накладных расходов, связанных с сетями. Но система A100 8x GPU лучше работает с сетями (NVLink 3.0) по сравнению с V100 8x GPU (NVLink 2.0) и это ещё один запутывающий фактор. Если посмотреть на данные от NVIDIA, можно увидеть, что для обработки СНС у системы с 8-ю A100 накладные расходы на 5% ниже, чем у системы с 8-ю V10000. Это значит, что если переход от 1-го A10000 к 8-и A10000 даёт вам ускорение, допустим, в 7,0 раз, то переход от 1-го V10000 к 8-и V10000 даёт вам ускорение только в 6,67 раз. Для трансформеров эта цифра составляет 7%.

Используя эту информацию, мы можем оценить ускорение некоторых определённых архитектур ГО непосредственно на основе предоставленных NVIDIA данных. Tesla A100 имеет следующие преимущества в скорости по сравнению с Tesla V100:
  • SE-ResNeXt101: 1,43 раз.
  • Masked-R-CNN: 1,47 раз.
  • Transformer (12 слоёв, машинный перевод, WMT14 en-de): 1,70 раз.


Поэтому для компьютерного зрения числа получаются ниже теоретической оценки. Это может происходить из-за меньших измерений тензора, накладных расходов операций, которые требуются для подготовки перемножения матриц типа img2col или быстрое преобразование Фурье, или операций, не способных насытить GPU (конечные слои часто оказываются относительно маленькими). Также это может оказаться артефактами определённых архитектур (сгруппированная свёртка).

Практическая оценка скорости работы трансформера очень близка к теоретической. Вероятно, потому, что алгоритмы работы с большими матрицами весьма прямолинейны. Для подсчёта эффективности затрат на GPU я буду использовать практические оценки.

Возможные неточности оценок


Выше даны сравнительные оценки A100 и V100. В прошлом NVIDIA тайком ухудшила работу игровых RTX GPU: уменьшила утилизацию тензорных ядер, добавила игровые вентиляторы для охлаждения, запретила передачу данных между GPU. Возможно, что в серии RT 30 также внесли неизвестные ухудшения по сравнению с Ampere A100.

Что ещё следует учесть в случае с Ampere / RTX 30


Резюме:
  • Ampere позволяет проводить обучение сетей на основе разреженных матриц, что ускоряет процесс обучения максимум в два раза.
  • Разреженное обучение сетей до сих пор редко используется, однако благодаря ему Ampere не скоро устареет.
  • У Ampere есть новые типы данных с малой точностью, благодаря чему использовать малую точность гораздо проще, однако это не обязательно даст прирост в скорости по сравнению с предыдущими GPU.
  • Новый дизайн вентиляторов хорош, если между GPU у вас есть свободное место однако непонятно, эффективно ли будут охлаждаться GPU, стоящие вплотную.
  • 3-слотовый дизайн RTX 3090 будет проблемой для сборок по 4 GPU. Возможные решения использовать 2-слотовые варианты или расширители для PCIe.
  • Четырём RTX 3090 потребуется больше питания, чем может предложить любой стандартный БП на рынке.


У новых NVIDIA Ampere RTX 30 есть дополнительные преимущества перед NVIDIA Turing RTX 20 разреженное обучение и улучшенная обработка данных нейросетью. Остальные свойства, типа новых типов данных, можно считать простым повышением удобства они ускоряют работу так же, как и серия Turing, не требуя при этом дополнительного программирования.

Разреженное обучение


Ampere позволяет с большой скоростью и автоматически перемножать разреженные матрицы. Это работает так вы берёте матрицу, режете её на кусочки по 4 элемента, и поддерживающее разреженные матрицы тензорное ядро разрешает двум элементам из этих четырёх быть нулевыми. Это приводит к ускорению работы в 2 раза, поскольку требования к пропускной способности во время перемножения матриц в два раза уменьшаются.

В своих исследованиях я работал с разреженным обучением сетей. Работу критиковали, в частности, за то, что я уменьшаю необходимые для сети FLOPS, но не увеличиваю из-за этого скорость, потому что GPU не умеют быстро перемножать разреженные матрицы. Ну что ж поддержка перемножения разреженных матриц появилась в тензорных ядрах, и мой алгоритм, или любой другой алгоритм (ссылка, ссылка, ссылка, ссылка), работающий с разреженным матрицами, теперь реально может работать во время обучения в два раза быстрее.

Хотя эта свойство пока считается экспериментальным, а обучение разреженных сетей не применяется повсеместно, если у вашего GPU есть поддержка этой технологии, то вы готовы к будущему разреженного обучения.

Вычисления с низкой точностью


Я уже демонстрировал, как новые типы данных могут улучшать стабильность обратного распространения с низкой точностью в моей работе. Пока что проблемой стабильного обратного распространения с 16-битными числами с плавающей запятой является то, что обычные типы данных поддерживают только промежуток [-65,504, 65,504]. Если ваш градиент выйдет за этот промежуток, то взорвётся, выдав значения NaN. Для предотвращения этого мы обычно масштабируем значения, умножая их на небольшое число перед обратным распространением, чтобы избежать взрыва градиента.

Формат Brain Float 16 (BF16) использует больше битов для экспоненты, благодаря чему промежуток возможных значений получается таким же, как у FP32: [-3*10^38, 3*10^38]. У BF16 меньше точность, т.е. меньше значащих разрядов, но точность градиента при обучении сетей не так уж и важна. Поэтому BF16 гарантирует, что вам уже не нужно будет заниматься масштабированием или волноваться о взрыве градиента. С этим форматом мы должны увидеть увеличение стабильности обучения за счёт небольшой потери точности.

Что это значит для вас: с точностью BF16 обучение может быть более стабильным, чем с точностью FP16, а скорость у них одинаковая. С точностью TF32 вы получите стабильность почти как у FP32, а ускорение почти как у FP16. Плюс в том, что при использовании этих типов данных можно менять FP32 на TF32, а FP16 на BF16, ничего не меняя в коде!

В целом эти новые типы данных можно считать ленивыми, в том смысле, что вы могли получить все их преимущества, используя старые типа данных и немного программирования (правильное масштабирование, инициализация, нормализация, использование Apex). Поэтому эти типы данных обеспечивают не ускорение, а делают использование низкой точности в обучении проще.

Новый дизайн вентилятора и проблемы с теплоотводом


По новой схеме вентиляторов для серии RTX 30 есть выдувающий воздух вентилятор и втягивающий воздух вентилятор. Сам дизайн продуман гениально, и будет очень эффективно работать при наличии свободного пространства между GPU. Однако непонятно, как поведут себя GPU, если их понаставить один к другому. Выдувающий вентилятор сможет выдувать воздух прочь от других GPU, но невозможно сказать, как это будет работать, поскольку его форма отличается от той, что была раньше. Если вы планируете поставить 1 или 2 GPU туда, где есть 4 слота, тогда у вас не должно быть проблем. Но если вы захотите использовать 3-4 RTX 30 GPU рядышком, я бы сначала подождал отчётов о температурном режиме, а потом уже решил, понадобятся ли ещё вентиляторы, расширители PCIe или другие решения.

В любом случае, решить проблему с теплоотводом может помочь водяное охлаждение. Многие производители предлагают такие решения для карточек RTX 3080/RTX 3090, и тогда они не будут греться, даже если их будет 4. Однако не покупайте готовых решений для GPU, если вы захотите собрать компьютер с 4 GPU, поскольку в большинстве корпусов будет очень трудно распределить радиаторы.

Ещё одно решение проблемы охлаждения купить расширители PCIe и распределить карты внутри корпуса. Это очень эффективно я и другие аспиранты из Ванингтонского университета с большим успехом используем этот вариант. Выглядит не очень аккуратно, зато GPU не греются! Также этот вариант поможет в случае, если вам не хватает пространства для размещения GPU. Если в вашем корпусе есть место, можно, допустим, купить стандартные RTX 3090 на три слота, и распределить их при помощи расширителей по всему корпусу. Таким образом можно решить одновременно проблему с местом и охлаждением 4-х RTX 3090.


Рис. 1: 4 GPU с расширителями PCIe

Трёхслотовые карты и проблемы питания


RTX 3090 занимает 3 слота, поэтому их невозможно использовать по 4 штуки с вентиляторами от NVIDIA по умолчанию. И это не удивительно, поскольку она требует 350 Вт TDP. RTX 3080 лишь немногим уступает ей, требуя 320 Вт TDP, и охлаждать систему с четырьмя RTX 3080 будет очень сложно.

Также сложно питать систему из 4-х карт по 350 Вт = 1400 Вт. Блоки питания (БП) на 1600 Вт бывают, однако 200 Вт на процессор и материнку может не хватить. Максимальное энергопотребление происходит только при полной загрузке, и во время ГО процессор обычно слабо нагружен. Поэтому БП на 1600 Вт может подойти для 4-х RTX 3080, но для 4-х RTX 3090 лучше поискать БП на 1700 Вт и более. На сегодня на рынке таких БП не наблюдается. Могут подойти серверные БП или специальные блоки для криптомайнеров, но у них может оказаться необычный форм-фактор.

Эффективность GPU при глубоком обучении


В следующий тест вошли не только сравнения Tesla A100 и Tesla V100 я построил модель, укладывающуюся в эти данные и четыре различных теста, где испытывали Titan V, Titan RTX, RTX 2080 Ti и RTX 2080 (ссылка, ссылка, ссылка, ссылка).

Кроме того я масштабировал результаты тестов таких карт среднего уровня, как RTX 2070, RTX 2060 или Quadro RTX, путём интерполяции точек данных тестов. Обычно в архитектуре GPU такие данные масштабируются линейно по отношению к перемножению матриц и пропускной способности памяти.

Я собирал только данные тестов по обучению FP16 со смешанной точностью, поскольку не вижу причин, по которым нужно было бы использовать обучение с числами FP32.


Рис. 2: Быстродействие, нормализованное по результатам RTX 2080 Ti

По сравнению с RTX 2080 Ti, RTX 3090 работает со свёрточными сетями в 1,57 раз быстрее, а с трансформерами в 1,5 раз быстрее, при этом стоит на 15% дороже. Получается, что Ampere RTX 30 демонстрирует значительное улучшение со времён серии Turing RTX 20.

Скорость глубокого обучения GPU в пересчёте на стоимость


Какой GPU будет наиболее выгодным вложением денег? Всё зависит от общей стоимости системы. Если она дорогая, имеет смысл вложиться в более дорогие GPU.

Ниже привожу данные по трём сборкам на PCIe 3.0, которые я использую в качестве базовых ориентиров стоимости систем из 2 или 4 GPU. Я беру эту базовую стоимость и добавляю к ней стоимость GPU. Последнюю я высчитываю как среднюю цену между предложениями с Amazon и eBay. Для новых Ampere я использую только одну цену. В совокупности с приведёнными выше данными по быстродействию это даёт значения быстродействия в пересчёте на доллар. Для системы из 8 GPU за основу я беру Supermicro barebone промышленный стандарт для RTX-серверов. Приводимые графики не учитывают требования к памяти. Вам сначала нужно задуматься о том, какая вам требуется память, а потом поискать наилучшие варианты на графиках. Примерные советы по памяти:
  • Использование предварительно обученных трансформеров, или обучение небольшого трансформера с нуля >= 11 ГБ.
  • Обучение большого трансформера или свёрточной сети в исследовании или продакшене: >= 24 ГБ.
  • Прототипирование нейросетей (трансформера или свёрточной сети) >= 10 ГБ.
  • Участие в конкурсах Kaggle >= 8 ГБ.
  • Компьютерное зрение >= 10 ГБ.



Рис. 3: нормализованное быстродействие в пересчёте на доллары по отношению к RTX 3080.


Рис. 4: нормализованное быстродействие в пересчёте на доллары по отношению к RTX 3080.


Рис. 5: нормализованное быстродействие в пересчёте на доллары по отношению к RTX 3080.

Рекомендации по выбору GPU


Ещё раз хочется подчеркнуть: при выборе GPU сначала убедитесь, что у него хватает памяти для ваших задач. Шаги при выборе GPU должны быть следующие:
  • Понять, чего я хочу достичь при помощи GPU: участие в соревнованиях Kaggle, обучения ГО, исследование мелких проектов, исследования в области компьютерного зрения или обработки естественного языка, в каких-то других областях знаний.
  • Определить, сколько памяти нужно для моих целей.
  • При помощи приведённых выше графиков по соотношению быстродействия к доллару выбрать подходящий под требования GPU, имеющий нужный объём памяти.
  • Есть ли у выбранного GPU какие-то подвохи? К примеру, если это RTX 3090, влезет ли он в мой компьютер? Хватит ли у моего БП мощности для поддержки этого GPU? Будет ли проблемой теплоотвод, или я смогу эффективно охлаждать GPU?


Некоторые из шагов требуют задуматься о том, чего вы хотите, и провести небольшое исследование на тему того, какие объёмы памяти используют другие люди, занимающиеся тем же самым. Я могу дать несколько советов, но не могу полностью ответить на все вопросы в данной области.

Когда мне понадобится более 11 ГБ памяти?


Я уже упоминал, что при работе с трансформерами вам потребуется не менее 11 ГБ, а при проведении исследований в этой области не менее 24 ГБ. У большинства предыдущих предварительно обученных моделей очень большие требования к памяти, и их обучали на GPU классом не ниже RTX 2080 Ti с объёмом памяти не менее 11 ГБ. Поэтому, если у вас меньше 11 ГБ памяти, запуск некоторых моделей может стать трудным или вовсе невозможным делом.

Другие области, требующие больших объёмов памяти обработка медицинских снимков, передовые модели компьютерного зрения, и всё с изображениями большого размера.

В целом, если вы стремитесь разработать модели, способные опередить конкурентов будь то исследования, промышленное применение или соревнования Kaggle дополнительная память, возможно, даст вам конкурентное преимущество.

Когда можно обойтись памятью менее 11 ГБ?


Карты RTX 3070 и RTX 3080 мощные, но памяти им не хватает. Однако для многих задач такого количества памяти может и не потребоваться.

RTX 3070 идеально подходит для обучения ГО. Базовые навыки обучения сетей большинства архитектур можно приобрести, уменьшая масштаб сетей или используя изображения меньшего размера. Если бы мне пришлось учиться ГО, я бы выбрал себе RTX 3070, или даже несколько штук, если бы мог себе их позволить.

RTX 3080 на сегодня наиболее эффективная карта по отношению цены к быстродействию, и поэтому идеально подходит для прототипирования. Для прототипирования нужны большие объёмы памяти, а память стоит недорого. Под прототипированием я понимаю прототипирование в любой области исследования, соревнования Kaggle, проба идей для стартапа, эксперименты с исследовательским кодом. Для всех подобных применений RTX 3080 подойдёт лучше всего.

Если бы я, допустим, руководил исследовательской лабораторией или стартапом, 66-80% всего бюджета я пустил бы на машины RTX 3080, и 20-33% на RTX 3090 с надёжным водяным охлаждением. RTX 3080 более эффективна в пересчёте на стоимость, и доступ к ней можно организовать через Slurm. Поскольку прототипированием надо заниматься в эджайл-режиме, его нужно вести с моделями и наборами данных меньшего размера. И RTX 3080 идеально для этого подходит. Когда ученики/коллеги создадут отличную модель-прототип, они смогут выкатывать её на RTX 3090, масштабируя до более крупных моделей.

Общие рекомендации


В целом модели серии RTX 30 очень мощные, и я определённо их рекомендую. Учтите требования к памяти, как указано ранее, а также требования к питанию и охлаждению. Если у вас между GPU будет свободный слот, с охлаждением проблем не будет. Иначе обеспечьте картам RTX 30 водяное охлаждение, расширители PCIe или эффективные карты с вентиляторами.

В целом я бы рекомендовал RTX 3090 всем, кто может себе её позволить. Она не только подойдёт вам сейчас, но и останется очень эффективной в следующие 3-7 лет. Маловероятно, что в ближайшие три года HBM-память сильно подешевеет, поэтому следующий GPUУ будет всего на 25% лучше, чем RTX 3090. Лет через 5-7, наверное, мы увидим дешёвую HBM-память, после чего вам определённо нужно будет обновлять парк.

Если вы собираете систему из нескольких RTX 3090, обеспечьте им достаточное охлаждение и питание.

Если у вас нет жёстких требований к конкурентным преимуществам, я бы порекомендовал вам RTX 3080. Это более эффективное решение в пересчёте на стоимость, и оно обеспечит быстрое обучение большинства сетей. Если вы примените нужные трюки с памятью и не против написания дополнительного кода, то есть много трюков, позволяющих впихнуть сеть на 24 ГБ в GPU с 10 ГБ.

RTX 3070 тоже отличная карта для обучения ГО и прототипирования, и она на $200 дешевле, чем RTX 3080. Если вы не можете позволить себе RTX 3080, тогда ваш выбор это RTX 3070.

Если ваш бюджет ограничен, и RTX 3070 для вас слишком дорогая, то на eBay можно найти использованную RTX 2070 по цене порядка $260. Пока неясно, выйдет ли RTX 3060, но если ваш бюджет невелик, возможно, стоит подождать её выхода. Если её ценообразование будет соответствовать RTX 2060 и GTX 1060, тогда она должна будет стоить около $250-$300, и выдавать неплохие результаты.

Рекомендации для GPU-кластеров


Схема GPU-кластера сильно зависит от его использования. Для системы с 1024 GPU и более главным будет наличие сети, но если вы используете не более 32 GPU за раз, то вкладываться в построение мощной сети смысла нет.

Вообще, карточки RTX по соглашению CUDA нельзя использовать в дата-центрах. Однако часто университеты могут стать исключением из этого правила. Если вы хотите получить подобное разрешение, стоит связаться с представителем NVIDIA. Если вам можно использовать карты RTX, то я бы порекомендовал стандартную систему Supermicro на 8 GPU RTX 3080 или RTX 3090 (если вы можете обеспечить им охлаждение). Небольшой набор из 8 узлов A10000 гарантирует эффективное использование моделей после прототипирования, особенно если обеспечить охлаждением серверы на 8 RTX 3090 не получается. В данном случае я бы порекомендовал A10000 вместо RTX 6000 / RTX 8000, поскольку A10000 довольно эффективные в пересчёте на стоимость, и не устареют быстро.

Если вам нужно обучать очень большие сети на кластере GPU (256 GPU и более), я бы порекомендовал систему NVIDIA DGX SuperPOD с A10000. от 256 GPU сеть становится необходимой. Если вы хотите расшириться, и выйти за пределы 256 GPU, вам понадобится очень оптимизированная система, для которой стандартные решения уже не подойдут.

Особенно на масштабах 1024 GPU и более единственными конкурентоспособными решениями на рынке остаются Google TPU Pod и NVIDIA DGX SuperPod. На таких масштабах я бы предпочёл Google TPU Pod, поскольку их специальная сетевая инфраструктура выглядит лучше, чем NVIDIA DGX SuperPod хотя в принципе, эти системы довольно близки. В прикладных приложениях и ГО система из GPU бывает более гибкой, чем TPU, при этом системы из TPU поддерживают модели большего размера и лучше масштабируются. Поэтому у обеих систем есть свои достоинства и недостатки.

Какие GPU лучше не покупать


Не рекомендую покупать по нескольку RTX Founders Edition или RTX Titan, если только у вас не будет расширителей PCIe, решающих их проблемы с охлаждением. Они просто разогреются и их скорость сильно упадёт по сравнению с той, что указана в графиках. Четыре RTX 2080 Ti Founders Edition быстро разогреются до 90 C, понизят тактовую частоту и будут работать медленнее, чем RTX 2070 с нормальным охлаждением.

Рекомендую покупать Tesla V100 или A100 только в крайних случаях, поскольку их запрещено использовать в дата-центрах компаний. Или покупать их, если вам нужно обучать очень крупные сети на огромных GPU-кластерах их соотношение цены и быстродействия не идеальное.

Если вы можете позволить себе что-то лучше, не берите карты GTX 16-й серии. У них нет тензорных ядер, поэтому быстродействие в ГО у них плохое. Я бы взял вместо них б/у RTX 2070 / RTX 2060 / RTX 2060 Super. Их можно брать, если ваш бюджет сильно ограничен.

Когда лучше не покупать новых GPU?


Если у вас уже есть RTX 2080 Ti или лучше, обновляться до RTX 3090 практически бессмысленно. Ваши GPU и так хороши, а преимущества в скорости будут пренебрежимо малы по сравнению с приобретёнными проблемами с питанием и охлаждением оно того не стоит.

Единственная причина, по которой я захотел бы обновиться с четырёх RTX 2080 Ti до четырёх RTX 3090 если бы я занимался исследованиями очень крупных трансформеров или других сетей, сильно зависящих от вычислительных мощностей. Однако если у вас проблемы с памятью, сначала стоит рассмотреть различные трюки, для того, чтобы впихнуть крупные модели в существующую память.

Если у вас есть одна или несколько RTX 2070, я бы на вашем месте дважды подумал, прежде чем обновляться. Это довольно неплохие GPU. Возможно, будет иметь смысл продать их на eBay и купить RTX 3090, если вам не хватает 8 ГБ как и в случае со многими другими GPU. Если памяти не хватает, обновление назревает.

Ответы на вопросы и заблуждения


Резюме:
  • PCIe-линии и PCIe 4.0 не имеют значения для систем с двумя GPU. Для систем с 4-мя GPU практически не имеют.
  • Охлаждать RTX 3090 и RTX 3080 будет тяжело. Используйте водяное охлаждение или расширители PCIe.
  • NVLink нужен только для GPU-кластеров.
  • В одном компьютере можно использовать разные GPU (например, GTX 1080 + RTX 2080 + RTX 3090), но эффективной параллелизации не получится.
  • Для параллельной работы более чем двух машин потребуется Infiniband и сеть на 50 Гбит/с.
  • Процессоры от AMD дешевле, чем от Intel, и у последних почти нет преимуществ.
  • Несмотря на героические усилия инженеров, AMD GPU + ROCm вряд ли смогут конкурировать с NVIDIA из-за отсутствия сообщества и эквивалента тензорных ядер в ближайшие 1-2 года.
  • Облачные GPU выгодны, если использовать их не более года. После этого настольный вариант становится дешевле.


Нужна ли мне PCIe 4.0?


Обычно нет. PCIe 4.0 отлично подходит для GPU-кластера. Полезна, если у вас машина на 8 GPU. В иных случаях преимуществ у неё почти нет. Она улучшает параллелизацию и чуть быстрее передаёт данные. Но передача данных не является узким местом. В компьютерном зрении узким местом может быть хранение данных, но не передача данных по PCIe от GPU к GPU. Поэтому для большинства людей причин использовать PCIe 4.0 нет. Она, возможно, улучшит параллелизацию четырёх GPU на 1-7%.

Нужны ли мне линии PCIe 8x/16x?


Как и в случае с PCIe 4.0 обычно нет. Линии PCIe трубеются для параллелизации и быстрой передачи данных, что почти никогда не является узким местом. Если у вас 2 GPU, для них хватит 4-х линий. Для 4-х GPU я бы предпочёл 8 линий на GPU, однако если линий будет 4, это уменьшит производительность всего на 5-10%.

Как впихнуть четыре RTX 3090, если каждая из них занимает по 3 слота PCIe?


Можно купить один из двух вариантов, рассчитанных на один слот, или распределить их при помощи расширителей PCIe. Кроме пространства нужно сразу же задуматься об охлаждении и подходящем БП. Судя по всему, наиболее простым решением будет покупка 4-х RTX 3090 EVGA Hydro Copper со специальной петлёй водяного охлаждения. EVGA много лет выпускает версии карт с медным водяным охлаждением, и качеству их GPU можно доверять. Возможно, есть варианты и подешевле.

Расширители PCIe могут решить проблемы с пространством и охлаждением, однако в вашем корпусе должно быть достаточно места для всех карт. И убедитесь, что расширители достаточно длинные!

Как охлаждать 4 RTX 3090 или 4 RTX 3080?


См. предыдущий раздел.

Можно ли использовать GPU нескольких разных типов?


Да, но эффективно распараллелить работу не получится. Могу представить систему, где работает 3 RTX 3070 + 1 RTX 3090. С другой стороны, параллелизация между четырьмя RTX 3070 будет работать очень быстро, если вы впихнёте на них свою модель. И ещё одна причина, по которой вам может это понадобиться использование старых GPU. Работать это будет, но параллелизация будет неэффективной, поскольку самые быстрые GPU будут ждать самых медленных GPU в точках синхронизации (обычно при обновлении градиента).

Что такое NVLink, и нужно ли оно мне?


Обычно NVLink вам не нужна. Это высокоскоростная связь между несколькими GPU. Она нужна, если у вас есть кластер из 128 и более GPU. В иных случаях у неё почти нет преимуществ перед стандартной передачей данных по PCIe.

У меня нет денег даже на самые дешёвые ваши рекомендации. Что делать?


Определённо покупать б/у GPU. Отлично сработают использованные RTX 2070 ($400) и RTX 2060 ($300). Если не сможете их себе позволить, следующим наилучшим вариантом будут использованные GTX 1070 ($220) или GTX 1070 Ti ($230). Если и это слишком дорого, найдите использованные GTX 980 Ti (6GB $150) или GTX 1650 Super ($190). Если это тоже дорого, вам лучше пользоваться облачными сервисами. Они обычно предоставляют GPU с ограничением по времени или мощности, после чего придётся платить. Меняйте сервисы по кругу, пока не сможете позволить себе собственный GPU.

Что нужно для параллелизации проекта между двумя машинами?


Для ускорения работы посредством параллелизации между двумя машинами нужны сетевые карты на 50 Гбит/с или более. Рекомендую поставить хотя бы EDR Infiniband то есть, сетевую карту со скоростью не менее 50 Гбит/с. Две EDR карты с кабелем на eBay обойдутся вам в $500.

В некоторых случаях вы обойдётесь и Ethernet на 10 Гбит/с, но это обычно срабатывает только для определённых типов нейросетей (определённых свёрточных сетей) или для определённых алгоритмов (Microsoft DeepSpeed).

Подходят ли алгоритмы перемножения разреженных матриц для любых разреженных матриц?


Видимо, нет. Поскольку от матрицы требуется, чтобы на каждые 4 элемента у неё было 2 нулевых, разреженные матрицы должны быть хорошо структурированными. Вероятно, можно немного подправить алгоритм, обрабатывая 4 значения в виде сжатой репрезентации двух значений, но это будет значить, что точное перемножение разреженных матриц на Ampere будет недоступно.

Нужен ли мне процессор от Intel для работы с несколькими GPU?


Я не рекомендую использовать процессор от Intel, если только вы не нагружаете процессор довольно сильно в соревнованиях Kaggle (где процессор загружен подсчётами линейной алгебры). И даже для таких соревнований процессоры от AMD отлично подходят. Процессоры от AMD в среднем оказываются дешевле и лучше для ГО. Для сборки из 4-х GPU моим однозначным выбором будет Threadripper. В нашем университете мы собрали десятки систем на таких процессорах, и все они работают отлично, без нареканий. Для систем с 8-ю GPU я бы взял тот процессор, опыт использования которого есть у вашего производителя. Надёжность процессора и PCIe в системах из 8-и карт важнее, чем просто быстродействие или эффективность в пересчёте на стоимость.

Имеет ли значение для охлаждения форма корпуса?


Нет. Обычно GPU прекрасно охлаждаются, если между GPU есть хотя бы небольшие промежутки. Разные виды корпусов могут дать вам разницу в 1-3 C, а разное расстояние между картами разницу в 10-30 C. В общем, если между вашими картами есть промежутки, с охлаждением проблем нет. Если промежутков нет, вам нужны правильные вентиляторы (выдувающий вентилятор) или другое решение (водяное охлаждение, расширители PCIe). В любом случае, вид корпуса и его вентиляторы значения не имеют.

Догонят ли AMD GPU + ROCm когда-нибудь NVIDIA GPU + CUDA?


Не в ближайшие пару лет. Проблем там три: тензорные ядра, ПО и сообщество.

Сами кристаллы GPU от AMD хорошие: отличное быстродействие на FP16, отличная пропускная способность памяти. Но отсутствие тензорных ядер или их эквивалента приводит к тому, что их быстродействие страдает по сравнению с GPU от NVIDIA. А без реализации тензорных ядер в железе GPU от AMD никогда не будут конкурентоспособными. По слухам, на 2020-й год запланирована какая-то карточка для датацентров с аналогом тензорных ядер, однако точных данных пока нет. Если у них будет только карта с эквивалентом тензорных ядер для серверов, это будет означать, что мало кто сможет позволить себе GPU от AMD, что даст NVIDIA конкурентное преимущество.

Допустим, AMD представит в будущем железо с чем-то вроде тензорных ядер. Тогда многие скажут: Но программ-то, работающих с GPU от AMD, нет! Как мне их использовать? Это, в основном, заблуждение. ПО для AMD, работающее с ROCm, уже неплохо развито, а поддержка в PyTorch прекрасно организована. И хотя я не видел много отчётов о работе AMD GPU + PyTorch, все функции ПО туда интегрированы. Судя по всему, можно выбрать любую сеть и запустить её на GPU от AMD. Поэтому в данной области AMD уже неплохо развита, и эта проблема практически решена.

Однако, решив проблемы с ПО и отсутствием тензорных ядер, AMD столкнётся ещё с одной: с отсутствием сообщества. Наткнувшись на проблему с GPU от NVIDIA, вы можете поискать решение в Google и найти его. Это вызывает доверие к GPU от NVIDIA. Появляется инфраструктура, облегчающая использование GPU от NVIDIA (любая платформа для ГО работает, любая научная задача поддерживается). Есть куча хаков и трюков, сильно облегчающих использование GPU от NVIDIA (к примеру, apex). Экспертов и программистов для GPU от NVIDIA можно найти под каждым кустом, а вот экспертов по AMD GPU я знаю гораздо меньше.

В плане сообщества, ситуация с AMD напоминает ситуацию Julia vs Python. У Julia большой потенциал, и многие справедливо укажут, что этот язык программирования лучше подходит для научных работ. Однако же Julia по сравнению с Python используют крайне редко. Просто сообщество любителей Python очень велико. Вокруг таких мощных пакетов, как Numpy, SciPy и Pandas, собирается куча народу. Эта ситуация напоминает ситуацию NVIDIA vs AMD.

Поэтому с большой вероятностью AMD не нагонит NVIDIA, пока не представит эквивалент тензорных ядер и крепкое сообщество, построенное вокруг ROCm. AMD всегда будет иметь свою долю рынка в особых подгруппах (майнинг криптовалют, дата-центры). Но в ГО NVIDIA, скорее всего, ещё года два будет удерживать монополию.

Когда лучше использовать облачные сервисы, а когда специальный компьютер с GPU?


Простое правило: если вы рассчитываете заниматься ГО дольше года, дешевле купить компьютер с GPU. Иначе лучше пользоваться облачными сервисами если только у вас нет обширного опыта по облачному программированию, и вы хотите воспользоваться преимуществами масштабирования количества GPU по желанию.

Точный переломный момент, в который облачные GPU становятся дороже, чем собственный компьютер, сильно зависит от используемых сервисов. Это лучше подсчитывать самому. Ниже привожу примерный расчёт для сервера AWS V100 с одним V100, и сравниваю его со стоимостью настольного компьютера с одним RTX 3090, что близко по быстродействию. Компьютер с RTX 3090 стоит $2200 (2-GPU barebone + RTX 3090). Если вы в США, то прибавьте к этому $0,12 за кВт*ч за электричество. Сравним это с $2,14 в час за сервер в AWS.

При 15% утилизации в год компьютер использует

(350 Вт (GPU) + 100 Вт (CPU))*0.15 (утилизация) * 24 часа * 365 дней = 591 кВт*ч в год.

591 кВт*ч в год дают дополнительные $71.

Переломный момент, когда компьютер и облако сравниваются в цене при 15% утилизации, наступает где-то на 300-й день ($2,311 против $2,270):

$2.14/ч * 0.15 (утилизация) * 24 часа * 300 дней = $2,311

Если вы рассчитываете, что ваши модели ГО будут работать более 300 дней, лучше купить компьютер, чем использовать AWS.

Похожие расчёты можно провести для любого облачного сервиса, чтобы принять решение о том, использовать свой компьютер или облако.

Распространённые цифры по утилизации вычислительных мощностей следующие:
  • Компьютер кандидата наук: <15%;
  • Кластер GPU на Slurm кандидата наук: > 35%;
  • Корпоративный исследовательский кластер на Slurm: > 60%.


В целом, процент утилизации ниже в тех областях, где важнее размышлять о передовых идеях, чем разрабатывать практические решения. В некоторых областях процент утилизации меньше (исследования интерпретируемости), а в других гораздо выше (машинный перевод, моделирования языка). В целом утилизацию личных машин обычно всегда переоценивают. Обычно большинство личных систем утилизированы на 5-10%. Поэтому я настоятельно рекомендую исследовательским группам и компаниям организовывать GPU-кластеры на Slurm вместо отдельных настольных компьютеров.

Советы для тех, кому лень читать


Лучшие GPU в общем: RTX 3080 и RTX 3090.

Каких GPU стоит избегать (вам как исследователю): карточек Tesla, Quadro, Founders Edition, Titan RTX, Titan V, Titan XP.

Хорошее соотношение быстродействия к цене, но дорогая: RTX 3080.

Хорошее соотношение быстродействия к цене, подешевле: RTX 3070, RTX 2060 Super.

У меня мало денег: Покупайте использованные карты. Иерархия: RTX 2070 ($400), RTX 2060 ($300), GTX 1070 ($220), GTX 1070 Ti ($230), GTX 1650 Super ($190), GTX 980 Ti (6GB $150).

У меня почти нет денег: многие стартапы рекламируют свои облачные услуги. Используйте бесплатные кредиты в облаках, меняйте их по кругу, пока не сможете купить GPU.

Я участвую в соревнованиях Kaggle: RTX 3070.

Я пытаюсь выиграть в конкурентной борьбе в области компьютерного зрения, предварительного обучения или машинного перевода: 4 штуки RTX 3090. Но подождите, пока специалисты не подтвердят наличие сборок с хорошим охлаждением и достаточным питанием.

Я изучаю обработку естественного языка: если вы не работаете с машинным переводом, моделированием языка или предварительным обучением, RTX 3080 будет достаточно.

Я начал заниматься ГО и серьёзно этим увлёкся: начните с RTX 3070. Если через 6-9 месяцев не надоест, продайте и купите четыре RTX 3080. В зависимости от того, что выберете дальше (стартап, Kaggle, исследования, прикладное ГО), года через три продайте свои GPU, и купите что-то более подходящее (RTX GPU следующего поколения).

Хочу попробовать ГО, но серьёзных намерений нет: RTX 2060 Super будет прекрасным выбором, однако, возможно, потребует замены БП. Если у вас на материнской плате есть слот PCIe x16, а БП выдаёт около 300 Вт, то прекрасным вариантом станет GTX 1050 Ti, поскольку не потребует иных вложений.

GPU кластер для параллельного моделирования объёмом менее 128 GPU: если вам разрешено покупать RTX для кластера: 66% 8x RTX 3080 и 33% 8x RTX 3090 (только при возможности хорошо охлаждать сборку). Если охлаждения не хватает, покупайте 33% RTX 6000 GPU или 8x Tesla A100. Если не можете покупать RTX GPU, я бы выбрал 8 узлов A100 Supermicro или 8 узлов RTX 6000.

GPU кластер для параллельного моделирования объёмом более 128 GPU: задумайтесь о машинах с 8-ю Tesla A100. Если вам нужно более 512 GPU, задумайтесь о системе DGX A100 SuperPOD.
Подробнее..

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

02.12.2020 16:10:54 | Автор: admin


Каждый раз, когда встает заветный вопрос, апгрейдить ли карточки в серверной или нет, я просматриваю подобные статьи и смотрю такие видосы (нет, маркетинговым материалам от 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 корпуса без кастома, "колхоза" или воды ;
Подробнее..

Категории

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

  • Имя: Макс
    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