Прошлый мой сервер работал без видеокарты вообще — на голых процессорах, и до сих пор работает: модель на 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, 5 | PCIe 4.0 x8 | короткие |
| SLOT2, 4, 6 | PCIe 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.
| Параметр ВМ | Значение | Зачем так |
|---|---|---|
| vCPU | 32, закреплены на NUMA-узле 0 | карта и NVMe на этом же узле — данные не ходят между сокетами |
| RAM | 192 ГБ, ballooning выключен | под экспертов большой модели в оперативной памяти |
| Диск | 500 ГБ | одни только веса основной модели — 104 ГБ |
| Тип машины | q35 + UEFI | требование для проброса современных карт |
Порядок проброса: снять драйвер NVIDIA с хоста, заблокировать модули nouveau и nvidia, привязать устройство к vfio-pci по идентификаторам (карта и её аудиоустройство лежат в одной группе и пробрасываются вместе), перезагрузиться и добавить устройство в конфигурацию ВМ с флагом pcie=1. Проверка после перезагрузки — lspci -nnk должен показать Kernel driver in use: vfio-pci.
Внутри машины карта видна как обычное устройство, nvidia-smi показывает все 48 ГБ. Ещё одна проверка, про которую легко забыть:
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, MoE | 20,4 ГБ | 6 044 tok/s | 182 tok/s | 211 Вт | 45 °C |
| Qwen3.8-27B, плотная | 17,9 ГБ | 2 282 tok/s | 54 tok/s | 302 Вт | 48 °C |
| Qwen3.8-Flash-Next, 177B MoE | 103,7 ГБ | 426 tok/s | 52 tok/s | 60 Вт | 41 °C |
| Для сравнения: тот же класс задач на CPU-сервере | 21 ГБ | 278 tok/s | 19,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/s | 212 tok/s | — |
| 10 слоёв | 40,4 tok/s | 260 tok/s | +15 % |
| 20 слоёв | 46,5 tok/s | 339 tok/s | +32 % |
| 27 слоёв — максимум | 51,9 tok/s | 426 tok/s | +48 % |
| 28 слоёв | отказ по видеопамяти | — | — |
Половину этого прироста дало наблюдение, которого я стыжусь: в базовой раскладке карта использовала 5 ГБ видеопамяти из 48. Остальные 43 просто простаивали, пока я радовался, что «всё работает».
Практическая оговорка: максимальная раскладка несовместима со зрением. Энкодеру изображений нужен примерно гигабайт, и при 27 слоях его не остаётся. Рабочее правило получилось такое: без зрения 27 слоёв, со зрением 18 — это около 45 tok/s.
Отрицательный результат: меньше экспертов не значит быстрее
Гипотеза звучала логично. Если на токен активируется 10 экспертов из 512, может, хватит шести? Меньше вычислений — быстрее ответ. Проверил.
| Активных экспертов | Генерация | Что с ответом |
|---|---|---|
| 4 | 39,2 tok/s | медленнее штатного |
| 6 | 56,7 tok/s | до ответа не дошёл |
| 10, штатно | 49,3 tok/s | готовый корректный ответ |
| 16 | 31,7 tok/s | медленнее в 1,6 раза |
Прирост в 15 % оказался обманом. На шести экспертах счётчик токенов растёт бодро, но модель перестаёт сходиться к ответу: уходит в многословные рассуждения, перепроверяет себя, цитирует нормы по памяти — и тратит втрое больше токенов на тот же вывод. По времени до полезного результата штатная настройка быстрее всех.
Вариант с четырьмя экспертами ещё контринтуитивнее: он и медленнее, и хуже качеством. Меньше вычислений не означает быстрее — страдает локальность доступа к памяти.
Вывод, который я теперь применяю ко всем заманчивым ручкам: мерить надо не токены в секунду, а время до готового ответа. Это разные метрики, и вторая — единственная, которая имеет отношение к работе. Замеры выше сделаны разными сериями, отсюда небольшой разброс на штатной настройке — 49,3 против 51,9 tok/s.
Документы и речь
Модели скормил изображение договора подряда и попросил вытащить восемь полей: номер, дату, стоимость работ, сумму НДС, срок выполнения, ставку неустойки за день, предел неустойки и гарантийный срок. Восемь из восьми верно.
Дело тут не в распознавании символов. Модель поняла структуру: связала НДС с общей стоимостью, срок — с датой подписания и различила ставку неустойки и её потолок, которые в документе разнесены по разным строкам. На содержательном вопросе — можно ли требовать устранения скрытого дефекта, если акт приёмки подписан без замечаний — получил корректный разбор со ссылками на статьи 720–725 ГК РФ.
С речью иначе. Аудиоэнкодера у основной модели нет, только текст и изображения, поэтому расшифровка живёт отдельным сервисом. Это скорее плюс: модель маленькая и грузится за секунды.
| Модель | Скорость | 3 часа записи | Пунктуация | Термины |
|---|---|---|---|---|
| Qwen3-ASR 1.7B | 24–27× реального времени | ~7 минут | есть | точнее |
| Whisper large-v3-turbo | 60× реального времени | ~3 минуты | нет | ошибается |
Одна и та же фраза из живой записи:
Qwen3-ASR: «Раз, два, три. Скажи что-нибудь тоже. Нет, обычно виндовая запись хотел, но слышит только меня. Мне придётся комментировать тогда твои действия.»
>
Whisper: «1 2 3 скажи что-нибудь тоже нет обычно винтовая запись хотел но слышит только меня мне придется комментировать тогда твои действия»
Разница видна на одной строке: знаки препинания, заглавные буквы и правильно расслышанный термин — «виндовая» против «винтовой». Я выбрал Qwen3-ASR: семь минут на трёхчасовую запись — приемлемая цена за текст, который можно читать. Практический нюанс: модель работает окнами и трёхчасовой файл целиком не принимает. Нужен простой конвейер — нарезать запись на минутные куски, прогнать каждый, склеить.
Сквозной сценарий: три часа разговора → протокол
Это самый показательный для меня результат, потому что он на реальных данных, а не на синтетическом тесте.
| Этап | Время |
|---|---|
| Запись совещания | 3 часа |
| Расшифровка, 7 515 слов | 6 мин 40 с |
| Разбор и составление протокола, 13 542 токена на входе | 1 мин 28 с |
| Итого | ~8 минут |
Что модель сделала без дополнительных указаний:
- Отсеяла мусор сама — первой же строкой отметила, что в расшифровке много посторонних разговоров, и в протокол их не включила.
- Разложила по разделам — о чём совещание, принятые решения, задачи таблицей, открытые вопросы.
- Не выдумывала — там, где сроки и исполнители не назывались, написала «не указано», как её и просили.
- Вытащила конкретику — оценки стоимости, сроки разработки, нерешённые вопросы.
Это и есть главный аргумент всей затеи. Не абстрактные токены в секунду, а три часа разговора, превращённые в рабочий документ за время кофе-брейка, без отправки записи куда-либо наружу.
Грабли
Восемь вещей, на которых я потерял время. Ради них статья, в общем-то, и написана.
- Открытый драйвер
nouveauперехватывает карту. Установщик NVIDIA собирает модуль, но загрузить не может:Kernel module load error: No such device. Лечится блокировкойnouveauи выгрузкой модуля, перезагрузка не нужна. - Драйвер на хосте несовместим с пробросом. Для диагностики карты он необходим, для передачи в ВМ — должен быть снят. Порядок работ поэтому жёсткий: сначала все тесты на хосте, потом проброс.
- Максимальная раскладка экспертов ломает зрение. Не хватает гигабайта на энкодер изображений, процесс падает по памяти. Для зрения — на девять слоёв меньше.
- Меньше активных экспертов не значит быстрее — см. раздел с отрицательным результатом выше.
- Расшифровка речи уходит в поток ошибок, а не в стандартный вывод. Привычное
2>/dev/nullстирает весь результат, и скрипт молча выдаёт пустоту. - Потоковая нарезка аудио в ffmpeg портит заголовок WAV. Модель такие куски отвергает без единого сообщения. Резать нужно каждый фрагмент отдельной командой.
- Многострочный текст не передать через стандартный ввод — берётся только первая строка, и модель отвечает «текст не приложен». Длинные документы — только через API.
- Режим размышлений съедает лимит на длинных документах. С включёнными размышлениями модель извела 2 500 токенов на внутренние рассуждения и вернула пустой ответ. Для задач извлечения и структурирования размышления надо выключать.
И ещё один вывод, методический: синтезированная речь для проверки распознавания не годится. Модель принимает робота за другой язык и выдаёт бессвязицу — проверять только на живых записях.
Выводы
- Ограничение видеопамяти обходится. Модель на 104 ГБ работает со скоростью, пригодной для живой работы, за счёт распределения между картой и оперативной памятью. Ключ — большой объём RAM: без 192 ГБ приём не работает.
- Одна модель закрывает три задачи — текст, код и документы со сканами. Зоопарк моделей держать не нужно.
- Прирост против CPU-сервера — от 2,7 до 22 раз в зависимости от типа нагрузки. Больше всего выигрывает обработка длинных запросов, меньше — генерация.
- Контур остаётся закрытым. Ни расшифровка совещания, ни договор наружу не уходят.
Чего я не стану обещать: это не замена облачным моделям верхнего уровня на всех задачах. Это конфигурация, которая закрывает рабочие сценарии среднего бизнеса на своём железе — с предсказуемой стоимостью и без утечки данных. Если карту поставить некуда или незачем, прошлый вариант на CPU без видеокарты никуда не делся и по-прежнему работает.
Если перед вами стоит похожая задача — подобрать конфигурацию сервера под конкретные модели и нагрузку, спроектировать архитектуру ИИ-контура в собственной инфраструктуре, посчитать экономику своего железа против аренды или просто понять, окупится ли это в вашем случае, — пишите на 77rus@outlook.com. Разберу задачу и честно скажу, если покупать сервер вам не стоит.