Paged Attention zarządza współbieżną pamięcią podręczną KV, mapując rosnący stan tokenów każdego żądania na bloki o stałym rozmiarze, które można niezależnie przydzielać i ponownie wykorzystywać.
Ma to znaczenie na domowym serwerze AI, ponieważ aktywne czaty, zadania związane z dokumentami i agenci rzadko mają taką samą długość kontekstu lub kończą się w tym samym czasie. Strategia ciągłej rezerwacji marnuje cenną pamięć akceleratora wokół sekwencji o zmiennej długości. Stronicowanie zmienia układ pamięci, dzięki czemu harmonogram może gęściej wykorzystywać dostępną pojemność.
Współbieżne żądania tworzą pamięci podręczne KV, które rosną w różnym tempie
Każde aktywne żądanie autoregresywne wymaga stanu kluczy i wartości dla przetworzonych tokenów. Jeden czat może zakończyć się po 100 tokenach, podczas gdy inny będzie trwać przez tysiące, dlatego nie można dokładnie określić ich zapotrzebowania na pamięć na początku tworzenia partii.
Autorzy artykułu PagedAttention wskazują na dynamicznie rosnącą pamięć podręczną KV jako wąskie gardło obsługi, które ogranicza tworzenie partii, gdy przydzielanie pamięci jest nieefektywne.
Na domowym serwerze z kilkoma użytkownikami lub agentami działającymi w tle ta zmienność przekształca dużą ilość wolnej pamięci w wiele aktywnych przydziałów o różnych rozmiarach.
Stałe ciągłe rezerwacje marnują pamięć wokół sekwencji o zmiennej długości
Prosty mechanizm wykonawczy może zarezerwować jeden duży, ciągły obszar dla każdego żądania na podstawie maksymalnej długości. Krótkie żądania pozostawiają niewykorzystane miejsce w swojej rezerwacji, a dłuższe mogą wymagać ponownego przydzielenia pamięci lub nadmiernej rezerwacji.
vAttention podsumowuje pierwotną motywację dla stronicowania: rezerwacje pamięci KV wykonywane z wyprzedzeniem powodują fragmentację wewnętrzną. Zmarnowana pamięć zmniejsza liczbę żądań, które mogą pozostać aktywne jednocześnie.
Praktycznym objawem jest limit związany z brakiem pamięci lub niewielki maksymalny rozmiar partii, mimo że suma faktycznie używanych stanów tokenów wydaje się mniejsza niż dostępna pamięć VRAM.
PagedAttention dzieli stan KV na bloki o stałym rozmiarze
PagedAttention zastępuje jeden fizycznie ciągły bufor żądania logiczną sekwencją bloków. W miarę napływania kolejnych tokenów mechanizm wykonawczy przydziela dodatkowe bloki fizyczne ze wspólnej puli.
vLLM wyjaśnia, że bloki KV mogą znajdować się w nieciągłej pamięci fizycznej. Tabela bloków mapuje logiczną kolejność tokenów żądania na te fizyczne lokalizacje.
Model nadal korzysta z właściwej sekwencji. Pośrednie mapowanie zmienia rozmieszczenie pamięci, a nie semantyczną kolejność rozmowy.
Uwolnione bloki wracają do wspólnej puli po zakończeniu żądań
Gdy jedno żądanie zostanie ukończone, jego nieudostępniane bloki można natychmiast zwolnić i ponownie wykorzystać przez inne aktywne lub nowo przyjęte żądanie. Serwer nie musi czekać, aż cała ogromna arena zostanie opróżniona.
Stos wnioskowania firmy NVIDIA udostępnia pojemność pamięci podręcznej KV jako zasób obsługi, który trzeba równoważyć z wagami modelu i obszarem roboczym środowiska wykonawczego.
Recykling na poziomie bloków jest cenny w domu, ponieważ długości żądań są nieregularne: jedna osoba zadaje krótkie pytanie dotyczące inteligentnego domu, podczas gdy inna uruchamia długiego asystenta dokumentów, a agent działający w tle podsumowuje pliki.
Stronicowanie zwiększa współbieżność przez ograniczenie fragmentacji, a nie przez zmniejszenie każdego tokenu
PagedAttention nie sprawia zasadniczo, że tensory kluczy i wartości pojedynczego tokenu stają się mniejsze. Jego główna korzyść pamięciowa wynika z przydzielania pamięci bliższego rzeczywistemu wzrostowi sekwencji oraz umożliwiania współdzielenia tam, gdzie jest ono prawidłowe.
Wskazówki PyTorch dotyczące przetwarzania rozproszonego rozdzielają równoległość modelu od zarządzania pamięcią obsługi. Stronicowanie nie jest równoległością tensorów i samo w sobie nie dzieli wag modelu między procesory GPU.
Jeśli wagi modelu już zajmują niemal całą pamięć urządzenia, stronicowanie nie zapewni dodatkowej pojemności potrzebnej do dużej współbieżności. Poprawia wykorzystanie pozostałego obszaru pamięci KV.
Zarządzanie blokami ma własne koszty i ograniczenia harmonogramowania
Środowisko wykonawcze musi teraz utrzymywać tabele bloków, liczniki odwołań, decyzje dotyczące przydziału oraz jądra mechanizmu uwagi obsługujące układy stronicowane. Bardzo małe partie lub nieobsługiwany sprzęt mogą zmniejszyć tę przewagę.
Artykuł ZimaSpace o współbieżności rodzinnej i presji na pamięć KV pokazuje granicę widoczną dla użytkownika: efektywność pamięci ma znaczenie, ponieważ określa, ile aktywnych kontekstów może współistnieć, zanim kolejka zacznie się wydłużać.
Testuj kilka długości żądań i wzorców ich napływu zamiast jednej syntetycznej partii. Przydatnym punktem odniesienia jest przewodnik ZimaSpace dotyczący przesuwanych okien kontekstu i pamięci KV, ponieważ okno wpływa na ilość stanu zachowywanego przez każdą sekwencję, podczas gdy stronicowanie zmienia sposób przydzielania tego stanu. Rejestruj liczbę aktywnych sekwencji, używane bloki KV, czas oczekiwania w kolejce i wywłaszczenia.
Harmonogramer TGI firmy Hugging Face również rozróżnia harmonogramowanie wstępnego przetwarzania i dekodowania podczas współbieżnej obsługi. Stronicowana pamięć pomaga harmonogramerowi przyjmować zadania, ale sprawiedliwość i opóźnienia nadal zależą od sposobu kolejkowania tych zadań.
Centrum Technologii i Sztucznej Inteligencji
Więcej do przeczytania

Czy kamery domowe mogą synchronizować zdarzenia bez korzystania z chmurowych usług czasu?
Wyjaśnienie działania czasu kamery bez chmury, jego kompromisów związanych ze współdzielonymi zasobami, trzy często zadawane pytania dotyczące rozsyłania zapytań oraz praktyczny protokół weryfikacji.

Czy lokalna usługa AI może wykryć uszkodzone warstwy modelu przed wnioskowaniem?
Wyjaśnienie wykrywania uszkodzeń warstwy modelu oparte na mechanizmach, kompromisy związane ze współdzielonymi zasobami, trzy najczęściej zadawane pytania dotyczące rozgałęziania zapytań oraz praktyczny protokół weryfikacji.

Czy system RAG można przywrócić bez ponownego generowania wszystkich wektorów embeddingowych?
Wyjaśnienie działania mechanizmu przywracania RAG bez ponownego tworzenia osadzeń, kompromisy związane ze współdzielonymi zasobami, trzy często zadawane pytania dotyczące rozsyłania zapytań oraz praktyczny protokół...

