1. Bewaar het bericht en de context voordat je opnieuw start
Stop met het toevoegen van taken aan de wachtrij. Noteer de exacte tekst van de fout, het betreffende bestand of de vraag, het aantal items dat samen wordt verwerkt en de stap die is bereikt. Was het model aan het laden, ging de berekening vooruit of werd de uitvoer weggeschreven? Bewaar de instellingen in een notitie en de al voltooide resultaten in hun map.
Een bevroren scherm of een applicatie die zonder uitleg sluit is niet genoeg om de oorzaak vast te stellen. Zoek het logboek op wanneer dat bestaat. Een verbindingsstoring, een ongeldige invoer en een volgelopen geheugen kunnen vergelijkbare symptomen in de interface veroorzaken. Als de software niets vermeldt, schrijf dan "oorzaak onbepaald" en bereid een minimale test voor in plaats van een diagnose te verzinnen.
2. Maak onderscheid tussen GPU-geheugen, systeemgeheugen en schijfruimte
Het GPU-geheugen dient voor de berekeningselementen op de kaart. Het RAM van de server en de opslag voorzien in andere behoeften. De capaciteiten die op de GPU-fiches van BriefGPU worden vermeld, beschrijven niet het daadwerkelijk beschikbare RAM of de schijf. Controleer de resource die in het bericht wordt genoemd en de informatie van je omgeving.
In Python duidt MemoryError op een mislukte geheugentoewijzing; die naam alleen duidt niet op een tekort aan VRAM. De code ENOSPC komt overeen met een tekort aan ruimte op het beoogde apparaat. Deze aanwijzingen sturen het onderzoek, maar het logboek van de applicatie blijft nodig om de bewerking te lokaliseren.
| Observatie | Eerste controle | Wat een grotere GPU niet alleen oplost |
|---|---|---|
| Bericht CUDA out of memory tijdens de berekening | Gebruikt kaartgeheugen, andere taken en grootte van de groep | Een incompatibiliteit van de software of een beschadigd bestand |
| MemoryError tijdens het lezen van de bestanden | Procesgeheugen, hoeveelheid gegevens die in RAM wordt geladen | Het laden van de hele map in het systeemgeheugen |
| No space left on device tijdens een export | Ruimte en eventueel quotum van de uitvoer- of tijdelijke map | Een volle schijf of een opslaglimiet |
| Applicatie gesloten zonder bruikbaar bericht | Logboek, bereikte stap en test met één enkele invoer | Een nog onbekende oorzaak |
3. Ga terug naar één invoer en één actieve taak
Controleer eerst de processen die je zelf hebt gestart. Een voorbeeld, een oude sessie of een tweede tool kan nog bezig zijn. Sluit taken die nutteloos zijn geworden netjes af nadat je hun status hebt bewaard. Beëindig geen proces dat je niet herkent en herstart niet de hele omgeving om een paar minuten diagnostiek te winnen.
Probeer de invoer die is mislukt opnieuw, alleen, zonder de kwaliteit te verlagen. Als die afzonderlijk slaagt maar in een groep mislukt, wordt het aantal gelijktijdige items een spoor. Reduceer bijvoorbeeld een groep van vier naar twee, en daarna naar één indien nodig. Het aantal bestanden in de map blijft gelijk; alleen de hoeveelheid die tegelijk wordt verwerkt verandert.
Sommige tools bieden sequentiële verwerking om geheugenpieken te beperken. Diffusers documenteert met name het opsplitsen van het decoderen van een groep afbeeldingen. Deze mogelijkheid hangt af van de gebruikte pipeline: raadpleeg de opties ervan voordat je een instelling activeert die voor een ander model is gevonden.
4. Verminder de belasting zonder het gevraagde resultaat te verliezen
Als één enkele invoer mislukt, onderzoek dan de afmetingen of de lengte ervan. Voor een afbeelding: van 2.048 × 2.048 naar 1.024 × 1.024 gaan deelt het aantal pixels door vier. Dat garandeert geen totaal geheugen dat door vier is gedeeld: het model en de andere elementen behouden hun eigen behoeften. Een vermindering is alleen acceptabel als de uitvoer de nodige details behoudt.
Voor een assistent onderscheid je de aangeleverde documenten, de vraag en het gegenereerde antwoord. De generatiecache kan meer geheugen gebruiken bij een lange context; de exacte mechanismen hangen van het model af. Test een kortere aanvraag of slechts één verzoek tegelijk. Verwijder niet de passage die het antwoord bevat en concludeer dan niet dat het probleem is opgelost.
Bewaar altijd de oorspronkelijke invoer. Geef de testvariant een naam en noteer wat die verandert. Als de tool een opdeling in tegels of het verplaatsen van bepaalde onderdelen naar het RAM biedt, raadpleeg dan de documentatie en controleer de aansluitingen, de kwaliteit en de waargenomen tijd. Een optie die VRAM bespaart, kan de beperking elders leggen.
5. Verwar gereserveerd geheugen niet met nuttig geheugen
Bij PyTorch zijn het geheugen dat de allocator reserveert en het geheugen dat de tensoren innemen twee verschillende metingen. De ongebruikte cache leegmaken maakt nog actieve tensoren niet vrij. Een opschooncommando verandert een te grote belasting dus niet in een compatibele belasting.
Als een schone herstart van je applicatie helpt, speel dan daarna hetzelfde kleine geval opnieuw af en noteer het resultaat. Een succes na een herstart bewijst op zichzelf niet dat een geheugenlek is verholpen. Als het gebruik bij elke identieke passage toeneemt, bewaar die observatie en raadpleeg de documentatie of de ondersteuning van de software voordat je de herstarts opstapelt.
Voorbeeld: het probleem isoleren in een map met twaalf afbeeldingen
Hier volgt een illustratief scenario, zonder hardwaremetingen. Een freelancer bereidt twaalf afbeeldingen voor, waarvan twee met grote afmetingen en fijne tekst. De verwerking in groepen van vier mislukt. Ze bewaart de foutmelding en probeert vervolgens een van de grote afbeeldingen apart, op de oorspronkelijke kwaliteit. De tabel laat zien hoe je mogelijke observaties kunt interpreteren.
In dit scenario kiest ze pas voor groepen van twee nadat ze de twee grote afbeeldingen samen en een paar gewone afbeeldingen heeft gecontroleerd. Ze controleert de tekst en de contouren in de geëxporteerde bestanden. Ze veralgemeent dit resultaat niet naar alle afbeeldingsformaten, alle modellen of andere software.
| Uitproberen van het scenario | Hypothetische observatie | Lokale beslissing |
|---|---|---|
| Vier afbeeldingen tegelijk | Geheugenfout | De fout bewaren en de groep verkleinen |
| Eén grote afbeelding, dezelfde instellingen | Volledige en acceptabele uitvoer | De doelkwaliteit kan op dit geïsoleerde geval worden gehaald |
| Twee grote afbeeldingen samen | Volledige en acceptabele uitvoer | Deze groep op een kort stuk testen |
| Sterk verkleinde afbeelding | Berekening voltooid, tekst onleesbaar | Deze verkleining verwerpen ondanks het technische succes |
Wanneer een andere capaciteit een gerechtvaardigd spoor wordt
Vergelijk een andere kaart wanneer een gebrek aan GPU-geheugen is vastgesteld, het onmisbare geval alleen mislukt en verkleiningen die met je kwaliteit te verenigen zijn niet volstaan. Bewaar de betrokken software, versie, parameters en invoer: dit dossier maakt de volgende test vergelijkbaar. Het laat niet toe om precies af te leiden hoeveel extra GB zullen volstaan.
Een fout bij het laden van het model kan ook het nut van het verkleinen van de groep beperken: een belangrijk deel van de belasting bestaat al vóór de eerste invoer. Opties voor precisie of kwantisatie veranderen de uitvoeringsomstandigheden en soms de resultaten; ze vragen een aparte test. Het toevoegen van batches verenigt niet automatisch het geheugen van meerdere kaarten.
Eindig met een bruikbare diagnose
Je afsluitende notitie bestaat uit vijf elementen: melding en stap, vermoede resource, bewaarde invoer, instelling die slaagt of mislukt, uitgevoerde kwaliteitscontrole. Voeg toe wat nog onbekend blijft. Als geen enkel klein geval werkt, stop dan met het herhalen van de volledige batch en vraag hulp met deze informatie.
Verwijder niet je enige originelen om schijfruimte vrij te maken, verlaag niet meerdere parameters tegelijk en beschouw een gedeeltelijke uitvoer niet als een succes. Reserveer tijd om de geldige resultaten op te slaan. De diagnose moet de onzekerheid verkleinen; ze hoeft niet uit te monden in een eindeloze reeks aanpassingen.