Прошлый мой сервер работал без видеокарты вообще — на голых процессорах, и до сих пор работает: модель на 35 млрд параметров, 128К контекста, 19,8 tok/s. Главный вопрос, который я получал после той статьи, звучал одинаково: а что изменится, если карту всё-таки поставить? Теперь у меня есть ответ, и он оказался интереснее, чем «станет быстрее в N раз».

Короткий итог: на одной карте с 48 ГБ памяти работает модель на 177 млрд параметров и 104 ГБ весов. Не «кое-как запускается», а отвечает со скоростью 52 tok/s — практически как модель, которая вшестеро меньше, при нагрузке на карту 60 Вт из 300. Три часа записи совещания превращаются в готовый протокол за восемь минут, и ни секунды этой записи не уходит наружу. Ниже — сборка, выбор слота, диагностика карты, проброс в виртуальную машину, все замеры и восемь граблей, на которых я потерял время.

Все числа получены прямыми замерами на описанном железе. Ничего не взято из документации производителя — там цифры всегда красивее.

Что получилось в итоге

ПараметрЗначение
Основная модельQwen3.8-Flash-Next, MoE 177B, файл 103,7 ГБ
Видеопамять48 ГБ (модель в неё не помещается — и это нормально)
Скорость генерации52 tok/s
Обработка промпта426 tok/s
Загрузка 104 ГБ весов8,7 секунды
Расшифровка 3 часов записи~7 минут
Прирост против CPU-сервераот 2,7 до 22 раз
Данные наружуне уходят вообще

Железо

КомпонентЧто стоит
Материнская платаSupermicro H12DSi-N6, два сокета SP3
Процессоры2× AMD EPYC 7742 — 128 ядер / 256 потоков
Память512 ГБ, восьмиканальная на каждый сокет
Системный дискNVMe Samsung 9100 PRO 2 ТБ, PCIe 5.0
Диск под резервные копииSATA Samsung 870 EVO 2 ТБ
ВидеокартаNVIDIA RTX PRO 5000 Blackwell, 48 ГБ
ГипервизорProxmox VE 9.2

Про экономику сразу, чтобы дальше читать спокойно. Покупка такого сервера — ориентировочно 2,5–3 млн ₽. Аренда сравнимой конфигурации с картой — 200–300 тыс. ₽ в месяц. Окупаемость покупки выходит примерно за год, и это без учёта главного аргумента: договоры, персональные данные и записи внутренних совещаний остаются в своём контуре. В моей практике именно это, а не экономия, чаще всего решает вопрос.

Куда ставить карту: слот решает больше, чем кажется

На плате шесть слотов расширения, и они не равнозначны:

СлотТипДлина
SLOT1, 3, 5PCIe 4.0 x8короткие
SLOT2, 4, 6PCIe 4.0 x16длинные

Карта двухслотовая, поэтому реальных вариантов остаётся три. Я выбрал SLOT4 — средний x16. Три причины, и они переносятся на любой похожий сервер:

  • Обдув. Середина корзины получает ровный поток от фронтальных вентиляторов. Верхний слот часто прижат к крышке, нижний собирает уже разогретый воздух от блока питания.
  • Соседи. Двухслотовый кулер перекрывает соседний короткий x8 — его не жалко. Оба остальных x16 остаются свободны под вторую карту, и переборка не понадобится.
  • Кабель питания. В середине корзины 16-контактный разъём ложится с нормальным радиусом изгиба. Перелом 12V-2×6 — известная причина перегрева разъёма, и рисковать тут незачем.

Что проверить до установки. Мощность блока питания: два EPYC 7742 плюс 512 ГБ памяти под нагрузкой дают 700–800 Вт, с картой выходит около 1100 — нужен блок от 1200 Вт. И наличие свободных кабелей PCIe: в серверных корзинах их часто просто нет в комплекте, а узнаёшь об этом с картой в руках.

В BIOS обязательны две настройки:

  • Above 4G Decoding = Enabled — без неё 48 ГБ памяти карты не отображаются и карта не заводится вовсе;
  • Re-Size BAR Support = Enabled.

Подтверждение, что настройка сработала: в системе окно памяти карты видно как Region 1: Memory at ... [size=64G]. Окно шире физических 48 ГБ — так и должно быть, размер адресного окна округляется вверх до степени двойки.

Отдельно про то, что волновало меня заранее. Карта встала прямо над M.2-накопителем, и я был уверен, что придётся его переносить. Замер показал обратное: NVMe держал 38 °C в простое и 39 °C под полной нагрузкой на карту. У турбинного кулера воздух идёт вдоль платы, а не вниз.

Диагностика карты, пока она на гарантии

Карта дорогая, и проверять её надо до того, как она попадёт в работу, а не после. Две независимые проверки.

Первая — тест видеопамяти: занять 40 ГБ известным шаблоном, прочитать обратно и сверить поэлементно. Ноль несовпадений.

Вторая — нагрузочный тест с проверкой результата. 15 минут непрерывного перемножения матриц 8192×8192 с эталонной сверкой каждые 20 итераций. Сверять принципиально: сбойная память не роняет процесс, она молча возвращает неверный результат. Просто «погреть карту» тут ничего не доказывает.

ПоказательРезультат
Итераций за 15 минут31 240
Расхождений с эталоном0
Производительность38–40 TFLOPS fp32, стабильно
Температура88 °C пик, 66 °C средняя по 332 замерам
Тепловой троттлингне срабатывал ни разу
Потребление300 Вт — паспортный предел
Ошибки драйвера (Xid)0

Упор в лимит мощности при отсутствии теплового троттлинга — хорошая новость. Карта отдаёт заявленную производительность целиком, а не срезает частоты из-за нагрева.

Проброс карты в виртуальную машину

Карта отдаётся одной виртуальной машине целиком. Ограничение, которое лучше знать до покупки: делить эту карту нечем. MIG — аппаратное разделение карты на несколько независимых устройств — поддерживается только у RTX PRO 6000 и датацентровых моделей, nvidia-smi честно показывает MIG M.: N/A. vGPU требует отдельной лицензии NVIDIA. Если картой должны пользоваться несколько машин — только через сервис поверх, по API.

Параметр ВМЗначениеЗачем так
vCPU32, закреплены на NUMA-узле 0карта и NVMe на этом же узле — данные не ходят между сокетами
RAM192 ГБ, ballooning выключенпод экспертов большой модели в оперативной памяти
Диск500 ГБодни только веса основной модели — 104 ГБ
Тип машиныq35 + UEFIтребование для проброса современных карт

Порядок проброса: снять драйвер NVIDIA с хоста, заблокировать модули nouveau и nvidia, привязать устройство к vfio-pci по идентификаторам (карта и её аудиоустройство лежат в одной группе и пробрасываются вместе), перезагрузиться и добавить устройство в конфигурацию ВМ с флагом pcie=1. Проверка после перезагрузки — lspci -nnk должен показать Kernel driver in use: vfio-pci.

Внутри машины карта видна как обычное устройство, nvidia-smi показывает все 48 ГБ. Ещё одна проверка, про которую легко забыть:

bash
cat /sys/bus/pci/devices/<адрес>/numa_node

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

Развёртывание: чего не надо ставить

CUDA целиком ставить не нужно. Метапакет cuda-toolkit тянет около 7 ГБ документации, примеров и профилировщиков. Для сборки движков достаточно трёх пакетов — компилятор nvcc, cudart-dev и cublas-dev, это примерно 1,5 ГБ. На медленном канале разница между десятью минутами и половиной вечера.

Движков в итоге три, и это не дублирование:

ДвижокРоль
ik_llama.cppбыстрая текстовая генерация, тонкая раскладка экспертов между картой и памятью
llama.cpp, основная ветказрение (llama-mtmd-cli) и сервер с OpenAI-совместимым API
whisper.cppбыстрая расшифровка речи вчерне

ik_llama.cpp мультимодальность не собирает — картинок и звука в нём нет. Зато оба движка читают одни и те же файлы весов, так что модели на диске не дублируются. Сборка под Blackwell требует явно указать архитектуру: CMAKE_CUDA_ARCHITECTURES=120.

Замеры: три модели в одинаковых условиях

Обработка промпта 512 токенов, генерация 128, по три прогона с усреднением.

МодельФайлПромптГенерацияПитаниеТемп.
Gemma 4 26B-A4B, MoE20,4 ГБ6 044 tok/s182 tok/s211 Вт45 °C
Qwen3.8-27B, плотная17,9 ГБ2 282 tok/s54 tok/s302 Вт48 °C
Qwen3.8-Flash-Next, 177B MoE103,7 ГБ426 tok/s52 tok/s60 Вт41 °C
Для сравнения: тот же класс задач на CPU-сервере21 ГБ278 tok/s19,8 tok/s——

Что тут важно. Разрыв между первой и второй строкой — не «одна модель лучше другой», а разница архитектур: у Gemma на токен активируется 3,8 млрд параметров из 26, у плотной Qwen — все 27. Отсюда и разница в генерации втрое с лишним при почти одинаковом размере файла, и лишние 90 Вт на карте у плотной модели.

Главная — третья строка. Модель, которая в два с лишним раза больше видеопамяти, работает почти с той же скоростью, что модель вшестеро меньше, и при этом нагружает карту на 60 Вт из 300. Стогигабайтные веса поднимаются в сервер за 8,7 секунды — файлы уже лежат в страничном кеше 192 ГБ оперативной памяти.

Как модель на 104 ГБ живёт на карте с 48 ГБ

Объяснение простыми словами, потому что именно этот приём делает всю конфигурацию возможной.

Модель типа MoE (mixture of experts) состоит из множества небольших подсетей. В Flash-Next их 512 на каждом из 48 слоёв — почти 25 тысяч блоков, и каждый крошечный, по 640 нейронов. На каждый токен маршрутизатор выбирает всего 10 из 512 на каждом слое.

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

Групп экспертов на картеГенерацияПромптПрирост
нет, всё в оперативной памяти35,1 tok/s212 tok/s—
10 слоёв40,4 tok/s260 tok/s+15 %
20 слоёв46,5 tok/s339 tok/s+32 %
27 слоёв — максимум51,9 tok/s426 tok/s+48 %
28 слоёвотказ по видеопамяти——

Половину этого прироста дало наблюдение, которого я стыжусь: в базовой раскладке карта использовала 5 ГБ видеопамяти из 48. Остальные 43 просто простаивали, пока я радовался, что «всё работает».

Практическая оговорка: максимальная раскладка несовместима со зрением. Энкодеру изображений нужен примерно гигабайт, и при 27 слоях его не остаётся. Рабочее правило получилось такое: без зрения 27 слоёв, со зрением 18 — это около 45 tok/s.

Отрицательный результат: меньше экспертов не значит быстрее

Гипотеза звучала логично. Если на токен активируется 10 экспертов из 512, может, хватит шести? Меньше вычислений — быстрее ответ. Проверил.

Активных экспертовГенерацияЧто с ответом
439,2 tok/sмедленнее штатного
656,7 tok/sдо ответа не дошёл
10, штатно49,3 tok/sготовый корректный ответ
1631,7 tok/sмедленнее в 1,6 раза

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

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

Вывод, который я теперь применяю ко всем заманчивым ручкам: мерить надо не токены в секунду, а время до готового ответа. Это разные метрики, и вторая — единственная, которая имеет отношение к работе. Замеры выше сделаны разными сериями, отсюда небольшой разброс на штатной настройке — 49,3 против 51,9 tok/s.

Документы и речь

Модели скормил изображение договора подряда и попросил вытащить восемь полей: номер, дату, стоимость работ, сумму НДС, срок выполнения, ставку неустойки за день, предел неустойки и гарантийный срок. Восемь из восьми верно.

Дело тут не в распознавании символов. Модель поняла структуру: связала НДС с общей стоимостью, срок — с датой подписания и различила ставку неустойки и её потолок, которые в документе разнесены по разным строкам. На содержательном вопросе — можно ли требовать устранения скрытого дефекта, если акт приёмки подписан без замечаний — получил корректный разбор со ссылками на статьи 720–725 ГК РФ.

С речью иначе. Аудиоэнкодера у основной модели нет, только текст и изображения, поэтому расшифровка живёт отдельным сервисом. Это скорее плюс: модель маленькая и грузится за секунды.

МодельСкорость3 часа записиПунктуацияТермины
Qwen3-ASR 1.7B24–27× реального времени~7 минутестьточнее
Whisper large-v3-turbo60× реального времени~3 минутынетошибается

Одна и та же фраза из живой записи:

Qwen3-ASR: «Раз, два, три. Скажи что-нибудь тоже. Нет, обычно виндовая запись хотел, но слышит только меня. Мне придётся комментировать тогда твои действия.»

>

Whisper: «1 2 3 скажи что-нибудь тоже нет обычно винтовая запись хотел но слышит только меня мне придется комментировать тогда твои действия»

Разница видна на одной строке: знаки препинания, заглавные буквы и правильно расслышанный термин — «виндовая» против «винтовой». Я выбрал Qwen3-ASR: семь минут на трёхчасовую запись — приемлемая цена за текст, который можно читать. Практический нюанс: модель работает окнами и трёхчасовой файл целиком не принимает. Нужен простой конвейер — нарезать запись на минутные куски, прогнать каждый, склеить.

Сквозной сценарий: три часа разговора → протокол

Это самый показательный для меня результат, потому что он на реальных данных, а не на синтетическом тесте.

ЭтапВремя
Запись совещания3 часа
Расшифровка, 7 515 слов6 мин 40 с
Разбор и составление протокола, 13 542 токена на входе1 мин 28 с
Итого~8 минут

Что модель сделала без дополнительных указаний:

  • Отсеяла мусор сама — первой же строкой отметила, что в расшифровке много посторонних разговоров, и в протокол их не включила.
  • Разложила по разделам — о чём совещание, принятые решения, задачи таблицей, открытые вопросы.
  • Не выдумывала — там, где сроки и исполнители не назывались, написала «не указано», как её и просили.
  • Вытащила конкретику — оценки стоимости, сроки разработки, нерешённые вопросы.

Это и есть главный аргумент всей затеи. Не абстрактные токены в секунду, а три часа разговора, превращённые в рабочий документ за время кофе-брейка, без отправки записи куда-либо наружу.

Грабли

Восемь вещей, на которых я потерял время. Ради них статья, в общем-то, и написана.

  1. Открытый драйвер nouveau перехватывает карту. Установщик NVIDIA собирает модуль, но загрузить не может: Kernel module load error: No such device. Лечится блокировкой nouveau и выгрузкой модуля, перезагрузка не нужна.
  2. Драйвер на хосте несовместим с пробросом. Для диагностики карты он необходим, для передачи в ВМ — должен быть снят. Порядок работ поэтому жёсткий: сначала все тесты на хосте, потом проброс.
  3. Максимальная раскладка экспертов ломает зрение. Не хватает гигабайта на энкодер изображений, процесс падает по памяти. Для зрения — на девять слоёв меньше.
  4. Меньше активных экспертов не значит быстрее — см. раздел с отрицательным результатом выше.
  5. Расшифровка речи уходит в поток ошибок, а не в стандартный вывод. Привычное 2>/dev/null стирает весь результат, и скрипт молча выдаёт пустоту.
  6. Потоковая нарезка аудио в ffmpeg портит заголовок WAV. Модель такие куски отвергает без единого сообщения. Резать нужно каждый фрагмент отдельной командой.
  7. Многострочный текст не передать через стандартный ввод — берётся только первая строка, и модель отвечает «текст не приложен». Длинные документы — только через API.
  8. Режим размышлений съедает лимит на длинных документах. С включёнными размышлениями модель извела 2 500 токенов на внутренние рассуждения и вернула пустой ответ. Для задач извлечения и структурирования размышления надо выключать.

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

Выводы

  • Ограничение видеопамяти обходится. Модель на 104 ГБ работает со скоростью, пригодной для живой работы, за счёт распределения между картой и оперативной памятью. Ключ — большой объём RAM: без 192 ГБ приём не работает.
  • Одна модель закрывает три задачи — текст, код и документы со сканами. Зоопарк моделей держать не нужно.
  • Прирост против CPU-сервера — от 2,7 до 22 раз в зависимости от типа нагрузки. Больше всего выигрывает обработка длинных запросов, меньше — генерация.
  • Контур остаётся закрытым. Ни расшифровка совещания, ни договор наружу не уходят.

Чего я не стану обещать: это не замена облачным моделям верхнего уровня на всех задачах. Это конфигурация, которая закрывает рабочие сценарии среднего бизнеса на своём железе — с предсказуемой стоимостью и без утечки данных. Если карту поставить некуда или незачем, прошлый вариант на CPU без видеокарты никуда не делся и по-прежнему работает.

Если перед вами стоит похожая задача — подобрать конфигурацию сервера под конкретные модели и нагрузку, спроектировать архитектуру ИИ-контура в собственной инфраструктуре, посчитать экономику своего железа против аренды или просто понять, окупится ли это в вашем случае, — пишите на 77rus@outlook.com. Разберу задачу и честно скажу, если покупать сервер вам не стоит.