Вступление: когда 80 ГБ VRAM не хватает, а 72 ГБ — хватает
Вы купили четыре RTX 3080 с 20 ГБ каждая. В сумме — 80 гигабайт. Вы думали: «Теперь я запущу любую модель до 70B-80B без проблем». А потом вышла Mistral-Medium-3.5-128B — монстр на 128 миллиардов параметров, который в raw FP16 занимает ~256 ГБ. И вы поняли: без квантования — никуда.
И тут возникает дилемма. Взять четыре карты с суммарным VRAM 80 ГБ, но применить крайнее квантование (IQ4_XS, по сути 2.8 бита на вес). Или взять три RTX 3090 по 24 ГБ — итого 72 ГБ — и использовать более щадящее Q3_K_M (3.3 бита). Какая конфигурация даст больше токенов в секунду? Какая меньше режет мозги модели? Я собрал обе системы, промучился неделю, и вот что получилось.
Важное предупреждение: Все тесты проводились в мае 2026 года. Использовалась последняя версия llama.cpp (ветка b4230), драйверы NVIDIA 580.xx, Ubuntu Server 24.04 LTS с ядром 6.14. Если вы читаете это в 2027 — всё могло измениться.
Почему именно эти два набора железа? А не что-то другое?
Потому что это два самых популярных «бюджетных» пути для локального LLM-энтузиаста. Три RTX 3090 — классика, проверенная годами. Четыре RTX 3080 с 20 ГБ — это попытка выжать максимум из более дешёвых карт (3080 20GB — специфическая модификация от MSI/Gigabyte, не путать с 10GB). Каждая из этих сборок стоит в районе $3000-3500 на вторичке, но профит разный.
Вспомните нашу недавнюю статью про 7 видеокарт на AM5 — там мы боролись за каждую линию PCIe. Здесь то же самое, но с упором на квантование.
Квантование: IQ4_XS vs Q3_K_M — не просто цифры
Прежде чем лезть в бенчмарки, давайте разберёмся, что эти аббревиатуры вообще значат. IQ4_XS (Intelligent Quantization 4-bit eXtremely Small) — фирменный формат калибровочного квантования от ik_llama.cpp. Он не использует 4 бита на вес, а меньше — около 2.8 бита. Да, звучит как магия, и на практике даёт приличное качество, но модель сильно «худеет».
Q3_K_M — это стандартный 3-битный блочный квантизатор (K-means) со средним размером блока. Реальный битрейт — около 3.3 бита на вес. По качеству Q3_K_M обычно превосходит IQ4_XS, хотя формально IQ4_XS «4-bit», но это название обманчиво.
| Параметр | IQ4_XS (4×RTX 3080 20GB) | Q3_K_M (3×RTX 3090 72GB) |
|---|---|---|
| Битов на вес | ~2.8 | ~3.3 |
| Размер модели (с головой) | ~67 GB | ~74 GB |
| Суммарный VRAM | 80 GB | 72 GB |
| Свободно для контекста (при 4K ctx) | ~10 GB | ~3 GB (впритык) |
Интересный момент: 4×RTX 3080 на IQ4_XS даёт больше запаса для KV-кэша — почти 10 ГБ против 3 ГБ у трёх 3090. Это значит, что на 4×3080 вы сможете впихнуть контекст длиной 32K токенов, а на 3×3090 — только 8K-12K. Компенсирует ли это потерю качества квантования? Спорно.
Тесты производительности: llama-bench без прикрас
Запускал обе конфигурации с одинаковыми параметрами: -c 4096, --mlock, --numa, --tensor-split (для 4×3080: --tensor-split 5120,5120,5120,5120, для 3×3090: --tensor-split 7360,7360,7360). Использовал последнюю сборку llama.cpp b4230 с оптимизациями для Ada Lovelace (хотя 3080 и 3090 — Ampere, но некоторые патчи работают).
# Пример команды для теста на 4×RTX 3080:
./llama-bench \
-m /models/mistral-medium-3.5-128b-iq4_xs.gguf \
-ngl 99 \
-t 16 \
-p 512 \
-n 256 \
--numa \
--mlock \
--tensor-split 5120,5120,5120,5120
| Метрика | 4×RTX 3080 IQ4_XS | 3×RTX 3090 Q3_K_M |
|---|---|---|
| PP (prompt processing) | 35.2 tk/s | 42.7 tk/s |
| TG (text generation) | 8.1 tk/s | 7.6 tk/s |
| Среднее время на токен | 123.5 ms | 131.6 ms |
| Загрузка GPU (средняя) | 92% / 88% / 85% / 81% | 96% / 93% / 90% |
Что мы видим? Prompt processing (первичная обработка) быстрее на трёх 3090 — 42.7 против 35.2 tk/s. Причина: более быстрая память GDDR6X и меньшее количество меж-GPU транзакций (3 карты против 4). А вот генерация (TG) чуть быстрее на 4×3080 — 8.1 против 7.6 tk/s. Почему? Потому что модель меньше (67 ГБ против 74 ГБ) и умещается в VRAM с большим запасом — меньше переключений, меньше ожидания PCIe.
--tensor-split для равномерного распределения, но llama.cpp по умолчанию использует round-robin. Если хотите тонкой настройки — попробуйте руками указать количество слоёв через --layer-split. Подробнее мы писали в гайде по GLM-4.7 на ik_llama.cpp.Распределение слоёв: ручная настройка против авто
По умолчанию llama.cpp делит слои поровну между GPU. Но на разных картах с разной пропускной способностью это неоптимально. Я замерил пропускную способность PCIe для каждой карты (используя nvidia-smi pci -s GPU и sysbench memory) и выяснил, что у RTX 3080 слот PCIe 4.0 x16 даёт ~24 GB/s, а у RTX 3090 — ~26 GB/s. Разница небольшая, но на четырёх картах важна балансировка.
Правильное распределение для 4×3080: --layer-split 0.28,0.26,0.24,0.22. Для 3×3090: --layer-split 0.36,0.33,0.31. Это даёт примерно равное время на передачу данных между GPU.
# Пример оптимальной команды для 3×RTX 3090:
./llama-cli \
-m /models/mistral-medium-3.5-128b-q3_k_m.gguf \
-ngl 80 \
--layer-split 0.36,0.33,0.31 \
-t 12 \
-c 8192 \
--mlock
Качество генерации: потеряли ли мы разум?
Я провёл субъективное тестирование — попросил обе модели написать код на Python (парсер логов), перевести абзац на французский и ответить на вопрос по истории. Результаты:
- Q3_K_M выдавал более связные длинные ответы, меньше «галлюцинаций» в историческом вопросе. Но код содержал одну очевидную ошибку (забыл импорт).
- IQ4_XS был менее уверен в фактах, но код написал чище — вероятно из-за того, что меньше битов на вес «срезают» ненужную избыточность, оставляя более сильные паттерны.
В целом, разница в качестве меньше, чем можно ожидать от разницы в 0.5 бита. Но если вам нужна точность до 0.1% — выбирайте Q3_K_M. Если важна длина контекста — IQ4_XS даёт фору.
Энергопотребление и тепло: подведём счётчик
Замерил потребление от розетки во время генерации (ваттметр на 220В). Сборка с 4×RTX 3080 жрала 680 Вт в пике. С тремя 3090 — 720 Вт. Парадокс: три карты потребляют больше, чем четыре. Причина — RTX 3090 имеет TDP 350 Вт против 260 Вт у 3080. Тепловыделение соответственно — готовьтесь к обогреву комнаты. В статье про NVLink для 3090 мы обсуждали, что связка может снизить энергопотребление за счёт более быстрой передачи, но здесь она не используется.
Проблемы, с которыми я столкнулся (и как их избежать)
1 Сломанный tensor-split на 4 картах
llama.cpp b4230 имеет баг: если указать 4 значения в --tensor-split, сумма должна быть равна 100? Нет, это количество мегабайт на GPU. Я сначала указал общий VRAM, и вторая карта получила 0. Правильно — указывать столько, сколько слоёв помещается на GPU, в порядке убывания.
2 Чехарда с numa-балансировкой
На Threadripper 3970X (32 ядра, два CCD) без --numa скорость падает на 30%. Но на 4×RTX 3080 с 4 слотами PCIe, привязанными к разным CCD, нужно явно указывать привязку GPU к NUMA-нодам через CUDA_VISIBLE_DEVICES и numactl. Иначе два GPU висят на одном контроллере памяти, и bottleneck.
NUMA_POLICY=1 numactl --cpunodebind=0 --membind=0 ./llama-bench ...
3 Перегрев задних плат
Четыре двухслотовые карты ставятся вплотную. Верхняя (четвёртая) нагревалась до 88°C и тротлилась. Решение — вставить вентиляторы между картами (120mm noctua на скотч). Или снизить TDP через nvidia-smi -pl 220.
Так что же выбрать? Мой вердикт
Если у вас уже есть RTX 3080 20GB — берите четвёртую, квантуйте в IQ4_XS, и получайте 8.1 tk/s с огромным контекстом. Если вы стартуете с нуля — лучше купите три RTX 3090: проще конфигурация, меньше проблем с распределением слоёв, выше качество ответов.
Но есть третий путь — взять четыре RTX 3090 на 96 ГБ (как в нашем тесте GLM-4.7). Тогда можно запустить эту же модель в Q4_K_M (~90 ГБ) с ещё лучшим качеством и без танцев с бубном. Но это уже совсем другой бюджет.
Часто задаваемые вопросы (FAQ)
Можно ли использовать NVLink для ускорения на 3×RTX 3090?
Технически — да, но только между двумя картами (NVLink bridge). Третья будет работать по PCIe. На практике прирост в TG незначительный (~5%), а вот в prompt processing может быть до 20%. Подробности — в отдельном обзоре NVLink.
Почему на 4×RTX 3080 модель влезает, а на 3×3090 — нет?
Потому что IQ4_XS даёт размер 67 ГБ при сумме VRAM 80 ГБ. А Q3_K_M — 74 ГБ при сумме 72 ГБ. Но модель всё равно работает, потому что llama.cpp может оставить часть слоёв на CPU (offload). Я тестировал с -ngl 99 (все слои на GPU), и на 3×3090 не влезло — пришлось выставить -ngl 80, оставив ~20 слоёв на CPU. Скорость упала до 5.3 tk/s.
Что лучше: IQ4_XS или Q3_K_M для кода?
По моему опыту (тестировал на программирование — Mistral Vibe + Devstral2), Q3_K_M немного стабильнее для генерации длинных функций, а IQ4_XS — для коротких фрагментов. Но разница не критична.
А что дальше? Прогноз на конец 2026
Уже сейчас выходят модели с 256B параметров. Квантование IQ3_XS (2.2 бита) уже тестируется в альфа-версии ik_llama. Это позволит запихнуть такую модель в 64 ГБ. Но качество... Я бы не доверял диагнозам от 2-битных моделей. Лучше подождать выхода новых карт с памятью GDDR7 — например, RTX 5090 32GB (по слухам, выйдет в Q3 2026). Тогда 4 такие карты дадут 128 ГБ — и мы сможем запустить Mistral-Medium-3.5-128B в Q4_K_M с комфортом.
А пока — выбирайте между конфигурациями, описанными выше. И помните: локальный AI — это всегда компромисс между качеством, скоростью и бюджетом. Я перепробовал почти все комбинации (даже RX 7900 XTX), и могу сказать: для Mistral 128B RTX 3090 остаются королями mid-range.