Лаборатория ИИ за 200 000 ₽: как мы собрали локальный ИИ-сервер на 2× Tesla V100. DevOps.. DevOps. GPU для LLM.. DevOps. GPU для LLM. Tesla V100.. DevOps. GPU для LLM. Tesla V100. v100.. DevOps. GPU для LLM. Tesla V100. v100. бенчмарк LLM.. DevOps. GPU для LLM. Tesla V100. v100. бенчмарк LLM. бюджетный ИИ-сервер.. DevOps. GPU для LLM. Tesla V100. v100. бенчмарк LLM. бюджетный ИИ-сервер. видеокарта для нейросетей.. DevOps. GPU для LLM. Tesla V100. v100. бенчмарк LLM. бюджетный ИИ-сервер. видеокарта для нейросетей. домашний сервер для ИИ.. DevOps. GPU для LLM. Tesla V100. v100. бенчмарк LLM. бюджетный ИИ-сервер. видеокарта для нейросетей. домашний сервер для ИИ. запуск LLM локально.. DevOps. GPU для LLM. Tesla V100. v100. бенчмарк LLM. бюджетный ИИ-сервер. видеокарта для нейросетей. домашний сервер для ИИ. запуск LLM локально. ИИ на своём железе.. DevOps. GPU для LLM. Tesla V100. v100. бенчмарк LLM. бюджетный ИИ-сервер. видеокарта для нейросетей. домашний сервер для ИИ. запуск LLM локально. ИИ на своём железе. искусственный интеллект.. DevOps. GPU для LLM. Tesla V100. v100. бенчмарк LLM. бюджетный ИИ-сервер. видеокарта для нейросетей. домашний сервер для ИИ. запуск LLM локально. ИИ на своём железе. искусственный интеллект. Управление продажами.. DevOps. GPU для LLM. Tesla V100. v100. бенчмарк LLM. бюджетный ИИ-сервер. видеокарта для нейросетей. домашний сервер для ИИ. запуск LLM локально. ИИ на своём железе. искусственный интеллект. Управление продажами. Управление продуктом.. DevOps. GPU для LLM. Tesla V100. v100. бенчмарк LLM. бюджетный ИИ-сервер. видеокарта для нейросетей. домашний сервер для ИИ. запуск LLM локально. ИИ на своём железе. искусственный интеллект. Управление продажами. Управление продуктом. Управление проектами.

О чём это и зачем

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

Что в статье

Структура такая:

  1. Что собираем и зачем (этот раздел).

  2. Почему V100 — про рынок, форм-факторы (SXM2 vs SXM3 vs PCIe), Авито/АлиЭкспресс, что мы реально взяли.

  3. Железо: смета и почему именно так — i7, 2 карты, БП, RAM, корпус.

  4. Грабли Volta: vLLM-стек, что работает / что нет, SHM-wall и почему в массовом бенче мы в итоге на Ollama.

  5. Как мы это всё тестировали — стенд, пайплайн STT+LLM, DP vs TP, путь A vs путь Б.

  6. 128 моделей в одной таблице — 108 LLM (топ-10 / рабочие лошадки 7–9B / большие 14–70B / «где упираемся в потолок»), 14 image-gen, 6 video-gen, STT (Whisper-large-v3).

  7. Когда NVLink реально нужен — практический вывод по 128 прогонам.

  8. Failed / Skip — что не работает на Volta (FP8, MXFP4, NVFP4).

  9. Что бы изменили, если бы пересобирали.

  10. Выводы и ссылки.

Скрипты, обезличенные транскрипции, сырые JSON и интерактивный дашборд — в открытом репо pocketcoder-ch/v100-benchmarks-2026.

Как выглядит собранный сервер с 2× V100 — основной план

Как выглядит собранный сервер с 2× V100 — основной план

Почему V100: откуда столько на рынке и какие они бывают

Прежде чем переходить к смете и комплектующим, разберёмся с главным вопросом: почему вообще V100, что это за карта, какие форматы существуют на б/у-рынке и что мы в итоге взяли. Дальше будет понятнее, как сборка дошла до своего финального вида.

Откуда «дедушка» на рынке

Volta — архитектура NVIDIA 2017 года, compute capability 7.0. Прошло три полных поколения серверных GPU:

Лаборатория ИИ за 200 000 ₽: как мы собрали локальный ИИ-сервер на 2× Tesla V100 - 2

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-чип

Скрин AliExpress: голая V100 SXM2 32GB за 52 632 ₽

Скрин AliExpress: голая V100 SXM2 32GB за 52 632 ₽

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).

Скрин AliExpress: NVLink-backplane на 2× V100 SXM2 за 21 849 ₽

Скрин AliExpress: NVLink-backplane на 2× V100 SXM2 за 21 849 ₽

Это путь «правильно, под NVLink, с серверной обвязкой». Охлад докупается отдельно — водянка SPEEDIER за 3 726 ₽ или медная башня OLOEY за 6 271 ₽.

Скрин AliExpress: водянка SPEEDIER для V100 SXM2 за 3 249 ₽

Скрин AliExpress: водянка SPEEDIER для V100 SXM2 за 3 249 ₽
Скрин AliExpress: медная башня OLOEY для V100 SXM2 за 4 439 ₽

Скрин AliExpress: медная башня OLOEY для V100 SXM2 за 4 439 ₽

Вариант Б — OLOEY PCIe-конверсия с охладом

Скрин AliExpress: OLOEY V100 в PCIe-адаптере с улиткой за 59 835 ₽

Скрин AliExpress: OLOEY V100 в PCIe-адаптере с улиткой за 59 835 ₽

Готовая 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

Скрин Авито: V100 PCIe с радиатором от другой карты за 70 000 ₽

Скрин Авито: V100 PCIe с радиатором от другой карты за 70 000 ₽

Где

Что

Итого ₽

Срок

Али (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, втыкается в обычную десктопную мать.

Замер реальной карты — длина и ширина (важно проверить до сборки, что влезет в корпус):

Замер длины V100 OLOEY PCIe-конверсии — около 26 см

Замер длины V100 OLOEY PCIe-конверсии — около 26 см
Замер ширины V100 OLOEY PCIe-конверсии — двухслотовый формат

Замер ширины V100 OLOEY PCIe-конверсии — двухслотовый формат

Это к вопросу про корпус: 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 пункта

Чтобы статья не выглядела пропагандой, разложим минусы.

  1. Архитектура 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.

  2. Геморрой с библиотеками. vLLM на свежих ветках Volta уже не держит, нужно подбирать конкретную версию (см. следующий раздел). Где-то фичи нет, где-то свежая архитектура в реестре отсутствует. Разработка под V100 — это чтение issue-трекеров и форумов на постоянке.

  3. Пропускная способность ниже. HBM2 у V100 — 900 GB/s. У A100 — 1.5–2 TB/s, у H100 — 3 TB/s, у B200 — 8 TB/s. NVLink на TP частично выправляет, но в абсолюте память медленнее современных карт.

  4. Б/у из ДЦ. 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 — это DDR4non-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

работает

Последняя ветка с честной поддержкой sm_70. Базовый стек.

0.17.0

работает с оговоркой

На multimodal через TRITON_ATTN ловится deadlock на encoder profiling (vllm/#36357). Лечится откатом на 0.15.1 или --skip-mm-profiling.

0.20.0+

не запустится

sm_70 выпилили при переходе на PyTorch 2.11 / CUDA 12.8 defaults (discuss.vllm.ai/t/2605).

1Cat-vLLM 0.0.3

работает под AWQ

Fork под V100: WMMA SM70 kernels от LMDeploy TurboMind для AWQ + attention backend FLASH_ATTN_V100. Наш основной стек для AWQ-моделей.

В итоге на хосте у нас два venv:

  1. .venv-base — vLLM 0.18.x upstream + PyTorch 2.7. Тянет всё на FP16 и весь GPTQ.

  2. .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+; компенсируем --dtype=half

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=300num_ctx=22000OLLAMA_NUM_PARALLEL=1OLLAMA_FLASH_ATTENTION=1OLLAMA_KV_CACHE_TYPE=q8_0. Полная таблица на все 108 моделей и сырые JSON — в репо pocketcoder-ch/v100-benchmarks-2026/docs/FULL_REPORT.md. Ниже — выжимка по группам и полная таблица 128 прогонов в конце.

Топ-10 по чистой скорости

Скорость генерации (decode), среднее по 4 уровням контекста, один поток:

Модель

Params

Avg tps

Pod

smollm2:135m

0.135 B

424

pod3

llama3.2:1b-instruct-q4_K_M

1.0 B

300

pod5

smollm2:360m

0.36 B

299

pod3

glm-ocr

263

pod4

gemma3:1b

1.0 B

197

pod3

qwen3:0.6b-q4_K_M

0.6 B

190

pod4

smollm2:1.7b

1.7 B

175

pod3

qwen3:1.7b-q4_K_M

1.7 B

166

pod4

llama3.2:3b-instruct-q4_K_M

3.0 B

157

pod5

gemma3:4b

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 или ответ обрезается.

Модель

Что реально работает в нашем бенче

Где упирается

mistral-large:123b

short ~3.0 tps, small ~2.6 tps, medium ~1.7 tps

large (14K tok) — OOM на KV-cache

gpt-oss:120b

short/small/medium ~74–76 tps avg (MoE 120B/5B active, через Ollama GGUF Q4)

large — не доезжает

Картина типичная: большие 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 — оператор колл-центра

SDXL — оператор колл-центра

SDXL-base-1.0, 26 сек – ну качество так себе :)

SDXL — диаграмма речевой аналитики

SDXL — диаграмма речевой аналитики

SDXL на технической схеме — отрабатывает чище FLUX по тексту в кадре

Z-Image — AI-агент с базой

Z-Image — AI-агент с базой

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

smollm2:135m

433.6

420.3

421.6

421.4

424.2

2

llama3.2:1b-instruct-q4_K_M

1.0

352.5

322.5

274.6

249.0

299.6

3

smollm2:360m

305.3

297.8

296.9

297.9

299.4

4

glm-ocr

303.4

247.6

257.6

243.8

263.1

5

gemma3:1b

1.0

203.2

172.1

207.4

204.2

196.7

6

qwen3:0.6b-q4_K_M

0.6

204.8

195.5

177.3

184.4

190.5

7

smollm2:1.7b

1.7

183.4

172.5

172.2

171.7

175.0

8

qwen3:1.7b-q4_K_M

1.7

163.7

182.2

163.2

156.5

166.4

9

llama3.2:3b-instruct-q4_K_M

3.0

180.6

167.3

147.0

134.4

157.3

10

qwen:1.8b

1.8

274.4

248.8

130.8

11

qwen:1.8b

1.8

272.4

248.3

130.2

12

gemma3:4b

4.0

107.4

123.4

123.7

122.8

119.3

13

moondream

182.2

30.0

113.4

113.5

109.8

14

gpt-oss:20b

20.0

110.8

107.9

105.3

103.1

106.8

15

glm4:9b

9.0

108.5

107.8

103.0

100.4

104.9

16

starcoder2:7b

7.0

177.3

159.1

82.7

104.8

17

qwen2.5-coder:7b-instruct-q4_K_M

7.0

113.4

108.0

98.7

92.5

103.2

18

qwen2.5:7b-instruct-q4_K_M

7.0

113.2

109.1

97.3

91.4

102.8

19

dolphin3:8b

8.0

110.0

105.8

98.0

93.2

101.8

20

starcoder2:7b

7.0

177.8

151.8

71.0

100.2

21

glm4:9b

9.0

103.2

101.9

95.2

91.5

97.9

22

falcon3:7b

7.0

106.8

98.1

88.4

85.5

94.7

23

nemotron-mini:4b-instruct-q4_K_M

4.0

153.1

97.8

13.7

113.7

94.6

24

nemotron-mini:4b

4.0

152.4

97.4

13.7

113.1

94.1

25

magicoder:7b

7.0

113.6

102.5

82.7

71.4

92.6

26

codellama:7b

7.0

113.9

102.2

82.2

70.9

92.3

27

olmo2:7b

7.0

91.3

91.2

91.3

90.8

91.2

28

starling-lm:7b-beta

7.0

106.6

94.6

80.2

80.1

90.4

29

qwen:7b

7.0

106.6

96.9

81.9

71.8

89.3

30

openchat:7b

7.0

107.2

94.8

77.4

72.2

87.9

31

deepseek-r1:8b

8.0

90.7

90.3

84.5

80.0

86.4

32

neural-chat:7b

7.0

107.5

95.1

75.5

64.9

85.8

33

zephyr:7b-beta

7.0

106.9

94.7

75.3

65.2

85.5

34

qwen3:4b-q4_K_M

4.0

97.5

92.8

78.4

69.0

84.4

35

llama3.1:8b

8.0

100.0

90.2

77.0

69.7

84.2

36

dolphin3:8b

8.0

99.7

90.5

76.9

69.6

84.2

37

llama3:8b

8.0

107.5

96.9

63.7

64.6

83.2

38

llama3.1:8b-instruct-q4_K_M

8.0

98.1

88.6

76.1

68.7

82.9

39

mistral:7b-instruct-v0.3-q4_K_M

7.0

98.0

87.2

71.1

61.9

79.5

40

mistral:7b

7.0

96.9

86.9

70.5

61.7

79.0

41

llama3.2-vision:11b

11.0

93.8

73.8

74.9

66.8

77.3

42

nemotron-mini:4b-instruct-fp16

4.0

89.2

72.9

69.6

73.0

76.2

43

starcoder2:15b

15.0

66.2

117.6

59.3

58.4

75.4

44

alibilge/Huihui-GLM-4.6V-Flash-abliterated:q4_k_m

78.6

76.9

74.2

71.6

75.3

45

mixtral:8x7b

56.0

81.2

77.7

72.5

68.5

75.0

46

gpt-oss:120b

120

76.4

74.8

72.8

74.7

47

granite3-dense:8b

8.0

71.5

72.8

71.1

76.3

72.9

48

vicuna:7b

7.0

114.4

58.9

58.7

58.9

72.7

49

llama2:7b

7.0

113.9

60.0

57.8

57.8

72.4

50

qwen3:8b-q4_K_M

8.0

78.3

76.7

63.9

58.7

69.4

51

solar:10.7b

10.7

72.2

66.3

66.3

66.0

67.7

52

falcon3:10b

10.0

76.6

70.5

61.1

61.0

67.3

53

gemma2:9b-instruct-q4_K_M

9.0

73.8

69.2

61.6

60.2

66.2

54

codegemma:7b

7.0

100.9

96.3

31.3

31.6

65.0

55

phi3:3.8b

3.8

95.0

73.6

47.8

37.2

63.4

56

granite3.1-dense:8b-instruct-q4_K_M

8.0

78.5

69.9

55.4

47.7

62.9

57

phi3:3.8b-mini-128k-instruct-q4_K_M

3.8

93.8

71.4

46.8

36.7

62.2

58

gemma3:12b

12.0

63.7

61.9

61.3

60.5

61.9

59

dolphin-mixtral:8x7b

56.0

72.4

66.8

56.6

50.4

61.6

60

nous-hermes2-mixtral

71.8

66.3

56.3

50.2

61.1

61

mistral-nemo:12b-instruct-2407-q4_K_M

12.0

68.7

62.8

54.4

49.8

58.9

62

glm-4.7-flash:latest

61.7

58.6

54.1

50.4

56.2

63

olmo2:13b

13.0

55.3

55.2

55.2

55.2

55.2

64

codellama:13b

13.0

66.9

60.0

49.6

42.8

54.8

65

qwen:14b

14.0

63.8

58.6

49.1

43.2

53.7

66

qwen2.5:14b-instruct-q4_K_M

14.0

59.5

56.1

49.9

45.9

52.9

67

qwen2.5-coder:14b-instruct-q4_K_M

14.0

59.0

55.4

49.5

45.9

52.5

68

qwen3:14b-q4_K_M

14.0

57.2

55.5

50.0

46.6

52.3

69

deepseek-r1:14b

14.0

58.6

55.2

49.4

45.7

52.2

70

phi3:14b-medium-128k-instruct-q4_K_M

14.0

59.9

54.3

45.4

40.1

49.9

71

deepseek-coder-v2:16b-lite-instruct-q4_K_M

16.0

80.2

56.7

33.0

25.2

48.8

72

llama2:13b

13.0

66.6

37.4

47.8

43.2

48.7

73

phi4:14b-q4_K_M

14.0

57.7

51.4

42.2

27.9

44.8

74

vicuna:13b

13.0

67.7

40.9

42.6

9.7

40.2

75

vicuna:13b

13.0

66.9

40.6

42.4

9.7

39.9

76

mistral-small:24b-instruct-2501-q4_K_M

24.0

42.0

39.7

36.4

33.7

37.9

77

codestral:22b-v0.1-q4_K_M

22.0

41.0

38.3

33.1

30.1

35.6

78

gemma3:27b

27.0

33.4

33.0

32.6

32.2

32.8

79

gemma2:27b-instruct-q4_K_M

27.0

35.0

33.8

31.0

31.1

32.8

80

qwen:32b

32.0

33.9

32.3

29.5

27.5

30.8

81

command-r:35b-08-2024-q4_K_M

35.0

32.5

31.2

29.3

27.9

30.2

82

yi:34b

34.0

29.1

28.9

28.4

28.9

28.8

83

aya-expanse:32b-q4_K_M

32.0

32.5

31.2

25.3

25.6

28.7

84

aya-expanse:32b

32.0

32.5

31.2

25.3

25.6

28.6

85

qwq:32b-preview-q4_K_M

32.0

30.2

29.1

26.5

24.9

27.7

86

qwen2.5:32b-instruct-q4_K_M

32.0

30.1

28.9

26.4

24.8

27.5

87

qwen2.5-coder:32b-instruct-q4_K_M

32.0

29.9

28.6

26.5

25.1

27.5

88

deepseek-r1:32b

32.0

29.6

28.4

26.2

24.8

27.3

89

exaone-deep:32b

32.0

29.0

27.4

24.1

22.0

25.6

90

wizardcoder:33b

33.0

30.5

28.1

23.4

17.4

24.8

91

qwen3:32b-q4_K_M

32.0

27.3

26.2

23.7

22.0

24.8

92

codellama:70b

70.0

17.5

17.4

17.4

17.5

17.5

93

llama2:70b

70.0

17.6

16.6

16.3

16.4

16.7

94

hermes3:70b

70.0

17.4

16.8

15.4

14.7

16.1

95

llama3.1:70b

70.0

16.1

15.9

15.4

15.1

15.6

96

nemotron:70b

70.0

16.1

15.9

15.4

15.1

15.6

97

llama3:70b

70.0

17.5

16.8

14.1

13.7

15.5

98

llama3.3:70b-instruct-q4_K_M

70.0

15.8

15.2

14.1

13.5

14.6

99

deepseek-r1:70b-llama-distill-q4_K_M

70.0

15.6

15.0

14.0

13.3

14.5

100

qwen2.5:72b-instruct-q4_K_M

72.0

14.7

14.2

13.2

12.5

13.7

101

mixtral:8x22b-instruct-v0.1-q3_K_M

176

7.2

6.2

4.6

3.6

5.4

102

mistral-large:123b-instruct-2407-q3_K_M

123

3.0

2.6

1.7

2.4

103

command-r-plus:104b-q4_K_S

104

104

deepseek-r1:14b-q4_K_M

14.0

105

deepseek-r1:32b-q4_K_M

32.0

106

deepseek-r1:8b-q4_K_M

8.0

107

phi:2.7b

2.7

108

qwen:72b

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 обе модели идут: gpt-oss:20b — 106.8 tps, gpt-oss:120b — 74.7 tps (см. выше)

NVFP4 (Nemotron-NVFP4)

NVFP4 — формат Blackwell.

Nemotron в bf16 — большой, но крутится

FlashAttention 3

Оптимизирован под Ampere+.

FA2 + --enforce-eager в vLLM

BF16-нативный inference в diffusers

Volta не имеет hardware-BF16, идёт CPU emulation, на выходе NaN в VAE

FP16 + pipe.vae.to(torch.float32) или sd.cpp --type bf16

Главный вывод: если в стеке критичен нативный 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. Всё оставили на гите.

Кому подойдёт такая сборка:

  1. Энтузиастам и небольшим командам до 50 человек — норм.

  2. Под пайплайны с независимыми задачами на двух картах (например, наш STT + LLM, или два разных LLM, или dev + prod) — отлично.

  3. Под лабораторию для тестирования моделей перед арендой облака — идеально.

Кому не подойдёт:

  1. Крупный продакшн с высоким SLA. V100 — это компромисс. Хотите 24/7 без оглядки на состояние карты — берите свежее.

  2. Задачи с требованием нативного FP8/FP4 — не на этом железе.

  3. Задачи с тяжёлым 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

Источник