Qwen 27B на 3090: AutoRound vs llama.cpp - локальный агент | AiManual
AiManual Logo Ai / Manual.
30 Апр 2026 Гайд

Qwen 27B на 3090 как локальный агент: успешные конфигурации и подводные камни (AutoRound vs llama.cpp)

Полный гайд по запуску Qwen 3.5 27B на одной RTX 3090. Сравнение AutoRound и llama.cpp, speculative decoding до 100+ tok/s, типичные ошибки и их решения.

Зачем вам 27B на одной 3090?

Qwen 3.5 27B — одна из лучших моделей для локальных агентов. Но в FP16 она весит ~54 GB, а ваша RTX 3090 — всего 24. Казалось бы, миссия невыполнима. Однако есть два пути: AutoRound (квантование с калибровкой) и llama.cpp (классические GGUF). Оба позволяют ужать модель до 15-18 GB, но с разными последствиями. Я перепробовал оба на двух 3090 и на одной, и вот что реально работает.

Важно: Все тесты проводились на Qwen 3.5 27B (актуальная версия на апрель 2026) с драйверами 560.xx и CUDA 12.8. Датасеты для калибровки — подборка agent-specific диалогов.

Проблема: 24 GB — это приговор?

Полная модель не влезает. Даже с квантованием 8 бит (AWQ или GPTQ) — около 27 GB, что всё равно не помещается в одну карту. На двух 3090 — да, но статья про одну карту, ибо многие хотят оставить вторую для других задач или у них всего одна. Решение — 4-битное квантование. Здесь и начинается война: AutoRound vs llama.cpp.

Решение 1: AutoRound — алхимия точности

AutoRound (Intel, 2024-2025) — это метод квантования, который подгоняет веса под калибровочный датасет, минимизируя потерю перплексии. На Qwen 27B даёт почти родное качество при 4 битах. Но есть нюанс: для инференса нужен либо auto-round pipeline (который жрёт память), либо экспорт в формат GPTQ. Я пробовал оба.

1Квантование через AutoRound

git clone https://github.com/intel/auto-round.git
cd auto-round
pip install -v .

auto-round --model Qwen/Qwen3.5-27B --bits 4 --group_size 128 --dataset agent_mix --output ./qwen27b_4bit

Внимание: Калибровочный датасет должен быть репрезентативным для ваших задач. Если планируете tool calling — включите примеры с функциями. Иначе модель начнёт галлюцинировать при вызове инструментов. Подробнее про настройку tool calling — в нашем гайде.

Результат: модель занимает ~15 GB на диске и при загрузке — 12-14 GB VRAM. Но беда в том, что родной инференс AutoRound использует много памяти из-за динамических вычислений. На одной 3090 контекст 4K — уже почти упёрся в лимит. Выход — экспорт в GPTQ и использование auto_gptq.

from auto_round import export_to_gptq
export_to_gptq("path_to_quantized", "qwen27b_4bit_gptq")

# затем загружаем через transformers
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained("qwen27b_4bit_gptq", device_map="auto")

Скорость: ~45-50 tok/s при контексте 2K, но при увеличении до 8K падает до 25-30. Speculative decoding не особо помогает, так как драфт-модель тоже ест память. Итог: качество отличное, но производительность средняя.

Решение 2: llama.cpp — проверенный боец

llama.cpp с GGUF — стандарт индустрии. Для Qwen 3.5 27B лучше всего взять квантование Q4_K_M — баланс скорости и качества. Вес ~16 GB, влезает в 24 GB с запасом для контекста 8K+.

2Установка и запуск

# Собираем с поддержкой CUDA
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
cmake -B build -DGGML_CUDA=ON
cmake --build build --config Release -j

# Скачиваем готовый GGUF (например, от TheBloke)
wget https://huggingface.co/TheBloke/Qwen3.5-27B-GGUF/resolve/main/qwen3.5-27b-q4_k_m.gguf

# Запускаем сервер
./build/bin/server -m qwen3.5-27b-q4_k_m.gguf -ngl 40 --port 8080

Настройка -ngl (число слоёв на GPU) зависит от вашей задачи: 40 слоёв (из 80) на GPU, остальные на CPU — хороший старт. Если нужно больше контекста — уменьшайте до 30-35.

Скорость: ~55-65 tok/s на контексте 4K. А теперь главный козырь — speculative decoding.

Speculative decoding: 100+ tok/s

Идея: маленькая модель (например, Qwen 2.5 7B Q4_K_M) генерирует черновики, большая проверяет. На 3090 это работает отлично, если драфт-модель тоже на GPU.

./build/bin/server -m qwen3.5-27b-q4_k_m.gguf \
    --draft-model qwen2.5-7b-q4_k_m.gguf \
    --draft-ngl 40 \
    -ngl 40 \
    --port 8080
💡
Потребление VRAM: 16 GB (27B) + 5 GB (7B) = 21 GB. Остаётся ~3 GB для контекста. Реальная скорость — 90-110 tok/s при длине генерации 512 токенов. Это позволяет использовать агента в реальном времени.

Но есть подводные камни. Во-первых, не все модели-черновики совместимы. Лучше брать ту же серию Qwen. Во-вторых, при tool calling speculative decoding может лагать — драфт-модель генерирует неправильные вызовы, большая их отклоняет, теряется ускорение. Решение — использовать --draft-min-tokens и отключать speculative для первых токенов. Как настроить — в нашей статье про TPS.

Сравнение: AutoRound vs llama.cpp

ПараметрAutoRound (GPTQ)llama.cpp (Q4_K_M)
Качество (perplexity)Лучше (~0.05 loss)Отлично (~0.1 loss)
Скорость (без spec.)25-50 tok/s55-65 tok/s
Скорость (spec. dec.)30-60 tok/s90-110 tok/s
Макс. контекст (24GB)4-6K8-12K
Tool calling стабильностьСредняя (зависит от калибровки)Высокая (без доп. действий)
Сложность настройкиВысокая (нужны свои датасеты, экспорт)Низкая (скачал и запустил)

Наш вердикт: Для локального агента на одной 3090 — llama.cpp+GGUF+speculative decoding. AutoRound имеет смысл, если вам критично каждое 0.05 perplexity (например, для научных расчетов), но для агентов с tool calling важнее скорость и стабильность.

Подводные камни и ошибки

1. «Бессмыслица после 2-3 ответов»

Классическая проблема: модель начинает галлюцинировать, повторять одно и то же. Обычно из-за неправильного chat template или переполнения контекста. В llama.cpp убедитесь, что используете шаблон --chat-template qwen. Подробный разбор — в этой статье.

2. «Available context size» ошибка

При запуске с большим контекстом (16K) llama.cpp может выдать ошибку. Ограничение — физическая память. На одной 3090 с Q4_K_M максимальный контекст — 12K без speculative, 8K с ним. Если нужно больше — используйте --ctx-size 8192 и --rope-scaling. Диагностика — в гайде для 35B, но принципы те же.

3. Tool calling не работает

Qwen 3.5 требует точного форматирования функций. Если ваша GGUF-сборка не поддерживает грамматики, инструменты будут игнорироваться. Лучший способ — использовать llama-server с эндпоинтом /chat/completions и передавать функции в теле запроса. Пример конфигурации агента — в статье про Tool Calling.

4. Speculative decoding не ускоряет

Если драфт-модель слишком маленькая (например, 1B), она будет часто ошибаться, и ускорения не будет. Оптимально — 7B из той же семьи. Также проверьте, что обе модели загружены на GPU (флаг -ngl).

Multi-agent сценарии: одна 3090 — не приговор

Многие думают, что для роя агентов нужны десятки гигабайт. На одной 3090 можно запустить 3-4 агента на базе Qwen 27B, если использовать batch inference в llama.cpp. Флаг --parallel 4 позволяет обрабатывать несколько запросов одновременно, память делится. Скорость упадёт, но для асинхронных задач (например, анализ документов) это приемлемо. Подробнее — в гайде по рою агентов.

Если же вам нужен один мощный агент с контекстом 32K — увы, 3090 не тянет. Придётся либо докупить вторую, либо использовать облачные инстансы (но это уже не локально).

Итоговые рекомендации

Берите llama.cpp+GGUF+speculative decoding. Почему? Простота, скорость, стабильность. AutoRound — для тех, кто готов жертвовать производительностью ради 1-2% качества. Но на одной карте разница в скорости перевешивает. Не забудьте про правильный чат-шаблон — ссылка на руководство.

И последнее: не гонитесь за 100+ tok/s, если агент работает качественно. Для большинства задач (кодирование, рерайтинг, поиск) 50 tok/s — уже комфортно. А вот для real-time диалогов — да, пригодится speculative decoding.

Подписаться на канал