Ile pamięci wymaga KV cache dla żądania do LLM?
Tłumaczenie automatyczne
Ten artykuł został automatycznie przetłumaczony z angielskiego oryginału.
W typowym transformerze z pełną uwagą pamięć KV cache rośnie wraz z liczbą przechowywanych tokenów, warstw, głów kluczy/wartości i bajtów na wartość. Pomnóż przydział na sekwencję przez liczbę równoczesnych sekwencji, aby oszacować rozmiar samych danych. Następnie zarezerwuj dodatkową pamięć na wagi i pracę środowiska wykonawczego.
To oszacowanie pomaga inżynierom serwowania modeli dobrać zasoby do obciążenia. Wielogłowa uwaga latentna (MLA), pamięci podręczne z oknem przesuwnym, hybrydowe i rekurencyjne wymagają oszacowań właściwych dla danej architektury.
Używaj głów KV zamiast głów zapytań
Pamięć podręczna przechowuje projekcje kluczy i wartości wcześniejszych tokenów, aby model nie obliczał ich ponownie w każdym kroku generowania. Gęsta uwaga nadal odczytuje rosnącą historię tokenów. Dla pamięci podręcznych z pełną uwagą i osobnymi głowami kluczy/wartości, jak w MHA, MQA lub GQA, oraz sekwencjami o tej samej długości:
cache bytes = 2 × layers × KV_heads × head_dimension
× cached_tokens × concurrent_sequences × bytes_per_element
Czynnik dwa uwzględnia klucze i wartości. Dla sekwencji o różnych długościach użyj sumy liczb przechowywanych tokenów. Odczytaj jawne head_dim z konfiguracji modelu, jeśli jest dostępne; hidden_size / num_attention_heads to tylko rozwiązanie zastępcze dla architektur, które stosują tę zależność.
Tabela architektury Llama 3 firmy Meta podaje wymiary dla tych przykładów, przy użyciu pamięci podręcznej FP16/BF16 z dwoma bajtami na wartość:
| Model | Warstwy / głowy KV / wymiar głowy | Tokeny na sekwencję | Same dane pamięci podręcznej na sekwencję |
|---|---|---|---|
| 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 |
Budżet 40 GiB na pamięć podręczną pozwala według tych obliczeń przechowywać najwyżej 32 pełne sekwencje modelu 70B po 4,096 tokenów. Obejmuje to tylko dane pamięci podręcznej; wybierz limit współbieżności po zarezerwowaniu pamięci dla środowiska wykonawczego.
Sprawdź rzeczywisty przydział pamięci serwera
Wagi, bufory tymczasowe, aktywacje, częściowo wypełnione bloki i zarezerwowana pojemność wymagają więcej pamięci. Serwery rozproszone mogą dzielić lub replikować głowy KV. Obsługiwana pamięć podręczna z jednym bajtem na wartość zmniejsza rozmiar samych danych o połowę, ale współczynniki skalowania, obsługa w implementacji i jakość mogą zmienić dostępną pojemność.
Zmierz szczytowy przydział pamięci i wywłaszczanie sekwencji przy reprezentatywnych długościach promptów i odpowiedzi. PagedAttention poprawia przydzielanie bloków; nie usuwa przechowywanych danych kluczy/wartości ani nie sprawia, że długość sekwencji przestaje mieć znaczenie.
Przewodnik inżynierski: pamięć KV cache zawiera wykonywalne obliczenie pojemności.