Grouped-query attention mengubah satu bagian spesifik dari multi-head attention: beberapa head query menggunakan head key dan value yang sama. Proyeksi query tetap terpisah, sehingga head-head query tersebut dapat menghasilkan bobot attention yang berbeda, tetapi semuanya membaca key dan value dari representasi hasil proyeksi yang dipakai bersama.

Perbedaan ini relevan saat inferensi. Cache pada decoder menyimpan key dan value dari posisi sebelumnya, bukan query. Mengurangi jumlah head key-value karena itu dapat mengurangi penyimpanan KV cache tanpa harus mengurangi jumlah head query dengan faktor yang sama.

Jumlah head menentukan pola sharing

Misalkan satu layer attention memiliki Hq head query dan Hkv head key-value, dengan Hq habis dibagi Hkv. Susunan grouped yang umum menugaskan:

G = Hq / Hkv

head query ke setiap head key-value. Dengan Hq = 32 dan Hkv = 8, satu head key-value melayani empat head query.

Untuk satu posisi token, head query i dikaitkan dengan head key-value sesuai grupnya. Komputasi attention tetap berbentuk:

softmax(q_i K_g^T / sqrt(d)) V_g

dengan g sebagai head key-value bersama untuk head query i. Dua head query dalam grup yang sama dapat menghasilkan distribusi skor berbeda karena vektor q_i berbeda, walaupun keduanya memakai K_g dan V_g yang sama.

Susunan ini tidak sama dengan melebur beberapa head query menjadi satu. Proyeksi query dan distribusi attention yang dihasilkan tetap terpisah.

Ukuran KV cache mengikuti head key-value

Dalam decoding autoregresif, implementasi umumnya menyimpan tensor key dan value yang dihasilkan untuk posisi terdahulu. Jika metadata, padding, efek allocator, dan layout spesifik implementasi diabaikan, jumlah elemen untuk satu layer berskala sebagai:

2 * sequence_length * Hkv * head_dim

Faktor dua mewakili key dan value. Jika dtype cache dan head_dim tetap, perubahan Hkv mengubah kebutuhan penyimpanan ini kira-kira secara proporsional.

Layer dengan 32 head query tidak memerlukan 32 head key di cache ketika arsitekturnya hanya memiliki 8 head key-value. Menduplikasi key bersama menjadi 32 head fisik di cache akan menghilangkan keuntungan penyimpanan dari representasi grouped, walaupun implementasi tertentu dapat memperluas view atau tensor sementara untuk kebutuhan kernel.

Memori cache hanya satu bagian dari memori serving. Bobot model, aktivasi, workspace sementara, fragmentasi allocator, kebijakan batching, dan buffer spesifik framework tetap terpisah. Hubungan jumlah head ini karena itu merupakan properti KV cache, bukan estimasi lengkap penggunaan memori.

GQA berada di antara dua susunan endpoint

Multi-head attention standar umumnya memakai satu head key-value untuk setiap head query, sehingga Hkv = Hq. Multi-query attention memakai satu head key dan satu head value yang dibagi ke seluruh head query, sehingga Hkv = 1.

Grouped-query attention berada di antara kedua parameterisasi tersebut:

1 < Hkv < Hq

untuk kasus grouped non-degeneratif. Pembeda arsitekturalnya adalah rasio sharing, bukan aturan scoring attention yang berbeda.

Label tersebut juga mendeskripsikan struktur, bukan jaminan runtime universal. Implementasi kernel dapat memakai layout tensor, operasi fused, format cache, atau strategi replikasi yang berbeda. Arsitektur dengan head key-value grouped tetap dapat kehilangan keuntungan praktis jika kernel serving tidak memanfaatkan struktur itu.

Sharing mengubah kapasitas representasi

Mengurangi Hkv bukan sekadar kompresi cache yang diterapkan setelah model menghasilkan key dan value multi-head biasa. Pada model yang diparameterisasi untuk GQA, proyeksi key dan value memang memiliki lebih sedikit head output.

Akibatnya, head query dalam satu grup tidak masing-masing menerima representasi key-value yang diproyeksikan secara independen. Head tersebut masih dapat menghasilkan permintaan attention berbeda melalui vektor query yang berbeda, tetapi subruang key dan value yang tersedia bagi grup itu terikat oleh konstruksi arsitektur.

Batas ini relevan saat mengonversi model yang sudah ada. Mengubah bentuk checkpoint dengan Hq head key-value independen menjadi lebih sedikit head tidak secara umum mempertahankan semantik. Konversi memerlukan metode yang terdefinisi untuk menghasilkan parameter key-value grouped, dan kualitas model hasilnya merupakan properti empiris dari metode konversi atau proses training lanjutan.

Layout cache harus mempertahankan pemetaan arsitektur

Kode serving perlu mengetahui jumlah head query dan head key-value. Menganggap keduanya sebagai nilai yang dapat dipertukarkan dapat menghasilkan error shape, replikasi yang tidak perlu, atau pemetaan head ke grup yang keliru.

Tensor cache secara konseptual dapat memakai layout seperti:

[batch, Hkv, sequence, head_dim]

sementara tensor query memakai:

[batch, Hq, current_tokens, head_dim]

Urutan dimensi yang tepat bergantung pada implementasi. Invariannya adalah key dan value di cache mewakili Hkv head, sedangkan operasi attention memetakan Hq head query ke head bersama tersebut sesuai arsitektur.

Hal ini terutama relevan untuk adapter model-serving dan kernel khusus yang menyimpulkan shape cache dari konfigurasi attention. num_attention_heads saja tidak cukup ketika model menyediakan jumlah head key-value secara terpisah.

Grouped-query attention menetapkan batas implementasi yang jelas: paralelisme head query dan kardinalitas KV cache adalah dua besaran berbeda. Mempertahankan perbedaan tersebut menjaga ukuran cache, shape tensor, dan pemetaan head tetap selaras dengan parameterisasi attention model.