Pada decoder dengan rotary position embeddings, key yang masuk ke KV cache sudah membawa rotasi sesuai posisi tokennya. Decoding inkremental dapat memakai key tersebut secara langsung. Memberikan rotasi posisi token saat ini sekali lagi ke key lama justru mengubah geometri attention.

Akibatnya, state posisi merupakan bagian dari kontrak cache meskipun API cache tampak hanya menyimpan tensor.

Rotasi terjadi sebelum key dipakai oleh attention

Untuk satu pasangan komponen dua dimensi, RoPE menerapkan rotasi yang bergantung pada posisi. Jika (R_m) menyatakan rotasi pada posisi (m), query dan key menjadi

[ q_m’ = R_m q_m, \qquad k_n’ = R_n k_n. ]

Dot product attention keduanya adalah

[ (q_m’)^\top k_n' = q_m^\top R_m^\top R_n k_n = q_m^\top R_{n-m} k_n. ]

Perpindahan relatif muncul dari komposisi dua rotasi tersebut. Karena itu, key pada posisi (n) tidak lagi dapat diperlakukan sebagai key tanpa posisi setelah (R_n) diterapkan.

Susunan operasi dapat berbeda antarimplementasi, tetapi reuse harus mempertahankan relasi posisi yang sama dengan relasi yang dipakai model.

Decoding inkremental menambahkan satu state posisi

Anggap prompt menempati posisi (0) sampai (L-1). Key dan value prompt disimpan setelah pemrosesan prompt. Token hasil generasi berikutnya memakai posisi (L), lalu token setelahnya memakai (L+1).

Hanya query dan key baru yang memerlukan rotasi untuk posisi baru. Key lama tetap membawa fase yang diberikan ketika key tersebut dibuat.

Cache yang secara fisik berupa rangkaian tensor key dan value belum tentu menampilkan counter posisi berikutnya sebagai field skalar. Caller atau runtime model tetap harus menyimpan state yang cukup agar koordinat token baru konsisten dengan prefix dalam cache.

Rotasi kedua mengubah koordinat key lama

Misalkan key awal tersimpan sebagai

[ k_n’ = R_n k_n. ]

Jika langkah decoding berikutnya keliru menerapkan rotasi lain (R_m), hasilnya menjadi

[ R_m k_n’ = R_m R_n k_n. ]

Pada komposisi rotasi planar yang digunakan RoPE, hasil tersebut membawa fase gabungan, bukan lagi fase asal pada posisi (n). Dot product antara query dan key kemudian tidak merepresentasikan relasi posisi yang digunakan saat model didefinisikan.

Kegagalan ini dapat lolos dari pemeriksaan bentuk tensor. Panjang cache dan dtype tetap dapat terlihat benar sementara skor attention memuat posisi yang keliru.

Memotong cache tidak otomatis mengatur ulang posisi

Menghapus sejumlah entry dari sisi kiri KV cache mengubah token yang masih tersimpan. Operasi itu sendiri tidak menetapkan koordinat RoPE baru bagi key yang tersisa.

Key yang sebelumnya dirotasi untuk koordinat tertentu tetap membawa rotasi tersebut. Menganggap indeks tensor setelah pemotongan sebagai posisi pengganti memerlukan representasi yang mendukung rebasing semacam itu atau komputasi ulang dari state sebelum rotasi. Cache yang hanya menyimpan key setelah rotasi tidak dapat menghapus fase lama hanya dengan mengganti indeks array.

Implementasi sliding window dan long context dapat memiliki aturan posisi khusus. Aturan itu berasal dari desain model dan implementasinya, bukan dari operasi slicing tensor.

Reuse prefix memerlukan penempatan posisi yang kompatibel

Prefix dalam cache dapat dipakai kembali ketika request baru menempatkan token cache pada koordinat yang kompatibel dengan state saat key tersebut dibuat. Memakai urutan token yang sama pada offset posisi berbeda tidak otomatis menghasilkan state yang ekuivalen.

Batas ini penting pada shared-prefix caching. Kesamaan token ID diperlukan untuk prefix cache yang identik, tetapi state model yang bergantung pada posisi dapat menambah syarat kompatibilitas. Fitur model lain juga dapat menambah state cache di luar RoPE.

Abstraksi cache yang tepat bukan sekadar “token dipetakan menjadi key dan value.” Satu entry cache mewakili key dan value yang dihasilkan dengan konfigurasi model serta state posisi tertentu.

Metadata posisi merupakan bagian dari kebenaran cache

KV caching menghindari komputasi ulang proyeksi dan persiapan attention untuk token lama; mekanisme itu tidak menghapus identitas posisi token. Pada RoPE, identitas tersebut tertanam langsung dalam geometri query-key yang telah dirotasi.

Runtime decoding harus menjaga koordinat token berikutnya tetap selaras dengan prefix cache, tidak memberikan rotasi kedua kepada key lama, dan memperlakukan relokasi cache sebagai operasi semantik alih-alih sekadar perubahan indeks tensor. Batas tersebut memisahkan reuse inkremental yang valid dari cache yang bentuknya benar tetapi state posisinya tidak konsisten.