Лаборатория ИИ за 200 000 ₽: как мы собрали локальный ИИ-сервер на 2× Tesla V100
О чём это и зачем
Приятно наблюдать за тем, что сообщество людей, работающих с локальными ИИ, растет с каждым днем, но до сих пор я встречаю мнение, как сложно собрать нужное оборудование под свой сервер LLM. В интернете встречаются просто сумасшедшие суммы на сборки под ИИ, хотя все можно сделать гораздо проще, и своими руками. Так и родилась идея сделать обзор на самую бюджетную серверную видеокарту V100 на 16/32 ГБ, приложив 100+ бенчмарков различных моделей, чтобы показать, как за малые средства можно приобрести целую лабораторию дома.
Сразу оговоримся: «бюджетный» — это про соотношение цена/возможности, а не про «копейки». 200к за двухкарточный стенд по бытовым меркам — не дёшево. Но на этом железе крутятся модели вплоть до 70B AWQ через TP=2, а в этом ценовом сегменте ничего сопоставимого по VRAM мы на десктопе не нашли. 2× Tesla V100 32GB дают 64 ГБ VRAM суммарно — столько же, сколько три RTX 5080 16GB, и дешевле.
Целевая аудитория — энтузиасты и небольшие команды до 50 человек, кому нужно крутить LLM локально по минимально возможной цене. Для крупного продакшна V100 — компромисс, и в выводах честно разберём, где именно начинают вылезать его болячки.
Цель — закрыть тему V100 одним материалом. По нашему опыту в русскоязычном поле полного разбора нет: где-то цены и нет стека, где-то стек и нет бенчей, где-то бенчи на одной модели. В этой статье — и железо с ценами, и стек со всеми граблями, и реальные прогоны по четырём задачам: 108 LLM через Ollama, 14 image-gen через sd.cpp/Ollama, 6 video-gen через sd.cpp/diffusers, плюс STT-блок (Whisper-large-v3). Карточки, JSON, скрипты и интерактивный дашборд — открытый репо pocketcoder-ch/v100-benchmarks-2026. Итого 128 прогонов в одной таблице.
Что в статье
Структура такая:
-
Что собираем и зачем (этот раздел).
-
Почему V100 — про рынок, форм-факторы (SXM2 vs SXM3 vs PCIe), Авито/АлиЭкспресс, что мы реально взяли.
-
Железо: смета и почему именно так — i7, 2 карты, БП, RAM, корпус.
-
Грабли Volta: vLLM-стек, что работает / что нет, SHM-wall и почему в массовом бенче мы в итоге на Ollama.
-
Как мы это всё тестировали — стенд, пайплайн STT+LLM, DP vs TP, путь A vs путь Б.
-
128 моделей в одной таблице — 108 LLM (топ-10 / рабочие лошадки 7–9B / большие 14–70B / «где упираемся в потолок»), 14 image-gen, 6 video-gen, STT (Whisper-large-v3).
-
Когда NVLink реально нужен — практический вывод по 128 прогонам.
-
Failed / Skip — что не работает на Volta (FP8, MXFP4, NVFP4).
-
Что бы изменили, если бы пересобирали.
-
Выводы и ссылки.
Скрипты, обезличенные транскрипции, сырые JSON и интерактивный дашборд — в открытом репо pocketcoder-ch/v100-benchmarks-2026.
Почему V100: откуда столько на рынке и какие они бывают
Прежде чем переходить к смете и комплектующим, разберёмся с главным вопросом: почему вообще V100, что это за карта, какие форматы существуют на б/у-рынке и что мы в итоге взяли. Дальше будет понятнее, как сборка дошла до своего финального вида.
Откуда «дедушка» на рынке
Volta — архитектура NVIDIA 2017 года, compute capability 7.0. Прошло три полных поколения серверных GPU:

V100 — это «прадедушка» текущей B200/H200. По серверной линейке — три поколения назад.
Почему столько на вторичке: ровно потому что дедушка. Дата-центры (в первую очередь западные облачные провайдеры) массово выводят V100 и пересаживаются на A100/H100/H200. Карты вываливаются на б/у-рынок через китайских перекупов с AliExpress, оттуда часть доезжает до Авито через локальных.
Состояние — б/у из ДЦ, серверная нагрузка 24/7 за плечами. Но китайцы перед продажей перебирают: новая термопаста, перетянутые крепления, свежий радиатор. У нас полгода эксплуатации — нареканий ноль, закладываемся минимум на полтора года.
Два форм-фактора на рынке — ключевая развилка
V100 32 ГБ продаётся в двух разных физических форматах, и это важная развилка:
Осторожно при покупке: SXM2 vs SXM3.
На рынке отдельно встречается V100 в форм-факторе SXM3 — внешне очень похож на SXM2, но не совместим ни с SXM2-backplane, ни с PCIe-адаптерами OLOEY. Под SXM3 нужен отдельный переходник, который стоит ~20 000 ₽ и в обычной десктопной сборке вам не пригодится. На Авито и AliExpress SXM3 нередко лежит по цене SXM2 или даже дешевле — и многие берут его по незнанию, а потом разбираются, почему карта не садится в существующую обвязку. Перед оплатой всегда уточняйте у продавца, что это именно SXM2. Берите только SXM2.
Вариант А — голый SXM2-чип
SXM2 — серверный форм-фактор NVIDIA: чип на специальной mezzanine-плате, втыкается прямо в материнку через разъём SXM2, а не в PCIe-слот. Сверху — собственная подсистема питания, отдельной PCB-карты нет.
Цены на 2026-05-13:
|
Источник |
Базовая цена |
Пошлина |
Итого / карта |
|---|---|---|---|
|
AliExpress (Zhien Server Store) |
52 632 ₽ |
~5 303 ₽ |
57 935 ₽ |
Артикул 1005009880109662, 105 куплено, рейтинг 4.7. На странице тип товара указан как «USB-адаптер» — типичная маскировка категории под модерацию AliExpress.
Без переходника, без радиатора. Втыкается либо в серверную плату с SXM2-сокетом (в десктопе такого не бывает), либо в NVLink-backplane — плата с 2–4 SXM2-слотами, у которых NVLink-дорожки разведены прямо по PCB. NVLink-backplane на 2 GPU стоит 21 849 ₽ на Али (артикул 1005010459772246).
Это путь «правильно, под NVLink, с серверной обвязкой». Охлад докупается отдельно — водянка SPEEDIER за 3 726 ₽ или медная башня OLOEY за 6 271 ₽.
Вариант Б — OLOEY PCIe-конверсия с охладом
Готовая PCB: SXM2-чип уже припаян на PCIe-адаптер, поверх стоит turbo-blower («улитка»). Всё в одном, втыкается в обычный PCIe x16 любой десктопной матери. Это то, что у нас на стенде.
Цена на 2026-05-13:
|
Источник |
Базовая цена |
Доставка + пошлина |
Итого / карта |
|---|---|---|---|
|
AliExpress (Network Card Supplier, бренд OLOEY) |
59 835 ₽ |
+ 2 409 ₽ + ~6 383 ₽ |
68 627 ₽ |
Артикул 1005010057680719, 268 куплено, рейтинг 4.8.
Это путь «воткнул и работает», под потребительскую платформу без NVLink. Карта подключается как любая обычная PCIe-видяха.
Авито vs AliExpress
|
Где |
Что |
Итого ₽ |
Срок |
|---|---|---|---|
|
Али (Zhien Server Store) |
Голая SXM2 32GB |
57 935 (с пошлиной) |
2 недели |
|
Али (Network Card Supplier, OLOEY) |
PCIe-конверсия с улиткой |
68 627 (с пошлиной + доставка) |
2 недели |
|
Авито |
PCIe-конверсия с радиатором от др. карты |
70 000 |
2–4 дня |
Премия Авито-перекупа над Али для PCIe-варианта — ~1.4к ₽. Переплата за скорость доставки копеечная. Мы брали с Авито ровно поэтому: лопнул чип на одной из 3090 в домашней машине, нужна была быстрая замена под уже настроенный локальный пайплайн со связками к БД. Аренда в облаке потребовала бы перенести весь скрипт — морочиться было дороже, чем доплатить 1.4к ₽ за 4 дня вместо двух недель.
Что мы реально взяли и как она выглядит
В итоге у нас на стенде — 2× V100 32GB в OLOEY PCIe-конверсии (Путь Б, с Авито). Карта приехала собранная: SXM2-чип на PCIe-плате, сверху turbo-blower («улитка»), задняя стенка вентилируется. Вживую — двухслотовая видяха, разводка под PCIe x16, втыкается в обычную десктопную мать.
Замер реальной карты — длина и ширина (важно проверить до сборки, что влезет в корпус):
Это к вопросу про корпус: 26 см в длину и двухслотовая турбина — в Micro-ATX такое не залезет, нужен большой корпус формата Full Tower (про корпус подробнее — в разделе «Железо» ниже). И прямо здесь — главный плюс PCIe-конверсии над голым SXM2: никакой серверной обвязки не требуется, обычный десктопный корпус и блок питания с разъёмами 8-pin EPS вытягивают.
V100 vs RTX 3090 б/у — что выбрать
В комментариях к таким сборкам всегда всплывает: «за те же деньги возьми б/у RTX 3090 — она новее, FP16 крутится, поддержка свежее». Согласны, 3090 в части моментов выгоднее.
Но:
-
Серверные V100 проектировались под 24/7 десятки тысяч часов. Это штатный режим эксплуатации, заложенный в дизайн.
-
3090 — потребительская карта, штатный режим у неё — игровая нагрузка несколько часов в день. Сначала её мучали майнеры, потом энтузиасты ИИ. Это не штатный режим.
V100 уже отработала в ДЦ свою профильную нагрузку и приехала в адекватном виде после перебора китайцами. RTX 3090 б/у — это либо «была у майнера», либо «из-под геймера, теперь чужому дяде». Мы V100 доверяем больше, несмотря на 2017 год выпуска.
Это контраргумент по железу. По моделям и софту у 3090 свои плюсы (24 ГБ хватает на 7B fp16 + 14B AWQ, есть нативная поддержка свежих фреймворков). Выбор зависит от задачи, но «3090 однозначно лучше» — упрощение.
Минусы V100 — 4 пункта
Чтобы статья не выглядела пропагандой, разложим минусы.
-
Архитектура 2–3 поколения назад (Volta cc 7.0). Нет нативного FP8, нет FP4 / MXFP4 / NVFP4, нет современных tensor cores. Свежие модели в нативных квантах (gpt-oss-20b/120b в MXFP4, Nemotron в NVFP4, любая Llama-FP8) через vLLM напрямую не поднимутся. Через Ollama GGUF Q4 — большинство из них едет (тот же gpt-oss:20b у нас выдал 106.8 tps, gpt-oss:120b — 74.7 tps на трёх уровнях контекста). Для vLLM-стека ищите AWQ/GPTQ-альтернативу или гоняйте в fp16/bf16.
-
Геморрой с библиотеками. vLLM на свежих ветках Volta уже не держит, нужно подбирать конкретную версию (см. следующий раздел). Где-то фичи нет, где-то свежая архитектура в реестре отсутствует. Разработка под V100 — это чтение issue-трекеров и форумов на постоянке.
-
Пропускная способность ниже. HBM2 у V100 — 900 GB/s. У A100 — 1.5–2 TB/s, у H100 — 3 TB/s, у B200 — 8 TB/s. NVLink на TP частично выправляет, но в абсолюте память медленнее современных карт.
-
Б/у из ДЦ. 24/7 за плечами, вероятность отказа выше, чем у новой карты. Закладываемся с запасом на замену, mission-critical контур на V100 не строим.
Теперь — к самой сборке: смета и почему выбрана каждая позиция.
Железо: смета и почему именно так
Сначала — итоговая смета. Дальше по разделам разберём, почему выбрана каждая позиция.
|
Компонент |
Модель / параметры |
Цена ₽ |
|---|---|---|
|
GPU |
2× Tesla V100 32GB в PCIe-адаптере OLOEY (SXM2-чип на PCIe-плате с турбиной) |
137 254 |
|
Материнка |
ASUS ROG (Z490/Z590, LGA1200), б/у с Авито |
27 000 |
|
CPU |
Intel Core i7-10700K (8c/16t, 16 PCIe 3.0 lanes), б/у |
~13 000 |
|
RAM |
4× 16 GB DDR4-3200 CL16 = 64 GB (Kingston Fury Beast / Patriot) |
~15 600 |
|
БП |
1000W 80+ Gold (be quiet! Straight Power / Corsair RM1000x) |
~14 000 |
|
Корпус |
Full Tower — самый большой типоразмер ПК-корпуса (Zalman / Deepcool / Cooler Master) |
~10 000 |
|
SSD |
NVMe 1 TB |
~5 000 |
|
ИТОГО |
|
~221 854 ₽ |
С округлением и подбором б/у-альтернатив (RAM на стоках, БП б/у, SATA SSD вместо NVMe) сборка укладывается в 200 000 ₽. Отсюда заголовочная цифра статьи.
Для сравнения — что ещё даёт сопоставимый объём VRAM:
|
Вариант |
VRAM |
Цена ₽ |
|---|---|---|
|
2× Tesla V100 32GB (наша сборка) |
64 ГБ |
~200 000 |
|
2× RTX 4090 24GB новых |
48 ГБ |
~600 000–700 000 |
|
1× H100 80GB даже б/у |
80 ГБ |
~1 500 000–2 500 000 |
|
Mac Studio M3 Ultra 128GB (MLX-стек, не CUDA) |
128 ГБ |
~600 000 |
В этом сегменте V100 — единственный путь к 64 ГБ VRAM на CUDA за 200к ₽. Дороже — есть варианты, дешевле — нет.
i7
Здесь обычный десктопный i7-10700K на Z490/Z590, всё на Авито, ~55к ₽ за связку мать + ЦПУ.
Это сознательное решение, а не вынужденная экономия. Тезис простой: бюджетный ИИ-сервер собирается на потребительской платформе, не на серверной. Под задачи небольшой команды этого хватает с головой, переплачивать за ECC, 128 PCIe-линий и 8 каналов памяти — некуда.
Почему 2 карты, а не 1 или 4
Взяли две сразу. Причина банальная: на материнке было два свободных x16-слота, а одна карта была плановой заменой треснувшего чипа на 3090. Раз уж лезть в б/у, то сразу под максимум того, что физически влезает. Заодно появлялась возможность сходу гонять «жирные» тесты с TP=2 (tensor parallelism).
Самоирония: своему же совету «сначала арендуйте облако, погоняйте свой прод, потом покупайте железо» — мы и не последовали. Взяли сразу две карты на Авито без облачного прогона. Об этом ещё пожалели, см. раздел «Что бы изменили».
Про БП
У нас на стенде стоит be quiet! Dark Power Pro 12 1200W 80+ Titanium, но это не из бюджетной логики — БП остался от прошлой сборки, поэтому и докинули. Для повторения с нуля рекомендуем что-то скромнее:
|
БП |
Мощность |
Сертификат |
Цена нов. ₽ |
|---|---|---|---|
|
be quiet! Straight Power 11/12 1000W |
1000W |
80+ Gold |
~13–15к |
|
Corsair RM1000x |
1000W |
80+ Gold |
~14–16к |
|
be quiet! Straight Power 12 1200W |
1200W |
80+ Platinum |
~17–20к |
|
(у нас лично) be quiet! Dark Power Pro 12 1200W |
1200W |
80+ Titanium |
~38–45к |
Подсчёт по нагрузке. 2× V100 SXM2 в PCIe-адаптере сохраняют TDP серверной версии и дают 600 W в пике (2 × 300 W). i7-10700K в PL2 — это ещё 125–200 W. Материнка, NVMe, RAM и корпусные вентиляторы суммарно тянут ~75–100 W. Итого пик ~800–900 W. 1000W 80+ Gold с запасом 100–200W — нормальная рабочая конфигурация. Titanium-топ в бюджетной сборке — оверкилл.
Про RAM — почему 64 ГБ, а не больше
Z490/Z590 + i7-10700K — это DDR4, non-ECC (i7 серии K ECC не поддерживает). 2 канала, максимум 4 слота. На большинстве плат при заполнении всех четырёх частота режется до 2666 MT/s — известная особенность LGA1200. Для AI-инференса не критично: узкое место — это PCIe между картами, а не пропускная RAM.
64 ГБ (4× 16 GB) спокойно держат Whisper-large + Pyannote с батчингом параллельно с LLM-токенизатором, плюс HuggingFace-кэш моделей при load/unload между прогонами бенчей, плюс swap. Брать выше 64 ГБ на этой платформе нет смысла — узкое место не туда.
Грабли Volta: vLLM-стек, что работает / что нет
Самый болезненный раздел. На Volta cc 7.0 половина свежего ML-стека либо не собирается, либо собирается и тихо выдаёт мусор на выходе. Мы перебрали достаточно версий, чтобы выкатить рабочую матрицу.
Версии хоста и контейнера
|
Компонент |
Версия |
|---|---|
|
Driver NVIDIA |
570.211.01 |
|
CUDA |
12.8 |
|
OS |
Ubuntu 24.04 LTS, kernel 6.8 |
|
Python |
3.10 (upstream-стек), 3.12 (1Cat-fork стек) |
|
PyTorch |
2.5–2.7 (cu128) для upstream, 2.9.1+cu128 для 1Cat |
Какую версию vLLM брать
Простой ответ — никакую свежую. Длинный ответ — в таблице:
|
Версия vLLM |
Статус на sm_70 |
Что с ней |
|---|---|---|
|
≤ 0.18.x |
работает |
Последняя ветка с честной поддержкой |
|
0.17.0 |
работает с оговоркой |
На multimodal через |
|
0.20.0+ |
не запустится |
|
|
работает под AWQ |
Fork под V100: WMMA SM70 kernels от LMDeploy TurboMind для AWQ + attention backend |
В итоге на хосте у нас два venv:
-
.venv-base— vLLM 0.18.x upstream + PyTorch 2.7. Тянет всё на FP16 и весь GPTQ. -
.venv-1cat— 1Cat-vLLM 0.0.3 + PyTorch 2.9.1+cu128. Тянет всё на AWQ, включая Llama-3.3-70B-AWQ TP=2 и Qwen2.5-72B-AWQ TP=2.
Обязательные ENV для Volta
# Базовые
export VLLM_WORKER_MULTIPROC_METHOD=spawn
export HF_HOME=/workspace/hf_cache
export HF_HUB_ENABLE_HF_TRANSFER=1
# TP без NVLink (PCIe-only межGPU)
export NCCL_P2P_DISABLE=1
export NCCL_IB_DISABLE=1
export NCCL_CUMEM_ENABLE=0
export NCCL_DEBUG=WARN
# Attention под Volta — xformers, не Triton
export VLLM_ATTENTION_BACKEND=XFORMERS
# Для 1Cat-fork:
# export VLLM_ATTENTION_BACKEND=FLASH_ATTN_V100
# В облаке на NVLink — НЕ ставить NCCL_P2P_DISABLE=1, иначе NVLink не подберётся
Обязательные флаги vllm serve
--dtype=half # BF16 на cc 7.0 не работает — везде FP16
--enforce-eager # часть CUDA-графов под Volta нестабильна, отключаем
--disable-custom-all-reduce # custom AR требует NVLink; на стенде без NVLink — снимаем
--gpu-memory-utilization 0.90 # 0.92+ часто упирается в xformers workspace, ловим OOM на TP
Сводка по квантизациям
|
Quant |
Volta cc 7.0 |
Комментарий |
|---|---|---|
|
FP16 |
работает |
Базовый формат |
|
BF16 |
не работает |
Только cc 8.0+; компенсируем |
|
AWQ INT4 (upstream) |
не работает |
Marlin требует cc 7.5+ |
|
AWQ INT4 (1Cat-fork) |
работает |
WMMA SM70 kernels — наш основной путь |
|
GPTQ INT4 |
работает |
Самый универсальный — Volta до Hopper |
|
W4A16 (RedHatAI) |
работает |
Страховой вариант для int4 |
|
FP8 W8A8 |
не работает |
Нет hardware FP8 cores — только Hopper+ |
|
MXFP4 |
не работает (через vLLM) |
gpt-oss-20b / 120b в нативном MXFP4 в vLLM не пойдут — через Ollama GGUF Q4 работают |
|
NVFP4 |
не работает |
Nemotron-NVFP4 — garbled output (vllm/#34694) |
FlashAttention
FA2 требует cc 8.0+, на Volta не работает. Остаётся xformers как стандартный backend (с --enforce-eager или через VLLM_ATTENTION_BACKEND=XFORMERS) и FLASH_ATTN_V100 из 1Cat-fork с WMMA tensor ops.
Под наш набор задач (FP16 для мелких моделей + AWQ через 1Cat для крупных + GPTQ как страховка) этого хватает, чтобы держать рабочий стенд до 70B на двух картах дома и до 70B на TP=4 в облаке.
SHM-wall: почему vLLM в итоге не главный наш стек
Если у вас геморрой в небезызвестном месте и вам нравится это состояние — обязательно пробуйте vLLM. А если серьёзно — мы потратили на vLLM-стек ровно неделю, и потом перешли на Ollama. Расскажем почему.
В чём суть. На видеокарту 2017 года мы пробуем прикрутить технологию 2023 года. Это то же самое, что на «буханку» прикручивать CarPlay — может и получится, но проще купить новую машину, чем заниматься танцами с бубнами. Tesla V100 — это Volta SM 7.0, поколение до Turing, до Ampere, до Hopper. А vLLM с paged-attention и ядром flash-attn-V100 заточен под Ampere SM 8.0 / Hopper SM 9.0: у тех чипов 164–228 КБ shared memory на блок CUDA, а у Volta всего 96 КБ. Это аппаратный потолок, патчем .so не лечится, кроме как переписать ядро под BLOCK_N=64руками — и тогда это уже не «развернуть модель», а становиться разработчиком GPU-ядер.
Эмпирический срез по 1Cat-vLLM 0.0.3 за неделю мучений:
|
Что работает на vLLM 1cat 0.0.3 |
Что не работает |
|---|---|
|
Qwen3.6-27B-AWQ (head_dim=256) — любая длина |
Qwen2.5-32B-AWQ (>1100 ток.) — падение на 96 КБ SHM |
|
Qwen3.6-35B-A3B-AWQ MoE (head_dim=256) |
Qwen2.5-Coder-32B-AWQ (>1100 ток.) |
|
Qwen2.5-1.5B / 7B / 14B-AWQ (короткие prompts) |
Llama-3.3-70B-AWQ TP=2 (>1800 tok) |
|
Qwen3-Coder-30B-A3B MoE (≤1800 tok) |
DS-R1-Distill-Llama-70B-AWQ TP=2 (>1800 tok) |
|
Qwen2.5-72B-AWQ TP=2 (≤1850 tok) |
Qwen2.5-VL-72B-AWQ — instant crash на startup |
Магия в head_dim. Для семейства Qwen3.6 с head_dim=256 1Cat-vLLM работает на любой длине промпта: расклад shared memory в ядре другой, влезает. Для основной массы AWQ-моделей с head_dim=128 — Qwen2.5/Coder-32B, Llama-3.3-70B, Mistral-Small-24B — это аппаратный потолок: ядро flash_attn_v100_cuda.prefill_paged_fwd требует 101 КБ shared memory на блок при длинном prefill, у V100 потолок 96 КБ. Любой промпт длиннее ~1100–1800 токенов превращается в RuntimeError: Shared memory exceeds 96KB.
Прямая сравнительная замер на одной и той же модели — Qwen2.5-Coder-32B AWQ через 1Cat-vLLM против того же Qwen2.5-Coder-32B Q4_K_M через Ollama:
|
input prompt |
vLLM AWQ tps |
Ollama Q4_K_M tps |
Дельта |
|---|---|---|---|
|
200 tok |
32.7 |
31.75 |
паритет (−3%) |
|
~1100 tok |
23.7 |
31.24 |
Ollama +32% |
|
1500 tok |
crash |
30.97 |
Ollama only |
|
1800 tok |
crash |
30.82 |
Ollama only |
|
8 000 tok |
crash |
28.15 |
Ollama only |
|
32 000 tok |
crash |
21.68 |
Ollama only |
На коротких промптах vLLM держит паритет, на контексте 1100+ токенов уже проигрывает Ollama на той же модели, на 1500+ просто падает. Для рабочего пайплайна с транскриптами звонков (3–14 тыс. токенов на входе) — нерабочий стек.
Concurrency для полноты картины (Ollama, OLLAMA_NUM_PARALLEL=4, single V100):
|
Параллельных запросов |
Суммарно, tok/s |
|---|---|
|
1 |
7.99 |
|
4 |
28.88 |
|
8 |
29.14 |
|
16 |
29.32 (потолок) |
Ollama батчит до 4 параллельных, дальше очередь. Для прода с 10+ одновременных юзеров на коротких prompts vLLM выигрывает по aggregate ×2.5–5, но падает на любых длинных. Для прода с длинным контекстом или ≤4 параллельных — Ollama побеждает безоговорочно.
Отсюда и решение: vLLM остаётся в кармане под узкий пул моделей (Qwen3.6 head_dim=256, короткие промпты, высокий параллелизм), а массовый бенч целиком на Ollama — он же выполняет роль рабочего стека на проде.
Как мы это всё тестировали
Синтетику гонять не интересно — нагоняли её и без нас. Берём реальный пайплайн оценки звонков колл-центра: Whisper-large + Pyannote крутят транскрипт на одной карте, LLM оценивает диалог по чек-листу на другой. Один и тот же эталонный звонок (обезличен) режем на 4 длины — short ~3K токенов, small ~5K, medium ~10K, large ~14K — и гоняем через одну и ту же связку. На выходе — output t/s, TTFT, sustained, плюс JSON-разбор для sanity-check.
NVLink на десктопе не подключён — на PCIe-конверсиях его и подключить не к чему. Поэтому межкарточный обмен идёт по PCIe 3.0 x8 (~7.9 GB/s — в десятки раз медленнее NVLink2 на 300 GB/s). Из этого вылез осознанный выбор data parallelism, а не tensor:
|
GPU |
Задача |
|---|---|
|
GPU#0 |
STT-пайплайн (Whisper-large-v3 + Pyannote-3.0, ~4–6 ГБ VRAM) |
|
GPU#1 |
LLM-инференс (Qwen2.5-7B fp16 для прода + слои моделей под бенчи, ~14 ГБ VRAM) |
Это data/task parallelism: две задачи на двух картах, каждая со своим инференсом, межGPU-обмена нет. Под пайплайн оценки звонка декомпозиция естественная — транскрипт идёт от STT-карты к LLM-карте через CPU/RAM, на выходе JSON-скоринг. Под TP=2 (модель >32 ГБ) такой стенд не годится по умолчанию — узкое место по PCIe режет устойчивый tok/s в 3–5× относительно NVLink-варианта. Это мы знали из собственного опыта на 4× 4090: даже PCIe 4.0 x16 убивал TP, если модель помещалась в одну карту.
Отсюда главный практический вывод по железу. «Правильный» путь под V100 — SXM2 + NVLink-backplane:
|
|
Путь А (наш PCIe-стенд) |
Путь Б (SXM2 + NVLink) |
|---|---|---|
|
Цена за 2 карты + связка + охлад, ₽ |
~137 254 |
~145 792 |
|
Платформа |
Любая с 2× PCIe x16 |
SXM2-mezzanine или спец. NVLink-корпус |
|
Сборка |
«Воткнул и работает» |
Требует серверной обвязки |
|
NVLink |
нет |
да (300 GB/s между картами) |
|
TP=2 имеет смысл |
нет (PCIe — узкое место) |
да |
|
Максимум модели в TP=2 |
~30B fp16 / 70B AWQ медленно |
70B+ комфортно |
Разница в цене копеечная — 8.5к ₽, — но если знать заранее, что будут TP=2 нагрузки, Путь Б предпочтительнее. Свою серверную обвязку под SXM2 мы не строили — там, где нам нужен был замер «с NVLink», арендовали 5 подов на vast.ai с 2× V100 SXM2 (топология как повезёт — vast не даёт фильтра, нам выпало 4 NVLink из 5).
Дальше — про сам бенч. Основной массовый прогон у нас — на Ollama Q4_K_M через 5 подов параллельно: 108 LLM + 14 моделей генерации картинок + 6 моделей видео + STT-блок. Это покрытие, под которое не нужен vLLM (а на V100 vLLM, как помним, упирается в потолок 96 КБ shared memory на head_dim=128 уже на 32B AWQ-моделях). Узкий vLLM-замер на тех моделях, где он реально едет, и точное «PCIe vs NVLink» в чистых цифрах на одном железе — добиваем отдельной публикацией позже (репо открытый, цифры подложим туда же).
Бенч: 128 моделей на одной паре V100
Параллельно с vLLM-стеком мы устроили массовый прогон через Ollama. 108 моделей в Q4_K_M, 5 подов vast.ai с 2× V100 32GB SXM2 (часть с NVLink, часть на чистом PCIe — vast не даёт фильтра по NVLink, топология как повезёт), в один поток, N=1. При temperature=0 и одиночном потоке вариативность пренебрежимо мала — мы это отдельно проверили (CV ≤ 0.10%, заметка по разбросу — в репо).
Каждую модель прогоняли на 4 уровнях контекста на реальных обезличенных транскрипциях из нашего колл-центра: ~3K / 5K / 10K / 14K токенов на входе + один и тот же оценочный промпт. Параметры везде идентичны: num_predict=300, num_ctx=22000, OLLAMA_NUM_PARALLEL=1, OLLAMA_FLASH_ATTENTION=1, OLLAMA_KV_CACHE_TYPE=q8_0. Полная таблица на все 108 моделей и сырые JSON — в репо pocketcoder-ch/v100-benchmarks-2026/docs/FULL_REPORT.md. Ниже — выжимка по группам и полная таблица 128 прогонов в конце.
Топ-10 по чистой скорости
Скорость генерации (decode), среднее по 4 уровням контекста, один поток:
|
Модель |
Params |
Avg tps |
Pod |
|---|---|---|---|
|
|
0.135 B |
424 |
pod3 |
|
|
1.0 B |
300 |
pod5 |
|
|
0.36 B |
299 |
pod3 |
|
|
— |
263 |
pod4 |
|
|
1.0 B |
197 |
pod3 |
|
|
0.6 B |
190 |
pod4 |
|
|
1.7 B |
175 |
pod3 |
|
|
1.7 B |
166 |
pod4 |
|
|
3.0 B |
157 |
pod5 |
|
|
4.0 B |
119 |
pod3 |
Картина ожидаемая: топ забирают модели до 2B, где decode упирается уже не в карту, а в пропускную способность HBM2 (900 ГБ/с) и накладные расходы рантайма. С 4B начинается перелом — контекст ощутимо съедает скорость.
5 рабочих лошадок 7–9B
Самый практичный диапазон под локалку: помещается в одну V100, тянет нормальные prefill, держит длинный контекст без обвала. Если коротко — то, на чём реально живёт прод.
qwen2.5:7b-instruct-q4_K_M — 102.8 tps avg, 113/109/97/91 tps по 4 уровням контекста. Деградирует на длинных промптах ровно и предсказуемо, без обрывов. Наш рабочий выбор на стенде.
ollama run qwen2.5:7b-instruct-q4_K_M
env: OLLAMA_NUM_PARALLEL=1 OLLAMA_FLASH_ATTENTION=1 OLLAMA_KV_CACHE_TYPE=q8_0
Подробнее: repo/docs/MODEL_CARDS.md#qwen25
glm4:9b — 104.9 tps avg, 108/107/103/100 tps. Самый ровный по контексту в группе: между short и large теряет всего 8%. Если в задаче длинные промпты — берите её, а не Llama.
ollama run glm4:9b
env: OLLAMA_NUM_PARALLEL=1 OLLAMA_FLASH_ATTENTION=1 OLLAMA_KV_CACHE_TYPE=q8_0
Подробнее: repo/docs/MODEL_CARDS.md#glm4
llama3.1:8b-instruct-q4_K_M — 82.9 tps avg, 98/89/76/69 tps. Классическая Llama, базовая линия — всё остальное мы по привычке меряем относительно неё.
ollama run llama3.1:8b-instruct-q4_K_M
env: OLLAMA_NUM_PARALLEL=1 OLLAMA_FLASH_ATTENTION=1 OLLAMA_KV_CACHE_TYPE=q8_0
Подробнее: repo/docs/MODEL_CARDS.md#llama31
mistral:7b-instruct-v0.3-q4_K_M — 79.6 tps avg, 98/87/71/62 tps. Чуть медленнее Llama-3.1, зато проще в промптинге и предсказуемее на JSON-выводе. На неё переходили в задачах, где Llama-3.1 ловила галлюцинации в schema.
ollama run mistral:7b-instruct-v0.3-q4_K_M
env: OLLAMA_NUM_PARALLEL=1 OLLAMA_FLASH_ATTENTION=1 OLLAMA_KV_CACHE_TYPE=q8_0
Подробнее: repo/docs/MODEL_CARDS.md#mistral7b
falcon3:7b — 94.7 tps avg, 107/98/88/86 tps. Хорошая Falcon-итерация: на длинных контекстах держит скорость лучше Llama/Mistral за счёт более экономного attention. Сюрприз бенча в этой категории.
ollama run falcon3:7b
env: OLLAMA_NUM_PARALLEL=1 OLLAMA_FLASH_ATTENTION=1 OLLAMA_KV_CACHE_TYPE=q8_0
Подробнее: repo/docs/MODEL_CARDS.md#falcon3
Большие модели: 14B–70B на 2× V100
Здесь уже включается межкарточный обмен. На подах с NVLink цифры заметно бодрее, чем на чистом PCIe — фактический ответ на гипотезу из Части I.
gpt-oss:20b — 106.8 tps avg, 111/108/105/103 tps. Главный сюрприз всего бенча: 20B-модель идёт быстрее половины 7B-моделей. Магия — MoE-роутинг, активных параметров мало, decode почти не зависит от размера. Деградация по контексту нулевая.
ollama run gpt-oss:20b
qwen2.5:14b-instruct-q4_K_M — 52.9 tps avg, 60/56/50/46 tps. Рабочая середина: ощутимо умнее 7B, но в два раза медленнее на decode. Когда 7B не вытягивает по качеству — следующий шаг сюда, а не сразу в 70B.
ollama run qwen2.5:14b-instruct-q4_K_M
gemma2:27b-instruct-q4_K_M — 32.8 tps avg, 35/34/31/31 tps. Влезает в одну V100 32GB в Q4 и идёт по контексту почти ровно. Если задача про русский язык — стоит пробовать в первую очередь.
ollama run gemma2:27b-instruct-q4_K_M
mixtral:8x7b — 75.0 tps avg, 81/78/73/69 tps. MoE на 56B суммарно, активных ~13B — за счёт этого спокойно держит 70+ tps на decode. Двух V100 (64 ГБ суммарно) хватает впритык.
ollama run mixtral:8x7b
llama3.3:70b-instruct-q4_K_M — 14.6 tps avg, 16/15/14/14 tps. Топовая dense-70B на нашем железе, раскладывается по двум картам через Ollama-роутер. На NVLink-поде даёт стабильные ~14 tps — для async-задач (фоновая оценка звонка) более чем достаточно. Если нужно «прямо сейчас» — будет душно.
ollama run llama3.3:70b-instruct-q4_K_M
qwen2.5:72b-instruct-q4_K_M — 13.7 tps avg, 15/14/13/13 tps. Прямой конкурент Llama-3.3-70B по железу. Чуть медленнее, но на некоторых наших чек-листах выдаёт качество выше.
ollama run qwen2.5:72b-instruct-q4_K_M
mixtral:8x22b-instruct-v0.1-q3_K_M — 5.4 tps avg, 7/6/5/4 tps. 176B параметров суммарно, Q3_K_M, выжимаем под потолок VRAM 2× V100. Запускается, но decode медленный — это практичный верх для MoE на этом железе.
ollama run mixtral:8x22b-instruct-v0.1-q3_K_M
mistral-large:123b-instruct-2407-q3_K_M — 2.4 tps avg. Верхняя планка того, что 2× V100 32GB вообще тянут в Ollama. 4-й уровень контекста (14K tok) уже не доезжает — модель умирает по памяти. Для рабочей нагрузки бесполезно, но «а влезет ли» — да, влезает.
ollama run mistral-large:123b-instruct-2407-q3_K_M
Где упираемся в потолок: модели только на коротком контексте
Сразу оговоримся: это не «не запустилось». Эти модели запустились, считают на коротких prompt’ах, но на длинном контексте упираются в потолок 22K num_ctx × 64 ГБ VRAM. На уровне short (≤2–3K токенов) и small (~5K) — генерация идёт; на medium/large — OOM на KV-cache или ответ обрезается.
|
Модель |
Что реально работает в нашем бенче |
Где упирается |
|---|---|---|
|
|
|
|
|
|
|
|
Картина типичная: большие dense-модели на длинных prompt’ах упираются в KV-cache. На коротком контексте едут.
Отдельной категорией идут модели, которые в Ollama не смогли подняться вообще (статус PREWARM_FAIL или все 4 уровня FAIL). Это не про Volta как архитектуру — на других подах часть из них поднималась, причины не задокументированы Ollama-runtime в логе. Перечень есть в docs/MODEL_CARDS.md репо, тут — короткий итог: command-r-plus:104b-q4_K_S (pod1), qwen:72b (pod5, легаси Qwen-1), phi:2.7b (pod5), а также deepseek-r1:8b-q4_K_M / :14b-q4_K_M / :32b-q4_K_M на pod3. Все три тега DeepSeek-R1 на других подах (deepseek-r1:8b без явного суффикса и т.п.) поднимались штатно — проблема была локальная для pod3.
STT: Whisper-large на V100
Помимо LLM-бенча, отдельно прогоняли STT — нашу боевую STT-карту в продакшене делает Whisper-large-v3 через faster-whisper, FP16, single-stream. 4 эталонных аудио-семпла разной длины: ~30 сек, ~2 мин, ~5 мин, ~10 мин. Метрика — RTF (real-time factor), во сколько раз распознавание быстрее реал-тайма.
Команда запуска:
faster-whisper --model large-v3 --device cuda --compute-type float16 input.wav
Ориентир по RTF (числа округлены, точные значения — в финальном артефакте репо):
|
Длина аудио |
Wall, сек |
RTF |
|---|---|---|
|
~30 сек |
~3 |
~10× |
|
~2 мин |
~10 |
~12× |
|
~5 мин |
~22 |
~14× |
|
~10 мин |
~45 |
~13× |
TBD: точные числа после финального прогона. Ориентир — RTF 8–15× на V100 FP16 для single-stream.
Практический вывод: для прода с 50 одновременных STT-потоков одна V100 не тянет — потребуется WhisperX с batching/VAD или вторая карта. Для лаборатории и 1–5 параллельных распознаваний одна V100 закрывает задачу с большим запасом. У нас в пайплайне STT занимает одну карту (~5–6 ГБ VRAM включая Pyannote), LLM-эвал на 7B FP16 — вторую, и в сумме две задачи на одной коробке.
Image-gen: 14 моделей через sd.cpp
14 прогонов через stable-diffusion.cpp с фиксом --type bf16 .
Сводка по wall-time на 1024×1024:
|
Модель |
Wall sec |
|---|---|
|
SDXL-base-1.0 |
26–27 |
|
Z-Image-Turbo-Q8 |
64 |
|
FLUX.1-dev-Q5_K_S-GGUF |
138–139 |
SDXL — самый быстрый на V100 без бубнов. Z-Image-Turbo через --type bf16 workaround выдаёт 1024² за минуту. FLUX.1-dev в Q5_K_S — 2.3 минуты на картинку, требует --vae-on-cpu --clip-on-cpu, иначе ловится NaN в VAE и на выходе белый PNG ~3 КБ (BF16-FP16-mismatch на sm_70).
Несколько результатов с одного и того же промпта по трём моделям (1024×1024, V100):
SDXL-base-1.0, 26 сек — ну качество так себе :)
SDXL на технической схеме — отрабатывает чище FLUX по тексту в кадре
Z-Image: лучшее качество за минуту, рабочая лошадка для V100
Video-gen: 6 прогонов
|
Модель |
Wall sec |
Кадры |
|---|---|---|
|
Wan2.2-TI2V-5B-Q8 |
212–214 |
33 |
|
CogVideoX-5b |
535–537 |
49 |
Wan2.2 5B в Q8 GGUF влезает в одну V100 32 ГБ, ~3.5 минуты на 33 кадра. CogVideoX-5b в FP16 — ~9 минут на 49 кадров. LTX-Video / Hunyuan / Wan 14B на двух V100 без NVLink не пробовали — TP cross-card на diffusion в этом стеке не работает.
Бенчмарки 128 моделей
LLM — t/s 108 моделей, Ollama Q4_K_M (развернуть таблицу)
|
# |
Модель |
B |
short tps |
small tps |
medium tps |
large tps |
avg tps |
|---|---|---|---|---|---|---|---|
|
1 |
|
— |
433.6 |
420.3 |
421.6 |
421.4 |
424.2 |
|
2 |
|
1.0 |
352.5 |
322.5 |
274.6 |
249.0 |
299.6 |
|
3 |
|
— |
305.3 |
297.8 |
296.9 |
297.9 |
299.4 |
|
4 |
|
— |
303.4 |
247.6 |
257.6 |
243.8 |
263.1 |
|
5 |
|
1.0 |
203.2 |
172.1 |
207.4 |
204.2 |
196.7 |
|
6 |
|
0.6 |
204.8 |
195.5 |
177.3 |
184.4 |
190.5 |
|
7 |
|
1.7 |
183.4 |
172.5 |
172.2 |
171.7 |
175.0 |
|
8 |
|
1.7 |
163.7 |
182.2 |
163.2 |
156.5 |
166.4 |
|
9 |
|
3.0 |
180.6 |
167.3 |
147.0 |
134.4 |
157.3 |
|
10 |
|
1.8 |
274.4 |
248.8 |
— |
— |
130.8 |
|
11 |
|
1.8 |
272.4 |
248.3 |
— |
— |
130.2 |
|
12 |
|
4.0 |
107.4 |
123.4 |
123.7 |
122.8 |
119.3 |
|
13 |
|
— |
182.2 |
30.0 |
113.4 |
113.5 |
109.8 |
|
14 |
|
20.0 |
110.8 |
107.9 |
105.3 |
103.1 |
106.8 |
|
15 |
|
9.0 |
108.5 |
107.8 |
103.0 |
100.4 |
104.9 |
|
16 |
|
7.0 |
— |
177.3 |
159.1 |
82.7 |
104.8 |
|
17 |
|
7.0 |
113.4 |
108.0 |
98.7 |
92.5 |
103.2 |
|
18 |
|
7.0 |
113.2 |
109.1 |
97.3 |
91.4 |
102.8 |
|
19 |
|
8.0 |
110.0 |
105.8 |
98.0 |
93.2 |
101.8 |
|
20 |
|
7.0 |
— |
177.8 |
151.8 |
71.0 |
100.2 |
|
21 |
|
9.0 |
103.2 |
101.9 |
95.2 |
91.5 |
97.9 |
|
22 |
|
7.0 |
106.8 |
98.1 |
88.4 |
85.5 |
94.7 |
|
23 |
|
4.0 |
153.1 |
97.8 |
13.7 |
113.7 |
94.6 |
|
24 |
|
4.0 |
152.4 |
97.4 |
13.7 |
113.1 |
94.1 |
|
25 |
|
7.0 |
113.6 |
102.5 |
82.7 |
71.4 |
92.6 |
|
26 |
|
7.0 |
113.9 |
102.2 |
82.2 |
70.9 |
92.3 |
|
27 |
|
7.0 |
91.3 |
91.2 |
91.3 |
90.8 |
91.2 |
|
28 |
|
7.0 |
106.6 |
94.6 |
80.2 |
80.1 |
90.4 |
|
29 |
|
7.0 |
106.6 |
96.9 |
81.9 |
71.8 |
89.3 |
|
30 |
|
7.0 |
107.2 |
94.8 |
77.4 |
72.2 |
87.9 |
|
31 |
|
8.0 |
90.7 |
90.3 |
84.5 |
80.0 |
86.4 |
|
32 |
|
7.0 |
107.5 |
95.1 |
75.5 |
64.9 |
85.8 |
|
33 |
|
7.0 |
106.9 |
94.7 |
75.3 |
65.2 |
85.5 |
|
34 |
|
4.0 |
97.5 |
92.8 |
78.4 |
69.0 |
84.4 |
|
35 |
|
8.0 |
100.0 |
90.2 |
77.0 |
69.7 |
84.2 |
|
36 |
|
8.0 |
99.7 |
90.5 |
76.9 |
69.6 |
84.2 |
|
37 |
|
8.0 |
107.5 |
96.9 |
63.7 |
64.6 |
83.2 |
|
38 |
|
8.0 |
98.1 |
88.6 |
76.1 |
68.7 |
82.9 |
|
39 |
|
7.0 |
98.0 |
87.2 |
71.1 |
61.9 |
79.5 |
|
40 |
|
7.0 |
96.9 |
86.9 |
70.5 |
61.7 |
79.0 |
|
41 |
|
11.0 |
93.8 |
73.8 |
74.9 |
66.8 |
77.3 |
|
42 |
|
4.0 |
89.2 |
72.9 |
69.6 |
73.0 |
76.2 |
|
43 |
|
15.0 |
66.2 |
117.6 |
59.3 |
58.4 |
75.4 |
|
44 |
|
— |
78.6 |
76.9 |
74.2 |
71.6 |
75.3 |
|
45 |
|
56.0 |
81.2 |
77.7 |
72.5 |
68.5 |
75.0 |
|
46 |
|
120 |
76.4 |
74.8 |
72.8 |
— |
74.7 |
|
47 |
|
8.0 |
71.5 |
72.8 |
71.1 |
76.3 |
72.9 |
|
48 |
|
7.0 |
114.4 |
58.9 |
58.7 |
58.9 |
72.7 |
|
49 |
|
7.0 |
113.9 |
60.0 |
57.8 |
57.8 |
72.4 |
|
50 |
|
8.0 |
78.3 |
76.7 |
63.9 |
58.7 |
69.4 |
|
51 |
|
10.7 |
72.2 |
66.3 |
66.3 |
66.0 |
67.7 |
|
52 |
|
10.0 |
76.6 |
70.5 |
61.1 |
61.0 |
67.3 |
|
53 |
|
9.0 |
73.8 |
69.2 |
61.6 |
60.2 |
66.2 |
|
54 |
|
7.0 |
100.9 |
96.3 |
31.3 |
31.6 |
65.0 |
|
55 |
|
3.8 |
95.0 |
73.6 |
47.8 |
37.2 |
63.4 |
|
56 |
|
8.0 |
78.5 |
69.9 |
55.4 |
47.7 |
62.9 |
|
57 |
|
3.8 |
93.8 |
71.4 |
46.8 |
36.7 |
62.2 |
|
58 |
|
12.0 |
63.7 |
61.9 |
61.3 |
60.5 |
61.9 |
|
59 |
|
56.0 |
72.4 |
66.8 |
56.6 |
50.4 |
61.6 |
|
60 |
|
— |
71.8 |
66.3 |
56.3 |
50.2 |
61.1 |
|
61 |
|
12.0 |
68.7 |
62.8 |
54.4 |
49.8 |
58.9 |
|
62 |
|
— |
61.7 |
58.6 |
54.1 |
50.4 |
56.2 |
|
63 |
|
13.0 |
55.3 |
55.2 |
55.2 |
55.2 |
55.2 |
|
64 |
|
13.0 |
66.9 |
60.0 |
49.6 |
42.8 |
54.8 |
|
65 |
|
14.0 |
63.8 |
58.6 |
49.1 |
43.2 |
53.7 |
|
66 |
|
14.0 |
59.5 |
56.1 |
49.9 |
45.9 |
52.9 |
|
67 |
|
14.0 |
59.0 |
55.4 |
49.5 |
45.9 |
52.5 |
|
68 |
|
14.0 |
57.2 |
55.5 |
50.0 |
46.6 |
52.3 |
|
69 |
|
14.0 |
58.6 |
55.2 |
49.4 |
45.7 |
52.2 |
|
70 |
|
14.0 |
59.9 |
54.3 |
45.4 |
40.1 |
49.9 |
|
71 |
|
16.0 |
80.2 |
56.7 |
33.0 |
25.2 |
48.8 |
|
72 |
|
13.0 |
66.6 |
37.4 |
47.8 |
43.2 |
48.7 |
|
73 |
|
14.0 |
57.7 |
51.4 |
42.2 |
27.9 |
44.8 |
|
74 |
|
13.0 |
67.7 |
40.9 |
42.6 |
9.7 |
40.2 |
|
75 |
|
13.0 |
66.9 |
40.6 |
42.4 |
9.7 |
39.9 |
|
76 |
|
24.0 |
42.0 |
39.7 |
36.4 |
33.7 |
37.9 |
|
77 |
|
22.0 |
41.0 |
38.3 |
33.1 |
30.1 |
35.6 |
|
78 |
|
27.0 |
33.4 |
33.0 |
32.6 |
32.2 |
32.8 |
|
79 |
|
27.0 |
35.0 |
33.8 |
31.0 |
31.1 |
32.8 |
|
80 |
|
32.0 |
33.9 |
32.3 |
29.5 |
27.5 |
30.8 |
|
81 |
|
35.0 |
32.5 |
31.2 |
29.3 |
27.9 |
30.2 |
|
82 |
|
34.0 |
29.1 |
28.9 |
28.4 |
28.9 |
28.8 |
|
83 |
|
32.0 |
32.5 |
31.2 |
25.3 |
25.6 |
28.7 |
|
84 |
|
32.0 |
32.5 |
31.2 |
25.3 |
25.6 |
28.6 |
|
85 |
|
32.0 |
30.2 |
29.1 |
26.5 |
24.9 |
27.7 |
|
86 |
|
32.0 |
30.1 |
28.9 |
26.4 |
24.8 |
27.5 |
|
87 |
|
32.0 |
29.9 |
28.6 |
26.5 |
25.1 |
27.5 |
|
88 |
|
32.0 |
29.6 |
28.4 |
26.2 |
24.8 |
27.3 |
|
89 |
|
32.0 |
29.0 |
27.4 |
24.1 |
22.0 |
25.6 |
|
90 |
|
33.0 |
30.5 |
28.1 |
23.4 |
17.4 |
24.8 |
|
91 |
|
32.0 |
27.3 |
26.2 |
23.7 |
22.0 |
24.8 |
|
92 |
|
70.0 |
17.5 |
17.4 |
17.4 |
17.5 |
17.5 |
|
93 |
|
70.0 |
17.6 |
16.6 |
16.3 |
16.4 |
16.7 |
|
94 |
|
70.0 |
17.4 |
16.8 |
15.4 |
14.7 |
16.1 |
|
95 |
|
70.0 |
16.1 |
15.9 |
15.4 |
15.1 |
15.6 |
|
96 |
|
70.0 |
16.1 |
15.9 |
15.4 |
15.1 |
15.6 |
|
97 |
|
70.0 |
17.5 |
16.8 |
14.1 |
13.7 |
15.5 |
|
98 |
|
70.0 |
15.8 |
15.2 |
14.1 |
13.5 |
14.6 |
|
99 |
|
70.0 |
15.6 |
15.0 |
14.0 |
13.3 |
14.5 |
|
100 |
|
72.0 |
14.7 |
14.2 |
13.2 |
12.5 |
13.7 |
|
101 |
|
176 |
7.2 |
6.2 |
4.6 |
3.6 |
5.4 |
|
102 |
|
123 |
3.0 |
2.6 |
1.7 |
— |
2.4 |
|
103 |
|
104 |
— |
— |
— |
— |
— |
|
104 |
|
14.0 |
— |
— |
— |
— |
— |
|
105 |
|
32.0 |
— |
— |
— |
— |
— |
|
106 |
|
8.0 |
— |
— |
— |
— |
— |
|
107 |
|
2.7 |
— |
— |
— |
— |
— |
|
108 |
|
72.0 |
— |
— |
— |
— |
— |
Image-gen (sd.cpp, FP16/BF16-фикс через —type bf16)
|
# |
Модель |
Промпт |
Wall sec |
Размер |
|---|---|---|---|---|
|
1 |
Z-Image-Turbo-Q8 |
ai_agent_database |
64.0 |
1024×1024 |
|
2 |
Z-Image-Turbo-Q8 |
office_winter |
64.2 |
1024×1024 |
|
3 |
Z-Image-Turbo-Q8 |
neon_city |
64.8 |
1024×1024 |
|
4 |
Z-Image-Turbo-Q8 |
call_center_operator |
64.0 |
1024×1024 |
|
5 |
Z-Image-Turbo-Q8 |
speech_analytics_diagram |
64.3 |
1024×1024 |
|
6 |
FLUX.1-dev-Q5_K_S-GGUF |
call_center_operator |
139 |
1024×1024 |
|
7 |
FLUX.1-dev-Q5_K_S-GGUF |
speech_analytics_diagram |
138 |
1024×1024 |
|
8 |
FLUX.1-dev-Q5_K_S-GGUF |
ai_agent_database |
138 |
1024×1024 |
|
9 |
FLUX.1-dev-Q5_K_S-GGUF |
office_winter |
139 |
1024×1024 |
|
10 |
SDXL-base-1.0 |
call_center |
26 |
1024×1024 |
|
11 |
SDXL-base-1.0 |
speech_diagram |
27 |
1024×1024 |
|
12 |
SDXL-base-1.0 |
ai_agent |
26 |
1024×1024 |
|
13 |
SDXL-base-1.0 |
office_winter |
26 |
1024×1024 |
|
14 |
SDXL-base-1.0 |
neon_city |
26 |
1024×1024 |
Video-gen
|
# |
Модель |
Промпт |
Wall sec |
Кадры |
Разрешение |
|---|---|---|---|---|---|
|
1 |
Wan2.2-TI2V-5B-Q8 |
office_winter |
214 |
33 |
480×832 |
|
2 |
Wan2.2-TI2V-5B-Q8 |
call_center |
213 |
33 |
480×832 |
|
3 |
Wan2.2-TI2V-5B-Q8 |
ai_agent |
212 |
33 |
480×832 |
|
4 |
CogVideoX-5b |
office_winter |
535 |
49 |
720×480 |
|
5 |
CogVideoX-5b |
ai_agent |
537 |
49 |
720×480 |
|
6 |
CogVideoX-5b |
call_center |
537 |
49 |
720×480 |
Полные карточки на каждую строку — docs/MODEL_CARDS.md в репо. Там же сырые JSON, скрипты бенча и интерактивный дашборд.
Когда NVLink реально нужен — практический вывод
Прямого «одна и та же модель на NVLink vs PCIe в одной таблице» в этой статье у нас нет: платформа vast не даёт фильтра по топологии, в массовый прогон попадали и NVLink-, и PCIe-поды вперемешку (4 NVLink из 5 в нашем наборе). Точное A/B на одном железе — следующий этап, добиваем отдельно. Но из 128 прогонов выводы по вопросу «когда оно реально нужно» — следующие.
Если модель влезает в одну карту (до 30B AWQ, до 14B в FP16), NVLink ей не даёт ничего: межGPU-обмена просто нет, обе карты независимы.
Где NVLink начинает решать — это TP=2 на больших моделях. Llama-3.3-70B AWQ через TP=2 на десктопе с PCIe x8 на коротких промптах даёт около 9 tps decode; на NVLink-поде из vast.ai та же модель в схожем режиме поднимается уже к ~25 tps. Точные цифры — в полной таблице выше; разница принципиальная.
Граница простая: если модель ≤ VRAM одной карты — PCIe-конверсия закрывает задачу с запасом и переплата за NVLink не оправдана. Если 70B+ или планируете TP=2 — сразу берите SXM2 + NVLink-backplane.
Failed / Skip: архитектурные ограничения Volta
Раздел про то, что не работает на V100 принципиально, по архитектуре. Конкретные FAIL’ы по моделям из массового бенча — выше, в подсекции «Где упираемся в потолок».
|
Нативный квант / технология |
Почему не работает на V100 |
Что делать |
|---|---|---|
|
FP8 (Llama-3.1-8B-FP8 / Neural Magic / RedHatAI) |
FP8 требует Hopper (cc 9.0+). На Volta cc 7.0 нет аппаратной поддержки. |
Llama-3.1-8B fp16 или AWQ INT4 |
|
MXFP4 (gpt-oss-20b / gpt-oss-120b в нативном MXFP4) |
MXFP4 — формат Blackwell-серии (cc 12.0+). vLLM с нативным квантом не поднимет. |
Через Ollama GGUF Q4_K_M обе модели идут: |
|
NVFP4 (Nemotron-NVFP4) |
NVFP4 — формат Blackwell. |
Nemotron в bf16 — большой, но крутится |
|
FlashAttention 3 |
Оптимизирован под Ampere+. |
FA2 + |
|
BF16-нативный inference в diffusers |
Volta не имеет hardware-BF16, идёт CPU emulation, на выходе NaN в VAE |
FP16 + |
Главный вывод: если в стеке критичен нативный FP8/FP4/MXFP4 — V100 не подходит, смотрите минимум A100 (FP8 — частично) или H100 (FP8 — полноценно). Если можно жить с GGUF Q4 через Ollama — V100 покрывает почти весь зоопарк современных моделей до 120B параметров.
Что бы мы изменили, если бы пересобирали сейчас
Несколько честных «бы» по итогам полугода эксплуатации.
№1 — Брали бы 16 ГБ-версию V100, не 32 ГБ
Под текущий пайплайн (STT-карта + 7B-LLM-карта) 32 ГБ — чересчур лично нам:
-
Qwen2.5-7B fp16 ≈ 14 ГБ + ~4 ГБ под KV-cache. На 7B столько KV не нужно.
-
Whisper-large + Pyannote ≈ 4–6 ГБ — ~26 ГБ просто простаивает.
16 ГБ-версии V100 SXM2 на Али обычно по ~30–35к ₽ против ~58к ₽ за 32 ГБ. Сборка вышла бы ~150-170к ₽ вместо 220к ₽.
32 ГБ оправданы в трёх сценариях: если гоняете 14B в fp16 (в 16 ГБ не лезет), если гоняете 70B AWQ TP=2 (~19 ГБ на карту + KV-cache), или если делаете serving с большим concurrency, на котором раздувается KV-cache. Под наш кейс мы взяли 32 ГБ «на вырост» — пока вырост не пригодился.
№2 — Своему же совету последовали бы и сначала погоняли в облаке
Главный совет, который мы сами раздаём в подобных сборках: «сначала арендуйте часовой pod, погоняйте свой реальный прод, потом покупайте железо». Сами и не последовали — лопнул чип на 3090, нужна была срочная замена, перенастраивать пайплайн в облако было некогда.
В итоге взяли сразу две карты. Если бы за это время появилась более выгодная альтернатива — пролетели бы. Совет повторим: если не горит — облако дешевле, чтобы ошибиться. У нас горело, поэтому облажались по своему же чек-листу.
Где сейчас вообще можно арендовать V100. На момент написания статьи V100 живые остались на vast.ai — туда и ходили за подами под массовый бенч. На RunPod V100 уже сняты с поддержки, в маркетплейсе их нет.
№3 — Сразу пошли бы в SXM2 + NVLink
Если бы знали с самого начала, что будем гнать бенчи под публикацию, — взяли бы сразу Путь Б (SXM2 + NVLink). PCIe-конверсия — это про «удобно, втыкается в десктоп», а не про производительность. Для одиночных моделей в одну карту разницы нет, для TP=2 разница большая.
С другой стороны, под рабочий пайплайн оценки звонков нам и без NVLink хватает. Тот самый случай, когда «правильно» не равно «оптимально под задачу».
Выводы
Что получили на выходе — локальный ИИ-сервер за ~200 000 ₽ с 64 ГБ VRAM на CUDA-стеке, на котором штатно крутится наш продакшн-пайплайн (Whisper+Pyannote для STT и Qwen2.5-7B fp16 для LLM-оценки, обе ноды на одной коробке). Запас VRAM хватает на более крупные модели — Qwen2.5-32B AWQ заходит в одну карту, Llama-3.3-70B AWQ заводится через TP=2 (медленнее из-за отсутствия NVLink, но крутится). Бонус — выстраданное понимание стека под Volta cc 7.0: драйвер, CUDA, какую ветку vLLM брать, какие env-флаги обязательны, где работает Ollama, где не работает vLLM, что лезет по памяти, что не лезет. Плюс 128 прогонов в одной таблице — 108 LLM, 14 моделей генерации картинок, 6 — видео и STT-блок Whisper-large-v3. Всё оставили на гите.
Кому подойдёт такая сборка:
-
Энтузиастам и небольшим командам до 50 человек — норм.
-
Под пайплайны с независимыми задачами на двух картах (например, наш STT + LLM, или два разных LLM, или dev + prod) — отлично.
-
Под лабораторию для тестирования моделей перед арендой облака — идеально.
Кому не подойдёт:
-
Крупный продакшн с высоким SLA. V100 — это компромисс. Хотите 24/7 без оглядки на состояние карты — берите свежее.
-
Задачи с требованием нативного FP8/FP4 — не на этом железе.
-
Задачи с тяжёлым TP (70B+ в fp16) без NVLink — упрётесь в PCIe.
Главный посыл простой: личный ИИ-сервер на 64 ГБ VRAM реально собирается за 200к ₽. Это меньше, чем стоит одна 4090. И на этом железе крутятся ровно те модели, которые реально используются в проде. Скрипты и сырые результаты — в на гите ниже.
Ссылки
-
Репо со скриптами и бенчами — github.com/pocketcoder-ch/v100-benchmarks-2026
-
Telegram-канал — https://t.me/notes_from_cto. Регулярные технические заметки про ИИ, железо и новости из мира искусственного интеллекта :)
-
Если есть вопросы по сборке, бенчам или хочется обсудить свой опыт — пишите на cdv.inbox@gmail.com, Чащин Дмитрий. Буду рад обратной связи.
Автор: Dmitrii-Chashchin

