PyTorch Lightning 1.0: Från 0–600k

Lightning avslöjar det slutliga API: et, en ny webbplats och en smyga in på vår nya inbyggda plattform för träningsmodeller i stor skala på molnet.

(19 okt 2020)

Vi har jobbat hårt de senaste månaderna och finjusterat vårt API och polerat vårt docs , spelar in tutorials , och det är äntligen dags att dela med dig alla V1.0.0 av PyTorch Lightning. Vill du blixtnedslag på skalningsmodeller på molnet? fortsätt läsa.

Lightning DNA

AI-forskningen har utvecklats mycket snabbare än någon ram kan följa med. Fältet för djupinlärning utvecklas ständigt, mestadels i komplexitet och skala. Lightning ger en användarupplevelse utformad för en värld av komplexa interaktioner med modeller samtidigt som alla distraherande detaljer från teknik som abstrakta bort, såsom multi-GPU och multi-TPU-utbildning, tidigt stopp, loggning osv …

Ramverk som PyTorch designades för en tid där AI-forskning mest handlade om nätverksarkitekturer, ett nn-modul som kan definiera sekvensen av operationer.

VGG16

Och dessa ramar gör ett otroligt jobb för att tillhandahålla alla bitar för att sätta ihop extremt komplexa modeller för forskning eller produktion. Men så snart modellerna börjar interagera med varandra, som en GAN, BERT eller en autokodare, går det paradigmet och den enorma flexibiliteten blir snart en pannplatta som är svår att upprätthålla när ett projekt skalas.

Till skillnad från ramar som kom tidigare var PyTorch Lightning utformad för att inkapsla en samling modeller som interagerar tillsammans , vad vi kallar system för djupinlärning. Lightning är byggt för mer komplicerade forsknings- och produktionsfall i dagens värld, där många modeller interagerar med varandra med hjälp av komplicerade regler.

AutoEncoder system

Den andra nyckelprincipen för PyTorch Lightning är att hårdvara och ”science” -koden måste vara separerat. Blixt utvecklades för att utnyttja massiv beräkning i skala utan att någon av dessa abstraktioner dyker upp för användaren. Genom att göra denna separation får du nya förmågor det var inte möjligt före som att felsöka ditt 512 GPU-jobb på din bärbara dator med hjälp av processorer utan att behöva ändra din kod.

Slutligen skapades Lightning med visionen om att bli ett samhällsstyrt ramverk .

Att bygga bra djupinlärningsmodeller kräver massor av expertis och små knep som får systemet att fungera. Över hela världen implementerar hundratals otroliga ingenjörer och doktorer samma kod om och om igen. Lightning har nu en växande bidragsgrupp med över 300+ av de mest begåvade djupt lärande människorna runt, som väljer att tilldela samma energi och gör exakt samma optimeringar men har istället tusentals människor som drar nytta av deras ansträngningar.

Vad är nytt i 1.0.0

Lightning 1.0.0 signalerar en stabil och final API.

Detta innebär att de stora forskningsprojekten som är beroende av Lightning kan vara lugna medvetna om att deras kod inte kommer att gå sönder eller förändras framöver.

Forskning + produktion

Blixtens kärnstyrka är att möjliggöra toppmodern teknik AI-forskning ska ske i stor skala. Det är ett ramverk som är utformat för professionella forskare att testa de hårdaste idéerna på de största beräkningsresurserna utan att förlora någon flexibilitet.

Vi är glada att meddela att Lightning 1.0.0 nu är också vilket gör det trivialt att distribuera dessa modeller i stor skala. All Lightning-koden ser till att allt enkelt kan exporteras till onnx och torchscript.

Så , detta innebär att ditt team av datavetare, forskare osv kan nu BE de människor som också satte modeller i produktion. De behöver inte stora team av maskininlärningsingenjörer.

Det här är en viktig anledning till att ledande företag använder Lightning: som ett sätt att hjälpa dem att minska produktionstiden dramatiskt utan att förlora någon flexibilitet som behövs för forskning .

Och detta är precis vad vårt företagserbjudande gör: Grid AI är vårt inbyggd plattform för träningsmodeller i stor skala på molnet. Med Grid kan alla som bygger modeller för djupinlärning itera på massiva beräkningar och sedan omedelbart distribuera dessa modeller i en skalbar miljö som kan hantera den största trafiken du kan kasta i ett djupinlärningssystem.

Registrera dig för tidig åtkomst här .

rutnät

Webbplats

Du märker också att vi har centraliserat alla blogginlägg , blixthastighetsvideohandledning , gemenskapsprojekt och andra resurser under våra helt ny hemsida för att visa upp allt Lightning!

Metrics

pytorch\_lightning.metrics är ett Metrics API skapat för enkel metrisk utveckling och användning i PyTorch och PyTorch Lightning. Det uppdaterade API: et ger en inbyggd metod för att beräkna mätvärdet över flera GPU: er (processer) för varje steg, samtidigt som du lagrar statistik som gör att du kan beräkna mätvärdet i slutet av en epok utan att behöva oroa dig för något av komplexiteten som är associerad med den distribuerade backenden.

Den testas noggrant för alla kantfall och innehåller en växande lista med vanliga metriska implementeringar, till exempel Noggrannhet , Precision , Återkallelse , Fbeta , MeanSquaredError och mer.

Så här använd .log i LightningModule

För att implementera din anpassade mätvärde, klassificera bara basklassen Metric \_\_init\_\_(), update() och compute() metoder. Allt du behöver göra är att ringa add\_state() korrekt för att implementera en anpassad statistik med DDP. reset() kallas på metriska tillståndsvariabler som läggs till med add\_state().

Manuell vs automatisk optimering

Med Lightning behöver du inte oroa dig för när du ska aktivera / inaktivera grader, göra ett bakåtpass eller uppdatera optimerare så länge du returnerar en förlust med ett bifogat diagram från träningssteget automatiserar Lightning optimeringen.

För viss forskning som GAN, förstärkningsinlärning eller något med flera optimerare eller en inre slinga kan du dock stänga av automatisk optimering och helt styra träningsslingan själv.

Stäng först av automatisk optimering:

trainer = Trainer(automatic\_optimization=False)

Nu äger du tågslingan!

Loggning

Blixt gör integrationen med loggare super enkel – ring bara log() -metoden var som helst på din LightningModule, så skickas den loggade kvantiteten till din valda logger. Vi använder Tensorboard som standard, men du kan välja vilken logger som helst du vill.

Beroende på var .log() anropas från, Lightning avgör automatiskt när loggningen ska äga rum (på varje steg eller varje epok), men naturligtvis kan du åsidosätta standardbeteendet genom att manuellt använda on\_step och on\_epoch alternativ. Om du ställer in on\_epoch=True samlas dina loggade värden över hela träningsperioden.

Dataflöde

Vi har avskaffat EvalResult och TrainResult till förmån för dataflöde och frikoppling av loggning från data i tränings- och valideringsslingor.

Varje slinga (utbildning, validering, test) har tre krokar som du kan implementera:

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

För att illustrera hur data flyter använder vi träningsslingan (dvs. x = träning)

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

Allt du returnerar i training\_step kan användas som ingång till training\_epoch\_end.

Detsamma gäller validering och teststeg: allt som returneras i validation\_step eller test\_step kan användas som ingång till {validation/test}\_step\_end eller {validation/test}\_epoch\_end.Om du använder DP- eller DDP2-distribuerade lägen (dvs: dela ett parti över GPU: er), använd x\_step\_end för att manuellt aggregera (eller inte implementera det för att låta blixt automatiskt aggregat för dig).

Kontrollpunkt

Lightning sparar nu automatiskt en kontrollpunkt åt dig i din nuvarande arbetskatalog, med läget för din senaste träningsperiod. Detta säkerställer att du kan återuppta träningen om den avbröts.

Du kan anpassa kontrollpunktsbeteendet för att övervaka valfritt antal tränings- eller valideringssteg. Om du till exempel vill uppdatera dina kontrollpunkter utifrån din valideringsförlust:

  1. Beräkna alla mätvärden eller andra kvantiteter som du vill övervaka, t.ex. valideringsförlust.
  2. Logga kvantiteten med log() -metoden, med en tangent som val\_loss.
  3. Initiera

    ModelCheckpoint återuppringning och ställ in övervaka för att vara nyckeln till din kvantitet.

  4. Skicka återuppringningen till checkpoint\_callback Trainerflagga.

Läs om alla API-ändringar, inklusive många buggfixar, i våra versioner .

Tack

Vi firar inte V1.0.0 utan det otroliga arbetet med vårt lysande kärnteam som arbetar dygnet runt för att få alla små detaljer rätt, konstant stöd från PyTorch-teamet , och naturligtvis våra communitymedlemmar. Vi vill personligen tacka alla som bidragit med PR eller granskat dem, skickat feedback och frågor, svarat i vårt forum eller i vår slaka gemenskap. Den här är för er alla!

registrera dig här

Vill du lära dig mer om blixt? Gå till vår webbplats , läs docs , eller gå med vårt första virtuella möte någonsin- Fråga mig vad som helst med William Falcon , skapare av Lightning! Mötet kommer att äga rum 21 oktober 2020, kl. 13 EST, så ta med dig lunch eller middag och lär dig mer om nya funktioner, rutnät eller något annat du alltid velat veta men aldrig frågat. Registrera dig här .