Fragmentacja modelu rozdziela wymagany stan modelu między wiele urządzeń, dzięki czemu model przekraczający pamięć pojedynczego akceleratora może nadal zostać załadowany i uruchomiony.
W przypadku domowego serwera AI ważne pytanie nie brzmi, czy checkpoint został dostarczony jako kilka plików, lecz czy wagi, warstwy, tensory lub inny stan używany w czasie działania rzeczywiście znajdują się na różnych urządzeniach. Fragmentacja może zmienić niemożliwe do spełnienia wymaganie dotyczące pamięci jednej karty GPU w wykonalne wdrożenie wielourządzeniowe, ale fragmenty nadal muszą wymieniać dane lub przekazywać sobie pracę między etapami, dlatego kolejnymi ograniczeniami stają się przepustowość połączeń, nierównowaga między urządzeniami i obsługa po stronie środowiska uruchomieniowego.
Fragmentacja w środowisku uruchomieniowym rozdziela stan modelu między urządzenia
Działający model zawiera tensory, które muszą być dostępne podczas wykonywania jego warstw. Fragmentacja zmienia sposób rozmieszczenia danych, tak aby różne urządzenia przechowywały różne części zamiast replikować cały stan wszędzie.
Tensor rozproszony może korzystać z rozmieszczenia tensora fragmentowanego, przypisując rozproszone wymiary do siatki urządzeń zamiast przechowywać je identycznie na każdym procesie.
Bezpośrednią korzyścią jest mniejsze zajęcie pamięci na każdym urządzeniu. Kosztem na poziomie całego systemu jest to, że żadne pojedyncze urządzenie nie ma już wszystkich danych potrzebnych do każdej operacji, więc koordynacja staje się częścią procesu wnioskowania.
Fragmenty checkpointu to nie to samo co fragmentacja działającego modelu
Duże repozytoria modeli często dzielą checkpoint na wiele plików, aby można było je pobierać i ładować przyrostowo. Taka decyzja dotycząca pakowania sama w sobie nie określa, gdzie tensory znajdą się po zakończeniu ładowania przez środowisko uruchomieniowe.
Fragmentacja na poziomie plików i rozmieszczenie w środowisku uruchomieniowym pozostają odrębnymi kwestiami, ponieważ moduł ładujący może łączyć fragmentowane checkpointy z dystrybucją między wiele urządzeń.
Użytkownik domowego serwera może więc widzieć na dysku dziesiątki fragmentów `.safetensors`, podczas gdy środowisko uruchomieniowe nadal próbuje umieścić cały model na jednej karcie GPU. Z drugiej strony środowisko uruchomieniowe może podczas ładowania ponownie podzielić checkpoint na inny układ wielourządzeniowy.
Planowanie pojemności powinno opierać się na rzeczywistej mapie urządzeń i zajętości pamięci po uruchomieniu, a nie na założeniu, że liczba plików w repozytorium ujawnia topologię wnioskowania.
Fragmentacja wprowadza komunikację lub przekazywanie pracy między etapami
Gdy jedno urządzenie generuje wartości potrzebne innemu fragmentowi, dane muszą zostać przesłane przez połączenie między urządzeniami albo zsynchronizowane za pomocą operacji kolektywnej. Dokładny ruch zależy od tego, czy środowisko uruchomieniowe dzieli tensory wewnątrz warstw, umieszcza różne zakresy warstw na różnych urządzeniach, czy też zbiera fragmentowany stan dopiero wtedy, gdy jest potrzebny.
Różne strategie wnioskowania na wielu urządzeniach wiążą się z różnymi kompromisami między wzorcami komunikacji a rozmieszczeniem pamięci.
Dlatego dwie karty GPU o wystarczającej łącznej pamięci VRAM mogą nadal obsługiwać model powoli. Przenoszenie aktywacji lub synchronizowanie częściowych wyników może zdominować działanie, gdy PCIe albo inne połączenie jest znacznie wolniejsze niż lokalna pamięć akceleratora.
Nierówne urządzenia mogą sprawić, że jeden fragment stanie się wąskim gardłem
Heterogeniczny domowy serwer może łączyć karty GPU o różnych rozmiarach pamięci, szybkości obliczeń, szerokości połączeń lub generacjach. Matematycznie równy podział nadal może sprawić, że tempo całego żądania będzie wyznaczać najwolniejsze albo najmniejsze urządzenie.
Narzędzia do rozmieszczania warstw i przenoszenia danych do innych urządzeń muszą więc uwzględniać rzeczywistą wydajność urządzeń, zamiast zakładać symetryczny sprzęt. Jawne rozproszone wykonywanie modelu korzysta z konfiguracji równoległości, a nie z automatycznej abstrakcji wspólnej puli pamięci.
Praktyczny układ może przydzielać większej karcie GPU więcej warstw albo utrzymywać elementy wrażliwe na opóźnienia na najszybszej ścieżce. Celem nie jest równa liczba fragmentów, lecz zrównoważona ścieżka krytyczna, która mieści się na każdym urządzeniu.
Mierz zużycie pamięci na każdym urządzeniu, jego wykorzystanie, czas transferu i przerwy bezczynności przy użyciu tego samego promptu. Fragment, który stale czeka lub powoduje przenoszenie danych poza pamięć, wskazuje, że wydajność ogranicza topologia, a nie surowa łączna ilość pamięci VRAM.
Fragmentacja modelu ma przede wszystkim znaczenie jako narzędzie zapewniające możliwość załadowania modelu
Fragmentacja jest najbardziej wartościowa wtedy, gdy model bez podziału w ogóle nie mieści się na jednym urządzeniu. Gdy model można już załadować, optymalizacja koncentruje się na koszcie połączeń między urządzeniami, przetwarzaniu wsadowym, rozmieszczeniu pamięci podręcznej KV oraz na tym, czy mniejszy lub skwantyzowany model nie byłby prostszy.
Jedną z konkretnych strategii obliczeniowych jest wnioskowanie z równoległością tensorową; fragmentacja modelu to szerszy problem rozmieszczenia, który dotyczy tego, który wymagany stan powinien znajdować się na którym urządzeniu.
Nie traktuj łącznej pamięci VRAM jak jednej przejrzystej puli. Fragmentacja może sprawić, że oddzielne zasoby pamięci będą współpracować, ale każde środowisko uruchomieniowe nadal ma reguły rozmieszczania i koszty komunikacji, które decydują o użyteczności takiego wdrożenia.
Najczęściej zadawane pytania
Czy fragmentowany checkpoint to to samo co fragmentowany działający model?
Nie. Fragmenty checkpointu dzielą pliki na potrzeby przechowywania lub ładowania, natomiast fragmentacja w środowisku uruchomieniowym określa, który stan modelu znajduje się na którym urządzeniu podczas wnioskowania.
Czy fragmentacja modelu to to samo co równoległość tensorowa?
Nie. Równoległość tensorowa to jeden ze sposobów wykonywania fragmentowanego modelu poprzez dzielenie operacji tensorowych; fragmentacja obejmuje także strategie rozmieszczania warstw, etapów, parametrów i innych elementów.
Czy dwie karty GPU po 12 GB automatycznie zapewniają jedną użyteczną pulę 24 GB?
Nie. Środowisko uruchomieniowe musi jawnie podzielić model, a komunikacja, zduplikowany stan, pamięć podręczna KV i zapas pamięci na każdym urządzeniu zmniejszają ilość łącznej pojemności, którą można praktycznie wykorzystać.
Centrum Technologii i Sztucznej Inteligencji
Więcej do przeczytania

Czym jest stan Plexa i które jego elementy muszą być zachowane?
Trwały stan Plex to informacje, które zachowują konfigurację serwera po ponownym uruchomieniu i odbudowie; multimedia oraz tymczasowe dane transkodowania pełnią odrębne funkcje.

Jak Plex obsługuje uwierzytelnianie w sesjach lokalnych i zdalnych?
Uwierzytelnianie w Plex rozpoczyna się od tożsamości serwera i konta, a następnie lokalne lub zdalne ścieżki sieciowe określają dostępność oraz sposób nawiązywania bezpiecznego połączenia.

Dlaczego wyszukiwanie w Plex może zwalniać wraz ze wzrostem ilości danych biblioteki?
Sam wzrost biblioteki nie jest diagnozą. Zanim obwinisz rozmiar bazy danych, przetestuj kształt zapytań, indeksy, stan pamięci podręcznej, opóźnienia pamięci masowej i aktywność zapisu.

