Нынче никого не удивишь достижениями искусственного интеллекта машинного обучения (ML) в самых разных областях. При этом доверчивые граждане редко задают два вопроса: (i) а какая собственно цена экспериментов и финальной системы и (ii) имеет ли сделанное хоть какую-то целесообразность? Самым важным компонентом такой цены являются как ни странно цена на железо и зарплаты людей. В случае если это все крутится в облаке, нужно еще умножать стоимость железа в 2-3 раза (маржа посредника).
И тут мы неизбежно приходим к тому, что несмотря на то, что теперь даже в официальные билды PyTorch добавляют бета-поддержку ROCm, Nvidia де-факто в этом цикле обновления железа (и скорее всего следующем) остается монополистом. Понятно, что есть TPU от Google и мифические IPU от Graphcore, но реальной альтернативы не в облаке пока нет и не предвидится (первая версия CUDA вышла аж 13 лет назад!).
Что делать и какие опции есть, когда зачем-то хочется собрать свой "суперкомпьютер", но при этом не хочется платить маржу, заложенную в продукты для ультра-богатых [мысленно вставить комментарий про госдолг США, майнинг, крах Бреттон-Вудсткой системы, цены на здравоохранение в странах ОЭСР]? Чтобы попасть в топ-500 суперкомпьютеров достаточно купить DGX Superpod, в котором от 20 до 100 с лишним видеокарт. Из своей практики — де-факто серьезное машинное обучение сейчас подразумевает карточки Nvidia в количестве примерно 8-20 штук (понятно что карточки бывают разные).
Основная оговорка — в этой статье мы поговорим про билд, в котором нужно делать много стандартных операций (для чего обычно используют видеокарты), но не нужно астрономически много RAM (вообще вроде как даже топовые Threadripper процессоры от AMD поддерживают много RAM, но материнских плат таких нет). Вообще все эти вещи довольно очевидны и просты, но я нигде не видел их собранными в одном месте без купюр.
Видеокарта
Итак нам стало понятно, что нам нужны карточки Nvidia для вычислений. Но не торопитесь покупать карты Quadro или Tesla или покупать официальные сборки, потому что зачастую в сборках заложена маржа в 50-60%. Обращаю внимание также на то, что все "метрики" в этой статье приведены весьма примерные и условные (скорее коррелирующие с нашей ежедневной работой, цены меняются постоянно, а тренды — нет), потому что всегда найдется какой-то вид нейросетей на каком-то особом модном виде тензоров от Гугла, где все будет работать не так. Также опустим и то, что из-за короны и бума майнинга розничные цены неадекватны, но как говорится "This time is not different" и можно всегда будет закупиться на дне пузыря.
Как ни странно, с точки зрения потребителя с картами все просто. Вообще есть довольно популярная и длинная статья про выбор и сравнение карточек, она довольно неплохая, но автор явно в силу своего бекграунда упускает некоторые вопросы админства и сравнивает целесообразность опций только с точки зрения первичного рынка США (и очень много букв). Полезную выжимку этой статьи я уже писал тут а для целей этой статьи выжимка уже более подробная и такая:
Карточки для обучения:
По критерию цена / качество при прочих равных игровые карточки всегда лучше "специализированных". Например я лично сравнивал самые мощные из доступных карт 3090 против А100. А100 "быстрее" 3090 примерно в 2 раза… но по официальной цене дороже в 5-6 раз;
Рассматривать стоит игровые карточки начиная с поколения "Pascal" (серия 10), серия 20 всеми была признана неуспешной и дорогой, даже базовые карточки же архитектуры Ampere (серия 30*) превзошли флагманы прошлого поколения (спасибо AMD, которая "почти" догнала Nvidia);
Лучшая карта всех времен и народов — подержанная 1080 Ti с Авито. Не нужно пугаться отсутствия гарантии или годового пробега (два или три года постоянного майнинга — я бы не стал брать, касательно игр — тут все попроще). Просто грамотно осматривайте и тестируйте карты при покупке, погоняйте "пушистый бублик" хотя бы минут 20, осмотрите маркировку карты, банально прочитайте что выдают дрова и бенчмарки. При должном обращении — ресурс карточки составляет примерно 3-4 года постоянного использования (в сухом прохладном помещении, периодически выдувая пыль);
На пальцах топовые карты Ampere примерно в 2 раза быстрее 1080 Ti (а иногда и в 3). Мы даже не рассматривали покупку 3080 по банальной причине, что Nvidia зажала для них памяти (вероятно мотивируя пользователей 4K мониторов или использовать DLSS или покупать 3090). Причем я слышал странные слухи про 3080 с 16 или 20 GB памяти (в ноутбуках?);
Также немаловажно что в поколении 20* появились тензорные ядра, и хоть в игровых картах они в первую очередь предназначены для таких вещей как DLSS и как-то обрезаны, но тем не менее на части задач вкупе с использованием AMP или APEX они позволяют получить ещё прирост в скорости в два раза. Это объемная тема, я описывал свои мысли тут, и конечно читайте доку от Nvidia;
Кто знает, уточните — что это такое вообще? Какие-то секретные склады Nvidia?
C 3090 с "турбиной" правда вышел казус, она вышла настолько удачной, что по слухам из-за того что "серьезные" люди стали предпочитать ее дорогим картам Tesla под давлением от Nvidia несколько производителей сняли ее с производства;
Карточки для продакшена:
Я сталкивался с большим количеством заблуждений касательно деплоя на карточках и отразил большую часть тут;
Вообще если нет особых требований от админов (или система допустим собирается в super-tower корпусе который вставляется в стойку), то можно использовать те же игровые карты;
Но если по какой-то причине вам реально нужны карты с низким TDP или реально однослотовые или пассивные — то есть интересные однослотовые решения линейки Quadro RTX и старая Tesla T4, цена которой хоть как-то адекватна (до пузыря). Минус Quadro состоит только в несколько завышенной референсной цене;
Охлаждение:
Карточки серии Ampere "холодные" — 3-4 3090, стоящие рядом, без каких-либо настроек не греются выше 70-75 градусов, когда 80-85 это норма для 1080 Ti;
Если карты будут стоять на "уголках" (без корпуса) или в корпусе для майнинга — то по сути неважно какая там система охлаждения;
Если карты будут стоять рядом — то неизбежно обязательно покупать карточки с "турбиной" (центробежный вентилятор, выталкивающий воздух из корпуса);
Особняком стоят карточки такого форм-фактора — гибрид водянки и воздуха, но их и раньше было почти невозможно купить. Я пользовался ими немного у знакомого, они реально особо не греются выше 50 градусов;
Отдельно стоит упомянуть кастомные однослотовые версии обычных карт с водянкой (пример). Понятно, что их тоже практически невозможно купить. А если делать самому, то тут сборка сразу становится нетривиальной (я интересовался, кастомная вода, установка радиатора, зачем-то реболлинг, кастомная водянка, знатоки — уточните болячки таких билдов);
PCIE lanes:
Чем больше, тем лучше, но насколько PCIE 4.0 помогает — я пока не понял, вроде и так ничего не тормозило никогда;
До 4 карт в 1 сервере вам абсолютно точно достаточно PCIE 3.0 8x на 1 карту;
По рассказам людей, на 6-8 картах, этого тоже в принципе достаточно;
Я не собирал сервера с кастомной водой на 7-8 карточек, поэтому мне тут тяжело сказать;
Читайте документацию процессора и материнской платы;
Питание:
Это миф, что нет нормальных консьюмерских блоков питания на 4 3090. Есть блоки питания Super Flower и Platimax на 1500-2000 Ватт, прекрасно зарекомендовавшие себя. И если вы завтра не выбираете железо, чтобы обслуживать ML задачи уровня условного ВК, то высока вероятность что для продакшена вам вообще хватит 1 сервера (с исследованиями — сложнее). Так же для исследований совсем не нужно двойное резервирование по питанию;
Если по какой-то причине вы не можете купить один блок на 2000 ватт, то можно просто купить плату для синхронизации двух блоков по 1000 ватт;
Вообще утилиты Nvidia позволяют настроить потребление карт, но можно просто рассчитывать мощность из расчета 300 Вт в пике на 1 карточку + 30% запаса мощности блока питания;
Вообще можно понятно привести старый график показывающий, что цены падают все еще и на SSD и на HDD, но никак не пересекутся. Но самое адекватное описание ситуации, которое я видел, можно глянуть тут.
Если коротко и немного с добавлением ML:
SSD скорее всего никогда не догонят по цене HDD;
Меньше какого-то размера нет смысла НЕ покупать NVME SSD;
Для медленной помойки и бекапов конечно нельзя НЕ использовать HDD (или даже внешнее хранилище);
Точка "перехода" из быстрого в медленное хранилище у всех будет разной, но на рынке сейчас есть довольно дешевые SATA3 SSD на 1-4 терабайта;
И раз уж мы собераем "дешевый" суперкомпьютер из нескольких нод, то можно к нему и собрать и сетевую помойку тоже недорого (раз, два, три). Дальше в принципе можно стандартными средствами Linux даже SSD подкачку сделать для RAID массива (я пока просто обходился десятым RAID на 10 Gbit сети для наших задач). Единственный момент — нужно недорого найти 10 Gbit/s оборудование, с этим может быть сложнее, но многие топовые материнские платы сейчас имеют 2 10 Gbit/s порта и на рынке есть пара недорогих PCIE решений.
Материнская Плата, Шасси
Допустим с выбором карточек определились. И тут мы переходим к самом интересному — к шасси, на котором предстоит сборка. Большими мазками для обычных граждан и не только условно легко доступны 4 основных типа систем:
Nvidia DGX и его аналоги от менее пафосных вендоров. Там все прекрасно, кроме цены. Если очень грубо прикидывать, там стоят самые дорогие компоненты, и сверху еще маржа примерно в два раза поверх цены этих компонентов;
Кастомные сборки от кастом шопов. Самый яркий пример это вот эта контора. По ним в принципе можно даже проектировать свои сборки (правда допустим в декстоп сегменте там могут быть старые материнские платы). Видно также, что более новые сборки там как раз доступны с 3080 и 3090. Минус такого подхода — опять же такая компания хоть и на бумаге формально представляет "поддержку", но по анекдотам эта поддержка естественно не глобальная и решение проблем занимает время. Простым языком — админить это все равно надо самому, никто не поедет решать вашу проблему в воскресенье именно в вашей стране. Единственная экспертиза таких ребят, которая не валяется на дороге, это взять на себя геморрой по сборке кастомной воды на 8 карт и дать на это гарантию, но опять же по анекдотам людей — вода (а особенно в свете "холодных" Амперов) не стоит свеч. Появление таких кулеров как Ice Giant делает воду вообще менее привлекательной долгосрочно;
Сборки на основе серверных платформ от SuperMicro или Gigabyte (или любой крупной аналогичной фирмы). Раньше моя претензия к таким платформам была в том, что в разумных ценах там никогда не было NVME дисков и были сильно устаревшие сокеты процессоров Intel. Сейчас подтянулись новые серверные решения на базе AMD и минус по сути только в цене. Естественно "официально" поддерживаются только карты Tesla и нужна только ECC память и серверные процессоры (как правило дороже в 2-3 раза);
Сборки на основе "профессиональных" и "экстремальных" материнских плат на обычном консьюмерском железе. В качестве корпуса можно использовать просто любой качественный большой ATX корпус или даже корпус для майнинга;
Первую категорию мы смело отметаем, т.к. мы хотим все-таки экономить. Вторая и четвертая категории по сути идентичны, но мы не хотим платить 50% маржи за гарантию (которую при покупке новых деталей и так дает производитель) и "поддержку" (и какие-то детали проще купить подержанными, например те же 1080 Ti на первое время). Получается, что выбор на самом деле между специализированными серверными платформами и самостоятельной сборкой. Есть еще пятый вариант — заколхолзить на основе Б/У или "пустого" серверного корпуса применив смекалку, но по сути этот вариант просто является адаптацией варианта четыре к установке в стойку, но нужно или иметь такие железки под рукой или знать где покупать и как проверять (мне пару раз предлагали по цене металлолома какие-то старые салазки — но там всегда или не было посадочных мест под PCIE в нужном количестве, или было вопросы к питанию — а колхозить не хотелось).
Если внимательно посмотреть на характеристики серверных шасси и "профессиональных" материнских плат, то можно найти несколько интересных закономерностей (по сути они и размер вашего бюджета будут диктовать ваш выбор):
В Intel сейчас любят кидаться камнями, но процессоры ThreadRipper от AMD по номинальной цене просто прекрасны и неплохо так внесли новую струю на рынок. Серверные решения на базе EPYC такой же процессорной мощности… стоят просто в 2-3 раза дороже;
Существует много профессиональных материнских плат на 6-7 PCIE слотов или плат для энтузиастов с 4 двойными PCIE слотами. Но все современные интересные карточки (без кастомной воды) с турбиной занимают 2 слота. И производители карт (судя буквально по наличию только одной или двух таких карты за несколько лет) не заинтересованы делать однослотовые карты (а зачем? геймеру никогда не нужно больше 2-4 карт). Никто не запрещает взять материнскую плату на 6-7 слотов от ASUS, майнерский корпус (или просто уголки из Икеи) и собрать все аки майнер на райзерах (найти работающий на x8-x16 райзер это то еще развлечение). Но у такой системы будет несколько минусов — нельзя вставить в стойку, райзеры у меня лично постоянно глючили и отваливались, опредленный колхоз, отсутствие удобной фурнитуры и повышенный уровень шума (при прочих равных). Далеко не все ДЦ принимают такие системы для хостинга;
Получается, что если совсем абстрагироваться от конкретных цен в моменте, то есть всего 3 интересных опции: (i) или полностью консьюмерская сборка желательно на не ушатанных картах со вторичного рынка реалистично тянущая 4-6 карт (вопрос готовы ли вы геморроиться на райзеры, уголки и / или корпуса для майнеров) (ii) очень похожая сборка, но допустим на базе super-tower от Gigabyte или SuperMicro (оно будет вставляться в стойку — тут основная фишка в этом, но часть деталей будет дороже) (iii) сборка на основе серверной платформы;
Опция (i) максимально выгодна, если вы можете собрать N машин по 4-6 карт и может стоить в 3-5 раз дешевле опции (iii) за счет цены самого шасси, повышенной цены процессора и повышенной цены ECC RAM;
Опция (ii) или (iii) неизбежна, если у вас есть обязательные требования по установке в стойку (колхозные варианты с переделкой старых шасси тут опускаем, т.к. у меня нет опыта, но может кто-то из коммьюнити делала). В нагрузку вы получите скорее всего дублирование блока питания, но для исследований это просто не нужно;
Я бы предположил, что опция (iii) становится привлекательной, если почему-то вы хотите ставить сразу 8-12 видеокарт в один сервер;
Еще отдельно отмечу, что я не использовал однослотовые видеокарты Quadro RTX для обучения нейросетей, но чисто по характеристикам кажется, что две такие карты примерно эквивалентны одной 3090, было бы также интересно выслушать тех, кто пробовал, в комментариях.
Просто пример базового конфига на базе серверного шасси. Обратите внимание, что только само шасси стоит столько же, сколько может стоить целый бокс, если карточки купить подержанные!
Процессор и Шасси
Тут на самом деле все просто. Процессор вы по сути выбираете выбирая материнскую плату (я описал основные моменты, которые кажутся мне важными).
В случае выбора серверной платформы — вы сразу получаете шасси с блоком питания. В случае самостоятельной сборки — нужно еще найти корпус куда это все влезет, но благо на 4 карты это не представляет сложностей.
Сеть
У меня пока не было потребности (ну или скажем так, мы всегда умудрялись оптимизировать свои расчеты), где нужно было бы соединять несколько нод для расчетов используя скажем DistributedDataParallel из PyTorch (на одной ноде все конечно прекрасно работает). Не могу оценить хватит ли для него "стандартных" 10 Gbit/s без установки дорогих сетевых карт на 40+ Gbit/s. Отдельный вопрос конечно что с этим делать, т.к. такая плата скорее всего займет еще один PCIE-слот.
Пока тут могу рассказать только про один хак — в "профессиональных" и "экстремальных" материнках зачастую бывает 1-2 разъема по 10 Gbit/s (и иногда даже третий гигабитный). В совсем дешевом варианте (только цена патч-корда высокой категории, но на коротком расстоянии даже "плохие" патч-корды показывают 10 гигабит) две такие материнки можно соеденить напрямую друг с другом и получить "суперкомпьютер". Если таких разъема два, то можно в мастер ноду уже воткнуть два патч-корда. Но чтобы соединить сеть больше, уже придется найти 10 гигабитный свич (внезапно найти подержанный Mikrotik не проблема, но они обычно очень сложны в настройке).
Финальные Ремарки и Исправления Ошибок
Буду очень рад, если знающие люди, кто строил такие системы и сети поделятся в комментариях опытом, проблемами, результатами своих экспериментов и мотивацией при выборе своей платформы!
Об Авторе
Александр Вейсов — основатель / владелец комании Силеро (silero.ai), небольшой независимой компании, которая занимается разработкой продуктов в сфере распознавания, синтеза речи и NLP. Публике Хабра Силеро может быть известна по датасету Open STT, моделям silero-models или VAD-у silero-vad. На российском рынке компания распространяет свои решения через прямые продажи / проекты и вендоров / системных интеграторов софта.