GPU's voor je projecten · crypto-betaling zonder KYC Hoe huren
Nederlands
Console openen
Praktische gids / KERNODECK

Hervat je training echt op hetzelfde punt?

Om een hervatting te controleren vergelijk je tien continue updates met vijf updates, een back-up en daarna nog vijf in een nieuw proces. Je laadt het model, de optimizer, de scheduler, de randomgeneratoren en de positie in de data opnieuw. Het bewijs moet het vervolg van het werk vergelijken, niet alleen vaststellen dat een bestand laadt.

11 min leestijd · Gids voor ontwikkelaars

Wat je gaat uitvoeren

Het mini-project van Kernodeck bevat een kleine synthetische dataset, een netwerk met dropout, een trainingslus en een verificateur. Het protocol forceert de CPU om de logica voor back-up en hervatting te isoleren. Het is geen kwalificatie voor CUDA, ROCm of meerdere kaarten en geen prestatiemeting van een gehuurde GPU.

De verificateur opent nieuwe processen voor het continue traject, de onderbreking, de volledige hervatting en een negatief geval dat de randomgeneratoren niet herstelt. Het nut daarvan is controleren of de test een onvolledige hervatting kan detecteren, zelfs als de gewichten en het stapnummer correct lijken.

Scroll door de tabel om alle kolommen te lezen.
De vier trajecten van de oefening
TrajectUitvoeringGecontroleerde vraag
Continu10 updates vanaf de beginstatus.Welke status bereik je zonder onderbreking?
Onderbreking5 updates, dan back-up en stoppen.Bevat het tussenpunt de verwachte statussen?
Volledige hervattingNieuw proces, punt 5 laden, dan 5 updates.Krijg je dezelfde reeks invoer, leerraten en parameters binnen de gekozen tolerantie?
Hervatting zonder RNGNieuw proces, hetzelfde hervatpunt maar zonder herstel van de randomstate.Detecteert de test een afwijking die het simpelweg laden van de gewichten zou missen?

Vereisten en start van het protocol

Download het archief, pak het uit in een werkmap en ga naar de map met train.py en verify_resume.py. Gebruik een Python-omgeving met PyTorch en NumPy. Het archief bevat de code en de synthetische data; het downloadt geen model en vereist geen Kernodeck-account om de oefening uit te voeren.

Het meegeleverde bewijs is uitgevoerd met Python 3.14.6, PyTorch 2.11.0+cu128 en NumPy 2.4.4. Het programma forceert de CPU, de precisie float64 en één PyTorch-thread. Het achtervoegsel van het pakket betekent dus niet dat de hervatting CUDA heeft gebruikt. Voer in een andere omgeving je eigen controle uit.

Kies een uitvoermap die nog niet bestaat. Elk traject produceert checkpoint.pt, de bijbehorende checkpoint.pt.sha256 en summary.json. De verificateur bundelt de vergelijking in verification.json. De optie --steps telt extra stappen: na de onderbreking bij 5 voert de hervatopdracht er 5 uit om op 10 te komen. De Python-optie -B voorkomt bytecode-caches in de map van de oefening.

De volledige controle op CPU uitvoeren
python -B verify_resume.py --output runs/preuve-cpu
De drie hoofdtrajecten handmatig opnieuw uitvoeren
python -B train.py --steps 10 --output runs/continu
python -B train.py --steps 5 --output runs/coupure
python -B train.py --steps 5 --resume runs/coupure/checkpoint.pt --output runs/reprise

Een gewichtsexport en een hervat-checkpoint hebben niet dezelfde rol

Begin met te kiezen wat je wilt terugkrijgen. Een export voor inferentie dient om voorspellingen te produceren met een getraind model. Een hervatting van een training moet ook de status terugvinden die de volgende updates bepaalt. Een inferentieverwerking per bestand vraagt op zijn beurt een betrouwbare lijst van al voltooide items. Deze drie behoeften leveren verschillende back-ups op.

Verwar deze persistente back-up niet met activation checkpointing. Die techniek beperkt bepaalde activations die in het geheugen worden gehouden door ze opnieuw te berekenen tijdens de backpropagation; ze maakt op zichzelf geen bestand dat hervatten na een stop mogelijk maakt. Geef in je project dus aan of het woord checkpoint een geheugenoptimalisatie of een hervatpunt betekent.

De staten die je samen moet bewaren

De state_dict van het model bevat de geregistreerde parameters en buffers; de optimizer heeft zijn eigen staat. Hier beïnvloeden Adam, StepLR, dropout en drie randomgeneratoren de volgende updates. De checkpoint moet voor al deze elementen hetzelfde moment vertegenwoordigen.

Documenteer ook de codeversie, de experimentparameters en de identiteit van de data. Midden in een epoch is alleen het nummer kennen niet genoeg: je moet de volgorde van de voorbeelden en de volgende te verbruiken batch kunnen terugvinden. Een fout op dit punt kan invoer overslaan of dubbel verwerken.

De set van 24 rijen beschrijft een synthetische relatie tussen twee variabelen en een doelwaarde. Het netwerk telt 33 parameters, met een laag van acht neuronen en een dropout van 0,25. De batch bevat vier rijen. Na vijf updates staat de cursor op 20 van 24: de onderbreking valt midden in een epoch. De tien updates verbruiken 40 observaties, waardoor de controle een nieuwe permutatie van de data moet doorlopen.

Scroll door de tabel om alle kolommen te lezen.
Elke staat beantwoordt een vraag bij het hervatten
StatusRolUit te voeren controle
ModelGewichten en buffers bewaren.De uiteindelijke parameters en een evaluatie-uitvoer vergelijken.
OptimizerDe staten bewaren die de volgende update gebruikt.Het herladen controleren, niet alleen de hyperparameters.
SchedulerDe reeks leersnelheden vervolgen.De volgende toegepaste snelheid vergelijken en daarna de volgende snelheden.
RNG Python, NumPy en PyTorchDe daadwerkelijk gebruikte trekkingen vervolgen.Controleren dat de negatieve oefening zonder herstel divergeert.
DataDe permutatie en de cursor hervatten.De invoer-identificaties na de onderbreking vergelijken.
VoortgangDe stappen en epochs interpreteren.In totaal op 10 updates uitkomen, zonder ze opnieuw te doen of over te slaan.
ConfiguratieHetzelfde experiment reconstrueren.Afmetingen, precisie, instellingen en versies bewaren.

In de juiste volgorde herstellen

Reconstrueer het model, de optimizer en de scheduler voordat je hun staten laadt. De scheduler moet worden aangemaakt vóór optimizer.load_state_dict(): zijn constructie kan anders de herstelde leersnelheden overschrijven. Herlaad ook zijn eigen staat en controleer vervolgens de snelheid die daadwerkelijk in de volgende stap wordt gebruikt.

Herstel de randomgeneratoren na de constructie van de objecten die trekkingen verbruiken, vlak voordat je het werk voortzet. Alleen de beginseed terugzetten laat de reeks vanaf het begin opnieuw beginnen; dat is niet de staat die na de vijfde update is bereikt. Spoor in je project alle gebruikte generatoren op, inclusief die van de transformaties en het laden van de data.

In deze oefening stelt Python een lichte gain in op de invoer, produceert een NumPy PCG64-generator ruis en de permutaties, en produceert PyTorch de dropout. De checkpoint bewaart hun staten op het moment van de onderbreking. De verificateur bekijkt ook hun volgende trekkingen, waarbij hij de staat onmiddellijk herstelt om de rest van de berekening niet te verstoren.

Herstelvolgorde in train.py — fragment uit het volledige traject
optimizer = torch.optim.Adam(model.parameters(), lr=0.03)
scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=3, gamma=0.5)

# In het hervattraject, na de constructie van de objecten:
state = load_checkpoint(resume)
model.load_state_dict(state["model"])
scheduler.load_state_dict(state["scheduler"])
optimizer.load_state_dict(state["optimizer"])
progress = state["progress"]
history = state["history"]
restore_rng(state["rng"], generator)
model.train()

Een consistente checkpointgrens kiezen

Stel een expliciete grens vast, bijvoorbeeld na een volledige update van de optimizer. Als je meerdere microbatchs accumuleert voordat deze update plaatsvindt, dan vereist opslaan midden in die reeks ook dat je de tussentijdse staat beheert. Een eerste implementatie is makkelijker te controleren wanneer ze opslaat op een grens waar de geaccumuleerde gradiënten al zijn verbruikt.

Bewaar meerdere generaties back-ups. Schrijf het nieuwe bestand onder een afzonderlijke naam, wacht tot het schrijven klaar is, controleer of het leesbaar is en markeer het dan als bruikbaar. Vervang je enige geldige checkpoint niet voordat je die controle hebt gedaan. De frequentie hangt af van het werk dat je bereid bent opnieuw te doen en van de waargenomen schrijftijd; ze valt niet alleen af te leiden uit de huurduur.

Het mini-project maakt na een voltooide iteratie een back-up, exporteert vervolgens het bestand en zijn vingerafdruk. Het gebruikt een nieuwe map voor elk traject en vervangt geen eerder bewijs. Als je training gemengde precisie met een GradScaler gebruikt, maakt de staat daarvan ook deel uit van het hervatten. Deze variant valt niet onder de CPU-oefening.

De vergelijking en haar tolerantie lezen

Het protocol vergelijkt de voortzetting na punt 5: verbruikte data, leersnelheid, verliezen en bereikte parameters. Overeenstemming van alleen het stapnummer volstaat niet. Een gereset optimizer kan de lus voortzetten terwijl hij toch andere updates produceert.

De tolerantie die voor deze oefening is gekozen, is absoluut: 1e-12, met een relatieve tolerantie van 0. Deze drempel maakt deel uit van het meegeleverde CPU-protocol; het is geen universele regel voor je modellen. De vergelijking moet niet-eindige waarden en structuurverschillen signaleren in plaats van stilzwijgend een onbruikbare uitvoer te accepteren.

PyTorch garandeert geen identieke resultaten tussen versies, platforms, CPU en GPU. Als je de oefening overzet, lever het bewijs dan opnieuw op het doel en leg de gekozen tolerantie uit. Verruim de drempel niet louter om een fout te laten verdwijnen waarvan je de oorzaak niet begrijpt.

In het geleverde bewijs zijn alle afwijkingen van het volledige traject nul: parameters, optimizerstaat, verliezen, tempo en MSE. De volgorde van de regels, de voortgang, de staat van de scheduler en de volgende trekkingen komen eveneens overeen. Het volgende leertempo na stap 10 is 0,00375 in beide trajecten. Het resultaat hangt dus niet alleen af van een eindmetriek die tussentijdse verschillen zou kunnen verbergen.

Scroll door de tabel om alle kolommen te lezen.
Metingen van het CPU-bewijs; de afwijkingen zijn absoluut.
VergelijkingVolledige hervattingHervatten zonder RNG-herstel
Maximale afwijking van de gewichten00,011669328447718508
Eind-MSE0,095388585917750970,0936034144665111
MSE-afwijking ten opzichte van het continue traject00,001785171451239867
Verdict van de concordantiesubtestConcordant binnen de tolerantie van 1e-12Divergentie gedetecteerd

Waarom het negatieve geval zonder herstelde willekeur bewaren

Een controle is nuttiger wanneer je weet welke fout hij detecteert. De negatieve variant herlaadt dezelfde gewichten, optimizerstaten, scheduler en voortgang, maar laat het RNG-herstel bewust weg. Het proces kan zonder Python-exception eindigen terwijl het toch een ander traject volgt.

In het geleverde bewijs levert deze weglating een maximale afwijking van de gewichten op van meer dan 0,011 en een MSE-verschil van meer dan 0,0017. De negatieve MSE is hier lager dan die van het continue traject: dat maakt het hervatten niet correct. Het doel is dezelfde ervaring terug te vinden, niet twee modellen te rangschikken op hun eindfout.

De verificateur slaagt alleen wanneer het volledige traject concordant is en het negatieve geval divergeert. Hij toont dan all_checks_passed: true, positive: true en negative_divergence_detected: true. Zijn exitcode is 0 wanneer het protocol slaagt, 1 als de vergelijking mislukt en 2 als de verificatie niet kon worden voltooid.

Met opzet een onvolledige hervatting starten in een nieuwe map
python -B train.py --steps 5 --resume runs/coupure/checkpoint.pt --omit-rng-restore --output runs/reprise-incomplete

Het oefenbestand laden zonder de beveiligingen te versoepelen

Het project laadt alleen de checkpoint die je met deze oefening hebt gemaakt en onder je eigen controle hebt bewaard. Het gebruikt expliciet torch.load(..., map_location="cpu", weights_only=True). De Python-staat bevat primitieven, die van de NumPy PCG64-generator gehele getallen en strings, en die van PyTorch CPU een bytetensor. Er wordt geen willekeurige NumPy-array in de opgeslagen RNG-staat geplaatst.

De loader controleert de bijbehorende fingerprint, de grootte, het schema, de voortgang, de versies en de identiteit van de code en de gegevens. Hij weigert een inconsistente status in plaats van stilzwijgend een ontbrekend element te resetten. De fingerprint detecteert een wijziging; hij authenticeert niet de afzender van een bestand.

Voeg niet zomaar weights_only=False toe om een laadfout het zwijgen op te leggen. Het opgeslagen formaat en de reconstructie ervan moeten consistent zijn. Beperkt laden verkleint de mogelijkheden tot deserialisatie, maar maakt een onbekend bestand niet betrouwbaar.

Wat er verandert voor gedistribueerde training

Controleer bij meerdere processen of staten die over GPU's zijn verdeeld wie wat wegschrijft. Een bestand dat door één proces wordt geproduceerd is niet noodzakelijk een volledige back-up van het gedistribueerde werk. Gebruik de back-upprocedure die in je strategie is voorzien en wacht tot die is voltooid op de betrokken deelnemers. Markeer duidelijk welke fragmenten bij hetzelfde herstelpunt horen.

Een wijziging van het aantal GPU's kan een herverdeling van de staten vereisen en de verdeling van de gegevens veranderen. Mechanismen voor gedistribueerde checkpoints kunnen bepaalde wijzigingen opvangen, maar die mogelijkheid moet voor jouw formaat en configuratie worden geverifieerd. Doe een laadtest op het beoogde doel. Het toevoegen van batches aan de opdracht zet een single-card back-up niet automatisch om in een gedistribueerd programma.

Eindigen met een export die echt terug te halen is

Exporteer vóór de deadline de nuttige checkpoints met hun configuratie, de metrieken, de laadinstructies en de identifiers van de gegevens. Controleer de grootte en een fingerprint van de gekopieerde bestanden en laad vervolgens minstens één back-up vanaf de bestemming. Een identieke fingerprint controleert de kopie; het herladen verifieert of de inhoud daadwerkelijk volstaat om het werk te reconstrueren.

Laad alleen bestanden waarvan je de herkomst kent en kies een formaat en deserialisatie-opties die daarbij passen. Bewaar het laatst gevalideerde herstelpunt totdat het nieuwe je controles heeft doorstaan. De verwachte uitvoer is een map die terug te halen is plus een kort bewijs van hervatting: uitgevoerd commando, teruggevonden stap, geslaagde controle en geëxporteerd resultaat. Plan deze tijd in je 3, 7 of 30 dagen.

Reikwijdte van het bewijs en keuze van de huur

Het bewijs van 24 september 2026 vergelijkt vier nieuwe processen op CPU, met een absolute tolerantie van 1e-12 en geen relatieve tolerantie. Het dekt niet CUDA, noch ROCm, noch AMP, noch gedistribueerde training, noch workers voor het laden van gegevens. Het valideert de hervatlogica van de geleverde versie, in de beschreven omgeving, en meet niet de capaciteiten van een gehuurde GPU.

Pas na deze kleine oefening hetzelfde protocol toe op je model, je gegevens en je backend. Een kaart van 80 GB of een kaart van 192 GB verhelpt geen onvolledig checkpoint: kies eerst de compatibele keten en stem daarna het geheugen af op een echte stap. De hieronder gelinkte aanbiedingen worden niet gepresenteerd als hardware die voor dit bewijs is getest.

Plan in je periode van 3, 7 of 30 dagen een eerste cyclus van back-up, stoppen en hervatten, plus de tijd voor de definitieve export. De nuttige uitvoer is een map waarvan je de versies, het herstelpunt, de vergelijkende controle en de beperkingen kunt uitleggen; het louter bestaan van een .pt-bestand geeft die zekerheid niet.