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ść:

ModelWarstwy / głowy KV / wymiar głowyTokeny na sekwencjęSame dane pamięci podręcznej na sekwencję
Llama 3.1 8B32 / 8 / 1288,1921 GiB
Llama 3.1 8B32 / 8 / 128131,07216 GiB
Llama 3.1 70B80 / 8 / 1284,0961.25 GiB
Llama 3.1 70B80 / 8 / 128131,07240 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.