Co PagedAttention zmienia w przydzielaniu pamięci KV dla modeli LLM?
Tłumaczenie automatyczne
Ten artykuł został automatycznie przetłumaczony z angielskiego oryginału.
PagedAttention pozwala przechowywać pamięć podręczną mechanizmu uwagi dla żądania w oddzielnych blokach pamięci o stałym rozmiarze zamiast w jednym dużym, ciągłym obszarze. Tablica bloków mapuje logiczne pozycje tokenów żądania na fizyczne bloki. Zmniejsza to potrzebę rezerwowania z góry pamięci na maksymalną możliwą długość sekwencji żądania.
Główną korzyścią jest bardziej elastyczny przydział pamięci KV dla równoczesnych żądań. Nie zmniejsza to ilości danych kluczy i wartości wymaganej dla każdego przechowywanego tokena.
Obliczanie niewykorzystanego miejsca w blokach
Rozważmy przykładową implementację z blokami na 16 tokenów. Sekwencja licząca 35 tokenów wymaga trzech bloków, które mieszczą 48 tokenów. Trzynaście pozycji w ostatnim bloku pozostaje niewykorzystanych: około 27% przydzielonych pozycji dla tej krótkiej sekwencji.
Tylko ostatni blok może być częściowo wypełniony. W miarę wydłużania się sekwencji niewykorzystane miejsce stanowi coraz mniejszą część przydzielonej pamięci. Rzeczywisty rozmiar bloku i obsługiwane układy zależą od środowiska wykonawczego, backendu mechanizmu uwagi i wersji.
Publikacja o PagedAttention opisuje projekt mapowania i przydzielania pamięci. Przydziela dodatkowe bloki, gdy sekwencja rośnie, i zwalnia je po zakończeniu żądania, zamiast rezerwować duży ciągły obszar dla każdego żądania.
Współdzielenie wymaga więcej niż przydzielania pamięci
Wiele żądań może odwoływać się do tego samego zgodnego bloku pamięci podręcznej. Buforowanie prefiksów znajduje bloki nadające się do ponownego wykorzystania dla identycznych prefiksów; obsługa kopiowania przy zapisie pozwala żądaniom się różnicować bez uszkodzenia współdzielonego stanu. Układ blokowy to umożliwia, ale nie zapewnia automatycznie zasad wyszukiwania w pamięci podręcznej ani nie gwarantuje ponownego wykorzystania między żądaniami.
Pierwotne wprowadzenie do vLLM podawało 60–80% zmarnowanej pamięci w porównywanych wcześniejszych metodach przydzielania oraz poniżej 4% w zmierzonych obciążeniach PagedAttention. Powyższe obliczenie dla krótkiej sekwencji pokazuje, dlaczego wartość poniżej 4% nie jest uniwersalną górną granicą. Porównania wykazujące duże wzrosty przepustowości obejmują też różnice w całym środowisku wykonawczym, więc nie należy przypisywać ich wyłącznie przydzielaniu pamięci.
Mierz przydzielone bloki, wykorzystane pozycje tokenów, usunięcia z pamięci podręcznej lub wywłaszczenia oraz liczbę żądań, które można obsługiwać równocześnie. Porównuj te same długości i precyzję pamięci podręcznej. Jeśli same dane KV przekraczają już pojemność pamięci, przydzielanie blokowe nie sprawi, że znikną; może być też potrzebna mniejsza liczba głów KV, obsługiwana kwantyzacja pamięci podręcznej lub mniejsze obciążenie.
Poradnik inżynierski: PagedAttention zawiera przykład tablicy bloków.