Twój GPU, Twój projekt Płatność krypto bez KYCJak zapłacić
Polski
Moje konto
Przewodnik po pierwszym projekcie

Niewystarczająca pamięć: znajdź, co blokuje, zanim zmienisz GPU.

Błąd pamięci nie oznacza automatycznie, że GPU jest za mały. Zacznij od ustalenia, którego zasobu to dotyczy i w którym momencie nastąpiła awaria, a następnie uruchom ponownie jedno zadanie z tymi samymi ustawieniami. Potem ograniczaj po jednej zmiennej naraz: liczbę jednoczesnych elementów, wymiary lub długość danych. Przydatnym wynikiem jest przypadek, który przechodzi, powtarzalny limit albo lepiej opisany problem — a nie losowo wybrany nowy wynajem.

Na tej stronie

1. Zachowaj komunikat i kontekst, zanim uruchomisz ponownie

Przestań dodawać zadania do kolejki. Zapisz dokładną treść błędu, plik lub pytanie, których dotyczy, liczbę elementów przetwarzanych razem oraz osiągnięty etap. Czy model się ładował, czy obliczenia postępowały, czy wynik był właśnie zapisywany? Trzymaj ustawienia w notatce, a już ukończone wyniki w ich folderze.

Zamrożony ekran lub zamknięta bez wyjaśnienia aplikacja nie wystarczą, by ustalić przyczynę. Odnajdź jej dziennik, jeśli istnieje. Awaria połączenia, nieprawidłowe dane wejściowe i zapełniona pamięć mogą dawać podobne objawy w interfejsie. Jeśli oprogramowanie nic nie precyzuje, napisz „przyczyna nieustalona” i przygotuj minimalny test, zamiast wymyślać diagnozę.

2. Rozróżnij pamięć GPU, pamięć systemową i miejsce na dysku

Pamięć GPU służy elementom obliczeń na karcie. RAM serwera i dysk odpowiadają na inne potrzeby. Pojemności widoczne na kartach GPU BriefGPU nie opisują faktycznie dostępnego RAM-u ani dysku. Sprawdź zasób wskazany w komunikacie oraz informacje o swoim środowisku.

W Pythonie MemoryError oznacza niepowodzenie alokacji pamięci; sama ta nazwa nie oznacza braku VRAM. Kod ENOSPC odpowiada brakowi miejsca na docelowym urządzeniu. Te wskazówki ukierunkowują poszukiwania, ale do zlokalizowania operacji nadal potrzebny jest dziennik aplikacji.

2. Rozróżnij pamięć GPU, pamięć systemową i miejsce na dysku
ObserwacjaPierwsza kontrolaCzego większy GPU sam nie rozwiąże
Komunikat CUDA out of memory podczas obliczeńWykorzystana pamięć karty, inne zadania i rozmiar grupyNiekompatybilność oprogramowania lub uszkodzony plik
MemoryError podczas wczytywania plikówPamięć procesu, ilość danych wczytanych do RAMWczytanie całego folderu do pamięci systemowej
No space left on device podczas eksportuPrzestrzeń i ewentualny limit folderu wyjściowego lub tymczasowegoPełny dysk lub limit miejsca do przechowywania
Aplikacja zamknięta bez czytelnego komunikatuLog, osiągnięty etap i próba na jednym wejściuPrzyczyna wciąż nieznana

3. Wróć do jednego wejścia i tylko jednego aktywnego zadania

Najpierw sprawdź zadania, które sam uruchomiłeś. Podgląd, stara sesja lub drugie narzędzie mogą wciąż pracować. Zamknij porządnie zadania, które stały się zbędne, po zachowaniu ich stanu. Nie kończ procesu, którego nie rozpoznajesz, i nie restartuj całego środowiska, żeby zaoszczędzić kilka minut diagnostyki.

Uruchom ponownie sam element, który zawiódł, nie obniżając jego jakości. Jeśli przechodzi osobno, ale zawodzi w grupie, liczba jednoczesnych elementów staje się tropem. Zmniejsz na przykład grupę z czterech do dwóch, a potem do jednej, jeśli to konieczne. Liczba plików w folderze pozostaje taka sama; zmienia się tylko ilość przetwarzana jednocześnie.

Niektóre narzędzia oferują przetwarzanie sekwencyjne, aby ograniczyć szczyty zużycia pamięci. Diffusers dokumentuje między innymi dzielenie dekodowania grupy obrazów. Ta możliwość zależy od używanego pipeline'u: sprawdź jego opcje, zanim włączysz ustawienie znalezione dla innego modelu.

4. Zmniejsz obciążenie, nie tracąc oczekiwanego rezultatu

Jeśli pojedynczy element zawodzi, przyjrzyj się jego wymiarom lub długości. W przypadku obrazu przejście z 2048 × 2048 na 1024 × 1024 dzieli liczbę pikseli przez cztery. Nie gwarantuje to podzielenia całkowitej pamięci przez cztery: model i pozostałe elementy zachowują własne potrzeby. Zmniejszenie jest dopuszczalne tylko wtedy, gdy wynik zachowuje niezbędne szczegóły.

W przypadku asystenta rozróżnij dostarczone dokumenty, pytanie i wygenerowaną odpowiedź. Cache generowania może zużywać więcej pamięci przy długim kontekście; dokładne mechanizmy zależą od modelu. Przetestuj krótsze zapytanie lub pojedyncze żądanie naraz. Nie usuwaj fragmentu zawierającego odpowiedź, a następnie nie uznawaj, że problem został rozwiązany.

Zawsze zachowuj oryginalne dane wejściowe. Nazwij testowany wariant i opisz, co zmienia. Jeśli narzędzie oferuje podział na kafelki lub przenoszenie niektórych elementów do RAM, sprawdź jego dokumentację i skontroluj łączenia, jakość oraz zaobserwowany czas. Opcja oszczędzająca VRAM może przenieść ograniczenie gdzie indziej.

5. Nie myl pamięci zarezerwowanej z pamięcią użyteczną

W PyTorch pamięć zarezerwowana przez alokator i pamięć zajęta przez tensory to dwie różne miary. Wyczyszczenie nieużywanego cache nie zwalnia wciąż aktywnych tensorów. Polecenie czyszczenia nie zamieni więc zbyt dużego obciążenia w obciążenie obsługiwalne.

Jeśli czysty restart aplikacji pomaga, powtórz następnie ten sam mały przypadek i zapisz wynik. Sukces po restarcie sam w sobie nie dowodzi naprawionego wycieku pamięci. Jeśli użycie rośnie przy każdym identycznym przebiegu, zachowaj tę obserwację i skonsultuj się z dokumentacją lub pomocą techniczną oprogramowania, zanim zaczniesz mnożyć restarty.

Przykład: wyizoluj problem w folderze z dwunastoma obrazami

Oto scenariusz ilustracyjny, bez pomiarów sprzętu. Freelancerka przygotowuje dwanaście obrazów, z których dwa mają duże wymiary i drobny tekst. Przetwarzanie w grupach po cztery kończy się niepowodzeniem. Zachowuje komunikat, a następnie próbuje jeden z dużych obrazów osobno, w pierwotnej jakości. Tabela pokazuje, jak interpretować możliwe obserwacje.

W tym scenariuszu wybiera grupy po dwa dopiero po sprawdzeniu dwóch dużych obrazów razem i kilku zwykłych obrazów. Sprawdza tekst i kontury w wyeksportowanych plikach. Nie uogólnia tego wyniku na wszystkie rozmiary obrazów, wszystkie modele ani inne oprogramowanie.

Przykład: wyizoluj problem w folderze z dwunastoma obrazami
Przebieg scenariuszaHipotetyczna obserwacjaDecyzja lokalna
Cztery obrazy jednocześnieBłąd pamięciZachować błąd i zmniejszyć grupę
Jeden duży obraz, te same ustawieniaPełny i akceptowalny wynikDocelowa jakość może przejść w tym odosobnionym przypadku
Dwa duże obrazy razemPełne i akceptowalne wynikiPrzetestować tę grupę na krótkim wycinku
Obraz znacznie zmniejszonyObliczenia zakończone, tekst nieczytelnyOdrzucić to zmniejszenie mimo technicznego sukcesu

Kiedy inna karta staje się uzasadnionym tropem

Porównaj inną kartę, gdy brak pamięci GPU został zidentyfikowany, niezbędny przypadek sam się nie udaje, a zmniejszenia zgodne z twoją jakością nie wystarczają. Zachowaj oprogramowanie, wersję, parametry i dane wejściowe: taki zapis czyni następną próbę porównywalną. Nie pozwala jednak dokładnie wywnioskować, ile dodatkowych GB wystarczy.

Błąd przy wczytywaniu modelu może też ograniczać sens zmniejszania grupy: znaczna część obciążenia istnieje przed pierwszym wejściem. Opcje precyzji lub kwantyzacji zmieniają warunki wykonania, a czasem wyniki; wymagają osobnej próby. Dodawanie partii nie łączy automatycznie pamięci kilku kart.

Zakończ użyteczną diagnozą

Twoja notatka wyjściowa składa się z pięciu elementów: komunikat i krok, podejrzewany zasób, zachowane dane wejściowe, ustawienie, które działa lub zawodzi, wykonana kontrola jakości. Dopisz to, co pozostaje nieznane. Jeśli żaden mały przypadek nie działa, przerwij powtarzanie pełnej partii i poproś o pomoc, podając te informacje.

Nie usuwaj swoich jedynych oryginałów, aby zwolnić dysk, nie obniżaj kilku parametrów naraz i nie uznawaj częściowego wyniku za sukces. Zarezerwuj czas na zapisanie poprawnych wyników. Diagnoza ma zmniejszyć niepewność; nie musi zamieniać się w niekończącą się sesję regulacji.

Częste pytania

Czy kilkumegabajtowy obraz JPEG może spowodować brak pamięci?

Tak. Waga skompresowanego pliku nie odpowiada bezpośrednio danym używanym podczas jego przetwarzania. Sprawdź jego wymiary, kanały i wymagane operacje. Zachowaj oryginalną wersję i przetestuj pojedynczy obraz, zanim zmodyfikujesz cały folder.

Czy po każdym błędzie mam czyścić wszystkie pamięci podręczne?

Nie. Najpierw ustal, która to pamięć podręczna i jaką pełni funkcję. Usuwanie plików może wymusić ponowne pobranie lub przeliczenie elementów; wyczyszczenie pamięci podręcznej nie zwalnia danych wciąż aktywnych. Korzystaj z udokumentowanych poleceń swojego programu, zachowując kopię tego, co chcesz zatrzymać.

Dlaczego pierwsze przejście działa, a kolejne kończy się błędem?

Możliwych przyczyn jest kilka: bardziej wymagające nowe wejście, inne aktywne zadanie lub dane zachowane przez program. Uruchom ponownie to samo małe wejście po czystym restarcie aplikacji i zanotuj warunki. Ta obserwacja pomaga w diagnozie, ale sama nie dowodzi wycieku pamięci.

Czy mniejsze ustawienie, które kończy obliczenia, wystarcza do zatwierdzenia projektu?

Nie. Trzeba otworzyć wynik i sprawdzić oczekiwane kryteria. Nieczytelny obraz lub odpowiedź sprzeczna z właściwym dokumentem to nadal porażka projektu, nawet jeśli program nie zgłasza już błędu.

Działaj we własnym tempie

Odrobina metody na dobry start.

Otwórz przewodniki