Czym jest fragmentowanie modelu i dlaczego ma znaczenie w kontekście limitów pamięci 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.

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

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.