PyTorch Lightning 1.0: van 0–600k

Lightning onthult de laatste API, een nieuwe website en een voorproefje van ons nieuwe native platform voor trainingsmodellen op schaal in de cloud.

(19 oktober 2020)

We zijn de afgelopen maanden hard aan het werk geweest om onze API te verfijnen en onze docs , het opnemen van tutorials , en het is eindelijk tijd om alle V1.0.0 van PyTorch Lightning met jullie te delen. Wilt u het bliksemsnelle antwoord op schaalmodellen in de cloud? lees verder.

Het Lightning-DNA

AI-onderzoek is veel sneller geëvolueerd dan enig enkel raamwerk kan bijhouden. Het gebied van deep learning evolueert voortdurend, voornamelijk in complexiteit en schaal. Lightning biedt een gebruikerservaring die is ontworpen voor de wereld van complexe modelinteracties, terwijl alle afleidende details van engineering zoals multi-GPU en multi-TPU-training, vroegtijdig stoppen, loggen, enz. Worden weggenomen.

Frameworks zoals PyTorch zijn ontworpen voor een tijd waarin AI-onderzoek vooral ging over netwerkarchitecturen, een nn.Module die de volgorde van bewerkingen kan bepalen.

VGG16

En deze frameworks leveren ongelooflijk veel werk bij het leveren van alle onderdelen om uiterst complexe modellen voor onderzoek of productie samen te stellen. Maar zodra modellen met elkaar gaan interageren, zoals een GAN, BERT of een autoencoder, breekt dat paradigma en verandert de immense flexibiliteit al snel in een standaardplaat die moeilijk te onderhouden is als projectschaal.

In tegenstelling tot eerdere frameworks, PyTorch Lightning is ontworpen om een ​​verzameling modellen samen te vatten die samenwerken , wat we noemen diepe leersystemen. Lightning is gebouwd voor de meer gecompliceerde onderzoeks- en productiegevallen van de wereld van vandaag, waar veel modellen met elkaar communiceren volgens ingewikkelde regels.

AutoEncoder-systeem

Het tweede sleutelprincipe van PyTorch Lightning is dat hardware en de science-code gescheiden. Lightning is geëvolueerd om enorme rekenkracht op grote schaal te benutten zonder een van deze abstracties voor de gebruiker aan de oppervlakte te brengen. Door deze scheiding uit te voeren, krijg je nieuwe vaardigheden dat was niet mogelijk vóór zoals het debuggen van uw 512 GPU-taak op uw laptop met CPUs zonder dat u uw code hoeft te wijzigen.

Ten slotte is Lightning gemaakt met de visie van een gemeenschapsgestuurd raamwerk worden .

Het bouwen van goede modellen voor diepgaand leren vereist een hoop expertise en kleine trucs die het systeem laten werken. Over de hele wereld implementeren honderden ongelooflijke ingenieurs en promovendi dezelfde code keer op keer. Lightning heeft nu een groeiende community van bijdragers van meer dan 300+ van de meest getalenteerde deep learning-mensen die er zijn, die ervoor kiezen om hetzelfde toe te wijzen energie en doen precies dezelfde optimalisaties, maar in plaats daarvan profiteren duizenden mensen van hun inspanningen.

Wat is er nieuw in 1.0.0

Lightning 1.0.0 signaleert een stabiele en final API.

Dit betekent dat de grote onderzoeksprojecten die afhankelijk zijn van Lightning gerust kunnen zijn, wetende dat hun code in de toekomst niet zal breken of veranderen.

Onderzoek + productie

De kracht van Lightning is om de nieuwste technologie mogelijk te maken AI-onderzoek gebeurt op grote schaal. Het is een raamwerk dat is ontworpen voor professionele onderzoekers om de moeilijkste ideeën uit te proberen met de grootste rekenbronnen zonder enige flexibiliteit te verliezen.

We zijn verheugd aan te kondigen dat Lightning 1.0.0 nu ook waardoor het triviaal is om deze modellen op schaal te implementeren. Alle Lightning-code zorgt ervoor dat alles gemakkelijk naar onnx en torchscript kan worden geëxporteerd.

Dus , betekent dit dat uw team van datawetenschappers, onderzoekers, enz. nu de mensen kan zijn die ook hebben modellen in productie genomen. Ze hebben geen grote teams van machine learning-ingenieurs nodig.

Dit is een belangrijke reden waarom toonaangevende bedrijven Lightning gebruiken: als een manier om hen te helpen de productietijd drastisch te verkorten zonder de flexibiliteit die nodig is voor onderzoek te verliezen .

En dit is precies wat ons zakelijke aanbod doet: Grid AI is onze native platform voor trainingsmodellen op schaal in de cloud. Met Grid kan iedereen die deep learning-modellen bouwt, herhalen op massale rekenkracht en deze modellen vervolgens onmiddellijk implementeren in een schaalbare omgeving die in staat is om het grootste verkeer dat u naar een deep learning-systeem zou kunnen sturen, te verwerken.

Meld u aan voor vroege toegang hier .

grid train

Website

U zult ook merken dat we alle blogposts , razendsnelle videozelfstudies , communityprojecten en andere bronnen onder onze gloednieuwe startpagina om alles over Lightning te laten zien!

Metrics

pytorch\_lightning.metrics is een Metrics API gemaakt voor eenvoudige metrische ontwikkeling en gebruik in PyTorch en PyTorch Lightning. De bijgewerkte API biedt een ingebouwde methode om de metriek over meerdere GPUs (processen) voor elke stap te berekenen, terwijl je tegelijkertijd statistieken opslaat waarmee je de metriek aan het einde van een tijdperk kunt berekenen, zonder je zorgen te maken over van de complexiteit die gepaard gaat met de gedistribueerde backend.

Het is grondig getest voor alle randgevallen en bevat een groeiende lijst van veelgebruikte metrische implementaties, zoals Nauwkeurigheid , Precisie , Recall , Fbeta , MeanSquaredError en meer.

Hoe gebruik .log in LightningModule

Om uw aangepaste metriek te implementeren, subklasse dan simpelweg de basis Metric klasse en implementeer de \_\_init\_\_(), update() en compute() methoden. Het enige dat u hoeft te doen, is add\_state() correct aanroepen om een ​​aangepaste metriek met DDP te implementeren. reset() wordt aangeroepen voor metrische toestandsvariabelen die zijn toegevoegd met add\_state().

Handmatige versus automatische optimalisatie

Met Lightning hoeft u zich geen zorgen te maken over het in- / uitschakelen van gradaties, een achterwaartse pass doen of optimalisatoren bijwerken zolang u verlies retourneert met een bijgevoegde grafiek van de training\_step, zal Lightning de optimalisatie automatiseren.

Voor bepaald onderzoek, zoals GANs, leren van reinforcement of iets met meerdere optimizers of een inner loop, kunt u automatische optimalisatie uitschakelen en de trainingslus zelf volledig controleren.

Schakel eerst automatische optimalisatie uit:

trainer = Trainer(automatic\_optimization=False)

Nu bezit u de treinlus!

Logging

Lightning maakt integratie met loggers supereenvoudig – roep gewoon de log() -methode overal op op uw LightningModule, en het zal het gelogde aantal naar uw logger naar keuze sturen. We gebruiken standaard Tensorboard, maar je kunt elke ondersteunde logger kiezen die je wilt.

Afhankelijk van waar .log() wordt aangeroepen vanuit, Lightning bepaalt automatisch wanneer het loggen moet plaatsvinden (bij elke stap of elke epoch), maar je kunt het standaardgedrag natuurlijk overschrijven door handmatig on\_step en on\_epoch opties. Als u on\_epoch=True instelt, worden uw gelogde waarden verzameld over het volledige trainingstijdvak.

Datastroom

We hebben EvalResult en TrainResult afgeschaft ten gunste van het vereenvoudigen van de datastroom en het loskoppelen van logging van data in trainings- en validatielussen.

Elke lus (training, validatie, test) heeft drie hooks die u kunt implementeren:

  • x\_step
  • x\_step\_end
  • x\_epoch\_end

Om te illustreren hoe gegevens stromen, gebruiken we de trainingslus (dwz: x = training)

outs = []
for batch in data:
out = training\_step(batch)
outs.append(out)training\_epoch\_end(outs)

Alles wat u retourneert in training\_step kan worden gebruikt als invoer voor training\_epoch\_end.

Hetzelfde geldt voor validatie- en teststappen: alles wat wordt geretourneerd in validation\_step of test\_step kan worden gebruikt als invoer voor {validation/test}\_step\_end of {validation/test}\_epoch\_end.In het geval dat u DP- of DDP2-gedistribueerde modi gebruikt (dwz: een batch over GPUs splitsen), gebruikt u x\_step\_end om handmatig te aggregeren (of implementeer het niet om bliksem automatisch aggregaat voor u).

Checkpointing

Lightning slaat nu automatisch een checkpoint voor u op in uw huidige werkdirectory, met de status van uw laatste trainingstijdperk. Dit zorgt ervoor dat u de training kunt hervatten voor het geval deze werd onderbroken.

U kunt het controlepuntgedrag aanpassen om elke hoeveelheid van uw training of validatiestappen te volgen. Als u bijvoorbeeld uw controlepunten wilt bijwerken op basis van uw validatieverlies:

  1. Bereken elke metriek of andere hoeveelheid die u wilt controleren, zoals validatieverlies.
  2. Logboek het aantal met behulp van de log() -methode, met een sleutel zoals val\_loss.
  3. Initialiseren van de

    ModelCheckpoint callback, en monitor als de sleutel van uw hoeveelheid.

  4. Geef de callback door aan checkpoint\_callback Trainer-vlag.

Lees over alle API-wijzigingen, inclusief veel bugfixes, in onze release-opmerkingen .

Bedankt

We zouden V1.0.0 niet vieren zonder het ongelooflijke werk van ons briljante kernteam dat de klok rond werkt om elk klein detail goed te krijgen, constante ondersteuning van de PyTorch-team , en natuurlijk onze communityleden. We willen graag iedereen persoonlijk bedanken die PRs heeft bijgedragen of deze heeft beoordeeld, feedback en problemen heeft ingediend, heeft gereageerd op ons forum of in onze slappe community. Deze is voor jullie allemaal!

meld je hier aan

Wil je meer weten over bliksem? Ga naar onze website , lees de documenten , of doe mee onze allereerste virtuele meetup- Vraag me iets met William Falcon , maker van Lightning! De meetup vindt plaats op 21 oktober 2020, 13:00 uur EST, dus neem je lunch of diner mee en kom meer te weten over nieuwe functies, rasters of iets anders dat je altijd al wilde weten maar nooit hebt gevraagd. Meld u hier aan.