Cours
Les praticiens du machine learning et les ingénieurs logiciels s’appuient généralement sur des frameworks pour alléger la lourde charge liée au développement.
Par exemple, les frameworks de machine learning permettent d’implémenter des modèles sans devoir plonger dans tous les rouages mathématiques des algorithmes.
Cela fluidifie le travail des programmeurs, qui n’ont plus à réécrire sans cesse du code pour construire leurs applications.
Ces principes s’appliquent aussi au deep learning — un sous-ensemble du machine learning. TensorFlow, Keras et PyTorch comptent parmi les frameworks de deep learning les plus utilisés.
Dans ce tutoriel, nous allons passer chacun en revue et proposer un cadre d’aide au choix pour déterminer lequel convient le mieux à votre projet.
Qu’est-ce que TensorFlow ?
TensorFlow est un framework de deep learning de bout en bout. Développé par l’équipe Google Brain, d’abord pour les besoins internes de Google en recherche et en production, il a été ouvert en open source en 2015 sous licence Apache. En septembre 2019, Google a publié TensorFlow 2.0. Vous pouvez approfondir le framework dans notre tutoriel TensorFlow.
Parmi ses fonctionnalités clés :
- TensorBoard. Un ensemble d’outils de visualisation pour TensorFlow qui facilite la compréhension, le débogage et l’optimisation des programmes TensorFlow.
- Colonnes de caractéristiques (feature columns). Des abstractions de haut niveau qui transforment les données brutes en formats adaptés aux modèles de machine learning, simplifiant la gestion de types de données variés.
- Entraînement aisé sur CPU et GPU. TensorFlow peut entraîner des modèles sur différents matériels, y compris CPU et GPU, pour des calculs flexibles et efficaces.
- Entraînement parallèle. TensorFlow prend en charge le calcul distribué, permettant de traiter simultanément données et modèles sur plusieurs CPU ou GPU, ce qui accélère sensiblement l’entraînement.
Avantages de TensorFlow
Open source
TensorFlow est un framework open source : il est gratuit et accessible à tous, sans contrat éditeur préalable.
Débogage
L’une des forces de TensorFlow est TensorBoard. TensorBoard apporte les visualisations et outils nécessaires à l’expérimentation en deep learning, ce qui simplifie grandement le débogage de votre code TensorFlow.
Compatibilité avec Keras
Lors de l’annonce de TensorFlow 2.0, Google a fait de Keras l’API officielle de haut niveau de TensorFlow. Les utilisateurs peuvent ainsi enrichir leur code de fonctionnalités de haut niveau et bénéficier de la simplicité de Keras.
Scalabilité
TensorFlow ne se limite pas à un seul appareil. Vous pouvez développer des systèmes avec le framework et vous attendre à des performances efficaces, des appareils en périphérie (edge) jusqu’aux machines plus complexes.
Compatibilité
Le framework est compatible avec plusieurs langages de programmation ; vous pouvez donc travailler dans le langage qui vous convient le mieux.
TensorFlow propose une API solide pour Python, ainsi que des API pour Javascript, C++ et Java sans garantie de rétrocompatibilité. Il existe aussi des packages tiers offrant des liaisons pour C#, Haskell, Julia, MATLAB, Object Pascal, R, Scala, Rust, OCaml et Crystal.
Parallélisme
TensorFlow est perçu comme une bibliothèque d’accélération matérielle. Le framework utilise différentes stratégies de distribution sur GPU et CPU. Vous êtes donc libre de choisir l’architecture que vous souhaitez. À noter : si rien n’est précisé, le système privilégie le GPU par défaut, ce qui réduit quelque peu l’utilisation mémoire.
Inconvénients de TensorFlow
Mises à jour fréquentes
Les mises à jour régulières augmentent la charge d’installation et d’intégration de TensorFlow dans un système existant.
Homonymes déroutants
TensorFlow propose des homonymes difficiles à appréhender car ils portent le même nom mais diffèrent dans leur implémentation. Par exemple, tf.nn.conv2d et tf.layers.Conv2d ont des noms similaires mais des réglages légèrement différents, susceptibles de modifier les sorties.
Boucles symboliques manquantes
TensorFlow est souvent qualifié d’API de bas niveau — à juste titre. Le framework ne gère pas automatiquement les itérations donnant lieu à des boucles symboliques. Il reste toutefois adapté aux séquences déterministes, ce qui en fait un système exploitable.
Prise en charge GPU limitée
Le framework ne prend en charge, pour la programmation GPU, que NVIDIA et Python. Aucune prise en charge additionnelle n’est prévue.
Vitesse d’implémentation faible
Sur l’ensemble des configurations matérielles, TensorFlow nécessite de façon constante plus de temps que ses concurrents pour entraîner divers types de réseaux de neurones.
Qu’est-ce que Keras ?
Keras est une API de haut niveau pour réseaux de neurones, open source, développée par François Chollet et publiée en 2015. La documentation la présente comme « une API conçue pour les humains, pas pour les machines ».
Mi-2017, le framework a été adopté et intégré à TensorFlow, le rendant accessible aux utilisateurs de TensorFlow via le module tf.keras. Il est toutefois toujours possible d’utiliser Keras indépendamment de TensorFlow — consultez cette cheat sheet Keras ou notre tutoriel complet Keras.
Extrait de la documentation :
« Keras se concentre sur la vitesse de débogage, l’élégance et la concision du code, la maintenabilité et la facilité de déploiement. En choisissant Keras, votre base de code est plus compacte, plus lisible, plus simple à itérer. Vos modèles s’exécutent plus vite grâce à la compilation XLA et aux optimisations Autograph, et ils sont plus faciles à déployer sur tous les supports (serveur, mobile, navigateur, embarqué) grâce à TF Serving, TF Lite et TF.js. »
Avantages de Keras
Simplicité
Keras propose une API très simple et conviviale, ce qui facilite l’apprentissage et la prise en main du deep learning.
Prise en charge des backends
Keras n’exécute pas directement les calculs de bas niveau : le framework s’appuie sur Microsoft CNTK, Theano et TensorFlow. Il favorise donc l’usage de backends.
Modèles préentraînés
Un modèle préentraîné est un modèle sauvegardé après entraînement sur un large jeu de données. Keras propose de nombreux modèles préentraînés prêts à l’emploi.
Expérimentation rapide
Keras étant une API de haut niveau, elle est plus abstraite et générique. Les utilisateurs peuvent ainsi construire rapidement des modèles en quelques lignes de code.
Communauté active
Keras est open source et dispose d’une large communauté de chercheurs et développeurs qui s’entraident activement.
Documentation claire
La documentation de Keras regorge d’exemples codés, ce qui permet d’assimiler rapidement les concepts du framework.
Inconvénients de Keras
Fonctionnalités perfectibles
Beaucoup de praticiens estiment que Keras pêche encore sur certains points fonctionnels, avec une belle marge d’amélioration. Par exemple, le framework ne prend pas en charge la création dynamique de graphiques.
Messages d’erreur peu efficaces
Les messages d’erreur de la bibliothèque Keras sont peu informatifs. Ils gagneraient à être plus explicites ; identifier la cause première n’est pas toujours aisé. Keras requiert souvent un débogage poussé.
API de haut niveau
Keras étant une API de haut niveau, vous avez moins de contrôle sur la manipulation fine des fonctions.
Qu’est-ce que PyTorch ?
PyTorch est le plus récent des trois frameworks de deep learning. Développé par le groupe de recherche en IA de Facebook (désormais Meta) et ouvert en 2016, PyTorch fait aujourd’hui partie de la Linux Foundation.
Au fil des ans, PyTorch s’est forgé une réputation de simplicité, de flexibilité et d’efficacité. Il permet de construire rapidement des réseaux de neurones complexes pour des applications comme la vision par ordinateur et le traitement du langage naturel.
Ses atouts majeurs :
- Calcul tensoriel. PyTorch propose une structure de tableau multidimensionnel appelée Tensor, proche de l’ndarray de NumPy, mais exécutable sur GPU pour accélérer les calculs.
- TorchScript. Un moyen de sérialiser des modèles PyTorch pour les exécuter dans d’autres environnements comme le C++, garantissant l’aptitude à la production.
- Graphes dynamiques. PyTorch utilise des graphes de calcul dynamiques, offrant une grande souplesse pour construire et modifier les modèles à la volée, utile pour les architectures complexes.
- Différentiation automatique. La différentiation automatique et le calcul des gradients simplifient la rétropropagation et l’entraînement des réseaux de neurones.
- Écosystème Python. PyTorch s’intègre parfaitement à l’écosystème Python, ce qui facilite l’usage des bibliothèques Python et offre une interface plus « pythonesque » et conviviale.
Avantages de PyTorch
Pythonique
PyTorch est nativement « pythonesque », ce qui le rend très simple à adopter pour les développeurs Python — un vrai plus, la majorité des travaux en deep learning se faisant en Python.
Facile à apprendre
La syntaxe de PyTorch est très simple et intuitive. Les praticiens lui reconnaissent une courbe d’apprentissage douce — certains le jugent parmi les packages de deep learning les plus faciles à appréhender.
Débogage aisé
PyTorch peut utiliser les outils de débogage pdb et ipdb de Python. Les programmeurs peuvent aussi recourir à PyCharm, l’IDE Python, puisque PyTorch crée le graphe de calcul en temps réel.
Communauté solide
Bien que plus récent, PyTorch a rapidement fédéré une communauté très engagée. Elle veille à une documentation structurée et pertinente pour les développeurs.
Parallélisme des données
Le parallélisme des données dans PyTorch est très efficace : il permet de scinder les données en lots et de les répartir sur plusieurs GPU. Ainsi, une large part de la charge est transférée du CPU vers le GPU.
Inconvénients de PyTorch
Pas de visualisation intégrée
TensorBoard (TensorFlow) permet de visualiser l’entraînement, alors que PyTorch ne propose pas d’outil équivalent en natif — il faut recourir à des solutions tierces.
Serveur d’API requis en production
Aucun framework intégré ne permet d’exposer directement des modèles sur le web ; vous devez utiliser un serveur backend tiers comme Flask ou Django.
Que choisir ? Analyse comparative PyTorch vs Keras vs TensorFlow
|
TensorFlow |
PyTorch |
Keras |
|
|
Niveau d’API |
Les deux (haut et bas) |
Bas |
Haut |
|
Architecture |
Peu intuitive |
Complexe, moins lisible |
Simple, concise, lisible |
|
Jeux de données |
Grands volumes, haute performance |
Grands volumes, haute performance |
Plus petits jeux de données |
|
Débogage |
Débogage difficile |
Bonnes capacités de débogage |
Réseaux simples, débogage rarement nécessaire |
|
Modèles préentraînés ? |
Oui |
Oui |
Oui |
|
Popularité |
Deuxième plus populaire des trois |
Troisième plus populaire des trois |
Le plus populaire des trois |
|
Vitesse |
Rapide, haute performance |
Rapide, haute performance |
Lent, performances faibles |
|
Langages d’implémentation |
C++, CUDA, Python |
Lua |
Python |
Choisir le bon framework
La réponse à « quel framework est le meilleur ? » restera toujours subjective, chacun ayant ses atouts et limites comme nous l’avons vu. Voici toutefois quelques critères pour orienter votre décision.
PyTorch vs TensorFlow
- Code passe-partout. PyTorch et TensorFlow réduisent tous deux le code passe-partout nécessaire à la construction de modèles.
- Nature pythonique et POO. PyTorch est plus « pythonesque » et respecte les principes de la programmation orientée objet, ce qui est intuitif pour les développeurs Python.
- Popularité. Plus ancien et soutenu par Google, TensorFlow dispose d’une base d’utilisateurs et d’un soutien communautaire plus larges.
- Flexibilité. Grâce à ses graphes dynamiques, PyTorch offre davantage de flexibilité pour modifier les modèles à la volée.
- Débogage et suivi. TensorBoard de TensorFlow fournit des outils de visualisation puissants pour le débogage et le suivi de l’entraînement.
- Déploiement. TensorFlow propose un écosystème de serving plus mature pour déployer les modèles, rendant le déploiement plus fluide qu’avec PyTorch.
PyTorch vs Keras
- Courbe d’apprentissage. PyTorch et Keras sont tous deux conviviaux, faciles à apprendre et à utiliser.
- Recherche vs développement. PyTorch est souvent privilégié par les chercheurs pour sa flexibilité et son contrôle, tandis que Keras séduit les développeurs par sa simplicité et son côté « plug-and-play ».
- Vitesse et débogage. PyTorch est généralement plus rapide et offre de meilleures capacités de débogage que Keras.
- Tutoriels et petits jeux de données. Keras brille par l’abondance de tutoriels réutilisables et se montre particulièrement efficace sur de petits jeux de données.
TensorFlow vs Keras
- APIs de haut niveau. TensorFlow et Keras proposent tous deux des APIs de haut niveau pour construire et entraîner des modèles.
- Nature pythonique. Écrit en Python, Keras est plus convivial et intuitif.
- Grands jeux de données. TensorFlow est souvent préféré pour la gestion de larges volumes de données grâce à sa robustesse et sa scalabilité.
- Couche d’abstraction. Keras agit comme un « wrapper » autour des fonctions TensorFlow, simplifiant l’interface pour un usage plus aisé.
Conclusion
TensorFlow, PyTorch et Keras sont trois frameworks phares du deep learning. Chacun a ses spécificités, ce qui en fait d’excellents outils selon les contextes. Le choix dépendra de votre cas d’usage, de votre niveau technique et du temps dont vous disposez pour apprendre.
Quel que soit le framework retenu, DataCamp propose de nombreux cours pour bien démarrer :
