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.
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 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.
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 :
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.
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.
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.
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.
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.
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 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.
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.
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.
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.
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.
Nous avons interrogé 2 000 entreprises à propos de leurs initiatives d’IA pour découvrir ce qui fonctionne, ce qui ne fonctionne pas et comment progresser.
IBM Granite est notre famille de modèles d’IA ouverts, performants et fiables, conçus pour les entreprises et optimisés pour dimensionner vos applications d’IA. Explorez les options de langage, de code, de séries temporelles et de garde-fous.
Accédez à notre catalogue complet de plus de 100 cours en ligne en souscrivant aujourd’hui un abonnement individuel ou multiutilisateur afin d’élargir vos compétences dans certains de nos produits à un prix avantageux.
Dirigé par des leaders d’opinion IBM, le programme a pour but d’aider les chefs d’entreprise à acquérir les connaissances nécessaires qui leur permettront d’orienter leurs investissements IA vers les opportunités les plus prometteuses.
1 Octoverse 2022: The top programming languages, Github, 17 novembre 2022
2 PyTorch: Get Started – Start Locally
IBM web domains
ibm.com, ibm.org, ibm-zcouncil.com, insights-on-business.com, jazz.net, mobilebusinessinsights.com, promontory.com, proveit.com, ptech.org, s81c.com, securityintelligence.com, skillsbuild.org, softlayer.com, storagecommunity.org, think-exchange.com, thoughtsoncloud.com, alphaevents.webcasts.com, ibm-cloud.github.io, ibmbigdatahub.com, bluemix.net, mybluemix.net, ibm.net, ibmcloud.com, galasa.dev, blueworkslive.com, swiss-quantum.ch, blueworkslive.com, cloudant.com, ibm.ie, ibm.fr, ibm.com.br, ibm.co, ibm.ca, community.watsonanalytics.com, datapower.com, skills.yourlearning.ibm.com, bluewolf.com, carbondesignsystem.com