Перейти к содержанию

Контекст LLM и KV-кеш: почему кончается память

При росте контекста движок хранит или резервирует больше данных внимания. Чтобы вернуть запас памяти, проверьте длину окна, число одновременных запросов и тип кеша.

Обновлено Редакция GAW

При генерации нового токена модель снова обращается к предыдущим токенам. KV-кеш сохраняет уже вычисленные ключи и значения внимания, чтобы движок мог использовать их повторно. Веса модели при этом занимают свою часть бюджета.

Коротко

  • Размер окна ограничивает суммарное число токенов, доступных модели.
  • Движок может выделить кеш сразу на всю ёмкость окна или управлять им блоками.
  • Параллельные независимые запросы могут требовать отдельных слотов.
  • Схема внимания и формат кеша влияют на расход памяти на токен.
Из чего состоит бюджет памяти LLMВеса зависят от параметров и разрядности, KV-кеш — от архитектуры, контекста и параллельности. Рабочие буферы и память операционной системы учитываются отдельно.ВесаПараметры × биты / 8KV-кешСлои × головы × контекстРабочий запасБуферы, движок, аллокатор++Расчётная сумма ≠ измеренная VRAMОС и другие приложения требуют отдельной памяти
Лимит окна, параллельные слоты и архитектура модели влияют на резерв памяти.

Во сколько обходится контекст

Возьмём учебную GQA-модель с 32 слоями, 8 KV-головами, размером головы 128 и одинаковыми FP16 K и V. При полном внимании один токен требует 2 × 32 × 8 × 128 × 2 = 131072 байта, или 128 KiB. Для независимых слотов с полным резервом получаются следующие значения.

Ёмкость окна на слотСлотовKV-кеш
4096 токенов10,5 GiB
8192 токена11 GiB
8192 токена44 GiB
32768 токенов14 GiB

Здесь учтены только K и V, без весов, буферов, выравнивания и разделяемого префикса. Если 8192 токена выделены под ввод и ответ вместе, то при входе на 7000 токенов на продолжение и дополнительные служебные токены остаётся около 1192. Клиент может обрезать историю, а сервер может отклонить запрос или применить своё правило обработки переполнения.

Где меняется расчёт

Архитектура или способ храненияЧто меняется
MHA и GQA с полным вниманиемДля MHA число KV-голов совпадает с числом голов запроса. В GQA несколько голов запроса делят одну KV-голову
Оконное и гибридное вниманиеОконные слои могут хранить только нужное окно, полные слои сохраняют более длинную историю. Проверьте реализацию кеша в движке
MLAНекоторые модели используют сжатое латентное представление. Размер выводится из архитектуры и реализации MLA
Выделение блоками и кеш префиксаРеальный расход зависит от занятых блоков и возможного повторного использования общего начала запроса

Проверка в Ollama

  1. Установите размер явно, например /set parameter num_ctx 4096 в интерактивном чате или options.num_ctx в API. Сверьте настройки клиента, поскольку он может задать собственный размер. Фактическое значение по умолчанию зависит от конфигурации и версии.
  2. Для контрольного запуска оставьте один запрос. Проверьте ollama ps и логи после загрузки. Затем повторите с увеличенным окном или настройкой OLLAMA_NUM_PARALLEL сервера. Меняйте по одному параметру.
  3. Если модель частично ушла на CPU или перестала загружаться, уменьшите окно или параллельность. При поддержке движком проверьте меньший формат кеша на одинаковых запросах. Сравните качество и скорость отдельно для промпта и генерации.

Для оценки всей загрузки прибавьте веса и буферы по разбору RAM и VRAM.

Частые вопросы

Входит ли ответ модели в контекстное окно?

Да. Выделите место под системную инструкцию, историю, текущий запрос, служебные токены и продолжение ответа.

Четыре сообщения подряд увеличивают память в четыре раза?

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

Вес модели в Q4 означает, что кеш тоже Q4?

Формат весов и формат кеша настраиваются отдельно. Проверьте конфигурацию и логи своего движка.

Источники

  1. Ollama. Context length и FAQ — Зависимость контекста от настроек и проверка размещения
  2. Ollama. FAQ — num_ctx, параллельность и форматы KV-кеша
  3. vLLM. Hybrid KV Cache Manager — Блоки кеша, полное и оконное внимание
  4. DeepSeek-AI. DeepSeek-V2, arXiv:2405.04434 v5 — Multi-head Latent Attention и сжатое представление кеша
Страница помогла?

Нашли ошибку? ·