KV cache снова в игре. На этот раз — с бинарным сохранением
Представьте, что вы час беседовали с моделью Llama 70B. Обсудили проект, набросали план, проанализировали код. Потом закрыли терминал. А утром всё начинается заново. Контекст потерян. История — ноль. Модель снова нужно "прогревать". Знакомо?
Именно эту проблему решает Binary KV cache. Не очередное квантование весов. Не магия сжатия. А радикально простой подход: сохраняем вычисленный контекст (тот самый KV cache) в бинарный файл. Загружаем его обратно — мгновенно. Без пересчёта. Без потерь.
KV cache — это промежуточные вычисления, которые модель хранит в памяти во время генерации. Без него каждый новый токен требовал бы пересчёта всей истории, что убило бы производительность. Binary KV cache сохраняет эти вычисления на диск в бинарном формате.
Как работает этот инструмент и почему он быстрее альтернатив
В основе — интеграция с llama.cpp. Инструмент модифицирует процесс инференса: после завершения сессии KV cache не уничтожается, а сериализуется в компактный бинарник. При следующем запуске — десериализуется обратно в VRAM.
Что было до этого? Сравниваем подходы
Раньше для сохранения контекста использовали:
- Полный перезапуск — самый простой и самый медленный способ. Теряли всё.
- Сохранение истории в текстовом виде — модель перечитывает весь диалог, пересчитывая KV cache с нуля. На 10к токенах это минуты ожидания.
- Квантование KV cache (как в Q8 для vision-моделей) — экономит память, но требует пересчёта при загрузке и теряет точность.
| Метод | Экономия VRAM | Время восстановления | Точность |
|---|---|---|---|
| Binary KV cache | 67% (сохранение на диск) | Мгновенно (загрузка с SSD) | Полная (без потерь) |
| Q8 KV cache | 50% | Требуется пересчёт | Потери 1-3% |
| Текстовое сохранение | 100% (ничего не хранится) | Медленно (пересчёт всего) | Полная |
Цифры, которые заставляют задуматься
Возьмём Llama 3 70B с контекстом 32к токенов. KV cache в FP16 занимает примерно:
- 16 ГБ VRAM — только для кэша. Плюс сами веса модели.
- Binary файл на диске: 5.3 ГБ (сжатие через эффективную упаковку структур).
- Экономия VRAM: 10.7 ГБ освобождается сразу после сохранения.
- Время загрузки с NVMe: 2-3 секунды против 40+ секунд пересчёта.
Не путайте с освобождением памяти во время работы! Binary KV cache сохраняет контекст ПОСЛЕ сессии, чтобы не вычислять его заново в следующий раз. Во время работы модели кэш всё ещё живёт в VRAM.
Где это работает уже сейчас
Интеграция с llama.cpp означает поддержку всей экосистемы:
- Llama 2/3 всех размеров
- Mistral, Mixtral, Gemma
- Qwen, Phi-3
- Любые модели в формате GGUF
Для vision-моделей типа Qwen3VL тоже работает, но там есть нюансы с патчами изображений. (Если интересно — читайте отдельный разбор по vision).
Как выглядит использование на практике
1 Установка и компиляция
Клонируете форк llama.cpp с поддержкой binary KV. Компилируете с флагами для CUDA (если есть GPU) или Metal для Mac. Никаких Python-зависимостей — чистый C++.
2 Первая сессия с сохранением
Запускаете модель как обычно, но добавляете флаг --save-kv-cache. После завершения диалога инструмент сохранит бинарник в указанную директорию.
3 Восстановление контекста
При следующем запуске указываете --load-kv-cache с путём к файлу. Модель загружает кэш в VRAM и сразу готова продолжать диалог с того же места.
Кому этот инструмент нужен прямо сейчас
Не всем. Если вы запускаете модель раз в неделю на 100 токенов — не тратьте время.
А вот если:
- Работаете с длинными документами — юридические тексты, кодовая база, исследования. Контекст в 100к токенов пересчитывать каждый раз — издевательство.
- Разрабатываете AI-агентов с долгоживущей памятью. Как в BuddAI, но без постоянной нагрузки на VRAM.
- Исследуете модели с ограниченным VRAM — например, пытаетесь впихнуть 70B в 10 ГБ видеопамяти. Освобождение кэша между сессиями критично.
- Тестируете разные промпты на одном контексте — сохранили вычисленный документ, быстро проверяете гипотезы.
Подводные камни и ограничения
Идеальных решений не бывает. Вот что раздражает в текущей реализации:
- Размер файлов — 5+ ГБ на дискете это много. Хотя дешевле, чем апгрейд VRAM.
- Нет инкрементального сохранения — нельзя добавить 100 токенов к существующему кэшу. Только перезаписать целиком.
- Зависимость от llama.cpp — не работает с Ollama, vLLM, Text Generation WebUI напрямую.
- Ручное управление файлами — сами решаете, когда сохранять, когда удалять.
Что будет дальше? Прогноз от практика
Binary KV cache — промежуточное решение. Настоящий прорыв случится, когда появятся:
- Гибридный подход — кэш живёт частично в RAM (системная память), частично на SSD, с прозрачной подгрузкой. Как в играх.
- Стандартизация формата — чтобы кэш от одной версии модели работал с другой (с конвертацией).
- Интеграция в популярные обёртки — представьте флаг --persist-context в Ollama.
Пока же binary KV cache — самый быстрый способ сохранить и восстановить гигантский контекст без потерь. Грубо, эффективно, работает.
Если вы уже сталкивались с проблемами долговременной памяти в LLM — попробуйте этот инструмент. Он не решит все проблемы, но хотя бы избавит от ежеминутного пересчёта одних и тех же токенов.
А если у вас есть лишние 10 ГБ VRAM — можете продолжать игнорировать. Пока не закончатся.