О чём это и зачем
Приятно наблюдать за тем, что сообщество людей, работающих с локальными ИИ, растет с каждым днем, но до сих пор я встречаю мнение, как сложно собрать нужное оборудование под свой сервер 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, Чащин Дмитрий. Буду рад обратной связи.
