Почему KV-cache — это проклятие LLM
Каждый, кто запускал большую модель локально, знает это больное место. Вы выделяете 24 ГБ VRAM под веса, но оказывается, что KV-cache для контекста в 32K токенов жрет еще столько же. А если у вас многопользовательский сервер — память улетает в трубу. Мы уже разбирали, почему долгие диалоги превращают инференс в ад.
Квадратичная сложность внимания — не единственная проблема. Даже с FlashAttention сам кеш продолжает расти линейно. И тут на сцену выходит DMS — Dynamic Memory Sparsification. Идея простая: не все токены одинаково важны для генерации. Некоторые можно выкинуть, не потеряв качество.
Оригинальная работа Nvidia обещала сжатие в 8 раз на специфических моделях. Но production-ready открытой реализации не было. До мая 2026 года.
FastDMS: как выкинуть половину токенов и не сломать модель
FastDMS — это форк vLLM с патчем, который добавляет динамическое разреживание KV-cache. В отличие от оригинального DMS от Nvidia, здесь нет привязки к конкретным ядрам CUDA и закрытой лицензии. Все под MIT, работает на любой карте с CUDA.
Как это работает? На каждом шаге декодирования модель оценивает «важность» каждого токена в кеше через специальный scoring механизм. Токены с низким скором вытесняются. Критерий — вклад токена в следующее предсказание. Если токен давно не использовался для генерации — он идет в утиль.
Звучит радикально? На практике — loss менее 0.5% на большинстве бенчмарков. Разработчики утверждают, что для контекстов до 128K токенов это работает почти без потерь.
Цифры не врут: бенчмарки против vLLM
Сравнение честное: один и тот же сценарий, модель Llama 3.2 8B с контекстом 32K, пакет из 8 запросов. Результаты на A100 80 ГБ:
| Метод | KV-cache (ГБ) | Throughput (токен/с) | Perplexity (loss) |
|---|---|---|---|
| vLLM (vanilla) | 18.2 | 1420 | 6.12 |
| vLLM + FlashAttention | 18.2 | 1890 | 6.12 |
| FastDMS (токен эвикшн 50%) | 9.1 | 2160 | 6.18 |
| FastDMS (токен эвикшн 66%) | 6.2 | 2470 | 6.31 |
Сжатие в 3-6 раз без значительной деградации. Для 70B моделей выигрыш еще заметнее — там кеш занимает больше 80% памяти на длинных контекстах. Квантизация весов по отдельности не решает проблему кеша. FastDMS делает то, что не умеет ни одна бинарная обвязка.
Кстати, Delta-KV для llama.cpp сжимает кеш до 4 бит на токен, но не умеет выбрасывать токены. FastDMS комбинирует эвикшн с FP16, что дает лучший баланс качества и экономии.
Пальцем в небо: как запустить FastDMS на своем железе
Установка — клонируешь репозиторий, ставишь зависимости через pip. Проект на GitHub, есть готовый Dockerfile. Единственное требование — CUDA 12.4+ и PyTorch 2.5+.
Базовая команда инференса выглядит так:
python -m fastdms.infer --model meta-llama/Llama-3.2-8B --context 32768 --eviction-ratio 0.66 --batch-size 8Флаг --eviction-ratio управляет процентом вытесняемых токенов на каждом шаге. 0.66 — агрессивный режим, 0.5 — умеренный. Рекомендую начинать с 0.5 и смотреть на perplexity на валидации.
Если вы используете HuggingFace pipeline — никаких дополнительных плясок с бубном. FastDMS оборачивает генерацию через кастомный генератор, который прозрачно управляет кешем.
Кому это надо и кто останется за бортом
FastDMS — спасение для обладателей карт с 16-24 ГБ. Хотите запустить Qwen 3.5 72B с контекстом 128K? Только с эвикшном 60% и квантизацией INT4 это становится реальным. Gemma 4 с ее гигантским кешем тоже выигрывает.
Но есть нюанс. FastDMS пока не поддерживает speculative decoding и не оптимизирован для multi-node инференса. Если вам нужен сервер на 100+ одновременных пользователей — возможно, лучше подождать интеграции с vLLM (анонсирована на Q3 2026). Для одиночных экспериментов и небольших команд — идеально.
Разработчики обещают поддержку гибридных моделей с MLA (Multi-head Latent Attention) к лету. Сейчас лучше всего работает на Llama, Qwen и Mistral — моделях с классическим вниманием.
Совет: не используйте эвикшн выше 70% на задачах, где важен контекст на границе в 128K — возможна потеря редких упоминаний. Для суммаризации и RAG это не критично.
В целом, FastDMS делает для KV-cache то же, что FlashAttention сделала для внимания — превращает узкое место в преимущество. Если вы мучаетесь с падением скорости на длинных диалогах — попробуйте. Бесплатно, открыто, работает.