Задача про два камня
Собираем компьютер с серверной матплатой Lenovo RD450X
Моей целью было собрать еще один компьютер для научных расчетов, однако, как и в прошлый раз, эта система подойдет и для других целей. Собрав машину, я протестировал ее возможности на брутфорсе хешей и генеративных нейросетях, помимо научных вычислений. Результатами я поделюсь в конце статьи.
info
О моем прошлом опыте читай в статье «Мегасчеты. Собираем мощный компьютер для вычислений».
Характеристики
Матплата, которая меня заинтересовала, поддерживает процессоры Xeon E5-26XX v3 и v4, то есть вроде как всю линейку (кроме E5-2696 v4 и E5-2687W v4), но к этому вернемся позже. Поддерживается память ECC REG — вплоть до DDR4-2400, 16 слотов, то есть можно запихать до 1 Тбайт памяти. Также есть два PCI-E (3.0) x16 и четыре PCI-E x8, два USB 3.0. С дисками тоже все хорошо: на плате два разъема Mini SAS 8087 и еще пара SATA. Ну и напоследок две сетевухи 10 Гбит/с и, конечно, BMC, встроенная видео (ASPEED AST2400). И все это в форм‑факторе E-ATX. И все это меньше чем за 10 тысяч деревянных!
info
С ценами сейчас неопределенность: с одной стороны, все описанное железо уже старье и дешевеет, но с другой — кризис чипов, кризис логистики, политическая нестабильность, санкции и торговые войны, поэтому цена уже пару лет стабильно держится на уровне 10 тысяч рублей. Правда, сейчас на «Алиэкспрессе» ее не купить — продавцы опасаются санкций. Так что остаются перекупы с «Авито» и прочие способы серого импорта.
Комплект
Процессоры
Как я уже рассказывал в прошлой статье, наиболее разумный выбор процессора для меня — это Xeon E5-2690 v4. У него достаточно ядер (14) и буст на все ядра 3200 МГц, а цена вполне демократичная. Да что там демократичная, эти процы стоят дешевле кулеров, которые мы поставим!
Получится по 135 Вт на камень, что для нашей платы, конечно, многовато. Штатно в ней стоит что‑то вроде 2640 v4 (90 Вт), но практика показала, что плата выдержит. На данный момент у меня уже около года наработки 24/7.
В итоге имеем 28 ядер, 56 потоков и 3200 МГц при полной нагрузке — достаточно серьезно даже по нынешним временам. Конечно, было бы круто впихнуть туда E5-2699 v4 или E5-2696 v4, но первый камень стоит уж очень дорого (кратно дороже E5-2690 v4 при быстродействии на 30% больше), а E5-2696 v4 не запускается, это я лично проверил. Было грустно.
Память
Тут все хорошо, старые «Зионы» всеядные, и можно даже в голову не брать, какой у тебя подтип памяти и какой у нее ранк. Впрочем, тут все гладко еще и оттого, что б/у память, скорее всего, с тех же серверов, что и б/у процы. Если собираешься занять все слоты, то стоит брать LRDIMM, иначе может не завестись на 2400 МГц. В общем, берем восемь планок по 64 Гбайт ECC REG PC4-2400.
У меня стоят планки фирмы Kllisre и вот уже год работают без нареканий. Повезло, наверное! Память — это то, на чем в этой машине можно хорошо сэкономить, я собирал с основным прицелом на квантовую химию, поэтому памяти много, и это почти половина стоимости. Для нейросетей, например, можно и поскромнее раза в четыре.
Диски
На этот раз я выбрал чуть более скромную конфигурацию: 256 Гбайт SATA SSD под систему, 512 Гбайт NVME SSD под расчеты и пара 4 Тбайт SATA HDD для хранения результатов. Можно сказать, что сюда я сбагрил остаток хардов. Учитывая огромный объем памяти и хорошо работающее кеширование, разницы в большинстве рабочих задач между SATA и NVME на глаз не заметно.
Видеокарты
Квантово‑химический софт в настоящее время дружит с видеокартами ограниченно. Но на этот раз хотелось, помимо квантовой химии, заняться ИИ, а он как раз замечательно дружит с видеокартами. Но уверенности, что эти занятия превратятся во что‑то серьезное, у меня пока нет, так что на видяхе я решил сэкономить. Лучший вариант из бюджетных — GTX 1080 Ti, цены на них начинаются примерно с 10 тысяч рублей, и видеопамяти там прилично — 11 Гбайт. Короче, для баловства сойдет.
Блок питания
Блок питания я взял с некоторым запасом по мощности — DeepCool 850W. Тут главное, чтобы были два восьмипиновых провода для CPU, ну а шестипиновый и 6+2-пиновый для видеокарты сейчас есть в любом блоке. Этот блок питания у меня работает уже второй год 24/7.
Корпус и кулеры
Вот тут уже чуть хитрее: нам нужен корпус E-ATX, причем такой, чтобы можно было организовать хорошую продуваемость. Отлично подошел DeepCool Matrexx 55 Mesh. Дешево, сердито и симпатично! Я купил его в минимальной комплектации и добавил пять кулеров ARCTIC P14 ACFAN00136A: три на фронтальной панели на вдув и два сверху на выдув. Бренд тут не так важен, главное, чтобы кулеры были четырехпиновые и имели максимально возможную производительность. У указанных кулеров производительность 72,5 CFM. Вентилятор на задней панели тоже лучше заменить более производительным, например ID-Cooling XF-120, он выдает 76,16 CFM.
Почему нужны именно четырехпиновые? Потому что в такой конфигурации важен контроль оборотов. Без нагрузки система будет достаточно холодной, и нет никакого резона гонять через нее радиоактивный пепел лишнюю пыль и косплеить пылесос. С другой стороны, под полной нагрузкой греться система будет очень прилично, и тут лучше разогнать кулеры как следует. Хороший вариант — взять родной 2U-корпус с рук, но это может обойтись дороже материнской платы.
Решаем проблемы
Начинаем собирать и что видим? Материнская плата, конечно, на место встает нормально, но неясно, куда подключать переднюю панель! Черт с ним с USB, но на передней панели есть еще небесполезная кнопка включения. Начинаем гуглить, и тут приходит понимание, почему плата была такой дешевой. Дело в том, что к ней практически нет документации, мануал только на китайском и не для платы, а для OEM-сервера Lenovo RD450X, а там нет никакой распиновки разъемов.
К счастью, на форуме overclockers.ru есть посвященная этой плате тема, сейчас она уже разрослась, и энтузиасты успели много чего накопать, а вот год назад все было гораздо хуже. Тем не менее там есть упомянутый выше мануал и распиновка разъема.
После длительного рассматривания фотографий этой платы я пришел к выводу, что нас интересуют разъемы, указанные на картинке ниже.

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


А еще встречается целая плата‑переходник, которую тоже могут включить в комплект.

Моя была укомплектована только перемычкой (и на том спасибо), поэтому, воспользовавшись распиновкой с форума, я спаял такой переходник сам — хорошо, что под рукой был нужный разъем.


И, как будто этого недостаточно, разъемы выведены вбок, точнее вниз, если смотреть в корпусе. А это значит, что не выйдет подключить наш переходник, не внеся модификации в корпус. Что ж, мы люди простые! Берем дремель и пропиливаем окно нужного размера.

После допиливания все помещается. Следующей трудностью была задняя заглушка в корпус, она немного не совпадала с разъемами на материнской плате, тут помогли ножницы по металлу (там буквально пара миллиметров), половину бортика пришлось отрезать. После этого все встало как надо. Такая вот расплата за OEM. Теперь можно закрепить материнскую плату и приступить к кабель‑менеджменту.

Не забываем про переходник.

Все готово! А вот про заморочки с охлаждением стоит поговорить особо.
Охлаждение процессоров
У меня возникла проблема с подбором кулеров для процессоров. Дело в том, что плата серверная и крепления там Narrow ILM 94 × 56. Это неприятно, так как у бытовых «башен» крепление Square ILM 80 × 80. Тут надо быть внимательным, эти крепления несовместимы между собой.

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

Чтобы избежать этих проблем, я решил взять серверные кулеры — они, можно сказать, родные, и с ними все хорошо, кроме цены: стоят они дороже процессоров... Впрочем, проблем я таки не избежал, и первоначально приобретенные низкопрофильные кулеры под корпус 2U оказались слабоваты (70 градусов в полной нагрузке) и шумели примерно как фен!

В целом это решение оказалось непригодным, пришлось раскошелиться и взять две 3U-башни. Вот с ними все хорошо, температура около 55 в полной нагрузке, и шума значительно меньше. Как говорится, скупой платит дважды.

Про управление оборотами кулера стоит поговорить отдельно. Несмотря на то что плата серверная и имеет BMC, контроль оборотов кулеров там не предусмотрен, что очень неудобно. В интернете пишут, что, когда в плате стоят процы, с которыми она поставлялась, работает какой‑то предустановленный профиль, однако с прочими процами кулеры всегда работают на полную. Наши 2690 v4 — именно такие процессоры. Это проблема, так как на холостом ходу большой поток воздуха способствует активному накоплению пыли, а уж про шум я молчу. При этом под полной нагрузкой нужно хорошее охлаждение, и там полные обороты уместны.
Короче, активное управление скоростью вращения кулеров просто необходимо. Эту проблему я решил подключением внешнего контроллера с USB-интерфейсом, о котором я тоже писал статью. Решение, возможно, не очень элегантное, но рабочее и достаточно надежное.
Не так давно энтузиасты таки раскопали способ штатного контроля оборотов кулеров с помощью утилиты ipmitool. К несчастью, когда я собирал машину, ту статью я не нашел, а может, ее и вовсе не было. Так или иначе, сейчас я бы попробовал использовать ipmitool. Приведенный ниже код должен работать, однако я его не проверял, поэтому рассматривай его как концепт.
#!/bin/zsh#!/bin/zshOLDPWM=30
PWM=30
# Если файл /tmp/old_pwm существует, выход с кодом 2. Это предотвращает повторный запуск скрипта, если он уже выполняется.if [ -e /tmp/old_pwm ]; then exit 2
fi# Будем в цикле проверять температуру и регулировать скорость вентилятора.while [ true ]; do # Получаем текущую температуру процессора утилитой sensors. temp=$(sensors | grep "Package id 1:" | awk '{print $4}' | tr -d '+°C') temp=${temp%.*} # Получаем предыдущее значение широтно-импульсной модуляции из файла, если он существует. # Это значение будет использоваться для сравнения с новым значением, чтобы определить, нужно ли изменять скорость вентилятора. if [ -e /tmp/old_pwm ]; then OLDPWM=$(head -1 /tmp/old_pwm) fi # Устанавливаем начальное значение ШИМ на 30. Далее будем корректировать это значение в зависимости от текущей температуры. PWM=30
if [ $temp -ge 40 ]; then PWM=40; fi if [ $temp -ge 45 ]; then PWM=50; fi if [ $temp -ge 50 ]; then PWM=70; fi if [ $temp -ge 55 ]; then PWM=80; fi if [ $temp -ge 60 ]; then PWM=90; fi if [ $temp -ge 65 ]; then PWM=100; fi # Сохраняем новое значение ШИМ в файл /tmp/old_pwm. echo $PWM > /tmp/old_pwm
# Если новое значение ШИМ отличается от предыдущего, изменяем скорость вентилятора. # Используем утилиту ipmitool для отправки команды на изменение ШИМ. if [[ $PWM != $OLDPWM ]]; then sudo ipmitool raw 0x2e 0x30 00 00 $PWM fi # Ждем 30 с перед следующим циклом. sleep 30
done
В общем, читаем температуру из вывода sensors
, обрабатываем и выставляем обороты кулеров, но на этот раз через ipmitool
.
Прочие особенности
Есть у этой материнской платы еще несколько особенностей. Например, первое включение после долгого пребывания в обесточенном виде может занять много времени. Однажды она стартовала больше пятнадцати минут! Поэтому не стоит паниковать раньше времени, иногда нужно просто подождать. Надо также сказать, что до того момента, как загрузится контроллер BMC, материнская плата не реагирует на кнопку включения, а загружается он около минуты.
После первого запуска перезагрузка происходит уже значительно быстрее, но это тоже занимает пару минут. Приходится ждать, пока контроллер проведет диагностику оборудования и памяти, а ее у меня много. Плата нормально стартует в режиме EFISTUB, однако с записью номер 0000
могут быть проблемы, остальные номера работают корректно.
У платы есть BMC, но возможности там скудные. Впрочем, может быть, я не оценил их, поскольку использую плату не вполне по назначению. Доступ к BMC возможен только с отдельного сетевого интерфейса.
С логином и паролем тоже может быть некоторая загвоздка, но известны стандартные пары:
lenovo1/Lenovo123
lenovo/len0vO
ADMIN/ADMIN
albert/admin
У меня сработала последняя пара.
В любом случае в UEFI есть настройка пользователей BMC, там можно и пользователя добавить, и пароль сбросить.
Финальная конфигурация
Итак, вот что у меня получилось в итоге:
- CPU: 2 × Xeon 2690 v4
- GPU: Nvidia GTX 1080 Ti
- RAM: 512 Гбайт (8 × 64) ECC REG DDR4 2400 МГц
- HDD: 2 × 4 Тбайт WD Purpule
- SSD: 256 Гбайт SATA SSD + 512 Гбайт NVME SSD
Тест-драйв
А теперь перейдем к самому интересному: проверим, что можно выжать из этой машины. Как оказалось, выжать можно достаточно! Я установил актуальный Arch Linux на SATA SSD, но разницы с NVME особой нет, так как оперативки вагон и кеширование все сглаживает. Также я включил параметр ядра mitigations=off
, что прибавило 5–10% к быстродействию.
Кванты
Начнем, пожалуй, с того, ради чего все и затевалось, — с квантово‑химических расчетов. Ради них, собственно, тут куча ядер и много памяти. Как и в прошлый раз, запускаем тестовый расчет энергии молекулы среднего размера с отключенными ускорялками и аппроксимациями.

Расчет проводится в программном пакете ORCA 5.0.4, входной файл прежний.
! UKS b3lyp def2-tzvp tightscf defgrid3 nocosx nori
%pal nprocs N end
%method
AngularGrid 7
IntAcc 5.670
GridPruning OldPruning
BFCut 1e-11
WeightCut 1e-14
end
* xyz 0 1
7 5.263365000 -0.809094000 0.301207000
6 6.573875000 -0.272788000 0.577214000
6 7.676247000 -1.298471000 0.365855000
6 9.040975000 -0.709409000 0.673148000
7 10.148432000 -1.562897000 0.289452000
6 10.248995000 -2.816903000 1.002416000
6 11.415931000 -0.834654000 0.299215000
6 11.219991000 -3.722976000 0.274540000
6 12.616201000 -1.728404000 0.596641000
7 12.479498000 -3.040776000 0.008370000
6 13.574798000 -3.784343000 -0.374628000
6 13.407266000 -5.070792000 -0.923040000
6 14.889954000 -3.303523000 -0.241151000
6 14.497437000 -5.811691000 -1.337626000
6 15.954215000 -4.072569000 -0.671221000
6 15.794150000 -5.329993000 -1.225769000
7 4.835772000 -0.973795000 -0.996077000
6 4.395529000 -1.271139000 1.257513000
6 3.654749000 -1.533350000 -0.876188000
7 3.327586000 -1.736522000 0.465013000
6 2.715758000 -1.933372000 -1.852204000
6 1.545454000 -2.496808000 -1.443497000
6 2.154252000 -2.302219000 0.878375000
6 1.256931000 -2.685894000 -0.059367000
8 4.488440000 -1.288606000 2.474129000
17 17.581746000 -3.423758000 -0.479631000
1 2.033998000 -2.399764000 1.945985000
1 0.324817000 -3.133479000 0.248767000
1 0.816928000 -2.808697000 -2.178230000
1 2.953860000 -1.780764000 -2.894034000
1 6.554111000 0.068581000 1.610272000
1 6.717863000 0.592377000 -0.068151000
1 7.466435000 -2.155921000 1.004541000
1 7.658018000 -1.645300000 -0.666511000
1 9.150192000 0.220009000 0.109847000
1 9.093457000 -0.427101000 1.740796000
1 11.542924000 -0.345204000 -0.668225000
1 11.416418000 -0.043022000 1.063859000
1 13.490643000 -1.237666000 0.182744000
1 12.779915000 -1.795333000 1.679456000
1 11.393404000 -4.624746000 0.871541000
1 10.758268000 -4.030853000 -0.666412000
1 10.539040000 -2.692732000 2.059832000
1 9.281760000 -3.312189000 1.005791000
1 15.101308000 -2.351050000 0.214305000
1 16.645962000 -5.907387000 -1.549807000
1 14.333360000 -6.792112000 -1.764807000
1 12.419211000 -5.483721000 -1.049190000
*
Запускаем, смотрим и добавляем новую строчку в рейтинг расчетных машин.
i3-8100 4x3.60GHz 00:39:58
Ryzen 5500U 6x2.1GHz 00:31:24
i7-8700 6x3.2 GHz /8Gb DDR4 2666MHz /SATA HDD 0:30:18
dual Xeon X5650, 12x2.7GHz /144Gb DDR3 /ATA HDD 00:29:45
Xeon E5-2658v3 12x2.6GHz /32Gb DDR4 2133MHz /SATA HDD 00:23:15
i5-10600K, 6x4.5GHz /16Gb DDR4 /SDD 00:22:43
AMD Ryzen 7 3700X 8x3.6GHz 00:19:07
dual Intel Xeon E5-2680v2 10x3.6 GHz /64Gb DDR3 1066MHz /HDD 00:17:17
i9-10920x 12x3.5GHz /128Gb DDR4/M.2 SSD 00:14:40
dual Intel Xeon E5-2697v2 12x2.7GHz /256Gb DDR3 1600MHz /SATA HDD 0:12:57
AMD Ryzen 9 5900X/32Gb/HDD 00:12:23
Xeon 2696v4 22x2.8GHz /512Gb DDR4 2400MHz /RAID0 M2 SSD 00:10:53
AMD Ryzen 9 5950X 16x3.4GHz /64Gb DDR4 /M.2 SSD 00:07:33
---
dual Intel Xeon E5-2690v4 14x3.2GHz /512Gb DDR4 2400MHz /NVME SSD 0:07:24
---
Ryzen Threadripper 3970x, 32x3.7GHz /256Gb DDR4 3200MHz /SSD 0:05:32
Видим, что на этот раз мы обошли даже Ryzen 9 5950X и уступили только Ryzen Threadripper 3970x. Я думаю, что это очень хороший результат. На этой машине за минувший год было много чего посчитано (и что‑то даже опубликовано). Самый длительный расчет занял примерно две недели в полной нагрузке, и машина показала себя очень хорошо. Работает стабильно, не перегревается.
Брутфорс
Полноценно брутить пароли Wi-Fi, как в прошлый раз, я не стал, просто установил hashcat
, драйверы Nvidia для CUDA и intel-opencl-runtime
для работы на CPU. Пакет intel-opencl-runtime
можно тянуть с AUR.
Запускаем тест:
hashcat -D 1,2 -b -m 22000 |tee hashcat_report.txt
Получаем следующий результат:
CUDA API (CUDA 12.5)
====================
* Device #1: NVIDIA GeForce GTX 1080 Ti, 8701/11165 MB, 28MCU
OpenCL API (OpenCL 2.1 LINUX) - Platform #2 [Intel(R) Corporation]
==================================================================
* Device #2: Intel(R) Xeon(R) CPU E5-2690 v4 @ 2.60GHz, 257893/515851 MB (64481 MB allocatable), 56MCU
Benchmark relevant options:
===========================
* --opencl-device-types=1,2
* --optimized-kernel-enable
---
* Hash-Mode 22000 (WPA-PBKDF2-PMKID+EAPOL) [Iterations: 4095]
---
Speed.#1.........: 622.3 kH/s (90.12ms) @ Accel:32 Loops:512 Thr:512 Vec:1
Speed.#2.........: 81546 H/s (87.04ms) @ Accel:1024 Loops:512 Thr:1 Vec:8
Speed.#*.........: 703.9 kH/s
Видим и здесь хороший прирост быстродействия по сравнению с моей прошлой машиной. Два Xeon 2690 v4 дают 81 546 хешей в секунду против 52 739 на Xeon 2696 v4. Что любопытно, два Xeon 2690 v4 стоят раза в два дешевле, чем 2696 v4.
Видеокарта, как и в прошлый раз, ожидаемо уделывает CPU и дает 622,3 килохеша в секунду против 457,5 для GTX 1080 (без Ti). Отсюда вывод — лучше брать версию с Ti, так как разница в цене несущественна, а быстродействия и памяти заметно больше.
Суммарно имеем 703,9 килохеша в секунду, что почти в полтора раза больше, чем в прошлый раз. Не 4090, конечно, зато дешево и сердито. Лет пять назад мне такой хешрейт казался фантастическим.
Stable Diffusion
Генеративные нейросети — это весьма интересная и актуальная тема. Учитывая претензии нашей сборки на звание расчетного сервера, глупо не попробовать запустить нейросетку. Из того, что можно сейчас запустить офлайн, самым популярным вариантом, вероятно, будет Stable Diffusion, его и выберем.
Использовать будем интерфейс AUTOMATIC1111, c Arch Linux он, конечно, не очень дружит (нужны pip и Python 3.10), зато информации по нему полно. Ставим из AUR Python 3.10. Пишут, если подрихтовать установочный файл, то можно запустить с актуальной версией Python, но у меня не получилось. В будущем разработчики обещают исправить это.
Качаем файлик инсталлятора:
wget https://raw.githubusercontent.com/AUTOMATIC1111/stable-diffusion-webui/master/webui.sh
Править его не придется, свежеустановленный Python 3.10 он подхватит сам. Запускаем, и инсталлятор сам скачает все нужные файлы и зависимости. В результате скрипт создаст папку stable-diffusion-webui
, установит туда Stable Diffusion и даже сразу запустит.
Если все работает правильно, то смело жмем Ctrl-C. У нас же не рабочая станция, а сервер, поэтому переходим в папку stable-diffusion-webui
и запускаем webui.
с параметром --listen
в фоне.
$cd stable-diffusion-webui
$nohup webui.sh --listen &
Теперь можно подключиться к веб‑интерфейсу, набрав его адрес в браузере:
http://server_ip:7860/

Осталось только скачать пару‑тройку моделей. Могу порекомендовать lyriel v16 и Chip_n_DallE. Класть их нужно вот сюда:
stable-diffusion-webui/models/Stable-diffusion/
Что писать в промпте и куда жать потом, обсуждать лишний раз не будем. Нас больше интересует быстродействие. Если генерировать изображения 512 × 512, то это займет около семи секунд на дефолтных настройках. То есть за минуту можно нашлепать десяток картинок, что вполне приемлемо. Если перейти на разрешение 1024 × 1024, то на картинку уходит около минуты, и это уже неприятно.
Что же до сравнения быстродействия CPU и GPU, то GTX 1080 Ti ведет с хорошим отрывом: 7 с против 30 с, которые потребовались двум Xeon 2690 v4. Поэтому, используя CPU с таким огромным количеством памяти, можно замахнуться на большое разрешение, но практического смысла в этом нет.
Запустить Stable Diffusion на CPU можно вот такой командой:
./
Короче, запускаем на GPU, работаем с разрешением 512 × 512 и радуемся жизни без встроенных разработчиком нейронки цензуры и ограничений. Главное — не всматриваться в эти картинки слишком сильно и не пересчитывать пальцы!

LLM
А эта тема, пожалуй, даже интереснее. Наша машина выглядит вполне подходящей, чтобы попробовать запустить большую языковую модель, оперативы у нас с избытком, пропускная способность тоже хорошая. Несмотря на то что мы используем относительно старую DDR4 2400, за счет 2 × 4 каналов мы получаем 2 × 76,8 Гбайт/с. Короче, стоит попробовать. Качаем с GitHub исходники llama.cpp и собираем две версии — для CPU и GPU.
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
# Для CPU$make# Для GPU$make GGML_CUDA=1
Еще нам понадобятся сами модели. Больше всего мне понравились OpenChat 3.5, Deepseek Coder 6.7B Instruct и она же, но побольше — Deepseek Coder 33B Instruct.
Первая модель, универсальный текстогенератор, ориентирована на английский язык, но с русским тоже неплохо справляется, а две последние натренированы на генерацию кода, проверял их на C и Python, справляются они хорошо. Запускать их можно в двух вариантах: в чисто консольном виде (llama-cli) и в режиме сервера (llama-server). Кстати, в отличие от AUTOMATIC1111 эти бинарники самодостаточны и после сборки их можно перемещать куда угодно.
Если сравнивать быстродействие, то на видеокарте модели работают заметно шустрее, но есть нюанс: заметный прирост в скорости получается, если поместить всю модель в видеопамять, а она у нас ограничена 12 Гбайт. Итак, тесты!
CPU
./bin/llama-cli -m deepseek-coder-33b-instruct.Q5_K_M.gguf -p "Напиши функцию сортировки строк пузырьком на C."
Результат: 2,22 токена в секунду. Работает не быстро, но терпимо: пока отвечает, чай допить, пожалуй, не успеешь (если с чувством пить, конечно).
./bin/llama-cli -m deepseek-coder-6.7b-instruct.Q5_K_M.gguf -p "Напиши функцию сортировки строк пузырьком на C."
Результат: 9,80 токена в секунду. А вот это уже бодренько!
./bin/llama-cli -m openchat_3.5.Q5_K_M.gguf -p "Напиши функцию сортировки строк пузырьком на C."
Результат: 10,15 токена в секунду. Тоже хорошо.
GPU
./llama-cli-gpu -m deepseek-coder-33b-instruct.Q5_K_M.gguf -p "Напиши функцию сортировки строк пузырьком на C."
Результат: 2,26 токена в секунду.
./llama-cli-gpu -m deepseek-coder-6.7b-instruct.Q5_K_M.gguf -p "Напиши функцию сортировки строк пузырьком на C."
Результат: 10,76 токена в секунду.
./llama-cli-gpu -m openchat_3.5.Q5_K_M.gguf -p "Напиши функцию сортировки строк пузырьком на C."
Результат: 9,96 токена в секунду.
А теперь поместим модель в память GPU, насколько это возможно.
./llama-cli-gpu -m deepseek-coder-33b-instruct.Q5_K_M.gguf -ngl 21 -p "Напиши функцию сортировки строк пузырьком на C."
Результат: 3,10 токена в секунду.
./llama-cli-gpu -m deepseek-coder-6.7b-instruct.Q5_K_M.gguf -ngl 24 -p "Напиши функцию сортировки строк пузырьком на C."
Результат: 22,88 токена в секунду.
./llama-cli-gpu -m openchat_3.5.Q5_K_M.gguf -ngl 33 -p "Напиши функцию сортировки строк пузырьком на C."
Результат: 39,19 токена в секунду.
В последнем случае скорость просто фантастическая!
В целом LLM чувствуют себя хорошо, особенно на видеокарте, тем более если все слои удается запихать в память GPU, что, увы, получается не всегда. Превосходство GPU над CPU тут, конечно, поскромнее, чем в бруте, но все равно в разы. А дело, видимо, в том, что узкое место — пропускная способность памяти. По личным впечатлениям: если запускать OpenChat 3.5, как в последнем примере, то работать с ним вполне комфортно.
Выводы
Получился очень недорогой и приличный расчетный сервер. Да, пришлось местами подпилить корпус и понадобится специальный скрипт или даже плата для контроля скорости вентиляторов, но все это относительно несложно организовать.
Благодаря видеокарте можно и с нейросетями поиграть. Если для тебя это основное использование, то карту можно взять покруче, а вот на оперативной памяти можешь сэкономить — 128 Гбайт хватит с запасом.
К несчастью, потенциал для апгрейда сильно ограничен, но еще несколько лет машина точно побегает. В общем, если ищешь вариант подешевле и помощнее, то RD450X однозначно заслуживает внимания.