"KIV: миллион токенов контекста на видеокарте за 600 долларов"

KIV: миллион токенов контекста на видеокарте за 600 долларов

Вчера на r/MachineLearning выложили проект, который заслуживает внимания. KIV — middleware для HuggingFace, который позволяет запускать LLM с контекстом в миллион токенов на обычной RTX 4070 с 12 ГБ VRAM. Без переобучения модели. Без облака. Три строки кода.

Почему это важно

Контекстное окно — бутылочное горлышко локальных моделей. Стандартный KV-кеш растёт линейно: каждый токен хранит Key-Value пару для каждого слоя и головы внимания. На RTX 4070 всё заканчивается примерно на 8K токенов — VRAM забита.

Квантизация модели до 4 бит? Помогает с весами, но KV-кеш остаётся полноразмерным. Sliding window? Работает, но модель забывает старый контекст. Облачные API? Данные покидают периметр.

KIV предлагает другое: хранить весь контекст, но разместить его на разных уровнях памяти.

Как это работает

Идея архитектурно простая. KIV делит кеш на три уровня:

**Hot cache (VRAM)** — последние ~2048 токенов, полные K/V-пары. Фиксированные 12 МБ.

**Page summaries (VRAM)** — сжатые «оглавления» старых токенов. Каждые 128 токенов группируются в страницу, для которой вычисляется среднее Key-вектора. На миллионе токенов — 24 МБ.

**Cold storage (CPU RAM)** — полные K/V-векторы в закреплённой памяти. 5.8 ГБ на миллион токенов.

При генерации каждого нового токена KIV делает двухэтапный поиск: сначала находит 32 самых релевантных страницы через page summaries (быстро, на GPU), затем из этих страниц выбирает 256 самых нужных токенов (подгружая Key-векторы из CPU). Для них подтягиваются V-векторы, и финальное внимание считается по 2304 токенам.

Ключевой трюк — асимметрия K и V. Key-векторы структурно регулярны и поддаются индексации. Value-векторы — нет, но их нужно подгружать только для отфильтрованных токенов.

Числа

Тестовый стенд: i7-13700K, 64 ГБ DDR5, RTX 4070.

- 4K контекст: 12.9 tok/s, 12 МБ VRAM - 100K контекст: 8.2 tok/s, 12 МБ VRAM - 1M контекст: 4.1 tok/s, 12 МБ VRAM, 5.8 ГБ CPU RAM

GPU-память под кеш не меняется. Вообще. 12 МБ при 4K и 12 МБ при миллионе. Скорость падает в 3 раза при росте контекста в 250 раз.

Needle-in-haystack: 70/70 тестов пройдены.

Интеграция

KIV — drop-in замена. Работает с любой моделью HuggingFace на DynamicCache:

```python from kiv import KIVConfig, KIVMiddleware middleware = KIVMiddleware(model, KIVConfig()) middleware.install() ```

Есть Ollama-совместимый сервер — подключается к Open WebUI, Continue, Cline без модификации клиентов.

Проверенные модели: Gemma 2/3/4, Qwen2.5, Llama 3, Mistral, Phi-3.5, Cohere Command R.

Зачем это бизнесу

Три сценария, которые становятся реальными на локальном железе:

1. **Анализ документов** — контракт на 300 страниц целиком в контексте, без RAG-костылей. 2. **Код** — репозиторий на 50+ файлов в одном промпте. Модель видит архитектуру. 3. **Агенты с длинной памятью** — полная история диалога вместо суммаризации.

И всё это без отправки данных на чужие серверы.

Ограничения

- Однопользовательский режим — параллельная генерация не поддерживается. - На экстремальных длинах retrieval иногда промахивается. - CPU RAM растёт линейно: при 16 ГБ системной памяти потолок ~500K токенов. - Первый prefill с длинным контекстом — около 4 минут.

Вместо итога

KIV не заменит Claude с миллионным контекстом по качеству. Но он решает другую задачу: большой контекст на локальном железе, без утечки данных. Фундаментальная идея — K-векторы как поисковый индекс — выглядит как направление, в котором будет двигаться весь инференс.

А вы работали с моделями на длинном контексте локально? Какие задачи решали?

1