Локальный ИИ · context window · KV-cache
Контекст локальной LLM: 8K, 32K, 64K или 128K — сколько реально нужно
В карточке модели может быть написано 128K или 256K, но это не значит, что стоит сразу выставлять максимум. Чем длиннее контекст, тем больше KV-cache, расход VRAM/RAM, время обработки prompt и риск того, что модель начнёт хуже использовать далёкую информацию. Ниже — практический выбор контекста для чата, RAG, документов, coding-agent и домашнего AI-сервера.
Что такое context window у LLM
Контекстное окно — максимальное количество токенов, которые модель может одновременно учитывать при генерации следующего токена.
В него попадает не только ваш последний вопрос. Современный чат может передавать модели:
- system prompt;
- историю предыдущих сообщений;
- текущий вопрос;
- текст документов;
- результаты RAG retrieval;
- описания tools/functions;
- прочитанные файлы проекта;
- вывод терминала и тестов;
- часть будущего ответа.
Поэтому окно 32K не означает «можно вставить документ на 32 тысячи токенов и ещё получить бесконечный ответ». Все компоненты делят один бюджет.
Что такое 8K, 32K и 128K токенов
K здесь означает тысячи токенов:
Нельзя точно переводить токены в страницы или символы одной формулой: токенизация зависит от языка, модели, кода и структуры текста. Русский, английский и программный код расходуют токены по-разному.
Максимальный context и эффективный context — разные вещи
Если в карточке модели указано 128K, это означает, что архитектура/runtime допускают окно такого размера. Это не гарантирует одинаковое качество на 4K и 120K входа.
В исследовании EMNLP 2025 Context Length Alone Hurts LLM Performance Despite Perfect Retrieval авторы проверяли пять открытых и закрытых моделей на математике, QA и coding. Даже при идеальном доступе ко всей релевантной информации качество снижалось по мере роста входа, оставаясь внутри заявленного context window.
Это соответствует и практическим отзывам local-LLM пользователей: длинное окно часто полезно как вместимость, но модель может хуже удерживать ограничения, связи и детали в очень длинных сессиях. Форумные цифры нельзя считать универсальным benchmark, но сам эффект подтверждается исследованиями.
Сколько контекста ставить: практическая таблица
| Окно | Для чего | Практический комментарий |
|---|---|---|
| 4K | Очень короткий чат, простые запросы | Экономно по памяти, но быстро заканчивается при tools/RAG. |
| 8K | Обычный чат, небольшие инструкции | Хороший минимальный старт для слабого железа. |
| 16K | Чат, небольшие документы, код | Практичный универсальный режим для многих домашних задач. |
| 32K | RAG, coding, длинные диалоги | Хороший баланс вместимости и расхода памяти. |
| 64K | Agents, coding tools, web/research, большие документы | Ollama сейчас прямо рекомендует 64K+ для web search, agents и coding tools. |
| 128K+ | Очень длинные документы/репозитории и специальные workflows | Нужен большой запас памяти и обязательное тестирование качества. |
Что такое KV-cache и почему он съедает память
Transformer не пересчитывает всю предыдущую последовательность с нуля при каждом новом токене. Для уже обработанных токенов сохраняются key/value states — KV-cache.
Чем больше контекст, тем больше таких состояний нужно хранить.
Меньше VRAM/RAM и быстрее prefill.
Больше данных остаётся доступно модели.
Может занимать гигабайты независимо от размера GGUF.
Разработчик llama.cpp в официальной discussion поясняет memory breakdown: веса модели — отдельный buffer, KV buffer — это context, а ещё существуют compute buffers. Поэтому размер GGUF на диске не показывает полный расход памяти.
Насколько может вырасти VRAM из-за контекста
Точный размер KV-cache зависит от архитектуры: числа слоёв, KV-heads, head dimension, типа K/V cache, GQA/MQA и других параметров.
В одном из официальных разборов llama.cpp контекст около 30K для конкретной 32-layer модели создавал KV-cache примерно 3,75 ГБ. Это не универсальная цифра, но хорошо показывает порядок проблемы.
Именно поэтому статья про размер модели и статья про context — разные темы.
Базовые расчёты памяти: сколько RAM и VRAM нужно локальной LLM.
Почему большой контекст замедляет модель
Есть два разных этапа:
Поэтому 128K context может быть «включён», но пользователь будет ждать значительно дольше до начала ответа.
TTFT и tokens/s — не одно и то же
TTFT — time to first token. Большой prompt прежде всего ухудшает TTFT. После начала генерации tokens/s может выглядеть приемлемо, но пользователь уже потратил десятки секунд или минуты на prefill.
Почему больше контекста не означает лучшее качество
Причин несколько:
- релевантные факты становятся меньшей долей общего входа;
- модели хуже используют информацию в некоторых позициях длинного текста;
- много похожих фрагментов создаёт конкурирующие сигналы;
- длинная история содержит устаревшие инструкции и ошибки;
- long-context training не гарантирует одинаковую reasoning-quality на всей длине.
В исследовании EMNLP 2025 снижение качества наблюдалось даже при идеальном retrieval и без обычной проблемы «модель не нашла нужный кусок». То есть сама длина входа может быть фактором деградации.
Как context length работает в Ollama
В актуальной документации Ollama context по умолчанию выбирается в зависимости от доступной VRAM:
Для web search, agents и coding tools документация Ollama рекомендует устанавливать как минимум 64K.
Изменить context глобально
OLLAMA_CONTEXT_LENGTH=32768 ollama serve
Изменить в текущей CLI-сессии
/set parameter num_ctx 32768
Передать через API
{
"model": "qwen3:8b",
"prompt": "Разбери документ",
"options": {
"num_ctx": 32768
}
}
Проверить реальный context и offload
ollama ps
Смотрите столбцы PROCESSOR и CONTEXT. Если после увеличения окна вместо 100% GPU появился CPU/GPU split, вы уже заплатили за длинный context скоростью.
ollama ps, а не полагайтесь на старую инструкцию.
Как выставить context в LM Studio
LM Studio позволяет задавать context_length при загрузке модели. Через REST API это выглядит так:
{
"model": "model-id",
"context_length": 32768,
"flash_attention": true,
"offload_kv_cache_to_gpu": true
}
API LM Studio отдельно различает:
context_length— что вы выделили текущему instance;max_context_length— максимум, заявленный самой моделью.
Контекст в llama.cpp
В llama.cpp используется параметр -c / --ctx-size.
llama-cli -m model.gguf -c 32768
Для server:
llama-server -m model.gguf -c 32768
Важно: в server-сценарии KV pool может использоваться несколькими sequences/slots. Исторически разработчик llama.cpp пояснял: если общий ctx-size 8192 делится между двумя последовательностями, каждая получает максимум около 4096 токенов при полном заполнении.
Сколько ставить для обычного чата
Для обычного домашнего помощника без огромной истории чаще всего достаточно:
Вместо бесконечного роста контекста лучше периодически:
- начинать новый чат;
- суммаризировать старую историю;
- хранить факты отдельно;
- подключать memory/RAG для устойчивых знаний.
Сколько ставить для PDF, документов и RAG
RAG как раз существует для того, чтобы не отправлять целую библиотеку в контекст. Система ищет несколько нужных chunks и передаёт только их.
Если RAG требует 128K на каждый вопрос, сначала проверьте:
- chunk size;
- Top K;
- reranking;
- дубли документов;
- качество retrieval.
Полный гайд: локальная нейросеть для PDF и документов.
Сколько context нужно coding-agent
Coding-agent расходует окно агрессивнее обычного чата. В prompt попадают tool schemas, файлы, diff, ошибки компилятора, команды и история действий.
Но если на 64K модель частично выгружается в CPU, 32K с полным GPU-resident inference может дать лучший рабочий опыт.
Подробнее: локальный ИИ для программирования и Codex.
Почему серверу с несколькими пользователями context обходится ещё дороже
Один пользователь с 32K и четыре пользователя с 32K — не одно и то же.
llama.cpp server поддерживает parallel slots и unified KV pool. При планировании сервера нужно учитывать число одновременных sequences.
Поэтому сервер, который прекрасно держит 64K для одного пользователя, может упереться в память при нескольких одновременных чатах.
Можно ли уменьшить KV-cache квантизацией
Да. llama.cpp поддерживает quantized K/V cache на основных backend, включая CPU, CUDA, ROCm, Metal и Vulkan.
Это позволяет уменьшить память, занимаемую длинным контекстом. В зависимости от backend используются параметры типов cache K/V.
llama-cli -m model.gguf \
-c 65536 \
--cache-type-k q8_0 \
--cache-type-v q8_0
Более агрессивная квантизация cache может сэкономить ещё больше памяти, но её влияние на качество и скорость нужно проверять на конкретной модели/backend.
Модель стала медленной после увеличения context: что проверять
ollama ps или логи llama.cpp. Не ушла ли часть модели/кэша в RAM?
Выделенное окно 64K и реально заполненные 5K — не одно и то же.
64K → 32K или 32K → 16K и сравните TTFT, tokens/s и качество.
Не отправляет ли UI каждый раз огромную историю или лишние документы?
На сервере KV-cache может быть разделён между несколькими slots.
Заявленный max context не гарантирует одинаковое качество по всей длине.
Оптимальный алгоритм настройки context
- Определите реальную задачу.
- Начните с минимального разумного окна.
- Проверьте, помещается ли модель полностью на GPU.
- Измерьте TTFT и generation speed.
- Проверьте несколько реальных длинных запросов.
- Увеличивайте окно только если упираетесь в его предел.
Частые вопросы
Что лучше поставить в Ollama — 8192 или 32768?
Для обычного чата 8K может быть достаточно. Для RAG, coding и длинной истории 32K полезнее, если модель при этом остаётся полностью на GPU.
Почему Ollama показывает только 4096, хотя модель поддерживает 128K?
Текущие defaults Ollama зависят от VRAM: ниже 24 GiB по умолчанию используется 4K. Максимальная способность модели и выделенный runtime context — разные параметры.
Можно ли просто всегда ставить максимальный context?
Технически иногда можно, но это увеличивает память и потенциальный prefill cost. Кроме того, исследования показывают, что качество на очень длинных входах не обязано сохраняться на уровне короткого контекста.
Сколько VRAM съедает 32K context?
Нет универсальной цифры. Размер KV-cache зависит от архитектуры модели, числа слоёв, KV-heads и типа cache. Его нужно измерять на конкретной модели.
Почему 64K context заставил Ollama использовать CPU?
Вероятно, веса + выросший KV-cache перестали помещаться в VRAM. Проверьте ollama ps и уменьшите context.
Что лучше для документов: 128K context или RAG?
Для одного цельного документа long context может быть удобен. Для библиотеки документов RAG обычно рациональнее: он выбирает релевантные фрагменты вместо передачи всей базы.
Что такое context rot?
Так неформально называют ухудшение способности модели надёжно использовать информацию по мере роста контекста. Это не единый официальный параметр, но long-context degradation наблюдается и в исследованиях.
Нужен ли 64K для Codex?
Не всегда, но coding-agent быстро расходует окно на файлы, tools и историю. Ollama сейчас рекомендует не менее 64K для coding tools/agents, если память позволяет.
Q4_K_M и KV-cache q8_0 — одно и то же?
Нет. Q4_K_M относится к квантованию весов GGUF. q8_0 для cache — отдельная настройка представления K/V states.
Живые обсуждения
Почему пользователи перестают верить одной цифре «256K»
В свежих обсуждениях local-LLM сообщества регулярно поднимается разница между «needle in a haystack» и реальной работой: найти одну фразу в 100K токенов проще, чем связно анализировать десятки файлов и сохранять все ограничения задачи.
Это не повод считать long context бесполезным. Правильный вывод другой: оценивайте не только способность модели принять длинный prompt, но и качество вашей реальной задачи на 16K, 32K, 64K и выше.
Связанные гайды
Что читать дальше
Первичные источники
Документация и исследования
- Ollama — Context length
- Ollama — FAQ / num_ctx
- LM Studio — Load model / context_length
- LM Studio — context_length vs max_context_length
- llama.cpp — memory breakdown and KV cache
- llama.cpp — пример расчёта KV-cache
- llama.cpp — quantized K cache support
- EMNLP 2025 — Context Length Alone Hurts LLM Performance Despite Perfect Retrieval
Настройка локальной LLM

