Grouped Query Attention (GQA)
Grouped Query Attention (GQA) mekanizmasının KV-önbellek belleğini nasıl azalttığını, çıkarım verimliliğini nasıl artırdığını ve Transformer modellerinde performansı nasıl dengelediğini öğren.
Grouped Query Attention (GQA), birden fazla sorgu başlığının (query head) daha küçük bir anahtar (key) ve değer (value) başlığı kümesini paylaştığı bir dikkat (attention) tasarımıdır. Anahtar ve değerler için gereken belleği ve veri hareketini azaltırken, çok başlıklı sorguların (multi-head query) farklı bakış açılarını korur. GQA, bir modelin tek seferde bir token ürettiği ve saklanan dikkat durumlarını defalarca okuduğu otoregresif çıkarım (autoregressive inference) sırasında özellikle değerlidir.
GQA Nasıl Çalışır?#
Bir attention mechanism içinde her token üç temsile projeksiyonla dönüştürülür:
- Sorgu (Query): Mevcut token'ın aradığı bilgiyi tanımlar.
- Anahtar (Key): Mevcut her token'ın neyi temsil ettiğini tanımlar.
- Değer (Value): Bir sorgu bir anahtarla eşleştiğinde alınan bilgiyi içerir.
Geleneksel self-attention mekanizmasında bu projeksiyonlar, modelin farklı ilişkileri paralel olarak öğrenebilmesi için başlıklara bölünür. GQA, birçok sorgu başlığını tutar ancak bunların gruplarını paylaşılan anahtar ve değer başlıklarına atar. Örneğin bir dikkat katmanı sekiz sorgu başlığı ve iki anahtar-değer başlığı kullanabilir. Bu durumda her anahtar-değer başlığı dört sorgu başlığına hizmet eder.
Dikkat hesaplamasının kendisi ölçeklendirilmiş nokta çarpımı dikkati (scaled dot-product attention) olarak kalır. Değişen şey başlık düzenlemesi ile üretilen, saklanan ve okunan anahtar-değer verilerinin miktarıdır. PyTorch scaled dot-product attention gibi çerçeveler, bu nedenle GQA etkinken sorgu başlıkları sayısının anahtar-değer başlıkları sayısına tam bölünmesini gerektirir. (docs.pytorch.org)
GQA ile Çok Başlıklı ve Çok Sorgulu Dikkat Karşılaştırması#
GQA, çok başlıklı dikkat (multi-head attention) ile çok sorgulu dikkat (multi-query attention) arasında yer alır:
- Multi-head attention: Her sorgu başlığının kendi anahtar ve değer başlıkları vardır. Bu, maksimum başlık bağımsızlığı sunar ancak en büyük anahtar-değer belleği gereksinimini oluşturur.
- Gruplanmış sorgu dikkati (Grouped query attention): Birkaç sorgu başlığı her bir anahtar-değer başlığını paylaşır. Temsil kapasitesini bellek verimliliğiyle dengeler.
- Çok sorgulu dikkat (Multi-query attention): Tüm sorgu başlıkları tek bir anahtar başlığını ve tek bir değer başlığını paylaşır. Bu, anahtar-değer depolamasını en aza indirir ancak daha az anahtar-değer çeşitliliği sağlar.
Bir katmanda 32 sorgu başlığı varsa, çok başlıklı dikkat 32 anahtar-değer başlığı da kullanabilirken, GQA 8 ve çok sorgulu dikkat 1 kullanabilir. GQA, daha geniş olan Transformer architecture için bir yerini tutucu değildir; bir Transformer dikkat katmanı içindeki olası konfigürasyonlardan biridir. NVIDIA'nın multi-head, multi-query, and grouped-query attention documentation belgesi, bu varyantların öncelikli olarak kaç anahtar-değer başlığının sorgu başlıklarına hizmet ettiğine göre farklılık gösterdiğini belirtir. (nvidia.github.io)
GQA Neden Önemlidir?#
Otoregresif üretim sırasında bir model, önceki anahtar ve değerleri bir KV cache içinde saklar. Standart çok başlıklı dikkat ile her dikkat başlığı ayrı önbelleğe alınmış anahtar ve değerlere katkıda bulunur. Bu nedenle uzun diziler, büyük yığınlar (batch) ve çok sayıda model katmanı önemli miktarda GPU belleği tüketebilir.
GQA daha az anahtar-değer başlığı kullandığı için önbelleği, bu başlıkların azaltılması oranında daha küçüktür. Bu durum şunları iyileştirebilir:
- Bellek kapasitesi: Daha uzun girdiler veya aynı anda gelen daha fazla istek mevcut belleğe sığabilir.
- Üretim veri yolu (Throughput): Her üretilen token için okunması gereken anahtar-değer verisi miktarı azalır.
- Inference latency: Azalan bellek trafiği, token'dan token'a işleme süresini kısaltabilir.
- Context window ölçeklenebilirliği: Uzun dizilere hizmet vermek daha pratik hale gelir.
Bu kazançlar donanıma, dizi uzunluğuna, yığın boyutuna ve çekirdek (kernel) desteğine bağlıdır. Üretim çalışma zamanları (runtime) hâlâ verimli önbellek tahsisine ihtiyaç duyar; örneğin NVIDIA'nın TensorRT-LLM KV cache system çözümü, GQA desteğini blok tabanlı önbellekleme, yeniden kullanım ve offloading (boşaltma) ile birleştirir. (nvidia.github.io)
Gerçek Dünya Uygulamaları#
Uzun içerikli asistanlar: Bir kodlama asistanı, bir yanıt üremeden önce binlerce kaynak kod token'ını işleyebilir. GQA, bu geçmişle ilişkili önbelleğe alınmış anahtar-değer durumunu azaltarak bir sunucunun, GPU belleğini orantılı olarak artırmadan daha uzun dosyaları veya daha fazla eşzamanlı kullanıcıyı yönetmesine olanak tanır.
Çok modlu görüntü ve video asistanları: Bir vision-language model, görüntü yamaçlarını (patch) veya video karelerini uzun token dizileri olarak temsil edebilir. GQA, bu görsel token'lar dil kod çözücüsüne girdikten sonra dikkat önbelleği baskısını azaltır ve potansiyel olarak ek görüntüler, kareler veya istekler için daha fazla bellek bırakır. Bu durum, dikkatin tüm görüntü yamaçlarını otoregresif KV önbelleklemesi olmaksızın paralel olarak işleyebildiği standart bir Vision Transformer modelinden farklıdır.
Pratik Uygulama ve Tavizler (Trade-Offs)#
PyTorch, GQA'yı enable_gqa=True aracılığıyla sunar. Belgelenmiş bu CUDA örneği, sekiz sorgu başlığı ve iki paylaşılan anahtar-değer başlığı kullanır:
import torch
import torch.nn.functional as F
from torch.nn.attention import SDPBackend, sdpa_kernel
assert torch.cuda.is_available(), "A CUDA device is required."
query = torch.randn(1, 8, 16, 32, device="cuda")
key = torch.randn(1, 2, 16, 32, device="cuda")
value = torch.randn(1, 2, 16, 32, device="cuda")
# Four query heads share each key-value head.
with sdpa_kernel(SDPBackend.MATH):
output = F.scaled_dot_product_attention(
query,
key,
value,
enable_gqa=True,
)
print(output.shape)Çıktı sekiz sorgu başlığını korurken, anahtar ve değerler yalnızca iki başlık kullanır. PyTorch attention backend selector, hangi desteklenen çekirdeğin işlemi gerçekleştireceğini kontrol edebilirken, PyTorch Transformer building-block guide daha geniş bir uygulama bağlamı sağlar. (docs.pytorch.org)
GQA, bir model tasarlanırken veya uyarlanırken seçilmelidir; genellikle mevcut bir kontrol noktası (checkpoint) için çıkarım anında değiştirilebilen bir anahtar değildir. Geliştiriciler çerçeve desteğini, başlık bölünebilirliğini, sayısal davranışı, bellek kullanımını ve görev kalitesini doğrulamalıdır. Bilgisayarlı görü (computer vision) dağıtımı için Ultralytics TensorRT integration ve Ultralytics benchmark mode gibi tamamlayıcı iş akışları, mimari ve çalışma zamanı optimizasyonlarının hedef donanımda anlamlı iyileştirmeler sağlayıp sağlamadığını ölçmeye yardımcı olur.






