Inferensi transformer autoregresif menggunakan kembali attention key dan value dari token sebelumnya agar setiap token baru tidak perlu menghitung ulang seluruh prefix. Penggunaan ulang ini membentuk KV cache, yang kebutuhan memory-nya bertambah seiring jumlah token yang disimpan. Pada context yang panjang atau request concurrency yang tinggi, cache dapat menjadi bagian besar dari memory inferensi.
Kuantisasi KV cache mengubah representasi tensor yang disimpan tersebut. Key dan value ditulis dalam format precision lebih rendah bersama scale atau metadata lain yang diperlukan untuk rekonstruksi. Attention kemudian memakai value yang direkonstruksi atau kernel yang dapat menangani representasi terkuantisasi secara langsung.
Pengurangan memory-nya nyata, tetapi bukan kompresi gratis. Kuantisasi menambahkan approximation error, metadata, pekerjaan konversi, dan constraint implementasi. Dampaknya bergantung pada quantizer serta struktur numerik key dan value.
Ukuran cache bertambah mengikuti token, layer, dan KV head
Untuk decoder yang memiliki cache pada setiap transformer layer, jumlah elemen cache yang disederhanakan adalah
elements = 2 * layers * cached_tokens * kv_heads * head_dimFaktor dua mewakili key dan value. Mengalikannya dengan byte per elemen yang disimpan memberikan ukuran utama tensor sebelum allocator overhead dan metadata kuantisasi.
Ekspresi ini juga menunjukkan dimensi yang penting. Memperpanjang context menaikkan storage cache secara linear terhadap jumlah token yang dipertahankan. Melayani lebih banyak sequence menambahkan dimensi request atau batch lain. Arsitektur dengan key-value head lebih sedikit, seperti grouped-query atau multi-query attention, mengurangi cache secara independen dari numeric precision.
Kuantisasi bekerja pada byte yang terkait dengan setiap elemen cache. Ia tidak mengubah jumlah token atau posisi attention yang direpresentasikan cache.
Scale menentukan sistem koordinat kuantisasi
Representasi low-bit yang umum memetakan tensor floating-point menjadi integer code memakai scale dan, untuk skema asymmetric, zero point. Bentuk symmetric secara konseptual dapat ditulis sebagai
q = clamp(round(x / scale), q_min, q_max)
x_hat = q * scalex_hat adalah approximation hasil rekonstruksi yang digunakan komputasi berikutnya. Value yang berada di antara level yang dapat direpresentasikan mengalami rounding error. Value di luar numeric range yang dipilih dapat di-clamp.
Scale dapat mencakup seluruh tensor, satu head, satu channel, atau kelompok elemen yang lebih kecil. Grouping yang lebih kasar menyimpan lebih sedikit metadata, tetapi memaksa lebih banyak value berbagi satu range. Grouping lebih halus dapat menyesuaikan perbedaan magnitude lokal dengan biaya lebih banyak scale dan pekerjaan indexing.
Karena itu nominal bit width tidak sepenuhnya menjelaskan format cache. Dua skema dengan jumlah bit per code yang sama dapat berbeda pada group size, precision scale, clipping policy, packing layout, dan error yang dihasilkan.
Key dan value dapat memiliki struktur numerik berbeda
Key dan value memiliki peran berbeda dalam attention. Key terlibat dalam dot product dengan query saat ini sebelum softmax. Value digabungkan menggunakan attention weight yang dihasilkan.
Error pada cached key dapat mengubah attention logit. Karena softmax menghubungkan logit di berbagai posisi, perubahan tersebut dapat mengubah distribusi attention mass, bukan hanya kontribusi dari satu cached vector. Error pada value sebaliknya memengaruhi vector yang diagregasikan setelah attention weight terbentuk.
Ini tidak berarti ada bit width atau quantizer universal untuk salah satu tensor. Artinya, memperlakukan key dan value sebagai array storage yang identik dapat menyembunyikan jalur error yang berbeda. Calibration rule, group axis, atau pilihan precision yang terpisah dapat masuk akal ketika observed range dan downstream sensitivity keduanya berbeda.
Outlier dapat mendominasi shared quantization range
Misalkan satu quantization group sebagian besar berisi value dekat nol dan sedikit value dengan magnitude jauh lebih besar. Jika scale mencakup seluruh range, jarak antar-level representable menjadi lebih lebar untuk setiap value dalam group. Value kecil kemudian dapat runtuh ke kumpulan code yang terbatas.
Clipping pada value ekstrem dapat membuat spacing lebih halus untuk mayoritas value, tetapi elemen yang di-clipping memperoleh error lebih besar. Setting yang berguna bergantung pada distribusi dan bagaimana error tersebut memengaruhi attention, bukan hanya reconstruction error rata-rata seluruh elemen cache.
Grouping mengubah trade-off ini. Group lebih kecil dapat mengisolasi outlier dari channel atau posisi yang tidak terkait, tetapi juga meningkatkan metadata scale. Desain quantizer karena itu menghubungkan struktur statistik dengan biaya sistem: local range yang lebih halus membutuhkan lebih banyak side information dan sering kali kernel lebih kompleks.
Pengecualian recent-token mengubah perhitungan memory
Sebagian implementasi mempertahankan bagian terbaru dari cache pada precision lebih tinggi dan hanya menguantisasi entry yang lebih lama. Ini membentuk residual atau staging region.
Desain seperti ini dapat menghindari kuantisasi token terbaru satu elemen demi satu secara berulang. Ia juga dapat mempertahankan full precision untuk posisi yang belum dipindahkan ke packed quantized block. Motivasi dan mekanisme persisnya bergantung pada runtime.
Adanya residual region berarti total memory bukan sekadar cache_elements * low_bit_width. Model yang lebih representatif adalah
total =
high_precision_recent_cache
+ packed_quantized_cache
+ scales_and_metadata
+ temporary_workspaceUntuk prompt pendek, bagian fixed atau high-precision dapat mengambil porsi cache yang cukup besar. Penghematan asymptotic menjadi lebih terlihat ketika bagian yang terkuantisasi bertambah.
Kuantisasi dapat memindahkan pekerjaan ke decode path
KV cache ada untuk menghindari penghitungan ulang prefix projection, sehingga akses terhadapnya berada di inference path yang sensitif terhadap latency. Quantized cache mengurangi byte yang dibaca dari memory, tetapi attention tetap harus menafsirkan representasi terkompresi.
Satu implementasi dapat melakukan dequantization terhadap cached block menjadi tensor floating-point sementara sebelum attention. Implementasi lain dapat menggabungkan unpacking atau penerapan scale langsung ke attention kernel. Pilihan ini memiliki karakteristik workspace, memory traffic, dan kernel launch yang berbeda.
Akibatnya, cache lebih kecil tidak menjamin token latency lebih rendah. Memory traffic yang berkurang dapat membantu sebagian workload, sementara overhead conversion atau packing dapat mendominasi workload lain. Hardware, context length, batch shape, format cache, dan dukungan kernel menentukan keseimbangan sebenarnya.
Perbandingan yang relevan karena itu adalah perilaku decode end-to-end pada serving shape yang dituju, bukan hanya jumlah byte dari cache yang diserialisasi.
State quantized cache harus tetap selaras dengan posisi
Entry cache diindeks berdasarkan posisi sequence dan layer. Sliding window, prefix reuse, beam operation, request batching, dan cache eviction semuanya dapat mengubah token logis mana yang menempati slot cache fisik tertentu.
Kuantisasi menambahkan scale dan packing metadata yang harus bergerak bersama data yang dijelaskannya. Mengubah urutan integer code tanpa melakukan reordering yang sama pada per-group scale dapat menghasilkan tensor yang valid secara numerik tetapi terkait dengan range yang salah. Error serupa dapat muncul ketika packed block melintasi cache boundary yang diasumsikan quantizer.
Ini merupakan persoalan implementasi, bukan properti matematika kuantisasi. Cache manager dan quantizer membutuhkan definisi bersama mengenai grouping, physical layout, dan token ownership.
Evaluasi membutuhkan output model dan serving metric
Cache quantizer dapat memiliki reconstruction error rendah tetapi tetap mengubah output model ketika attention sensitif terhadap perubahan logit kecil. Sebaliknya, tensor error yang terukur tidak membuktikan bahwa output pada tingkat aplikasi ikut memburuk.
Evaluasi karena itu perlu mencakup perilaku model yang penting bagi aplikasi serta constraint sistem yang memotivasi kuantisasi. Output quality, peak cache memory, decode latency, throughput, dan context length yang didukung menjawab pertanyaan berbeda.
Baseline harus mempertahankan model weight, prompt, decoding setting, cache policy, dan serving shape yang sama kecuali representasi cache. Jika tidak, perubahan akibat sampling atau request scheduling dapat menyamarkan efek yang sedang diukur.
Kuantisasi KV cache paling menarik ketika cached activation, bukan model weight atau workspace lain, menjadi faktor yang membatasi kapasitas inferensi. Setelah cache storage tidak lagi menjadi allocation dominan, menurunkan precision lebih jauh dapat menambah kompleksitas numerik dan kernel tanpa menyelesaikan batas memory yang sebenarnya.