𝗞𝗩 𝗖𝗮𝗰𝗵𝗲 𝗮𝗻𝗱 𝗣𝗮𝗴𝗲𝗱𝗔𝘁𝘁𝗲𝗻𝘁𝗶𝗼𝗻: 𝗪𝗵𝘆 𝗬𝗼𝘂𝗿 𝗟𝗟𝗠 𝗦𝗲𝗿𝘃𝗲𝗿 𝗦𝗹𝗼𝘄𝘀 𝗗𝗼𝘄𝗻
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 dan PagedAttention: Apa Fungsinya dan Mengapa Itu Penting
Saat menjalankan Large Language Model (LLM), tantangan utamanya bukan hanya pada kecepatan komputasi, tetapi juga pada manajemen memori. Dua konsep kunci yang menentukan efisiensi inferensi LLM adalah KV Cache dan PagedAttention.
Masalah pada Inferensi LLM
LLM bekerja secara autoregresif. Artinya, untuk menghasilkan satu urutan teks, model menghasilkan satu token pada satu waktu. Setiap token baru yang dihasilkan bergantung pada semua token yang telah dihasilkan sebelumnya.
Dalam proses ini, model harus melakukan perhitungan attention untuk setiap token baru terhadap semua token sebelumnya. Jika kita melakukan perhitungan ini dari awal setiap kali sebuah token baru dihasilkan, prosesnya akan menjadi sangat lambat dan boros komputasi.
Apa itu KV Cache?
Untuk mengatasi masalah efisiensi ini, kita menggunakan KV Cache (Key-Value Cache).
Dalam mekanisme attention, setiap token memiliki representasi berupa Key (K) dan Value (V). Daripada menghitung ulang nilai K dan V untuk semua token sebelumnya setiap kali kita menghasilkan token baru, kita menyimpannya dalam memori.
Dengan adanya KV Cache:
- Kita hanya perlu menghitung K dan V untuk token yang baru saja dihasilkan.
- Kita mengambil (retrieve) nilai K dan V dari token sebelumnya dari cache.
Meskipun KV Cache mempercepat proses secara signifikan, ia memperkenalkan masalah baru: konsumsi memori yang masif.
Masalah Memori: Fragmentasi dan Pemborosan
KV Cache membutuhkan ruang memori yang besar, terutama untuk model dengan konteks yang panjang. Masalah utamanya adalah bagaimana memori ini dialokasikan.
Secara tradisional, memori untuk KV Cache dialokasikan secara kontigu (berurutan) dan statis. Hal ini menyebabkan dua jenis fragmentasi:
- Fragmentasi Internal: Memori dialokasikan berdasarkan panjang maksimum urutan yang mungkin (misalnya 2048 token), padahal urutan yang sebenarnya mungkin jauh lebih pendek. Sisa ruang yang tidak terpakai ini menjadi sia-sia.
- Fragmentasi Eksternal: Karena memori harus dialokasikan dalam blok besar yang berurutan, seringkali terdapat celah-celah kecil di memori yang tidak cukup besar untuk menampung permintaan baru, meskipun total memori yang tersedia sebenarnya cukup.
Pemborosan ini sangat merugikan karena membatasi jumlah permintaan (request) yang dapat diproses secara bersamaan (batch size), yang pada akhirnya menurunkan throughput sistem.
Apa itu PagedAttention?
PagedAttention adalah solusi inovatif yang diperkenalkan (terutama melalui proyek vLLM) untuk mengatasi masalah manajemen memori ini. Konsep ini terinspirasi dari manajemen memori virtual pada sistem operasi.
Dalam sistem operasi, memori fisik tidak harus dialokasikan secara berurutan untuk sebuah proses. Sebaliknya, memori dibagi menjadi blok-blok kecil yang disebut pages.
PagedAttention menerapkan prinsip yang sama pada KV Cache:
- KV Cache dibagi menjadi blok-blok kecil yang disebut pages.
- Blok-blok ini tidak perlu disimpan secara berurutan di memori fisik.
- Sebuah tabel pemetaan (mapping table) digunakan untuk melacak di mana setiap page disimpan.
Dengan cara ini, memori dapat dialokasikan secara dinamis sesuai kebutuhan. Jika sebuah urutan membutuhkan lebih banyak token, sistem hanya perlu mencari page kosong mana pun yang tersedia di memori, tidak peduli di mana lokasinya.
Mengapa PagedAttention Sangat Penting?
PagedAttention membawa perubahan besar dalam efisiensi inferensi LLM:
- Efisiensi Memori yang Tinggi: Meminimalkan fragmentasi internal dan eksternal, sehingga hampir tidak ada memori yang terbuang.
- Throughput yang Lebih Besar: Karena penggunaan memori lebih efisien, kita dapat memuat lebih banyak permintaan dalam satu batch. Ini berarti sistem dapat melayani lebih banyak pengguna secara bersamaan.
- Skalabilitas: Memungkinkan penanganan urutan yang jauh lebih panjang tanpa harus mengalokasikan memori raksasa di awal.
Kesimpulan
KV Cache adalah komponen penting untuk mempercepat inferensi LLM, tetapi ia membawa beban memori yang besar. PagedAttention hadir sebagai solusi cerdas yang mengadopsi teknik manajemen memori sistem operasi untuk mengoptimalkan penggunaan memori tersebut. Dengan mengurangi fragmentasi, PagedAttention memungkinkan inferensi LLM yang jauh lebih cepat, lebih efisien, dan lebih hemat biaya.