Dlaczego pamięć podręczna KV rośnie wraz z długością kontekstu domowej sztucznej inteligencji?

Eva Wong jest Technicznym pisarzem i stałym majsterkowiczem w ZimaSpace. Całe życie geek z pasją do homelabów i oprogramowania open-source, specjalizuje się w tłumaczeniu skomplikowanych koncepcji technicznych na przystępne, praktyczne przewodniki. Eva wierzy, że samodzielne hostowanie powinno być zabawą, a nie czymś onieśmielającym. Poprzez swoje samouczki umożliwia społeczności rozwiewanie tajemnic konfiguracji sprzętu, od budowy pierwszego NAS po opanowanie kontenerów Docker.

Pamięć podręczna KV rośnie wraz z długością kontekstu, ponieważ środowisko uruchomieniowe przechowuje klucze i wartości mechanizmu uwagi dla każdego zachowanego tokenu we wszystkich warstwach modelu.

Krótki prompt domowego AI może pozostawić wystarczająco dużo pamięci dla kilku użytkowników, podczas gdy długi dokument, obszerna historia czatu lub ślad działania agenta mogą zużyć znacznie więcej pamięci roboczej bez zmiany samego pliku modelu. Pamięć podręczna jest tworzona podczas przetwarzania promptu i nadal rośnie, gdy model generuje nowe tokeny. Jej rozmiar zależy również od liczby warstw, architektury mechanizmu uwagi, precyzji numerycznej i liczby jednoczesnych żądań. Poniższe sekcje pokazują ten wzrost — od jednego tokenu aż po limit pamięci całego serwera.

Każdy zachowany token dodaje stan mechanizmu uwagi

Podczas wnioskowania transformera każda warstwa tworzy tensory kluczy i wartości na podstawie wcześniej przetworzonych tokenów. Środowisko uruchomieniowe zachowuje te tensory, aby kolejny token mógł odwoływać się do wcześniejszego kontekstu bez ponownego obliczania całej sekwencji.

Badanie vLLM wskazuje stan KV dla każdego tokenu jako jeden z głównych wymogów pamięciowych podczas udostępniania modeli. Nowe tokeny dodają nowe wpisy pamięci podręcznej, a wcześniej zachowane wpisy pozostają dostępne dla kolejnych kroków mechanizmu uwagi.

Pamięć podręczna jest więc zmiennym stanem żądania, a nie częścią statycznych wag modelu. Załadowanie tego samego modelu z dłuższą aktywną rozmową tworzy większe zapotrzebowanie na pamięć.

Rozmiar pamięci podręcznej rośnie w przybliżeniu liniowo wraz z długością zachowanej sekwencji

W przypadku stałej architektury modelu i precyzji pamięci podręcznej podwojenie liczby zachowanych tokenów w przybliżeniu podwaja liczbę wpisów KV przechowywanych dla danego żądania. Zarówno prompt, jak i wygenerowana odpowiedź są wliczane do aktywnej sekwencji.

Badanie H2O opisuje, jak pamięć podręczna KV skaluje się wraz z długością sekwencji i rozmiarem partii. Zależność pozostaje w przybliżeniu liniowa, ponieważ każdy dodatkowy token wnosi klucze i wartości w każdej warstwie tworzącej pamięć podręczną.

Dlatego zwiększenie ustawienia środowiska uruchomieniowego z małego kontekstu do znacznie większego maksimum może zmienić praktyczny limit pamięci, nawet gdy model korzysta z identycznych wag.

Ustawienie maksymalne i rzeczywiste wykorzystanie to dwie różne kwestie. Niektóre środowiska uruchomieniowe przydzielają bloki pamięci podręcznej na żądanie, a inne wcześniej rezerwują większy obszar, aby zagwarantować możliwość dalszego wzrostu.

Architektura modelu zmienia liczbę bajtów przypadających na token

Dwa modele o tej samej liczbie parametrów mogą wymagać różnej ilości pamięci KV, ponieważ mogą korzystać z innej liczby warstw, innych wymiarów głów, innej liczby głów mechanizmu uwagi, grupowego mechanizmu uwagi na zapytania lub mechanizmu uwagi z wieloma zapytaniami.

Badanie KIVI analizuje precyzję pamięci podręcznej KV i pokazuje, że przechowywanie kluczy i wartości przy użyciu mniejszej liczby bitów może znacząco zmniejszyć szczytowe zużycie pamięci. Korzyść ta dotyczy stanu żądania, a nie zmniejszenia rozmiaru bazowych wag modelu.

Architektury z grupowym mechanizmem uwagi na zapytania i z mechanizmem uwagi z wieloma zapytaniami współdzielą głowy kluczy i wartości między większą liczbą głów zapytań, co może zmniejszyć liczbę bajtów pamięci podręcznej przypadających na token w porównaniu z pełnym wielogłowicowym mechanizmem uwagi. Liczba warstw i szerokość głów nadal mnożą rozmiar zachowywanego stanu.

Dokładne oszacowanie powinno więc uwzględniać konkretną architekturę modelu i format pamięci podręcznej środowiska uruchomieniowego, a nie tylko ogólną regułę liczby bajtów na token skopiowaną z innego modelu.

Generowane tokeny nadal powiększają pamięć podręczną po wstępnym przetworzeniu promptu

Przetwarzanie promptu tworzy początkową pamięć podręczną dla kontekstu wejściowego. Następnie autoregresywne dekodowanie dopisuje stan dla każdego zaakceptowanego tokenu wyjściowego, aby kolejne tokeny mogły odwoływać się do pełnej rozmowy.

vAttention traktuje dynamiczny wzrost pamięci podręcznej jako problem alokacji, ponieważ końcowa długość odpowiedzi jest nieznana w chwili rozpoczęcia żądania. Zbyt duża rezerwacja marnuje pamięć, a zbyt mała może wymusić wstrzymanie żądania lub dodatkową pracę związaną z rozszerzaniem pamięci.

Prompt, który początkowo bez problemu mieści się w pamięci, może przekroczyć jej limit podczas długiej odpowiedzi. Limity wyjścia chronią więc nie tylko długość odpowiedzi i czas generowania, lecz także pamięć.

Równoczesni użytkownicy zwielokrotniają oddzielny stan kontekstu

Wagi modelu mogą być współdzielone między żądaniami, ale każda aktywna rozmowa zwykle ma własną historię tokenów i własną pamięć podręczną KV. Pięciu użytkowników z długimi kontekstami nie współdzieli jednej uniwersalnej pamięci podręcznej tylko dlatego, że korzystają z tego samego modelu.

Najnowsze badania nad zarządzaniem KV przedstawiają rezerwacje dla poszczególnych żądań jako główny kompromis między efektywnym wykorzystaniem pamięci a ryzykiem wstrzymania żądania. Nieznane długości odpowiedzi sprawiają, że łączny szczyt zużycia jest trudniejszy do przewidzenia niż na podstawie samej liczby użytkowników.

Współdzielone prefiksy promptów można czasem ponownie wykorzystać jako stan pamięci podręcznej, jeśli środowisko uruchomieniowe obsługuje dokładne dopasowanie prefiksu, jednak prywatna historia czatu i rozbieżne odpowiedzi nadal tworzą oddzielne gałęzie.

Przewodnik sprzętowy ZimaSpace traktuje kontekst i współbieżność jako wymagania pamięciowe wykraczające poza sam plik modelu. Test z jednym użytkownikiem może więc zaniżać ilość pamięci RAM lub VRAM potrzebną domowemu asystentowi.

Stronicowanie, kwantyzacja i eksmisja zmieniają limit, ale nie przyczynę

Alokacja stronicowana zmniejsza fragmentację, dzieląc stan pamięci podręcznej na mniejsze bloki, dzięki czemu środowisko uruchomieniowe nie musi rezerwować jednego nadmiernie dużego, ciągłego obszaru dla każdej możliwej sekwencji.

PagedAttention zapewnia alokację blokową, natomiast kwantyzacja pamięci podręcznej zmniejsza liczbę bajtów przypadających na przechowywaną wartość, a zasady eksmisji usuwają wybrane starsze wpisy. Każda z tych metod zmienia ilość kontekstu, która mieści się w pamięci, lecz zachowany stan mechanizmu uwagi nadal rośnie wraz z gromadzeniem tokenów.

Eksmisja lub okna przesuwne mogą ograniczyć zużycie pamięci przez usuwanie wcześniejszych tokenów, ale model nie może już odwoływać się do usuniętego stanu za pośrednictwem standardowej ścieżki pełnego kontekstu. Kompresja i selektywne zachowywanie danych również mogą wiązać się z kompromisami dotyczącymi jakości lub konkretnego obciążenia.

Zmierz zużycie pamięci podręcznej na rzeczywistym modelu, z rzeczywistym kontekstem, precyzją pamięci podręcznej, rozmiarem partii i liczbą użytkowników. Praktyczny limit zostaje osiągnięty, gdy kolejnego tokenu lub żądania nie można przyjąć bez eksmisji, przeniesienia do innej pamięci, ponownego obliczania lub wystąpienia błędu.

FAQ

Czy plik modelu staje się większy po zwiększeniu długości kontekstu?

Nie. Wagi modelu pozostają takie same. Dodatkowa pamięć to stan środowiska uruchomieniowego tworzony dla aktywnego promptu i wygenerowanych tokenów.

Czy ustawienie dużego maksymalnego kontekstu zawsze natychmiast przydziela całą pamięć KV?

Nie. Sposób alokacji zależy od środowiska uruchomieniowego. Niektóre systemy wcześnie rezerwują pojemność, podczas gdy systemy stronicowane przydzielają bloki w miarę przyjmowania tokenów.

Czy pamięć RAM systemu może przechowywać pamięć podręczną KV, gdy pamięć VRAM jest pełna?

Niektóre środowiska uruchomieniowe mogą przenosić pamięć podręczną do innej pamięci, ale transfery zwiększają opóźnienia i zależą od obsługi programowej, przepustowości oraz aktywnej ścieżki mechanizmu uwagi.

Centrum Technologii i Sztucznej Inteligencji

Więcej do przeczytania

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.