Maison > Article > Périphériques technologiques > Une ligne de code, pour fabriquer des élixirs deux fois plus vite ! PyTorch 2.0 sort avec surprise, LeCun le transmet avec enthousiasme
Le 2 décembre, PyTorch 2.0 est officiellement sorti !
Cette mise à jour pousse non seulement les performances de PyTorch vers de nouveaux sommets, mais ajoute également la prise en charge des formes et de la distribution dynamiques.
De plus, la série 2.0 déplacera également du code PyTorch du C++ vers Python.
Actuellement, PyTorch 2.0 est encore en phase de test et la première version stable devrait être disponible début mars 2023.
Au cours des dernières années, PyTorch a innové et itéré de la version 1.0 à la récente 1.13, et a rejoint la nouvelle Fondation PyTorch pour faire partie de la Fondation Linux.
Le défi avec la version actuelle de PyTorch est que le mode impatient a du mal à suivre la bande passante GPU toujours croissante et les architectures de modèles plus folles.
La naissance de PyTorch 2.0 changera et améliorera fondamentalement la façon dont PyTorch s'exécute au niveau du compilateur.
Comme nous le savons tous, (Py) dans PyTorch vient du langage de programmation open source Python largement utilisé en science des données.
Cependant, le code de PyTorch n’utilise pas entièrement Python, mais en donne une partie au C++.
Cependant, dans la future série 2.x, l'équipe du projet PyTorch prévoit de déplacer le code lié à torch.nn vers Python.
Au-delà de cela, puisque PyTorch 2.0 est une fonctionnalité entièrement complémentaire (et facultative), la 2.0 est 100 % rétrocompatible.
En d'autres termes, la base de code est la même, l'API est la même et la manière d'écrire des modèles est la même.
Utiliser des hooks d'évaluation du framework Python pour capturer en toute sécurité les programmes PyTorch, il s'agit d'une innovation majeure développée par l'équipe en matière de capture de graphiques au cours des 5 dernières années.
surcharge le moteur autograd de PyTorch en tant que trace automatique pour générer une trace arrière anticipée.
résume environ 2000+ opérateurs PyTorch en un ensemble fermé d'environ 250 opérateurs primitifs sur lesquels les développeurs peuvent créer un backend PyTorch complet. La barrière à l’écriture des fonctionnalités ou des backends de PyTorch est considérablement réduite.
Un compilateur d'apprentissage en profondeur qui peut générer du code rapide pour plusieurs accélérateurs et backends. Pour les GPU de Nvidia, il utilise OpenAI Triton comme élément de base clé.
Il convient de noter que TorchDynamo, AOTAutograd, PrimTorch et TorchInductor sont tous écrits en Python et prennent en charge les formes dynamiques.
En introduisant un nouveau mode de compilation "torch.compile", PyTorch 2.0 peut accélérer la formation du modèle avec une seule ligne de code.
Aucune astuce requise ici, exécutez simplement torch.compile() et c'est tout :
opt_module = torch.compile(module)
Afin de vérifier ces technologies, l'équipe a soigneusement créé des tests de référence, comprenant des tâches telles que la classification d'images, la détection d'objets et la génération d'images, ainsi que diverses tâches PNL telles que la modélisation du langage, la réponse aux questions, la classification de séquences, les systèmes de recommandation. , et l'apprentissage par renforcement. Parmi eux, ces benchmarks peuvent être divisés en trois catégories :
montrent que sur ces 163 modèles open source couvrant la vision, la PNL et d'autres domaines, la vitesse de formation a été améliorée de 38 à 76 %.
Comparaison sur le GPU NVIDIA A100
De plus, l'équipe a également effectué des tests de référence sur certains modèles PyTorch open source populaires et a obtenu des accélérations substantielles de 30 % à 2x.
Le développeur Sylvain Gugger a déclaré : « Avec une seule ligne de code, PyTorch 2.0 peut atteindre une accélération de 1,5x à 2,0x lors de l'entraînement des modèles Transformers. C'est la chose la plus excitante depuis l'avènement de l'entraînement de précision mixte. Aperçu technique
Le compilateur de PyTorch peut être divisé en trois parties :Acquisition de graphiques
TorchDynamo
À cette fin, l'équipe a adopté une approche basée sur les données pour vérifier l'efficacité de TorchDynamo sur la capture de graphiques - en utilisant plus de 7 000 projets Github écrits dans PyTorch comme ensemble de validation.
Les résultats montrent que TorchDynamo peut effectuer une capture graphique correctement et en toute sécurité 99 % du temps, avec une surcharge négligeable.
TorchInductor
TorchInductor utilise le niveau IR boucle par boucle défini par Pythonic pour mapper automatiquement les modèles PyTorch au code Triton généré sur le GPU et C++/OpenMP sur le CPU. L'IR au niveau de la boucle principale de
TorchInductor ne contient qu'environ 50 opérateurs et il est implémenté en Python, ce qui facilite son extension.
AOTAutograd
AOTAutograd peut utiliser le mécanisme d'extension torch_dispatch de PyTorch pour suivre le moteur Autograd, capturer la rétropropagation "à l'avance", puis utiliser TorchInductor pour accélérer les canaux avant et arrière.
PrimTorch
Dans le projet PrimTorch, l'équipe a défini deux ensembles d'opérateurs plus petits et plus stables :
Lorsque nous avons examiné ce qui était nécessaire pour prendre en charge la généralité dans le code PyTorch, une exigence clé était de prendre en charge les formes dynamiques et de permettre au modèle d'accepter des tenseurs de différentes tailles sans changer la forme à chaque fois. provoquer une recompilation. Lorsque les formes dynamiques ne sont pas prises en charge, une solution de contournement courante consiste à les compléter à la puissance 2 la plus proche. Cependant, comme le montre le graphique ci-dessous, cela entraîne une surcharge de performances importante et entraîne également des temps de compilation beaucoup plus longs. Maintenant, avec la prise en charge des formes dynamiques, PyTorch 2.0 a atteint des performances jusqu'à 40 % supérieures à celles d'Eager. Enfin, dans la feuille de route de PyTorch 2.x, l'équipe espère faire avancer davantage le modèle de compilation en termes de performances et d'évolutivité.
Formes dynamiques
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!