PyTorch Lightning 1.0: de 0 à 600 000

Lightning révèle lAPI finale, un nouveau site Web et un aperçu de notre nouvelle plate-forme native pour la formation de modèles à grande échelle sur le cloud.

(19 octobre 2020)

Nous avons travaillé darrache-pied ces derniers mois pour affiner notre API, peaufiner notre docs , en enregistrant des tutoriels , et il est enfin temps de partager avec vous toute la V1.0.0 de PyTorch Lightning. Vous voulez la réponse éclair à la mise à léchelle des modèles sur le cloud? continuez la lecture.

LADN Lightning

La recherche sur lIA a évolué beaucoup plus rapidement que nimporte quel framework ne peut suivre. Le domaine de lapprentissage profond est en constante évolution, principalement en complexité et en échelle. Lightning offre une expérience utilisateur conçue pour le monde des interactions de modèles complexes tout en supprimant tous les détails gênants de lingénierie tels que la formation multi-GPU et multi-TPU, larrêt précoce, la journalisation, etc.

Des cadres comme PyTorch ont été conçus pour une époque où la recherche sur lIA portait principalement sur les architectures réseau, un nn.Module qui peut définir la séquence des opérations.

VGG16

Et ces frameworks font un travail incroyable en fournissant toutes les pièces pour assembler des modèles extrêmement complexes pour la recherche ou la production. Mais dès que les modèles commencent à interagir les uns avec les autres, comme un GAN, un BERT ou un auto-encodeur, ce paradigme se rompt et limmense flexibilité se transforme rapidement en passe-partout difficile à maintenir à mesure quun projet évolue.

Contrairement aux frameworks précédents, PyTorch Lightning a été conçu pour encapsuler une collection de modèles interagissant ensemble , ce que nous appelons systèmes dapprentissage en profondeur. Lightning est conçu pour les cas de recherche et de production les plus complexes du monde daujourdhui, où de nombreux modèles interagissent les uns avec les autres en utilisant des règles complexes.

Système AutoEncoder

Le deuxième principe clé de PyTorch Lightning est que le matériel et le code «scientifique» doivent être séparé. Lightning a évolué pour exploiter des calculs massifs à grande échelle sans révéler aucune de ces abstractions à lutilisateur. En faisant cette séparation, vous gagnez de nouvelles capacités qui nétaient pas possibles avant , comme le débogage de votre tâche 512 GPU sur votre ordinateur portable à laide de processeurs sans avoir besoin de changer votre code.

Enfin, Lightning a été créé avec la vision de devenir un cadre communautaire .

Construire de bons modèles dapprentissage en profondeur nécessite une tonne dexpertise et un petit astuces qui font fonctionner le système. Partout dans le monde, des centaines dingénieurs et de docteurs incroyables implémentent le même code encore et encore. Lightning compte désormais une communauté de contributeurs en pleine croissance composée de plus de 300 personnes parmi les plus talentueuses du Deep Learning, qui choisissent de les allouer énergie et faites exactement les mêmes optimisations, mais à la place, des milliers de personnes bénéficient de leurs efforts.

Quoi de neuf dans la version 1.0.0

Lightning 1.0.0 signale une stabilité et finale API.

Cela signifie que les principaux projets de recherche qui dépendent de Lightning peuvent être tranquilles en sachant que leur code ne sera pas interrompu ou ne changera pas à lavenir.

Recherche + Production

La force principale de Lightning est de permettre létat de lart La recherche sur lIA se fera à grande échelle. Cest un framework conçu pour que les chercheurs professionnels essaient les idées les plus difficiles sur les plus grandes ressources de calcul sans perdre de flexibilité.

Nous sommes ravis dannoncer que Lightning 1.0.0 est désormais également rendant trivial le déploiement de ces modèles à grande échelle. Tout le code Lightning garantit que tout peut être exporté facilement vers onnx et torchscript.

Donc , cela signifie que votre équipe de data scientists, de chercheurs, etc. peut désormais BE les personnes qui également mettre des modèles en production. Ils nont pas besoin de grandes équipes dingénieurs en apprentissage automatique.

Cest lune des principales raisons pour lesquelles grandes entreprises utilisent Lightning: pour les aider à réduire considérablement le temps de production sans perdre la flexibilité nécessaire à la recherche .

Et cest précisément ce que fait notre offre dentreprise: Grid AI est notre plateforme native pour la formation de modèles à grande échelle sur le cloud. Grid permet à quiconque crée des modèles dapprentissage en profondeur ditérer sur un calcul massif, puis de déployer instantanément ces modèles dans un environnement évolutif capable de gérer le trafic le plus important que vous pourriez générer sur un système dapprentissage en profondeur.

Inscrivez-vous à accès anticipé ici .

train de grille

Site Web

Vous remarquerez également que nous avons centralisé tous les articles de blog , tutoriels vidéo ultra-rapides , projets communautaires et autres ressources sous notre toute nouvelle page daccueil pour présenter tout ce qui concerne Lightning!

Métriques

pytorch\_lightning.metrics est une API de métriques créée pour faciliter le développement et lutilisation de métriques dans PyTorch et PyTorch Lightning. LAPI mise à jour fournit une méthode intégrée pour calculer la métrique sur plusieurs GPU (processus) pour chaque étape, tout en stockant en même temps des statistiques qui vous permettent de calculer la métrique à la fin dune époque, sans avoir à vous soucier de tout des complexités associées au backend distribué.

Il est rigoureusement testé pour tous les cas extrêmes et comprend une liste croissante dimplémentations de métriques courantes, telles que Précision , Précision , Rappel , Fbeta , MeanSquaredError , et plus.

Comment faire utilisez .log dans LightningModule

Pour implémenter votre métrique personnalisée, sous-classez simplement la classe de base Metric et implémentez le Méthodes \_\_init\_\_(), update() et compute(). Tout ce que vous avez à faire est dappeler correctement add\_state() pour implémenter une métrique personnalisée avec DDP. reset() est appelé sur les variables détat métrique ajoutées à laide de add\_state().

Optimisation manuelle ou automatique

Avec Lightning, vous navez pas à vous soucier du moment où activer / désactiver les diplômés, faire une passe en arrière ou mettre à jour les optimiseurs tant que vous renvoyez une perte avec un graphique attaché à partir de training\_step, Lightning automatisera loptimisation.

Cependant, pour certaines recherches comme les GAN, lapprentissage par renforcement ou quelque chose avec plusieurs optimiseurs ou une boucle interne, vous pouvez désactiver loptimisation automatique et contrôler entièrement la boucle dentraînement vous-même.

Tout dabord, désactivez loptimisation automatique:

trainer = Trainer(automatic\_optimization=False)

Vous êtes maintenant propriétaire de la boucle de train!

Logging

Lightning rend lintégration avec les enregistreurs très simple – il suffit dappeler la méthode log() nimporte où sur votre LightningModule, et il enverra la quantité enregistrée à votre enregistreur de choix. Nous utilisons Tensorboard par défaut, mais vous pouvez choisir nimporte quel enregistreur pris en charge que vous souhaitez.

Selon lendroit où .log() est appelé à partir de, Lightning détermine automatiquement quand la journalisation doit avoir lieu (à chaque étape ou à chaque époque), mais bien sûr, vous pouvez remplacer le comportement par défaut en utilisant manuellement on\_step et on\_epoch. Le paramètre on\_epoch=True accumulera vos valeurs enregistrées sur toute la période de formation.

Flux de données

Nous avons déprécié EvalResult et TrainResult au profit de la simplification du flux de données et du découplage de la journalisation des données dans les boucles dapprentissage et de validation.

Chaque boucle (formation, validation, test) a trois hooks que vous pouvez implémenter:

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

Pour illustrer comment les données circulent, nous utiliserons la boucle de formation (par exemple: x = formation)

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

Tout ce que vous retournez dans training\_step peut être utilisé comme entrée dans training\_epoch\_end.

Il en va de même pour les étapes de validation et de test: tout ce qui est renvoyé dans validation\_step ou test\_step peut être utilisé comme entrée dans {validation/test}\_step\_end ou {validation/test}\_epoch\_end.Dans le cas où vous utilisez les modes distribués DP ou DDP2 (cest-à-dire: diviser un lot sur des GPU), utilisez x\_step\_end pour agréger manuellement (ou ne pas limplémenter pour laisser Lightning auto- agréger pour vous).

Points de contrôle

Lightning enregistre désormais automatiquement un point de contrôle pour vous dans votre répertoire de travail actuel, avec létat de votre dernière période dentraînement. Cela garantit que vous pouvez reprendre lentraînement au cas où il serait interrompu.

Vous pouvez personnaliser le comportement de point de contrôle pour surveiller nimporte quelle quantité de vos étapes dentraînement ou de validation. Par exemple, si vous souhaitez mettre à jour vos points de contrôle en fonction de votre perte de validation:

  1. Calculez toute métrique ou toute autre quantité que vous souhaitez surveiller, telle que la perte de validation.
  2. Journal la quantité en utilisant la méthode log(), avec une clé telle que val\_loss.
  3. Initialisation du rappel

    ModelCheckpoint, et définissez moniteur pour être la clé de votre quantité.

  4. Transmettez le rappel à checkpoint\_callback Drapeau du formateur.

En savoir plus sur toutes les modifications de lAPI, y compris de nombreuses corrections de bogues, dans nos notes de publication .

Merci

Nous ne célébrerions pas la V1.0.0 sans le travail incroyable de notre brillante équipe de base travaillant 24 heures sur 24 pour obtenir chaque petit détail correctement, un soutien constant de la Léquipe PyTorch , et bien sûr les membres de notre communauté. Nous souhaitons remercier personnellement tous ceux qui ont contribué à des PR ou les ont examinés, soumis des commentaires et des problèmes, répondu sur notre forum ou dans notre communauté Slack. Celui-ci est pour vous tous!

inscrivez-vous ici

Voulez-vous en savoir plus sur la foudre? Accédez à notre site Web , lisez la documentation ou rejoignez notre toute première rencontre virtuelle – Demandez-moi nimporte quoi avec William Falcon , créateur de Lightning! La rencontre aura lieu le 21 octobre 2020 à 13 h 00 HNE, alors apportez votre déjeuner ou votre dîner et venez en savoir plus sur les nouvelles fonctionnalités, la grille ou tout ce que vous avez toujours voulu savoir mais que vous navez jamais demandé. Inscrivez-vous ici .