Ваш GPU не выдерживает контекст? Добро пожаловать в ад KV cache
Вы тщательно выбрали модель, сквантовали ее в Q4_K_M, с гордостью запустили на своей RTX 3090. Пять сообщений — и OOM killer уже стучится в дверь. Знакомая история? Проблема не в весовых коэффициентах — они лезут в VRAM как милые. Проблема в KV cache. Эта невидимая структура разрастается с каждым новым токеном и пожирает память быстрее, чем вы успеваете нажать Enter.
KV cache — это кэш ключей и значений внимания, который модель использует, чтобы не пересчитывать всё с нуля на каждом шаге. Для каждого слоя, каждого head и каждого токена хранятся два тензора. И они занимают реально много места. Если вы работаете с длинным контекстом (32K, 128K, а то и 1M токенов), KV cache легко может занять больше VRAM, чем сама модель. Я уже молчу про batch inference, когда вы гоните несколько запросов параллельно.
Раньше, чтобы прикинуть объем, приходилось лезть в формулы, копаться в конфигах модели и умножать вручную. А если вы меняете количество слоев или формат квантования — всё по новой. Наш KV Cache Calculator родился именно из этой боли: быстрый, наглядный, не требующий установки. Просто открываете сайт и получаете точную цифру.
Кстати, о невидимых пожирателях памяти: у KV cache есть еще один коварный родственник — фрагментация кучи glibc. Если после долгой работы сервер начинает неожиданно падать с OOM, хотя модель вроде бы не превышает лимит, советую почитать статью «Ваш LLM сервер жрет память как не в себя?».
Что под капотом у KV Cache Calculator
Инструмент считает общий объем KV cache на базе простых, но точных формул, которые используют те же движки, что vLLM или llama.cpp. Вы задаете:
- Модель — можно выбрать из списка предустановленных (Llama 3.1, Qwen 2.5, Mistral, Gemma, DeepSeek и др.) или ввести параметры вручную: размер hidden, количество слоев, число голов внимания (num_attention_heads, num_kv_heads).
- Контекст — максимальная длина последовательности в токенах.
- Число параллельных запросов — для batch inference.
- Тип данных KV cache — FP16, FP8, INT8, INT4 (квантованный кэш).
- Group size — для квантованных вариантов (по умолчанию 32, 64, 128).
После ввода калькулятор выдает:
- Объем KV cache на один запрос (в ГБ).
- Общий объем для заданного batch.
- Процент от общей VRAM (если указать доступный объем).
- Рекомендации по квантованию кэша, чтобы вписаться в лимит.
Вся логика вычислений открыта — можете проверить, подсмотреть формулу. Никаких скрытых телеметрий, всё в браузере.
Сравнение с альтернативами: почему калькулятор — это удобно
| Инструмент | Точность | Удобство | Учет квантования кэша |
|---|---|---|---|
| Ручной расчет (Excel/калькулятор) | Средняя (ошибки при копировании) | Низкое | Нужно самому считать |
| Python-скрипт (например, из transformers) | Высокая | Среднее (нужен код) | Зависит от реализации |
| Калькулятор от Hugging Face (проприетарный) | Высокая | Высокое | Только для их моделей |
| KV Cache Calculator | Высокая (с учетом k/v head ratio) | Очень высокое (все поля под рукой) | Да, любой формат |
Главное преимущество — вы можете быстро перебрать разные сценарии. Хотите понять, сколько VRAM сэкономит переход с FP16 на FP8? Два клика. Нужно прикинуть, выдержит ли ваша видеокарта Mistral Large с контекстом 64K? Одно движение ползунка.
Для тех, кто разбирается в теме: в калькулятор заложена корректная формула расчета KV cache для multi-query attention (MQA) и grouped-query attention (GQA). Многие онлайн-калькуляторы ошибаются, когда num_kv_heads меньше num_attention_heads. Наш считает правильно.
Живой пример: запускаем Llama 3.1 70B на одной RTX 3090
Допустим, вы хотите запустить Llama 3.1 70B в 4-битной квантизации (Q4_K_M) на RTX 3090 с 24 ГБ VRAM. Модель весит около 40 ГБ в весах, но с квантованием — примерно 24 ГБ. Уже натяг. Но вам нужен контекст 32K токенов. Сколько добавит KV cache?
Параметры модели для Llama 3.1 70B: hidden_size=8192, num_layers=80, num_attention_heads=64, num_kv_heads=8 (GQA). Для одного запроса без квантования кэша (FP16):
2 (key + value) * 80 (layers) * 8192 (hidden) * 32768 (context) = 42,9 ГБ — и это только для одного запроса! На 24 ГБ VRAM вы не влезете даже с квантованием весов.
Но вы можете сжать KV cache до INT8. Тогда объем снижается вдвое — до ~21,5 ГБ. Суммарно веса (24 ГБ) + KV cache (21,5 ГБ) = 45,5 ГБ. 24 ГБ VRAM карты не хватит.
Что делать? Либо уменьшить контекст до 16K (тогда INT8 KV cache ~10,7 ГБ, сумма ~34,7 ГБ — всё ещё много), либо использовать INT4 квантование кэша (ещё половинное — 5,4 ГБ для 16K). С INT4 и 16K контекстом: 24 + 5,4 = 29,4 ГБ. Всё равно больше 24. Значит, нужна более мощная карта (например, RTX 4090 24 ГБ тоже не спасёт — она такая же по объёму). Придётся брать две 3090 или одну A6000.
Наш калькулятор делает этот перебор за секунды. Выбираете модель, ставите контекст 32K, квантование кэша INT8, batch=1 — и видите итог. Меняете на INT4 — цифры обновляются. Удобно, когда нужно быстро принять решение: брать ли дополнительную карту или снижать требования.
Кому этот калькулятор спасёт нервы и деньги
- Домашние энтузиасты, запускающие LLM на одном GPU. Вы уже знаете, как трудно впихнуть невпихуемое. Калькулятор покажет предел контекста для вашей видеокарты.
- Администраторы серверов инференса. Планируете развернуть vLLM или TensorRT-LLM для команды? Прикиньте, сколько памяти съест KV cache при 50 параллельных запросах. Это напрямую влияет на выбор GPU и их количество.
- Разработчики RAG-систем. Вы загружаете в контекст десятки документов, итоговый промпт может быть огромным. Если длина контекста превышает допустимый для вашего GPU лимит, вы будете получать ошибки или падение скорости. Калькулятор подскажет оптимальный чанкинг.
- Трейнеры и fine-tuners. Во время обучения (LoRA, QLoRA) KV cache тоже используется — хотя и реже, но память на него тоже нужна. Прикиньте запас.
Кроме того, инструмент полезен, когда вы экспериментируете с новыми архитектурами — например, с Mamba или RWKV, где KV cache может отличаться. Хотя калькулятор сейчас заточен под стандартный transformer, мы планируем добавить поддержку гибридных моделей.
Неочевидный совет: используйте калькулятор до того, как купить GPU
Самая частая ошибка — купить RTX 3090 за $800, думая, что она потянет любую модель. А потом выясняется, что для вашей задачи (контекст 128K, batch=4) нужно 48 ГБ. И 24 ГБ — это лишь половина. Лучше заранее прогнать сценарии на калькуляторе, а потом уже выбирать: брать A6000, две 3090 в NVLink или переходить на облачные инстансы. Поверьте, это дешевле, чем потом перепродавать карту.
Кстати, если вы уже столкнулись с тем, что coding agent «глупеет» на длинном контексте — наша статья «Почему coding agent глупеет на длинном контексте» объясняет, как квантование KV cache влияет на качество. Калькулятор пригодится и там: вы сможете подобрать формат кэша, который не уронит точность, но сэкономит память.
Попробуйте прямо сейчас: откройте KV Cache Calculator, выберите свою модель и посмотрите, на какое контекстное окно вам реально хватит памяти. Скорее всего, вы удивитесь.