Введение: задача и ключевые результаты
Qwen 3.8 27B в кванте Q4_K_M занимает около 16-17 ГБ видеопамяти. На RTX 4090 с 24 ГБ VRAM остаётся запас, но его недостаточно для длинного контекста при стандартных настройках. Решение - гибкая конфигурация llama.cpp: вынос части кэша в системную память, управление размером батча и активация спекулятивного декодирования MTP.
Практические результаты на RTX 4090 следующие. Без MTP достигается контекст 194 048 токенов при скорости генерации около 40 токенов/с. С включённым MTP контекст сокращается до 131 584 токенов, но скорость возрастает до 65-80 токенов/с. Обе конфигурации используют RAM для кэша (--cache-ram 32768) и контрольные точки контекста (--ctx-checkpoints 32).
Эта статья - пошаговый разбор параметров llama.cpp, которые позволяют выжать максимум из одной видеокарты. Без маркетинговых обещаний, только команды, цифры и выводы.
Предварительные требования и подготовка
Для воспроизведения результатов потребуется:
- Видеокарта NVIDIA RTX 4090 с 24 ГБ VRAM;
- Системная память от 64 ГБ (часть кэша выносится в RAM);
- Свежая версия llama.cpp с поддержкой MTP и квантования KV-кэша драфт-модели;
- Модель Qwen 3.8 27B в квантовании Q4_K_M формата GGUF.
Сборка llama.cpp выполняется стандартно через cmake или make. Для работы с MTP нужна версия, поддерживающая флаг --mtp или эквивалентный ему. Проверить поддержку можно командой llama-cli --help: в выводе должен присутствовать параметр, отвечающий за draft-модель или мультитокенное предсказание.
Файл модели Q4_K_M весит около 16,5 ГБ. Убедитесь, что на диске достаточно места и что системная память не занята другими процессами: при выносе кэша в RAM объём свободной памяти напрямую влияет на максимальный размер контекста.
Ключевые параметры llama.cpp для оптимизации
Три параметра определяют баланс между контекстом и скоростью: размер батча (batch/ubatch), активация MTP и квантование KV-кэша драфт-модели. Дополнительно на стабильность и распределение памяти влияют --cache-ram и --ctx-checkpoints.
Размер батча (batch/ubatch) и его влияние на память
Параметр -b задаёт размер батча для обработки промпта, а -ub - размер микробатча. В llama.cpp микробатч определяет, сколько токенов обрабатывается за один проход через вычислительный граф. Чем меньше ubatch, тем ниже пиковое потребление VRAM во время предзаполнения контекста.
На практике для RTX 4090 с 24 ГБ VRAM используют значения -b 512 -ub 128. Это снижает пиковую нагрузку на память при обработке длинного промпта и позволяет увеличить размер контекста. Уменьшение ubatch до 64 даёт ещё больший запас VRAM, но замедляет предзаполнение. Для интерактивного режима с короткими запросами разница незначительна, для обработки длинных документов - заметна.
Мультимодальное предсказание токенов (MTP): что это и как включить
MTP (Multi-Token Prediction) - механизм спекулятивного декодирования, при котором модель предсказывает несколько токенов за один шаг. Основная модель генерирует черновой вариант, а драфт-модель проверяет и подтверждает его. Если предсказание верно, скорость генерации растёт кратно.
В llama.cpp MTP включается флагом --mtp N, где N - число предсказываемых токенов. Для Qwen 3.8 27B разумное значение - 1 или 2. Большее число увеличивает нагрузку на память и может снизить процент принятия токенов.
Цифры с RTX 4090: без MTP контекст 194 048 токенов при ~40 токенов/с. С MTP контекст падает до 131 584 токенов, но скорость растёт до 65-80 токенов/с. Причина сокращения контекста - дополнительная память, которую занимает драфт-модель и её кэш.
Квантование KV-кэша драфт-модели: q4_0 против q8_0
KV-кэш драфт-модели хранит ключи и значения для спекулятивного декодирования. Его квантование экономит VRAM. Вариант q8_0 сохраняет больше точности, q4_0 - больше памяти.
Тесты показывают: при уровне принятия драфт-токенов 70% разница в качестве между q4_0 и q8_0 минимальна. Это означает, что q4_0 - практичный выбор для RTX 4090: он освобождает видеопамять без заметной деградации ответов. Если приоритет - максимальная точность, используйте q8_0, но будьте готовы к меньшему доступному контексту.
Практические конфигурации и результаты тестов
Ниже - две рабочие команды запуска. Обе используют --cache-ram 32768 для выноса 32 ГБ кэша в системную память и --ctx-checkpoints 32 для периодического сохранения состояния контекста.
Конфигурация без MTP: максимальный контекст
llama-cli \
-m qwen-3.8-27b-q4_k_m.gguf \
-b 512 -ub 128 \
--cache-ram 32768 \
--ctx-checkpoints 32 \
-c 194048 \
--temp 0.7 \
--top-p 0.9Результат: контекст 194 048 токенов, скорость генерации около 40 токенов/с. MTP отключён, поэтому вся VRAM, не занятая весами модели, отдана под KV-кэш основной модели. Часть кэша живёт в RAM, что и позволяет достичь такого размера контекста.
Конфигурация с MTP: приоритет скорости
llama-cli \
-m qwen-3.8-27b-q4_k_m.gguf \
-b 512 -ub 128 \
--cache-ram 32768 \
--ctx-checkpoints 32 \
-c 131584 \
--mtp 1 \
--draft-kv-q4 \
--temp 0.7 \
--top-p 0.9Результат: контекст 131 584 токенов, скорость 65-80 токенов/с. Флаг --draft-kv-q4 включает квантование KV-кэша драфт-модели в q4_0. Если нужна точность q8_0, замените на --draft-kv-q8.
Обе конфигурации стабильны в течение длительных сессий. Контрольные точки контекста (--ctx-checkpoints 32) позволяют восстановить состояние после сбоя без повторной обработки всего промпта.
Анализ компромиссов: контекст против скорости
| Параметр | Без MTP | С MTP |
|---|---|---|
| Размер контекста | 194 048 токенов | 131 584 токенов |
| Скорость генерации | ~40 токенов/с | ~65-80 токенов/с |
| Потребление VRAM | Ниже | Выше (драфт-модель) |
| Сложность настройки | Минимальная | Средняя |
Выбор зависит от сценария. Для обработки длинных документов, анализа кода или работы с большими базами знаний важнее контекст - выбирайте конфигурацию без MTP. Для интерактивного диалога, чат-ботов и задач с короткими запросами приоритетна скорость - включайте MTP.
Если вы работаете с Qwen 3.8 27B в продакшене, стоит обратить внимание на реальные цифры скорости от других пользователей: Qwen3.8-27B: реальная скорость инференса на практике.
Дополнительные советы по оптимизации
Параметр --ctx-checkpoints 32 сохраняет состояние контекста каждые 32 токена. Это создаёт накладные расходы на запись, но защищает от потери прогресса при сбое. Если стабильность не критична, увеличьте значение до 64 или 128.
Флаг --cache-ram 32768 жёстко ограничивает объём кэша в системной памяти. При 64 ГБ RAM это безопасное значение. Если у вас 128 ГБ, можно поднять до 65536 и увеличить контекст ещё сильнее.
Флеш-аттеншен включается флагом --flash-attn, если llama.cpp собран с поддержкой. Он снижает потребление VRAM для длинных последовательностей и ускоряет предзаполнение. На RTX 4090 эффект заметен при контексте от 100 000 токенов.
Альтернативные кванты: Q3_K_M весит около 13 ГБ и оставляет больше VRAM под кэш. Качество ниже, но для черновых задач и тестирования - рабочий вариант. Подробный разбор квантования и запуска Qwen на разных GPU есть в статье Оптимизация llama.cpp для Qwen 3.6 27B на RTX 5090.
Если модель застревает в бесконечных рассуждениях, проверьте параметры reasoning_effort и draft-mtp. Разбор этой проблемы с готовыми командами - в материале Qwen 3.8-27b: почему модель залипает в бесконечных рассуждениях.
Заключение
Qwen 3.8 27B на одной RTX 4090 - рабочая конфигурация. Без MTP вы получаете контекст 194 048 токенов при 40 токенов/с. С MTP - 131 584 токенов при 65-80 токенов/с. Выбор за вами: длинный контекст или высокая скорость.
Начните с команды без MTP, проверьте стабильность на своих задачах. Затем включите MTP и сравните отклик. Параметры batch, ubatch, cache-ram и квантование KV-кэша подстраивайте под доступную память. llama.cpp даёт достаточно рычагов, чтобы найти баланс под конкретный сценарий.