𝗞𝗩 𝗖𝗮𝗰𝗵𝗲 𝗮𝗻𝗱 𝗣𝗮𝗴𝗲𝗱𝗔𝘁𝘁𝗲𝗻𝘁𝗶𝗼𝗻: 𝗪𝗵𝘆 𝗬𝗼𝘂𝗿 𝗟𝗟𝗠 𝗦𝗲𝗿𝘃𝗲𝗿 𝗦𝗹𝗼𝘄𝘀 𝗗𝗼𝘄𝗻

Your LLM server is running slow.

You deployed a 70B model on four A100 GPUs. Everything looks fine at 8 AM. By lunch, latency doubles. You check your memory. Most of it is taken up by "tensor buffers." These are actually cached states from old conversations.

This is the KV cache problem. It is the biggest bottleneck in production LLM serving.

What is the KV cache?

Every transformer model generates tokens one by one. To create a new token, the model needs the Key and Value tensors from all previous tokens. Recomputing these every time is too slow. Instead, the engine stores them. This storage is the KV cache.

The memory problem:

For a Llama 3.1 70B model, a single 4096-token sequence needs about 1.3 GB of memory.

If you have 256 users at once, you need 336 GB of memory. This is more than four A100 GPUs can hold. The KV cache grows so fast that it often uses more memory than the model weights themselves.

Traditional memory management fails because:

  • Internal fragmentation: You allocate space for 4096 tokens but only use 300. You waste 93% of that space.
  • No sharing: Two users with the same system prompt each store their own copy of that prompt.
  • All-or-nothing eviction: When memory runs out, you must move the entire sequence to the CPU. This stalls the GPU.

How PagedAttention fixes this:

PagedAttention works like an operating system. It divides the KV cache into small, fixed-size blocks called pages.

This solves three main issues:

  • On-demand allocation: A sequence only takes up pages as it grows. You do not waste memory on unused capacity.
  • Shared prefix support: Multiple users can share the same physical pages for a common system prompt. This uses "copy-on-write" logic to save massive amounts of memory.
  • Fine-grained eviction: When memory is full, the system moves small pages to the CPU instead of huge sequences.

The Result:

Using PagedAttention (the tech inside vLLM) can increase throughput by 2x to 4x compared to traditional methods.

When to use it:

  • High concurrency.
  • Sequences of different lengths.
  • Prompts that share the same start.

When to skip it:

  • Single-user local inference.
  • Very small models.
  • Tasks where every sequence is exactly the same length.

KV Cache та PagedAttention: що вони роблять і чому це важливо

Коли ви використовуєте велику мовну модель (LLM), процес генерації тексту відбувається крок за кроком. Кожен новий токен, який генерує модель, базується на всіх попередніх токенах у послідовності. Цей процес називається авторегресійною генерацією.

Однак цей процес створює значні обчислювальні та пам'ятні витрати. Саме тут на допомогу приходять дві ключові технології: KV-кеш та PagedAttention.

Що таке KV-кеш?

Щоб зрозуміти KV-кеш, спочатку потрібно згадати, як працює механізм Attention (уваги) у трансформерах. У кожному кроці генерації модель обчислює три вектори для кожного токена:

  1. Query (Запит)
  2. Key (Ключ)
  3. Value (Значення)

Механізм Attention використовує Query поточного токена, щоб порівняти його з Key усіх попередніх токенів, а потім використовує отримані ваги для обчислення зваженої суми векторів Value.

Проблема: Без кешування моделі довелося б повторно обчислювати вектори Key та Value для всіх попередніх токенів на кожному новому кроці генерації. Це було б неймовірно неефективно.

Рішення: KV-кеш дозволяє зберігати обчислені вектори Key та Value для кожного токена в пам'яті. Таким чином, на наступному кроці генерації моделі потрібно обчислити лише Query, Key та Value для нового токена, а для всіх попередніх — просто взяти готові дані з кешу.

Це значно прискорює інференс (виведення), але створює нову проблему: управління пам'яттю.

Проблема: Фрагментація пам'яті

KV-кеш займає величезну кількість відеопам'яті (VRAM). Наприклад, для моделі з 70 мільярдами параметрів, KV-кеш може займати десятки гігабайтів.

Традиційні методи управління пам'яттю під час інференсу мають два великі недоліки:

  1. Внутрішня фрагментація (Internal Fragmentation): Оскільки довжина відповіді моделі невідома заздалегідь, системи часто виділяють пам'ять "із запасом" (наприклад, під максимальну довжину контексту). Якщо модель згенерує лише 10 токенів замість 2048, решта виділеної пам'яті просто пропадає даремно.
  2. Зовнішня фрагментація (External Fragmentation): Пам'ять виділяється великими неперервними блоками. Коли різні запити завершуються, у пам'яті залишаються "дірки" різного розміру. Може виникнути ситуація, коли загальної вільної пам'яті достатньо, але вона не є неперервною, тому новий запит не може бути обслугований.

Ці неефективності призводять до того, що ми не можемо використовувати всю доступну пам'ять для обробки великої кількості запитів одночасно, що знижує пропускну здатність (throughput) системи.

Що таке PagedAttention?

PagedAttention — це інноваційний метод управління пам'яттю, представлений у бібліотеці vLLM. Його концепція натхненна віртуальною пам'яттю в операційних системах.

В операційних системах пам'ять не обов'язково має бути неперервною; вона розбивається на маленькі блоки, які називаються сторінками (pages). PagedAttention робить те саме для KV-кешу.

Як це працює?

Замість того, щоб виділяти один величезний неперервний блок пам'яті для кожного запиту, PagedAttention:

  1. Розбиває KV-кеш на блоки: Кеш розбивається на маленькі, фіксовані за розміром блоки (наприклад, на 16 токенів у кожному).
  2. Використовує таблицю блоків: Система зберігає таблицю, яка пов'язує логічні токени запиту з їхніми фізичними місцями в пам'яті.
  3. Дозволяє неперервну роботу з розрідженою пам'яттю: Фізичні блоки можуть знаходитися в будь-якому місці відеопам'яті, але для моделі вони виглядають як одна послідовність.

Це вирішує обидві проблеми фрагментації:

  • Немає внутрішньої фрагментації: Блоки виділяються лише тоді, коли вони потрібні. Якщо запит закінчується, блоки просто звільняються.
  • Немає зовнішньої фрагментації: Оскільки блоки фіксованого розміру і можуть бути розкидані по всій пам'яті, нам не потрібно шукати великі неперервні ділянки.

Чому це важливо?

Впровадження PagedAttention призвело до революції в ефективності інференсу LLM. Основні переваги включають:

  • Набагато вища пропускна здатність: Оскільки ми майже не витрачаємо пам'ять даремно, ми можемо обробляти набагато більше запитів одночасно (більший batch size).
  • Ефективне використання ресурсів: Ви можете запускати більші моделі або використовувати довший контекст на тому самому обладнанні.
  • Динамічне керування: Система може гнучко розподіляти ресурси між різними користувачами в режимі реального часу.

Без KV-кешу інференс був би занадто повільним, а без PagedAttention він був би занадто неефективним для масштабного використання. Разом вони роблять сучасні ШІ-сервіси швидкими, доступними та масштабованими.


Source: https://dev.to/tech_nuggets/kv-cache-and-pagedattention-what-they-do-and-why-they-matter-jce

Optional learning community: https://t.me/GyaanSetuAi