Недавно на Хабре была статья про сравнение карточек для вычислений. На мой взгляд статья получилась очень даже неплохой, но в ней никак не отразили позиции RTX 3090 Turbo и как-то подозрительно мало времени уделили А10.
На мой взгляд среди карточек с «большим» объемом памяти (более 12 гигабайт) по рекомендованной рыночной цене (РРК) 3090 является лидером хит-парада, а по рыночной цене — скорее уже А10. Детальный разбор почему и как я подходил к выбору карточек и тестированию — прошу под кат.
Также так случилось, что у меня под рукой оказалось большое количество рейзеров разной степени говённости. И сначала я замахивался, чтобы поставить некую точку в вечных дебатах про райзеры (а мнения разнятся от такого до банального «не работает» или «для DL нельзя использовать»), но в итоге все получилось чуть более сумбурно. Но я постарался подойти к тестированию райзеров тоже структурированно и аналитически.
И последнее — в прошлой статье я сокрушался, что мол нет на рынке большого выбора однослотовых решений по вменяемой цене. Теперь на выбор решений много, но с доступностью и ценами ситуация лучше не стала (есть как минимум 2 поколения карточек Quadro и Tesla A10, но геймерских нет, насколько я знаю).
Выбор карточек и теоретические цифры
Вообще в чатике нашего канала кто-то поделился супер-полными табличками с характеристиками в виде картинок (раз и два), но мы попробуем их немного упростить и разложить все на пальцах.
Простыми словами — физической и финансовой возможности (и мотивации) протестировать абсолютно все карточки у меня нет, но если верить вышеописанной статье, все-таки какая-то корреляция между спецификациями карточек и тестами прослеживается. Я собрал характеристики всех более менее свежих и интересных карточек (пожалуй кроме однослотовых прошлого поколения, которое не было очень удачным, да и Амперы уж очень сильно приросли по сравнению с прошлым поколением). Цены на момент публикации статьи могли уже поменяться.
Карточка | VRAM, G | Bwidth, Gb/s | Цена, т.р. | CUDA ядра | Тенз. ядра | TDP, W | Слоты | Кулер | Арх. | FP32 | PCIE |
---|---|---|---|---|---|---|---|---|---|---|---|
RTX 3090 Turbo | 24 | 936 | 300 (150) | 10496 | 328 | 350 | 2 | Есть | 8nm | 35.6 | 4.0 |
Tesla A10 | 24 | 600 | 300 | 8192 | ? | 150 | 1 | Нет | 8nm | 31.2 | 4.0 |
Tesla A30 | 24 | 933 | 430 | 3804 | 224 | 165 | 2 | Нет | 8nm | 31.2 | 4.0 |
Tesla A40 | 48 | 696 | 550 | 10752 | 336 | 300 | 2 | Нет | 8nm | 37.4 | 4.0 |
Tesla A40 | 48 | 696 | 490 | 10752 | 336 | 300 | 2 | Нет | 8nm | 37.4 | 4.0 |
Tesla A100 | 40 | 1555 | 900 | 6912 | 432 | 250 | 2 | Нет | 8nm | 19.5 | 4.0 |
RTX A4000 | 16 | 448 | 150 | 6144 | 192 | 140 | 1 | Есть | 8nm | 19.2 | 4.0 |
RTX A5000 | 24 | 768 | 280 | 8192 | 256 | 230 | 2 | Есть | 8nm | 27.8 | 4.0 |
RTX A6000 | 48 | 768 | 500 | 10752 | 336 | 300 | 2 | Есть | 8nm | 38.7 | 4.0 |
RTX 5000 | 16 | 448 | 190 | 3072* | 384 | 230 | 2 | Есть | 12 nm | 11.2 | 3.0 |
Пока в глаза бросается пожалуй лишь то, что на первый взгляд кроме рекомендованной рыночной цены на 3090, все карточки стоят сравнимое количество денег, кроме флагманской A100 (которая еще бывает с 80 GB памяти). Обратите еще внимание, что при переходе на последнее поколения Nvidia «увеличила» число CUDA-ядер в 2 раза, но они стали как бы в «2 раза меньше». Еще стоит обратить внимание на низкий TDP и однослотовость у A4000 и A10. Что грустно и закономерно (вставить комментарий про майнеров), 3090 «доросла» за год по цене примерно до своих серверных коллег.
Так, получается очень много цифр! А если открыть полные таблички, то и мозг можно сломать. Плюс все это мягко говоря теоретические цифры, скорее всего из спецификаций или маркетинговых материалов. Давайте пойдем от противного — выберем какой-то бюджет, допустим 900 т.р. (чтобы влезла хотя бы одна A100, ха!) и посмотрим, что можно получить за эти деньги.
Карточка | Штук | VRAM, G | FP32 | TDP |
---|---|---|---|---|
RTX 3090 TURBO | 3.0 | 72 | 107 | 900 (*) |
Tesla A10 | 3.0 | 72 | 94 | 450 |
Tesla A30 | 2.1 | 50 | 66 | 347 |
Tesla A40 | 1.6 | 77 | 60 | 480 |
Tesla A40 | 1.8 | 86 | 67 | 540 |
Tesla A100 | 1.0 | 40 | 20 | 250 |
RTX A4000 | 6.0 | 96 | 115 | 840 |
RTX A5000 | 3.2 | 77 | 89 | 736 |
RTX A6000 | 1.8 | 86 | 70 | 540 |
RTX 5000 | 4.7 | 75 | 52 | 1081 |
(*) Еще важная ремарка состоит в том, что хотя якобы кто-то и «разгонял» 3090 до 500+ Ватт, в реальности лично у меня они потребляют в районе 300 Ватт (я вставлю именно эту цифру в следующую таблицу).
Да, при обучении нейросетей не всегда FP32 это самый важный индикатор, но с другими форматами данных в спецификациях больше непонятностей и маркетинга. По факту вы или будете учить в FP32, или использовать что-то вроде AMP (в тестах дальше мы попробуем и тензорные ядра).
Давайте проанализируем табличку. У карточек А20, А30 и A40 получается маловато «мощности», но есть вариант с большим количеством VRAM. A100 явно является флагманом и кажется, что даже относительно серверных карт ее цена завышена раза в 2 (не считая ситуации когда вам реально нужны 80 GB VRAM на карту или какие-то особые вычисления и выбора тогда по сути нет).
A10 и A4000 кажутся сильно интереснее с точки зрения наполнения сервера (они однослотовые и мало кушают), но тут получается, если вы хотите оптимизировать мощность вычислений — вам нужна A10, а A4000 получается как бы равной «половине» A10. Но если вы захотите поставить 5 или 6 карточек A10, 10-12 A4000 уже будет проблематично впихнуть. Держим в уме, что обычно слотов в материнских платах не более 7, и в лучших БП обычно не более 9 VGA кабелей. Вариант с колхозом и синхронизацией 2 БП мы опустим для простоты.
Чисто по характеристикам и размерам, A5000 кажется более энергоэффективным «собратом» 3090, а A6000 и RTX 6000 (прошлое поколение) — уже сильно послабее или для нишевых применений (на рубль конечно, не в вакууме).
Итак, постараемся подвести итоги. Дорогие и узкоспециализированные варианты отметаем. В сухом остатке остаются A5000 (лидер хит-парада из статьи по ссылке), 3090 и A10.
По цене, они к сожалению все более менее равны (по РРК у 3090 конкуренции вообще нет). Но тут получается, что 3090 даже по рыночной цене является более «быстрой» и горячей, чем A5000, но она все равно занимает 2 слота. А A10 получается несмотря на свою цену занимает нишу для билдов, где вы хотите поставить более 4 карточек. И да, как ни странно A5000 еще тоже относительно тяжело купить.
Тестируем карточки
Приведу результаты тестирования 3090 и A10. У 3090 есть один нюанс. На рынке есть две модели 3090 с турбиной — ASUS и Gigabyte. У решения от ASUS как-то криво проставлены заводские настройки скорости вентилятора и он не крутится быстрее 45-50%. У решения от Gigabyte такой проблемы нет. Поэтому я приведу результаты сравнения A10 и 3090 от Gigabyte «в стоке» (у A10 вообще нет движущихся частей) и 3090 от ASUS с заводским и автоматизированным управлением скоростью «фенов».
Чтобы лишний раз не возиться с компиляцией, установкой CUDA и прочего, тестировать будем вот так:
# image
docker run --rm --gpus 0 -it --entrypoint bash nvidia/cuda:11.4.2-devel-ubuntu20.04
# gpu cooling (on host)
pip install coolgpus
sudo $(which coolgpus) --kill --temp 20 55 80 --speed 5 30 85
# git
apt update
apt install git
# gpu burn
git clone https://github.com/wilicc/gpu-burn.git
cd gpu-burn
make
./gpu_burn 120
./gpu_burn -tc 120
cd ../
То есть по сути просто берем официальный образ с CUDA 11.4 (девелоперская версия), собираем gpu-burn
и вперед.
Карточка | Команда | В начале, Gflop/s | В конце, Gflop/s | Макс. темп., C | Комментарий |
---|---|---|---|---|---|
ASUS 3090 | ./gpu_burn 120 | 20,258 | 17,900 | 85 | Кулер макс. 45% (сток) |
ASUS 3090 | ./gpu_burn 120 | 19,700 | 19,700 | 73 | Кулер макс. 70% (кастом) |
ASUS 3090 | ./gpu_burn -tc 120 | 48,084 | 39,530 | 90 | Кулер макс. 45% (сток) |
ASUS 3090 | ./gpu_burn -tc 120 | 48,215 | 48,215 | 74 | Кулер макс. 70% (кастом) |
Gigabyte 3090 | ./gpu_burn 120 | 19,858 | 19,225 | 75 | Кулер макс. 80%, 1 карта |
Gigabyte 3090 | ./gpu_burn 120 | 20,283 | 19,234 | 75 | Кулер макс. 80%, 2 карты |
Gigabyte 3090 | ./gpu_burn 300 | 19,755 | 18,936 | 77 | Кулер макс. 85%, 2 карты |
Gigabyte 3090 | ./gpu_burn -tc 120 | 49,359 | 47,142 | 75 | Кулер макс. 80%, 2 карты |
Получается, что по умолчанию решение от ASUS перегревается, но если крутить кулер хотя бы на 70%+, то все уже становится хорошо. Посмотрим теперь, что выдает A10:
Команда | Gflop/s | Макс. темп., C | Комментарий |
---|---|---|---|
./gpu_burn 120 | 13934 | 74 | Кулер DELTA, 90%, нет управления потоком |
./gpu-burn -tc 120 | 41225 | 77 | Кулер DELTA, 90%, нет управления потоком |
./gpu-burn -tc 120 | 41225 | 77 | Кулер DELTA, 50%, нет управления потоком |
./gpu-burn -tc 300 | 37877 | 87 | Кулер DELTA, 50%, нет управления потоком |
./gpu-burn -tc 300 | 40251 | 81 | Кулер DELTA, 100%, нет управления потоком |
Тут важно отметить, что для первых тестов кулер DELTA стоит просто приклеенный к корпусу на двусторонний скотч. Поток воздуха никак на «направлялся», он просто дул в примерном направлении A10. Про управление воздушными потоками, дельтами и сборку оптимальных серверных билдов я наверное напишу как-нибудь потом, если эта статья наберет хотя бы +50, уж очень там много деталей и тонкостей, и не хочется это все вспоминать.
В итоге получается интересная картина. Без использования тензорных ядер A10 сильно уступает 3090, но с ними — они почти уже равны. А разница в TDP наблюдается почти в два раза (!). Как себя поведут карточки в реальной работе, еще конечно предстоит узнать. Я довольно сильно намучился с железом и сейчас пока нет моральных сил гонять тесты на реальных задачах. Скорее всего когда это произойдет, мы что-то напишем в нашем телеграм-канале.
Тестируем райзеры и пропускную способность
Итак, у меня был целый ассортимент разного рода райзеров. Фирменных и говённых, коротких и длинных, красивых и облезлых. Пару лет назад при более неформальном тесте, я приходил к выводу, что только райзер от TT работал. Изменилось ли что-то в этот раз? Если посмотреть видосики как люди делают 10-метровые удлинители (понятно, что это проплаченная постановочная реклама и райзеры там были заранее выбраны и вообще это скорее шоу для неискушенной публики), втыкая райзеры один в другой, хочется верить, что все будет хорошо.
И да, важная ремарка, я хочу, чтобы все просто работало из коробки. Без каких-либо настроек ОС, BIOS и чего-то подобного. Это дискуссионный момент, но как раз по этой причине я в итоге опять отказался от использования райзеров совсем.
Райзер | Фирма | Длина | Разъемы | Комментарий |
---|---|---|---|---|
1 | Phanteks | 200 мм | x16 | Угловой |
2 | Noname | 500 мм | x8 => x16 | Угловой |
3 | Thermaltake | 300 мм | x16 | Прямой |
4 | Noname | 600 мм | x16 | Угловой |
Тестировать пропускную способность будем с помощью утилиты, которую предоставляет Nvidia в своем репозитории с CUDA-примерами. Точно так же, чтобы не возиться, просто берем официальный образ, не забывая спулить репозиторий на соответствующий тег релиза CUDA.
# image
docker run --rm --gpus 0 -it --entrypoint bash nvidia/cuda:11.4.2-devel-ubuntu20.04
# git
apt update
apt install git
# bandwidth test
git clone --depth 1 --branch v11.4 https://github.com/NVIDIA/cuda-samples.git
cd cuda-samples/Samples/bandwidthTest
make
./bandwidthTest --memory=pinned --mode=quick --htod
./bandwidthTest --memory=pinned --mode=quick --dtoh
./bandwidthTest --memory=pageable --mode=quick --htod
./bandwidthTest --memory=pageable --mode=quick --dtoh
cd ../
Итоги теста получатся такие:
Карточка | Тест | GB/s | Соединение |
---|---|---|---|
ASUS 3090 | ./bandwidthTest —memory=pinned —mode=quick —htod | 26.2 | Напрямую |
ASUS 3090 | ./bandwidthTest —memory=pinned —mode=quick —dtoh | 23.1 | Напрямую |
ASUS 3090 | ./bandwidthTest —memory=pageable —mode=quick —htod | 11.5 | Напрямую |
ASUS 3090 | ./bandwidthTest —memory=pageable —mode=quick —dtoh | 12.1 | Напрямую |
Gigabyte 3090 | ./bandwidthTest —memory=pinned —mode=quick —htod | 26.2 | Напрямую |
Gigabyte 3090 | ./bandwidthTest —memory=pinned —mode=quick —dtoh | 23.1 | Напрямую |
Gigabyte 3090 | ./bandwidthTest —memory=pageable —mode=quick —htod | 11.3 | Напрямую |
Gigabyte 3090 | ./bandwidthTest —memory=pageable —mode=quick —dtoh | 11.9 | Напрямую |
A10 | ./bandwidthTest —memory=pageable —mode=quick —dtoh | 26.2 | Напрямую |
A10 | ./bandwidthTest —memory=pageable —mode=quick —dtoh | 23.2 | Напрямую |
A10 | ./bandwidthTest —memory=pageable —mode=quick —dtoh | 11.4 | Напрямую |
A10 | ./bandwidthTest —memory=pageable —mode=quick —dtoh | 11.7 | Напрямую |
Любая | Система не видит карточку | NA | Райзер №1 |
ASUS 3090 | ./bandwidthTest —memory=pinned —mode=quick —htod | 1.7 | Райзер №2 |
ASUS 3090 | ./bandwidthTest —memory=pinned —mode=quick —dtoh | 1.7 | Райзер №2 |
ASUS 3090 | ./bandwidthTest —memory=pageable —mode=quick —htod | 1.7 | Райзер №2 |
ASUS 3090 | ./bandwidthTest —memory=pageable —mode=quick —dtoh | 1.7 | Райзер №2 |
ASUS 3090 | ./bandwidthTest —memory=pinned —mode=quick —htod | 26.2 | Райзер №3 |
ASUS 3090 | ./bandwidthTest —memory=pinned —mode=quick —dtoh | 23.3 | Райзер №3 |
ASUS 3090 | ./bandwidthTest —memory=pageable —mode=quick —htod | 8 | Райзер №3 |
ASUS 3090 | ./bandwidthTest —memory=pageable —mode=quick —dtoh | 8.9 | Райзер №3 |
Любая | Система не видит карточку | NA | Райзер №4 |
Я использую базовые настройки тестов пропускной способности, т.к. очевидно, что если измерять ее на малых «чанках», то она будет очевидно хуже. Я пробовал разные сценарии, но везде есть очевидная корреляция, поэтому я решил тут не усложнять.
Подведем итоги. Райзер от TT по прежнему работает. Остальные скорее не работают. Райзер от TT почти не влияет на пропускную способность.
Да, я осознанно не занимаюсь всяческими настройками BIOS, не переключаю PCIE режимы, итд итп.
Вместо вывода
Надеюсь эта статья была вам интересна и полезна. Нам стоило довольно больших усилий (и финансовых ресурсов!) собрать это все вместе и изложить в понятном и интересном ключе.
Я пока морально не готов писать продолжение статьи про сбор суперкомпьютера, но в серверном форм-факторе, но если эта статья наберет +50, то думаю в начале января я сделаю над собой моральное усилие.
Всех с наступающими праздниками и Новым Годом!
PS Пара слов про сами карточки
Я нахожу своеобразную красоту в том, как выглядят утилитарные вещи. Карточки PNY выглядят очень просто, они очень утилитарно и экономично упакованы в коробки из обычного картона. Карточки от ASUS пытаются выглядеть немного как арт-объект, но при более близком рассмотрении все эти «красивости» это просто бесполезные пластиковые обвесы. A карточки от Gigabyte визуально сочетают в себе и какой-никакой промышленный дизайн, профессионализм, утилитарность и строгость внешнего вида (и очень хорошо стоят одна за другой, что конечно важнее!). Этого же я не могу сказать про упаковку карточек, коробки как обычно отталкивающе-аляпистые и налицо пустая трата ресурсов.