KV кеш
Тема дорожной карты · Большие языковые модели (LLM)
KV кеш (key-value кеш) представляет собой важный механизм, который значительно повышает производительность больших языковых моделей (LLM) за счет кеширования результатов вычислений. Этот кеш хранит тензоры key и value, которые каждый слой трансформера посчитал для уже сгенерированных токенов, позволяя избежать пересчета этих значений на каждом шаге авторегрессии. Это значительно уменьшает временные затраты на декодирование, превращая его сложность из O(n²) в O(n) на токен, при этом увеличивая потребление памяти GPU. Потребление памяти растет пропорционально формуле layers × heads × head_dim × seq_len × batch × dtype.
Как это работает
KV кеш работает на основе механизма кеширования, который сохраняет результаты вычислений для последующего использования. Это позволяет избежать повторных вычислений и значительно ускоряет процесс декодирования. Современные движки, такие как vLLM PagedAttention, используют стратегии, такие как MQA (Multi-query Attention) и GQA (Global Query Attention), а также квантизацию, чтобы минимизировать использование памяти. Квантизация, например, преобразует значения с плавающей запятой (FP16) в целочисленные значения (INT8/INT4), что позволяет значительно сократить потребление памяти VRAM. Механизмы управления кешем, такие как PagedAttention, позволяют эффективно переиспользовать общий префикс между запросами, что также помогает уменьшить потребление памяти.
Когда применять
KV кеш особенно полезен в тех случаях, когда необходимо оптимизировать использование памяти VRAM и повысить производительность модели. Квантизация, например, может быть применена везде, где это возможно, поскольку она обычно теряет менее 2% качества, но в то же время сокращает потребление памяти VRAM в четыре раза. Предсказательное декодирование (speculative decoding) особенно эффективно, когда нагрузка вычислительная (compute-bound), то есть когда модель может генерировать больше токенов в секунду на той же GPU. Кроме того, кеширование промптов на уровнях приложения и поставщика может значительно улучшить производительность. Профилирование (например, встроенные метрики vLLM, nvidia-smi, nvprof) до оптимизации также важно для определения точек, которые могут быть узким местом.
Типичные ошибки
Однако, при использовании KV кеша важно избегать типичных ошибок. Например, агрессивное квантизирование (Q2/Q3) может значительно ухудшить качество модели на сложных задачах. Предсказательное декодирование с несоответствующими моделями (draft/target) может привести к замедлению процесса. Кроме того, переполнение памяти (OOM) на длинных контекстах может быть проблемой, особенно если не используется стратегия PagedAttention. Наконец, перетюнинг небольшого процента запросов за счет общего случая также может привести к снижению производительности.