Pliki modeli mapowane w pamięci mogą ograniczyć duplikowanie pamięci RAM, ponieważ procesy odwołują się do tych samych czystych stron wspieranych przez plik za pośrednictwem pamięci podręcznej stron systemu operacyjnego.
Załadowanie dwóch lokalnych procesów roboczych modelu nie zawsze wymaga dwóch pełnych kopii pliku z wagami w pamięci fizycznej. Dzięki mapowaniu pamięci każdy proces otrzymuje adresy wirtualne powiązane z przesunięciami w pliku, a strony są ładowane na żądanie. System operacyjny może obsłużyć identyczne czyste strony z jednej buforowanej kopii fizycznej, zachowując oddzielny prywatny stan wykonawczy każdego procesu.
Mapowanie pamięci łączy adresy wirtualne z przesunięciami w pliku
Mapowany plik pojawia się w przestrzeni adresowej procesu bez konieczności odczytywania całego pliku przez aplikację do osobnego bufora sterty. Dostęp do nieobecnej strony wywołuje błąd strony; jądro ładuje odpowiednią stronę wspieraną przez plik lub odnajduje ją, a następnie aktualizuje tablicę stron procesu.
Instrukcja mapowania pamięci systemu Linux opisuje mapowania MAP_SHARED i MAP_PRIVATE oraz zależność między aktualizacjami mapowania a bazowym obiektem. Tylko do odczytu wagi modelu zwykle pozostają czystymi danymi wspieranymi przez plik, dzięki czemu mogą być ponownie wykorzystywane z pamięci podręcznej stron. Rozróżnienie to pozostaje istotne w realistycznych warunkach pracy domowego systemu.
Stronicowanie na żądanie może skrócić uruchamianie i ograniczyć pamięć rezydentną, gdy używana jest tylko część modelu. Może jednak przenieść koszt na pierwszy dostęp, przez co błędy zimnych stron i opóźnienia pamięci masowej mogą pojawić się podczas wnioskowania zamiast w fazie jawnego ładowania.
Pamięć podręczna stron może jednocześnie obsługiwać kilka procesów
Dwa procesy mogą mapować ten sam i-węzeł modelu i te same przesunięcia w różnych przestrzeniach adresów wirtualnych. Gdy oba odczytują tę samą czystą stronę, jądro może zamapować tę samą buforowaną stronę fizyczną w obu tablicach stron. Mapowania wirtualne są oddzielne, ale bazowe dane rezydentne mogą być współdzielone.
Dokumentacja systemu Linux dotycząca danych mapowania stron wyjaśnia, jak przestrzeń użytkownika może sprawdzać mapowania stron i informacje o ramkach stron, z uwzględnieniem ograniczeń dostępu. Interfejsy te pomagają ustalić, czy pozornie oddzielne regiony wirtualne wskazują na współdzielone strony fizyczne. Stan pośredni powinien pozostać widoczny podczas późniejszej diagnostyki i przeglądu.
Dlatego dodawanie wartości RSS poszczególnych procesów może zawyżać całkowite zużycie pamięci fizycznej: współdzielona strona jest wykazywana jako rezydentna w każdym procesie. Proporcjonalny rozmiar zbioru (PSS) rozdziela współdzielone strony między mapowania i zwykle lepiej nadaje się do szacowania łącznego obciążenia procesów roboczych modeli.
Prywatny stan i zmodyfikowane strony nadal się powielają
Pamięci podręczne KV, aktywacje, obszary alokatora, bufory tokenizera i stan żądań są tworzone osobno dla każdego procesu roboczego lub sesji. Zapis za pośrednictwem mapowania prywatnego wywołuje kopiowanie przy zapisie, tworząc anonimową stronę, której nie można już współdzielić z czystą kopią wspieraną przez plik. Różne wersje pliku również uniemożliwiają ponowne wykorzystanie.
Instrukcja smaps systemu Linux klasyfikuje mapowania jako prywatne, współdzielone, czyste i zmodyfikowane oraz dokumentuje smaps dla każdego mapowania. Kategorie te wyjaśniają, dlaczego dwa procesy robocze współdzielące wagi mogą nadal wykazywać znaczny przyrost pamięci wraz ze wzrostem współbieżności i długości kontekstu.
Granica jest taka, że mapowanie ogranicza duplikowanie czystych wag, ale nie całkowite zużycie pamięci podczas wnioskowania. Pliki modeli zamontowane przez sieć mogą również powodować niestabilne opóźnienia błędów stron, a programy ładujące z kompresją lub transformacją mogą alokować drugą rozpakowaną reprezentację, niwecząc oczekiwane współdzielenie.
Porównaj jeden proces roboczy z dwoma procesami roboczymi wykorzystującymi mapowanie
Rozpocznij z pustą pamięcią podręczną, uruchom jeden proces roboczy modelu, wykonaj ustalony prompt i zarejestruj czas uruchamiania, błędy stron, RSS, PSS oraz prywatną zmodyfikowaną pamięć. Uruchom drugi identyczny proces roboczy i powtórz pomiar bez zmieniania pliku modelu ani flag programu ładującego.
Odnieś wynik do kompromisów związanych z kompresją opisanych w kompromisach związanych z kompresją: mniejsze pliki pomagają w przechowywaniu, natomiast korzyści z mapowania zależą od faktycznie używanej reprezentacji w pamięci. Sprawdź mapowanie każdego modelu w smaps, zamiast opierać się na sumie dla jednego procesu.
Test uznaj za zaliczony, jeśli drugi proces roboczy dodaje znacznie mniej pamięci zajmowanej przez wagi niż pierwszy, generując ten sam wynik i zapewniając akceptowalne opóźnienie przy zimnym starcie. Jeśli PSS niemal się podwaja, przed uznaniem mmap za nieskuteczne sprawdź tożsamość pliku, mapowania zapisywalne, dekompresję i ukryte kopie.
Centrum Technologii i Sztucznej Inteligencji
Więcej do przeczytania

Kalibracja oceny prywatnego wyszukiwania: jak surowe podobieństwo staje się użytecznym wskaźnikiem pewności
Dowiedz się, dlaczego podobieństwo cosinusowe nie jest miarą pewności, jak oznaczone zapytania służą do kalibracji wyników oraz jak monitorować progi, gdy zmienia się prywatny...

Lokalność NUMA w lokalnej sztucznej inteligencji: dlaczego rozmieszczenie pamięci zmienia tempo zasilania akceleratora
Dowiedz się, jak topologia CPU, pamięci RAM i PCIe wpływa na zasilanie akceleratora danymi, dlaczego automatyczne rozmieszczanie może się różnić oraz jak bezpiecznie testować...

Prywatne ścieżki audytowe AI: jak dzienniki zdarzeń odtwarzają decyzje agentów
Dowiedz się, co musi rejestrować ścieżka audytu agenta, dlaczego zwykłe logi są niekompletne oraz jak odtworzyć prywatny przepływ pracy bez ujawniania nieprzetworzonych danych.

