PyTorch Lightning 1.0: Fra 0–600k

Lightning afslører den endelige API, et nyt websted og et smugkig ind i vores nye native platform til træningsmodeller i skala i skyen.

(19. okt 2020)

Vi har arbejdet hårdt i de sidste par måneder med at finjustere vores API og polere vores docs , optager tutorials , og det er endelig tid til at dele med dig alle V1.0.0 af PyTorch Lightning. Vil du have lynets svar på skaleringsmodeller i skyen? læs videre.

Lightning DNA

AI-forskning har udviklet sig meget hurtigere end nogen enkelt ramme kan følge med. Feltet for dyb læring udvikler sig konstant, mest i kompleksitet og skala. Lightning giver en brugeroplevelse designet til en verden af ​​komplekse modelinteraktioner, mens du fjerner alle de distraherende detaljer inden for teknik som multi-GPU og multi-TPU-træning, tidligt stop, logning osv …

Rammer som PyTorch blev designet til en tid, hvor AI-forskning hovedsagelig handlede om netværksarkitekturer, et nn.Modul, der kan definere rækkefølgen af ​​operationer.

VGG16

Og disse rammer gør et utroligt stykke arbejde med at levere alle brikkerne til at sammensætte ekstremt komplekse modeller til forskning eller produktion. Men så snart modeller begynder at interagere med hinanden, som en GAN, BERT eller en autoencoder, går dette paradigme i stykker, og den enorme fleksibilitet bliver hurtigt til en kedelplade, der er vanskelig at vedligeholde, når et projekt skalerer.

I modsætning til rammer, der kom før, var PyTorch Lightning designet til at indkapsle en samling modeller, der interagerer sammen , hvad vi kalder dyb læringssystemer. Lyn er bygget til de mere komplicerede forsknings- og produktionssager i nutidens verden, hvor mange modeller interagerer med hinanden ved hjælp af komplicerede regler.

AutoEncoder system

Det andet nøgleprincip i PyTorch Lightning er, at hardware og “science” -koden skal være adskilt. Lyn udviklede sig til at udnytte massiv beregning i skala uden at overflade nogen af ​​disse abstraktioner til brugeren. Ved at udføre denne adskillelse får du nye evner det var ikke muligt før såsom fejlretning af dit 512 GPU-job på din bærbare computer ved hjælp af CPUer uden at skulle ændre din kode.

Endelig blev Lyn oprettet med visionen om At blive en community-driven framework .

Opbygning af gode modeller for dyb læring kræver masser af ekspertise og lille tricks, der får systemet til at fungere. Overalt i verden implementerer hundredvis af utrolige ingeniører og ph.d.er den samme kode igen og igen. Lightning har nu et voksende bidragydersamfund med over 300+ af de mest talentfulde dyb lærende mennesker, , der vælger at tildele det samme energi og gør nøjagtigt de samme optimeringer, men har i stedet tusinder af mennesker, der drager fordel af deres indsats.

Nyheder i 1.0.0

Lightning 1.0.0 signalerer en stabil og final API.

Dette betyder, at de store forskningsprojekter, der er afhængige af Lightning, kan være let at vide, at deres kode ikke går i stykker eller ændres fremover.

Forskning + produktion

Lynets kernestyrke er at muliggøre state of the art AI-forskning skal ske i målestok. Det er en ramme designet til professionelle forskere til at prøve de hårdeste ideer til de største beregningsressourcer uden at miste nogen fleksibilitet.

Vi er glade for at meddele, at Lightning 1.0.0 nu er også hvilket gør det trivielt at implementere disse modeller i målestok. Al lynkoden sørger for, at alt nemt kan eksporteres til onnx og torchscript.

Så , betyder det, at dit team af dataforskere, forskere osv. nu kan BE de mennesker, der også satte modeller i produktion. De har ikke brug for store teams af maskinlæringsingeniører.

Dette er en væsentlig årsag til, at førende virksomheder bruger Lightning: som en måde at hjælpe dem med at skære tid til produktion dramatisk uden at miste den nødvendige fleksibilitet til forskning .

Og det er netop det, vores virksomhedstilbud gør: Grid AI er vores indfødt platform til træning af modeller i skala i skyen. Grid gør det muligt for enhver, der bygger modeller for dyb læring, at gentage på massiv beregning og derefter straks implementere disse modeller i et skalerbart miljø, der er i stand til at håndtere den største trafik, du kan kaste i et dybt læringssystem.

Tilmeld dig tidlig adgang her .

gittertog

Website

Du vil også bemærke, at vi har centraliseret alle blogindlæg , lynhurtige videoundervisning , samfundsprojekter og andre ressourcer under vores helt ny hjemmeside for at fremvise alle ting Lyn!

Metrics

pytorch\_lightning.metrics er en Metrics API oprettet til nem metrisk udvikling og brug i PyTorch og PyTorch Lightning. Den opdaterede API giver en indbygget metode til at beregne metricen på tværs af flere GPUer (processer) for hvert trin, samtidig med at der gemmes statistikker, der giver dig mulighed for at beregne metricen i slutningen af ​​en periode uden at skulle bekymre dig om noget af kompleksiteten forbundet med den distribuerede backend.

Den testes grundigt for alle kanttilfælde og inkluderer en voksende liste over almindelige metriske implementeringer, såsom Nøjagtighed , Præcision , Recall , Fbeta , MeanSquaredError og mere.

Sådan gør du brug .log i LightningModule

For at implementere din brugerdefinerede metric skal du blot underklasse basen Metric og implementere \_\_init\_\_(), update() og compute() metoder. Alt du skal gøre er at ringe til add\_state() korrekt for at implementere en brugerdefineret metric med DDP. reset() kaldes på metriske tilstandsvariabler tilføjet ved hjælp af add\_state().

Manuel vs automatisk optimering

Med Lightning behøver du ikke bekymre dig om, hvornår du skal aktivere / deaktivere graderinger, foretage et baglæns pass eller opdatere optimeringsværktøjer så længe du returnerer et tab med en vedhæftet graf fra training\_step, automatiserer Lightning optimeringen.

For visse undersøgelser som GANer, forstærkningslæring eller noget med flere optimeringsmidler eller en indre sløjfe kan du dog deaktivere automatisk optimering og selv kontrollere træningsløbet fuldstændigt.

Sluk først for automatisk optimering:

trainer = Trainer(automatic\_optimization=False)

Nu ejer du togsløjfen!

Logging

Lightning gør integration med loggere superenkelt – bare kald log() -metoden hvor som helst på din LightningModule, og den sender den loggede mængde til din valgte logger. Vi bruger Tensorboard som standard, men du kan vælge den understøttede logger, du ønsker.

Afhængigt af hvor .log() kaldes fra, Lightning bestemmer automatisk, hvornår logning skal finde sted (på hvert trin eller hver epoke), men du kan selvfølgelig tilsidesætte standardadfærden ved manuelt at bruge on\_step og on\_epoch muligheder. Indstilling af on\_epoch=True vil akkumulere dine loggede værdier i hele træningsperioden.

Datastrøm

Vi udfasede EvalResult og TrainResult til fordel for forenkling af datastrøm og afkobling af logning fra data i trænings- og valideringssløjfer.

Hver loop (træning, validering, test) har tre kroge, du kan implementere:

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

For at illustrere, hvordan data strømmer, bruger vi træningsløkken (dvs. x = træning)

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

Alt hvad du returnerer i training\_step kan bruges som input til training\_epoch\_end.

Det samme gælder validering og testtrin: alt, hvad der returneres i validation\_step eller test\_step kan bruges som input til {validation/test}\_step\_end eller {validation/test}\_epoch\_end.I tilfælde af at du bruger DP- eller DDP2-distribuerede tilstande (dvs. opdele en batch på tværs af GPUer), skal du bruge x\_step\_end til manuelt at aggregere (eller ikke implementere det for at lade lyn automatisk samlet for dig).

Kontrolpunkt

Lyn gemmer nu automatisk et kontrolpunkt for dig i din nuværende arbejdsmappe med status for din sidste træningsperiode. Dette sikrer, at du kan genoptage træningen, hvis den blev afbrudt.

Du kan tilpasse kontrolpunktsadfærden til at overvåge en hvilken som helst mængde af din træning eller valideringstrin. Hvis du f.eks. Vil opdatere dine kontrolpunkter baseret på dit valideringstab:

  1. Beregn enhver metric eller anden mængde, du vil overvåge, f.eks. Valideringstab.
  2. Log mængden ved hjælp af log() metoden med en nøgle som f.eks. val\_loss.
  3. Initialisering af

    ModelCheckpoint tilbagekald, og indstil monitor for at være nøglen til din mængde.

  4. Send tilbagekaldet til checkpoint\_callback Trænerflag.

Læs om alle API-ændringer, inklusive mange fejlrettelser, i vores udgivelsesnotater .

Tak

Vi fejrer ikke V1.0.0 uden det utrolige arbejde med vores strålende kerneteam , der arbejder døgnet rundt for at få hver eneste lille detalje rigtigt, konstant support fra PyTorch-team og selvfølgelig vores community-medlemmer. Vi vil personligt takke alle, der har bidraget med PRer eller gennemgået dem, indsendt feedback og problemer, svaret i vores forum eller i vores slappe samfund. Denne er til jer alle!

tilmeld dig her

Vil du lære mere om lyn? Gå til vores websted , læs docs , eller deltag vores første virtuelle møde nogensinde- Spørg mig om noget med William Falcon , skaber af Lyn! Mødet finder sted den 21. oktober 2020, kl. 13 EST, så tag din frokost eller middag med, og kom og lær mere om nye funktioner, gitter eller andet, du altid har ønsket at vide, men aldrig har spurgt. Tilmeld dig her .