Quelle quantité de mémoire le KV cache d’une requête LLM nécessite-t-il ?
Traduction automatique
Cet article a été traduit automatiquement depuis la version originale en anglais.
Pour un transformer classique à attention complète, la mémoire du KV cache augmente avec le nombre de tokens en cache, de couches, de têtes clé/valeur et d’octets par valeur. Multipliez l’allocation par séquence par le nombre de séquences simultanées pour estimer le volume brut de données. Réservez ensuite de la mémoire supplémentaire pour les poids et les opérations du runtime.
Cette estimation aide les ingénieurs de serving à dimensionner une charge de travail. L’attention latente multitête (MLA), les caches à fenêtre glissante, hybrides et récurrents nécessitent des estimations propres à leur architecture.
Utilisez les têtes KV plutôt que les têtes de requête
Le cache stocke les projections de clé et de valeur des tokens précédents afin que le modèle ne les recalcule pas à chaque étape de génération. L’attention dense continue de lire un historique de tokens qui s’allonge. Pour les caches à attention complète avec des têtes clé/valeur séparées, comme en MHA, MQA ou GQA, et des séquences de même longueur :
cache bytes = 2 × layers × KV_heads × head_dimension
× cached_tokens × concurrent_sequences × bytes_per_element
Le facteur deux compte les clés et les valeurs. Pour des séquences de longueurs différentes, utilisez la somme de leurs nombres de tokens en cache. Lisez la valeur explicite de head_dim dans la configuration du modèle lorsqu’elle est disponible ; hidden_size / num_attention_heads n’est qu’une solution de repli pour les architectures qui utilisent cette relation.
Le tableau d’architecture de Llama 3 de Meta fournit les dimensions de ces exemples, avec un cache FP16/BF16 de deux octets par valeur :
| Modèle | Couches / têtes KV / dimension des têtes | Tokens par séquence | Cache brut par séquence |
|---|---|---|---|
| Llama 3.1 8B | 32 / 8 / 128 | 8,192 | 1 GiB |
| Llama 3.1 8B | 32 / 8 / 128 | 131,072 | 16 GiB |
| Llama 3.1 70B | 80 / 8 / 128 | 4,096 | 1.25 GiB |
| Llama 3.1 70B | 80 / 8 / 128 | 131,072 | 40 GiB |
Un budget de cache de 40 GiB permet de stocker au plus 32 séquences complètes de 4,096 tokens du modèle 70B selon ce calcul. Cela ne compte que les données du cache ; choisissez la limite de concurrence après avoir réservé de la mémoire pour le runtime.
Vérifiez l’allocation réelle du serveur
Les poids, les tampons temporaires, les activations, les blocs partiellement remplis et la capacité réservée nécessitent davantage de mémoire. Les serveurs distribués peuvent répartir ou répliquer les têtes KV. Un cache d’un octet pris en charge divise ce volume brut par deux, mais les facteurs d’échelle, la prise en charge par l’implémentation et la qualité peuvent modifier la capacité utilisable.
Mesurez le pic d’allocation et la préemption avec des longueurs de prompt et de sortie représentatives. PagedAttention améliore l’allocation des blocs ; il ne supprime pas les données clé/valeur stockées et ne rend pas la longueur des séquences sans importance.
Guide d’ingénierie : mémoire du KV cache propose un calcul de capacité exécutable.