Apa itu KV cache dalam inferensi LLM?
KV cache adalah memori tempat model bahasa decoder-only menyimpan vector key dan value dari setiap token yang sudah diproses, sehingga token baru hanya perlu menghitung key dan value-nya sendiri. Saat menghasilkan teks, model mengeluarkan satu token per forward pass, dan query setiap token baru harus membaca semua token sebelumnya. Tanpa cache, setiap pass akan menghitung ulang key dan value untuk seluruh prefix.
Semua server LLM produksi memakai KV cache, mulai dari Hugging Face Transformers hingga vLLM, TensorRT-LLM, dan llama.cpp. Cache mengubah proses menghasilkan teks dari komputasi ulang yang kuadratik menjadi satu pass pendek per token, tetapi memakan memori yang tumbuh mengikuti panjang context dan batch size. Memori itu, yang sering lebih besar dari weight model, membatasi jumlah pengguna yang bisa dilayani satu GPU sekaligus dan panjang context yang bisa ditampungnya. Karena itulah ada grouped-query attention, cache quantization, dan paged memory.
Ide utama
- KV cache menyimpan key dan value setiap token sehingga keduanya dihitung sekali, bukan di setiap langkah.
- Causal mask menjamin key dan value di cache tidak pernah berubah saat token baru ditambahkan.
- Prefill mengolah prompt secara paralel dan bersifat compute-bound, sedangkan decode mengeluarkan satu token per langkah dan bersifat memory-bound.
- Ukuran cache sama dengan 2 × layers × kv_heads × head_dim × bytes × tokens × batch.
- Untuk model 7B pada fp16, cache memakan 0,5 MiB per token, jadi context panjang dan batch besar bisa melampaui weight.
- Grouped-query attention, multi-query attention, cache quantization, dan sliding window mengecilkan cache, dan paged allocation mencegah memori terbuang.
Pertanyaan umum
Bagaimana cara menghitung ukuran KV cache?
Kalikan 2 (satu key dan satu value) × layer × KV head × dimensi head × byte per nilai untuk mendapatkan cache per token, lalu kalikan dengan panjang context dan batch size. Llama 2 7B punya 32 layer, 32 KV head, dan dimensi head 128, jadi pada fp16 butuh 2 × 32 × 32 × 128 × 2 = 524.288 byte, atau 0,5 MiB, per token: 2 GiB untuk satu urutan 4.096 token dan 16 GiB untuk batch berisi 8. Llama 3 8B memakai grouped-query attention dengan 8 KV head, jadi rumus yang sama menghasilkan 128 KiB per token, seperempatnya. Baca jumlah layer, head, dan dimensi dari config.json model (num_hidden_layers, num_key_value_heads, dan hidden_size dibagi num_attention_heads).
Apakah KV cache mengubah output model?
Tidak. Dengan aritmetika eksak, komputasi dengan dan tanpa cache menghasilkan logit yang sama, karena cache hanya menyimpan nilai yang kalau tidak disimpan akan dihitung ulang. Perbedaan kecil bisa muncul dari urutan floating-point pada kernel yang berbeda. Kuantisasi cache ke int8 atau lebih rendah adalah pendekatan dan bisa sedikit menggeser output.
Apa itu prompt caching?
Prompt caching, disebut juga prefix caching, menyimpan KV cache dari prefix yang sama, misalnya system prompt panjang atau dokumen, lalu memakainya ulang di banyak request. Request baru yang diawali token yang sama melewati prefill untuk token itu. Karena itulah penyedia API sering menagih token input yang sudah di-cache dengan harga lebih rendah.
Kenapa token pertama lebih lambat daripada sisanya?
Token pertama menunggu prefill, yang menjalankan seluruh prompt lewat model sebelum output apa pun muncul. Jeda ini disebut time to first token, dan makin panjang prompt, makin lama jedanya. Token berikutnya masing-masing butuh satu langkah decode, jadi kecepatannya terutama bergantung pada bandwidth memori dan batch size.
Apa itu PagedAttention?
PagedAttention, diperkenalkan bersama sistem serving vLLM oleh Kwon et al. (2023), menyimpan KV cache dalam blok berukuran tetap, bukan satu buffer contiguous per urutan. Blok dialokasikan saat urutan bertambah panjang dan bisa dipakai bersama oleh urutan yang punya prefix yang sama. Cara ini menghilangkan sebagian besar memori yang terbuang karena mencadangkan ruang untuk panjang maksimum, sehingga server bisa memasukkan lebih banyak request ke dalam batch.
Penjelasan terkait
- Decoder-Only Transformer · Arsitektur di balik GPT dan LLM modern
- Cara Kerja Self-Attention · Query, key, dan value, inti dari self-attention
- Multi-Head Attention · Attention head paralel yang mempelajari pola berbeda
- Arsitektur Transformer · Panduan visual untuk paper "Attention Is All You Need"
- Quantization · Mengecilkan weight model menjadi 8 dan 4 bit
- Mixture of Experts · Mengirim tiap token ke beberapa expert dalam model yang jauh lebih besar
Referensi
- Pope et al. (2022), "Efficiently Scaling Transformer Inference"
- Shazeer (2019), "Fast Transformer Decoding: One Write-Head is All You Need"
- Ainslie et al. (2023), "GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints"
- Kwon et al. (2023), "Efficient Memory Management for Large Language Model Serving with PagedAttention"
Terakhir diperbarui