Grouped Query Attention (GQA)
Gruplanmış Sorgu Dikkatinin (GQA) KV-cache belleğini nasıl azalttığını, çıkarım verimliliğini nasıl artırdığını ve Transformer modellerinde performansı nasıl dengelediğini öğren.
Gruplandırılmış Sorgu Dikkati (GQA), birden fazla sorgu başlığının daha küçük bir anahtar ve değer başlığı kümesini paylaştığı bir dikkat tasarımıdır. Anahtarlar ve değerler için gereken bellek ve veri aktarımını azaltırken çok başlı sorguların farklı bakış açılarını korur. GQA, bir modelin her seferinde bir belirteç ürettiği ve depolanan dikkat durumlarını tekrar tekrar okuduğu otoregresif çıkarım sırasında özellikle değerlidir.
GQA Nasıl Çalışır#
Bir dikkat mekanizması içinde her belirteç üç gösterime yansıtılır:
- Sorgu: Geçerli belirtecin aradığı bilgiyi açıklar.
- Anahtar: Kullanılabilir her belirtecin neyi temsil ettiğini açıklar.
- Değer: Bir sorgu bir anahtarla eşleştiğinde alınan bilgiyi içerir.
Geleneksel öz-dikkat mekanizmasında bu yansıtımlar, modelin farklı ilişkileri paralel olarak öğrenebilmesi için başlıklara ayrılır. GQA, çok sayıda sorgu başlığını korur ancak bunları paylaşılan anahtar ve değer başlıklarıyla gruplar halinde eşleştirir. Örneğin bir dikkat katmanı sekiz sorgu başlığı ve iki anahtar-değer başlığı kullanabilir. Böylece her anahtar-değer başlığı dört sorgu başlığına hizmet eder.
Dikkat hesaplamasının kendisi ölçeklendirilmiş noktasal çarpım dikkati olarak kalır. Değişen şey, başlıkların düzeni ile üretilen, depolanan ve okunan anahtar-değer verilerinin miktarıdır. Bu nedenle PyTorch ölçeklendirilmiş noktasal çarpım dikkati gibi çerçeveler, GQA etkinleştirildiğinde sorgu başlıklarının sayısının anahtar-değer başlıklarının sayısına tam bölünebilmesini gerektirir. (docs.pytorch.org)
GQA ile Çok Başlı ve Çoklu Sorgu Dikkatinin Karşılaştırması#
GQA, çok başlı dikkat ile çoklu sorgu dikkati arasında yer alır:
- Çok başlı dikkat: Her sorgu başlığının kendine ait anahtar ve değer başlıkları vardır. Bu, başlıkların bağımsızlığını en üst düzeye çıkarır ancak en yüksek anahtar-değer belleği gereksinimini oluşturur.
- Gruplandırılmış sorgu dikkati: Birden fazla sorgu başlığı her anahtar-değer başlığını paylaşır. Gösterim kapasitesi ile bellek verimliliği arasında denge kurar.
- Çoklu sorgu dikkati: Tüm sorgu başlıkları tek bir anahtar başlığını ve tek bir değer başlığını paylaşır. 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ı dikkat 32 anahtar-değer başlığı da kullanabilir, GQA 8 başlık kullanabilir ve çoklu sorgu dikkati 1 başlık kullanır. GQA, daha geniş Transformer mimarisinin yerine geçmez; bir Transformer dikkat katmanı içindeki olası yapılandırmalardan biridir. NVIDIA’nın çok başlı, çoklu sorgu ve gruplandırılmış sorgu dikkati belgeleri, bu varyantların temel olarak kaç anahtar-değer başlığının sorgu başlıklarına hizmet ettiği konusunda farklılaştığını açıklar. (nvidia.github.io)
GQA Neden Önemlidir?#
Otoregresif üretim sırasında bir model, önceki anahtarları ve değerleri bir KV önbelleğinde depolar. Standart çok başlı dikkat mekanizmasında her dikkat başlığı, önbelleğe alınan ayrı anahtar ve değerler sağlar. Bu nedenle uzun diziler, büyük toplu işlemler ve çok sayıda model katmanı önemli miktarda GPU belleği tüketebilir.
GQA daha az anahtar-değer başlığı kullandığından, önbelleği bu başlıklardaki azalmayla orantılı olarak daha küçüktür. Bu, şunları iyileştirebilir:
- Bellek kapasitesi: Daha uzun istemler veya daha fazla eşzamanlı istek kullanılabilir belleğe sığabilir.
- Üretim iş hacmi: Üretilen her belirteç için daha az anahtar-değer verisinin okunması gerekir.
- Çıkarım gecikmesi: Azalan bellek trafiği, belirteçten belirtece işlem süresini kısaltabilir.
- Bağlam penceresi ölçeklenebilirliği: Uzun dizileri sunmak daha uygulanabilir hale gelir.
Bu kazanımlar donanıma, dizi uzunluğuna, toplu işlem boyutuna ve çekirdek desteğine bağlıdır. Üretim çalışma zamanlarının hâlâ verimli önbellek tahsisine ihtiyacı vardır; örneğin NVIDIA’nın TensorRT-LLM KV önbellek sistemi, GQA desteğini blok tabanlı önbelleğe alma, yeniden kullanma ve dışarı aktarma özellikleriyle birleştirir. (nvidia.github.io)
Gerçek Dünya Uygulamaları#
Uzun bağlamlı asistanlar: Bir kodlama asistanı, yanıt üretmeden önce binlerce kaynak kodu belirtecini işleyebilir. GQA, bu geçmişle ilişkili önbelleğe alınan 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ı işlemesine olanak tanır.
Çok modlu görüntü ve video asistanları: Bir görme-dil modeli, görüntü parçalarını veya video karelerini uzun belirteç dizileri olarak temsil edebilir. GQA, bu görsel belirteçler dil kod çözücüye girdikten sonra dikkat önbelleği üzerindeki yükü azaltarak ek görüntüler, kareler veya istekler için daha fazla bellek bırakabilir. Bu, dikkatin tüm görüntü parçalarını otoregresif KV önbelleğe alma olmadan paralel olarak işleyebildiği standart bir Vision Transformer yaklaşımından farklıdır.
Pratik Uygulama ve Ödünleşimler#
PyTorch, GQA’yı enable_gqa=True üzerinden sunar. Bu belgelenmiş 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 anahtarlar ve değerler yalnızca iki başlık kullanır. PyTorch dikkat arka ucu seçicisi, işlemi gerçekleştiren desteklenen çekirdeği denetleyebilir; PyTorch Transformer yapı taşları kılavuzu ise 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ı için çıkarım sırasında açılıp kapatılabilen bir seçenek değildir. Geliştiriciler çerçeve desteğini, başlıkların bölünebilirliğini, sayısal davranışı, bellek kullanımını ve görev kalitesini doğrulamalıdır. Bilgisayarlı görü dağıtımı için Ultralytics TensorRT entegrasyonu ve Ultralytics kıyaslama modu 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.









