My IBM Se connecter S’abonner

Qu'est-ce que PyTorch ?

4 octobre 2023 

Auteurs

Dave Bergmann

Senior Writer, AI Models

IBM

Cole Stryker

Editorial Lead, AI Models

Gather

Qu'est-ce que PyTorch ?

PyTorch est un cadre d’apprentissage profond open source basé sur un logiciel utilisé pour construire des réseaux neuronaux, combinant la bibliothèque de machine learning (ML) de Torch avec une API de haut niveau basée sur Python . Sa flexibilité et sa facilité d’utilisation, entre autres avantages, en ont fait le principal cadre de ML pour les communautés universitaires et de recherche.

PyTorch prend en charge une grande variété d’architectures de réseaux neuronaux, depuis les simples algorithmes de régression linéaire jusqu’aux réseaux neuronaux convolutifs complexes et aux modèles de transformation générative utilisés pour des tâches telles que la vision par ordinateur et le traitement automatique du langage naturel (NLP). Basé sur le langage de programmation Python largement répandu et offrant de vastes bibliothèques de modèles préconfigurés (et même pré-entraînés), PyTorch permet aux data scientists de construire et d’exécuter des réseaux d’apprentissage profond sophistiqués tout en minimisant le temps et les efforts consacrés au codage et à la structure mathématique.

PyTorch permet également aux data scientists d'exécuter et de tester des portions de code en temps réel, plutôt que d'attendre que l'ensemble du code soit mis en œuvre, ce qui, pour les grands modèles d'apprentissage profond, peut prendre beaucoup de temps. PyTorch est donc une excellente plateforme pour le prototypage rapide et accélère considérablement le processus de débogage.

Développé à l’origine par Facebook AI Research (aujourd’hui Meta), PyTorch a été mis en open source en 2017 et est sous la tutelle de la PyTorch Foundation (qui fait partie de la Linux Foundation) depuis 2022. La fondation sert d’espace neutre à la communauté du deep learning pour collaborer au développement de l’écosystème PyTorch.

En 2023, IBM est devenu un membre de premier plan de la PyTorch Foundation, ayant déjà collaboré à deux projets majeurs : permettre un entraînement plus efficace des modèles de fondation d’IA flexibles avec des milliards de paramètres et rendre la création de points de contrôle pour l’entraînement de l’IA considérablement plus rentable. Le portefeuille IBM watsonx utilise PyTorch pour fournir une pile logicielle dédiée aux entreprises pour les modèles de fondation d’intelligence artificielle, de l’entraînement de bout en bout au réglage fin des modèles.

Design 3D de balles roulant sur une piste

Les dernières actualités et informations en matière d’IA 


La newsletter hebdomadaire Think vous apporte toute l’actualité sur l’IA, le cloud et bien d’autres sujets.

Comment fonctionne PyTorch ?

La structure mathématique et de programmation de PyTorch simplifie et rationalise les workflows de machine learning, sans limiter la complexité ou les performances des réseaux neuronaux profonds.

Python

Python est un langage de programmation général de haut niveau largement utilisé dans la science des données, ce qui en fait un choix intuitif pour les data scientists qui souhaitent approfondir leur travail en modélisant activement des réseaux de deep learning. La simplicité intrinsèque de Python en fait un langage facile à lire, dont l’apprentissage est relativement rapide et qui peut fonctionner sur n’importe quel système d’exploitation, y compris Windows, macOS, Linux ou Unix. Python est le deuxième langage de programmation le plus utilisé sur GitHub depuis plus de trois ans, ayant même dépassé Java en 2019. Il continue de gagner en popularité, avec une augmentation de 22,5 % en 2022.1

Cette flexibilité et cette simplicité ont contribué à l’émergence d’une solide communauté en ligne de développeurs Python, qui collaborent à la création d’un large éventail de bibliothèques et d’API Python, telles que Numerical Python (NumPy) pour les opérations mathématiques, Pandas pour la manipulation de données ou matplotlib pour la visualisation des données, et de ressources éducatives. Cette communauté a également généré un grand nombre de bibliothèques Pytorch qui limitent la monotonie et l’incertitude du codage pour le machine learning, permettant ainsi aux développeurs et aux data scientists de se concentrer sur l’innovation plutôt que sur l’écriture de tâches répétitives.

Tenseurs

Dans tout algorithme de machine learning, même ceux appliqués à des informations apparemment non numériques telles que des sons ou des images, les données doivent être représentées numériquement. Dans PyTorch, cela est possible grâce aux tenseurs, qui sont les unités de données fondamentales utilisées pour les calculs sur la plateforme.

Dans un contexte de machine learning, un tenseur est un tableau multidimensionnel de nombres qui fonctionne comme un système de comptabilité mathématique. D'un point de vue linguistique, le terme « tenseur » est un terme générique qui englobe certaines entités mathématiques plus familières :

  • Un scalaire est un tenseur d’ordre zéro, contenant un seul nombre.

  • Un vecteur est un tenseur unidimensionnel, contenant plusieurs scalaires du même type. Un tuple est un tenseur unidimensionnel contenant différents types de données.

  • Une matrice est un tenseur bidimensionnel, contenant plusieurs vecteurs du même type.

  • Les tenseurs à trois dimensions ou plus, comme les tenseurs tridimensionnels utilisés pour représenter les images RVB dans les algorithmes de vision par ordinateur, sont collectivement appelés tenseurs à N dimensions.

Les tenseurs PyTorch fonctionnent de manière similaire aux ndarrays utilisés dans NumPy, mais contrairement aux ndarrays qui ne peuvent être exécutés que sur des unités centrales de traitement (CPU), les tenseurs peuvent également être exécutés sur des unités de traitement graphique (GPU). Les GPU offrent une vitesse de calcul nettement supérieure à celle des CPU, ce qui constitue un avantage majeur compte tenu des volumes massifs de données et du traitement parallèle propres à l’apprentissage profond.

En plus d'encoder les entrées et les sorties d'un modèle, les tenseurs PyTorch encodent également les paramètres du modèle : les poids, les biais et les gradients qui sont « appris » dans le cadre du machine learning. Cette propriété des tenseurs permet la différenciation automatique, qui est l'une des fonctionnalités les plus importantes de PyTorch.

Modules

PyTorch utilise des modules comme éléments constitutifs des modèles d'apprentissage profond, ce qui permet la création rapide et directe de réseaux neuronaux sans avoir à coder manuellement chaque algorithme, ce qui est fastidieux.

Les modules peuvent contenir d’autres modules imbriqués, et c’est souvent le cas. En plus de permettre la création de réseaux neuronaux multicouches plus élaborés, cela permet également à ces modèles de deep learning complexes d’être facilement sauvegardés en tant que module nommé unique et transférés entre différentes machines, CPU ou GPU. Les modèles PyTorch peuvent même être exécutés dans des environnements non Python, comme C++, via Torchscript, ce qui permet de faire le lien entre les prototypes de recherche et le déploiement en production.

De manière générale, il existe trois catégories principales de modules utilisés pour créer et optimiser des modèles d'apprentissage profond dans PyTorch :

  • Les modules nn sont déployés en tant que couches des réseaux neuronaux. Le package torch.nn contient une grande bibliothèque de modules qui effectuent des opérations courantes comme les convolutions, le pooling et la régression. Par exemple, torch.nn.Linear(n,m) lance un algorithme de régression linéaire avec n entrées et m sorties (dont les entrées et paramètres initiaux sont ensuite établis dans les lignes de code suivantes).

  • Le module autograd offre un moyen simple de calculer automatiquement les gradients, utilisés pour optimiser les paramètres du modèle via la descente de gradient, pour toute fonction opérée au sein des réseaux neuronaux. L’ajout d’un tenseur avec requires_grad=True indique à autograd que chaque opération sur ce tenseur doit être suivie, ce qui permet une différenciation automatique.

  • Les modules Optim appliquent des algorithmes d'optimisation à ces gradients. Torch.optim fournit des modules pour diverses méthodes d'optimisation, comme la descente de gradient stochastique (SGD) ou la propagation de la moyenne quadratique (RMSprop), afin de répondre à des besoins d'optimisation spécifiques.

Graphiques de calculs dynamiques

Les graphiques de calcul dynamique (DCG) sont la manière dont les modèles d'apprentissage profond sont représentés dans PyTorch. En résumé, les graphiques de calcul représentent le flux de données entre les différentes opérations d'un système mathématique : dans le contexte de l'apprentissage profond, ils traduisent essentiellement le code des réseaux neuronaux en un organigramme indiquant les opérations effectuées à chaque nœud et les dépendances entre les différentes couches du réseau. Il s'agit de l'agencement des étapes et des séquences qui transforment les données d'entrée en données de sortie.

Ce qui différencie les graphiques de calcul dynamiques (comme ceux utilisés dans PyTorch) des graphiques de calcul statiques (comme ceux utilisés dans TensorFlow), c'est que les DCG reportent la spécification exacte des calculs et des relations entre eux jusqu'au moment de l'exécution. En d'autres termes, alors qu'un graphique de calcul statique exige que l'architecture de l'ensemble du réseau neuronal soit entièrement déterminée et compilée pour pouvoir fonctionner, les DCG peuvent être itérés et modifiés à la volée.

Cela rend les DCG particulièrement utiles pour le débogage et le prototypage, car des parties spécifiques du code d'un modèle peuvent être modifiées ou exécutées de manière isolée sans avoir à réinitialiser l'ensemble du modèle. Pour les modèles d'apprentissage profond de très grande taille utilisés pour les tâches sophistiquées de vision par ordinateur et de NLP, cela pourrait représenter une perte de temps et de ressources informatiques. Les avantages de cette flexibilité s'étendent à l'entraînement des modèles, car les graphiques de calcul dynamiques sont facilement générés à rebours pendant la rétropropagation.

Alors que leur structure fixe peut permettre une plus grande efficacité de calcul, les graphes de calcul statiques ont une flexibilité limitée : par exemple, élaborer un modèle qui utilise un nombre variable de couches en fonction des données d’entrée, tel qu’un réseau neuronal convolutif (CNN) qui peut traiter des images de différentes tailles, est une tâche extrêmement difficile avec des graphes statiques.

Différenciation automatique

La rétropropagation est une méthode largement utilisée pour entraîner les réseaux neuronaux, en particulier dans le cadre de l’apprentissage supervisé. Tout d’abord, dans un passage avant, un modèle est alimenté par des entrées (x) et prédit des sorties (y). En procédant par passage arrière à partir de cette sortie, une fonction de perte est appliquée pour évaluer le taux d’erreur des prédictions du modèle pour différentes valeurs de x. En différenciant cette fonction de perte pour trouver sa dérivée, la descente de gradient peut être utilisée pour ajuster les poids dans le réseau neuronal, une couche à la fois.

La technique de différenciation automatique du module autograd de PyTorch s’appuie sur une formule mathématique appelée règle de la chaîne, calculant les dérivées complexes en les divisant en dérivées plus simples et en les regroupant par la suite. Autograd calcule et enregistre automatiquement les gradients pour toutes les opérations exécutées dans un graphe de calcul, ce qui réduit considérablement le travail de rétropropagation.

Lors de l'exécution d'un modèle qui a déjà été entraîné, autograd devient une utilisation inutile des ressources informatiques. L'ajout d'une opération de tenseur avec requires_grad=False signalera à PyTorch de cesser de suivre les gradients.

Jeux de données et dataloaders

Travailler avec les grands ensembles de données nécessaires pour entraîner les modèles d'apprentissage profond peut être complexe et exigeant en termes de calcul. PyTorch fournit deux primitives de données, les jeux de données et les dataloaders, pour faciliter le chargement des données et rendre le code plus facilement lisible.

  • torch.utils.data.Dataset stocke les échantillons de données et leurs étiquettes correspondantes
  • torch.Utils.Data.DataLoader insère un itérable (un objet sur lequel on peut opérer) autour de l'ensemble des jeux de données pour permettre un accès facile aux échantillons
Groupe d’experts | Podcast

Décryptage de l’IA : Tour d’horizon hebdomadaire

Rejoignez notre panel d’ingénieurs, de chercheurs, de chefs de produits et autres spécialistes de premier plan pour connaître l’essentiel de l'actualité et des dernières tendances dans le domaine de l’IA.

Écosystème PyTorch

Les fonctionnalités de base de PyTorch sont complétées par un solide écosystème d’outils, de bibliothèques et d’extensions développés par les membres de la communauté PyTorch. De nombreuses bibliothèques open source supplémentaires, contenant des modules spécialisés, des réseaux neuronaux préconfigurés et même des modèles pré-entraînés, viennent compléter la bibliothèque torch préinstallée.

Torchvision

Torchvision est un outil contenant des modules, des architectures de réseau et des jeux de données pour diverses tâches de classification d'images, de détection d'objets et de segmentation d'images.

Découvrir Torchvision
TorchTexte

TorchText fournit des ressources telles que des jeux de données, des transformations élémentaires de traitement de texte et des modèles pré-entraînés à utiliser dans le cadre du NLP.

Découvrir TorchText
Open Neural Network Exchange

L'Open Neural Network Exchange (ONNX) assure l'interopérabilité entre les cadres d'IA, ce qui permet aux utilisateurs de transférer facilement leurs modèles PyTorch sur d'autres plateformes.

Découvrir ONNX
Tutoriels

Vous trouverez de nombreux tutoriels utiles sur PyTorch.org. Par exemple, ce tutoriel intermédiaire enseigne les principes fondamentaux de l’apprentissage par renforcement profond en entraînant une IA à jouer à un jeu vidéo.

Découvrir les tutoriels PyTorch

Installation et exécution de PyTorch

PyTorch peut être installé et exécuté dans différentes configurations sur des systèmes locaux et des plateformes cloud.

L'exécution locale de PyTorch nécessite l’installation de Python à partir de l’Anaconda package manager, de Homebrew ou du site web de Python.

PyTorch peut être installé localement via Anaconda en utilisant la commande conda install pytorch torchvision -c pytorch, ou via pip en utilisant la commande pip3 install torch torchvision. La première méthode est recommandée, car Anaconda fournit toutes les dépendances de PyTorch (y compris Python) en une seule installation en bac à sable.2

PyTorch peut également être exécuté sur des plateformes cloud, notamment Amazon Web Services, Google Cloud et Microsoft Azure.

Il est recommandé (mais pas obligatoire) de travailler avec des GPU NVIDIA afin de profiter de la prise en charge par PyTorch de la CUDA (Compute Unified Device Architecture), qui offre un entraînement et des performances nettement plus rapides par rapport aux CPU.

Solutions connexes

Solutions connexes

IBM watsonx.ai

Entraînez, validez, réglez et déployez une IA générative, des modèles de fondation et des capacités de machine learning avec IBM watsonx.ai, un studio d’entreprise nouvelle génération pour les générateurs d’IA. Créez des applications d’IA en peu de temps et avec moins de données.

Découvrir watsonx.ai
Solutions d’intelligence artificielle

Mettez l’IA au service de votre entreprise grâce à l’expertise de pointe d’IBM en matière d’IA et à son portefeuille de solutions.

Découvrir les solutions d’IA
Conseils et services en matière d’IA

Réinventez les workflows et les opérations critiques en ajoutant l’IA pour optimiser les expériences, la prise de décision et la valeur métier en temps réel.

Découvrir les services d’IA
Passez à l’étape suivante

Bénéficiez d’un accès centralisé aux fonctionnalités couvrant le cycle de développement de l’IA. Produisez des solutions IA puissantes offrant des interfaces conviviales, des workflows et un accès à des API et SDK conformes aux normes du secteur.

Découvrir watsonx.ai Réserver une démo en direct
Notes de bas de page