PRZEWODNIK techniczny

Zarządzanie pamięcią GPU i fragmentacja

Jak struktury AI przydzielają, ponownie wykorzystują i odzyskują ograniczoną pamięć na GPU oraz dlaczego pozostałe luki (fragmentacja) mogą powodować błędy braku pamięci, nawet jeśli technicznie pozostaje dużo pamięci.

2 minuty czytaniaOstatnia aktualizacja

Przegląd

Understanding it is key to fitting big models and avoiding mysterious crashes.

Głębokie nurkowanie

Pamięć GPU jest stała i cenna: karta może mieć łącznie 24, 80 lub 192 GB, współdzielonych przez wagę modelu, aktywacje, gradienty, stany optymalizatora i bufory tymczasowe. Wywoływanie sterownika w celu przydzielenia pamięci dla każdej operacji byłoby powolne, więc frameworki takie jak PyTorch używają alokatora pamięci podręcznej, który przechwytuje duże bloki z góry i rozdaje podczęści, a następnie przechowuje uwolnione fragmenty w puli do ponownego użycia. Haczyk polega na fragmentacji: w miarę przydzielania i zwalniania tensorów o różnych rozmiarach wolna przestrzeń rozpada się na rozproszone fragmenty. Możesz mieć w sumie 5 GB wolnego miejsca, ale nie możesz przydzielić ciągłego tensora 2 GB, ponieważ żadna pojedyncza przerwa nie jest wystarczająco duża. Z tego powodu trening może ulec awarii z powodu błędów związanych z brakiem pamięci, pomimo pozornie dostępnego zapasu pamięci.

Wgląd techniczny

Alokator pamięci podręcznej CUDA firmy PyTorch dzieli pamięć na strumienie bloków i ponownie wykorzystuje zwolnione bloki, które odpowiadają żądanym rozmiarom, unikając kosztownych wywołań cudaMalloc/cudaFree. Fragmentacja powstaje, gdy rozdzielonych bloków nie można ponownie połączyć. Pomocne są narzędzia takie jak torch.cuda.empty_cache, opcja PYTORCH_CUDA_ALLOC_CONF rozwijane_segments i migawki pamięci. Nowsze podejścia wykorzystują pomysły dotyczące pamięci wirtualnej, mapując nieciągłe strony fizyczne w ciągły zakres wirtualny, dzięki czemu duże żądania są realizowane pomimo fragmentacji.

Wpływ strategiczny

Koszt i budżet

Decyzje dotyczące architektury wpływają na wydajność i koszty operacyjne przez lata.

Jaśniejsze decyzje

Edukacja techniczna pomaga zespołom wybrać odpowiedni stos, a nie tylko najnowszy.

Kontrola jakości

Lepsze wybory inżynieryjne zmniejszają liczbę incydentów związanych z niezawodnością w produkcji.

Przyszłość zarządzania pamięcią GPU i fragmentacją

Zarządzanie pamięcią staje się coraz inteligentniejsze i bardziej stronicowane, inspirowane systemami operacyjnymi. Techniki takie jak alokatory w stylu pamięci wirtualnej i uwaga stronicowana (używane do zarządzania pamięcią podręczną KV podczas wnioskowania) radykalnie zmniejszają straty i fragmentację. Spodziewaj się, że frameworki domyślnie będą korzystać z rozszerzalnych, defragmentujących alokatorów, lepszej widoczności dzięki wbudowanym profilerom i ściślejszego powiązania z odciążaniem i ponownym obliczaniem, dzięki czemu system automatycznie żongluje procesorem graficznym, procesorem i pamięcią dyskową, aby utrzymać wysokie wykorzystanie i rzadkie awarie.

Implementacja w świecie rzeczywistym

Przebieg szkoleniowy, który ulega awarii z komunikatem „Brak pamięci CUDA” pomimo, że zarezerwowana pamięć pokazuje wolne miejsce, naprawiono przez ustawienie PYTORCH_CUDA_ALLOC_CONF w celu włączenia rozszerzalnych segmentów.

Użycie torch.cuda.memory_summary lub migawki pamięci do zdiagnozowania, które tensory i fragmentacja pochłaniają 80 GB procesora graficznego.

PagedAttention firmy vLLM zarządza pamięcią podręczną KV uwagi na stronach o stałym rozmiarze, aby obsługiwać wiele jednoczesnych żądań czatu bez marnowania pamięci.

Obniżenie rozmiaru wsadu lub włączenie gradientowego punktu kontrolnego w celu zmniejszenia pamięci aktywacyjnej i uniknięcia błędów związanych z brakiem pamięci spowodowanych fragmentacją.

Zagrożenia i poręcze

Optymalizacja jednego testu porównawczego może ukryć szersze słabości systemu.

Koszty infrastruktury i utrzymania są często niedoszacowane.

W miarę jak systemy stają się coraz bardziej złożone, luki w bezpieczeństwie i obserwowalności mogą się zwiększać.

Plan wdrożenia

1

Przed wdrożeniem zdefiniuj docelowe opóźnienia, jakość i koszty.

2

Test porównawczy w realistycznych warunkach obciążenia i danych.

3

Monitorowanie przyrządu pod kątem błędów, dryftu i wpływu użytkownika.

4

Przed skalowaniem przygotuj ścieżki wycofywania zmian i reakcji na incydenty.

Odkrywaj dalej

Free newsletter

Get the daily AI briefing

Three verified AI stories every weekday morning, written in plain English. Free forever, no ads.

One email each weekday. Unsubscribe in one click. We never sell or share your address.

Test yourself

Take the GPU Memory Management and Fragmentation quiz

Instant feedback on every answer, and a shareable certificate with a verifiable ID once you pass a course.

Rozpocznij quiz

Support free AI education. AI Understanding is a 501(c)(3) nonprofit — no ads, no paywall, ever. Make a donation

Następny poradnik

Harmonogramowanie GPU i orkiestracja klastrów

Często zadawane pytania

What is GPU Memory Management and Fragmentation?

Jak struktury AI przydzielają, ponownie wykorzystują i odzyskują ograniczoną pamięć na GPU oraz dlaczego pozostałe luki (fragmentacja) mogą powodować błędy braku pamięci, nawet jeśli technicznie pozostaje dużo pamięci. Zrozumienie tego jest kluczem do dopasowania dużych modeli i uniknięcia tajemniczych awarii.

Co to jest fragmentacja pamięci GPU?

Fragmentacja oznacza, że ​​cała wolna pamięć jest wystarczająca, ale jest ona podzielona na kawałki, więc żadna pojedyncza przerwa nie jest wystarczająco duża dla dużego tensora.

Dlaczego frameworki takie jak PyTorch korzystają z alokatora pamięci podręcznej?

Wywoływanie cudaMalloc/cudaFree dla każdej operacji jest powolne, więc moduł alokacji pamięci podręcznej pobiera duże bloki i ponownie wykorzystuje uwolnione z puli.

Widzisz 5 GB wolnego miejsca, ale nie możesz przydzielić tensora 2 GB. Jaka jest prawdopodobna przyczyna?

Ten klasyczny objaw fragmentacji występuje, gdy istnieje wolna pamięć, ale nie jest to jeden ciągły fragment wystarczająco duży dla żądania.

Które ustawienie PyTorch pomaga zmniejszyć fragmentację, umożliwiając elastyczny wzrost segmentów pamięci?

Ustawienie PYTORCH_CUDA_ALLOC_CONF w celu włączenia funkcji rozwijanych_segments umożliwia alokatorowi powiększanie segmentów i ogranicza awarie związane z fragmentacją.

W jaki sposób PagedAttention vLLM pozwala zmniejszyć straty pamięci podczas wnioskowania?

PagedAttention przechowuje pamięć podręczną KV na stronach o stałym rozmiarze, takich jak pamięć wirtualna systemu operacyjnego, ograniczając fragmentację i wydajnie obsługując wiele żądań.