MHA versus MQA versus GQA: hoe attention het KV-geheugengebruik verandert
Automatische vertaling
Dit artikel is automatisch vertaald vanuit de oorspronkelijke Engelse versie.
MHA geeft elke query-head een eigen key-head en value-head. MQA deelt één key/value-head tussen alle query-heads. GQA deelt een key/value-head binnen elke groep query-heads. Minder KV-heads verkleinen de gebruikelijke attention-cache en verminderen de hoeveelheid gegevens die decode eruit leest.
Controleer num_key_value_heads wanneer je de cachegrootte schat. Met alleen het aantal query-heads kun je de cachegrootte flink overschatten.
Het delen van heads direct vergelijken
Ga uit van acht query-heads met dezelfde dimensie per head, hetzelfde aantal lagen, dezelfde sequentielengte en dezelfde cacheprecisie:
| Attention | Query-heads | KV-heads | Cache ten opzichte van MHA |
|---|---|---|---|
| Multi-head attention, MHA | 8 | 8 | 100% |
| Multi-query attention, MQA | 8 | 1 | 12.5% |
| Grouped-query attention, GQA | 8 | 2 | 25% |
Een KV-head omvat één key-head en één value-head. De queryprojecties blijven afzonderlijk. Shazeers MQA-artikel en het GQA-artikel van Ainslie et al. definiëren deze veranderingen.
Bij Llama 3 70B delen 64 query-heads acht KV-heads: dat levert acht keer minder ruwe KV-gegevens op dan bij een verder identiek model met 64 KV-heads. Llama 3.1 405B heeft 128 query-heads en acht KV-heads, wat bij dezelfde vergelijking een reductie met een factor zestien oplevert. Meta’s architectuurtabel geeft deze aantallen.
Wat de reductie niet garandeert
Een acht keer kleinere KV cache betekent niet acht keer minder totaal GPU-geheugen of acht keer snellere generatie. Weights, activations, kerneluitvoering en communicatie blijven nodig. Gedistribueerde implementaties kunnen KV-heads ook over partities repliceren.
Het GQA-artikel vond bij de geteste models uit de T5-familie een bruikbare afweging tussen kwaliteit en snelheid. Een getraind MHA-checkpoint omzetten naar GQA is een architectuurwijziging die aanpassing en evaluatie vereist; het is geen instelling voor geheugentoewijzing.
Controleer de attention-configuratie van het checkpoint, gebruik het aantal KV-heads in de cacheformule en meet de serverprestaties bij de contextlengtes en het aantal gelijktijdige verzoeken dat je nodig hebt. Neem de kwaliteit op je taken mee wanneer je checkpoints vergelijkt.
Engineeringgids: GQA en MQA toont de patronen voor het delen van heads.