Revenir aux actualités des développeurs

Summer of open source: building more efficient AI with PyTorch

20 septembre 2022DeSuraj Subramanian

Remarque : tous nos remerciements à Less Wright, Ingénieur partenaire, AI Meta, pour avoir relu cet article et nous avoir fourni des informations supplémentaires.

Cet article sur la création d’une intelligence artificielle efficace est le deuxième de la série intitulée « L’été de l’Open Source ». Cette série entend mettre à disposition de nombreuses ressources utiles et du contenu de formation dans des domaines dans lesquels les projets open source jouent un rôle essentiel au sein de Meta et au-delà. Nous vous invitons à la suivre tandis que nous explorons d’autres domaines dans lesquels l’Open Source de Meta fait progresser l’industrie en partageant des outils innovants et évolutifs.

PyTorch : de la technologie de base aux bases mêmes

Depuis sa sortie initiale en 2016, PyTorch a été largement utilisé par la communauté du deep learning (ou apprentissage profond). Si dans un premier temps, son champ de prédilection était cantonné à la recherche, force est de constater que cet outil ne cesse à présent de se développer pour une utilisation dans des scénarios de production. Nous vivons actuellement une période exaltante pour tout ce qui concerne le machine learning (ML) et l’intelligence artificielle (IA), une période au cours de laquelle se développent des méthodes innovantes et de nouveaux cas d’utilisation pour les modèles d’intelligence artificielle. En transférant la PyTorch Foundation, une structure indépendante et nouvellement établie, sous l’égide de la fondation Linux, PyTorch ouvre ainsi le prochain chapitre de son histoire. Cette fondation est régie par un conseil d’administration très varié et qui a vocation à être élargi à l’avenir, regroupant notamment des représentants d’AMD, d’Amazon Web Services, de Google Cloud, de Microsoft Azure et de Nvidia. Sa mission est de motiver l’adoption d’outils d’intelligence artificielle au moyen de projets non rattachés à des fournisseurs spécifiques et de rendre les outils, les bibliothèques et autres composants open source accessibles au plus grand nombre. Cette transition vers la fondation permettra également à PyTorch et sa communauté open source d’accélérer le mouvement pour ainsi faire entrer de plain-pied l’intelligence artificielle et le machine learning dans l’ère de la production après celle du prototypage.

Simplification des processus d’intelligence artificielle avec l’open source de Meta

PyTorch est un excellent exemple de la toute-puissance de l’open source. PyTorch, qui a été l’une des toutes premières structures de deep learning open source, a permis à des personnes issues de divers horizons de tester le deep learning et de mettre en pratique leurs créations dans des domaines très variés. PyTorch soutient tout ce qui va des expériences dans les applications de recherche au développement de véhicules autonomes en passant par les radars à pénétration de sol pour ne citer que quelques-unes de ces utilisations les plus récentes. En combinant une bibliothèque polyvalente d’outils d’intelligence artificielle à la communauté open source, la volonté est on ne peut plus claire. Il s’agit en effet de pouvoir rapidement itérer et adapter les technologies à grande échelle pour de nombreuses utilisations différentes.

À mesure que l’intelligence artificielle est mise à œuvre à plus grande échelle, la taille des modèles augmente quant à elle pour aborder des problématiques plus complexes. Ce qui veut dire que les ressources nécessaires pour entraîner ces modèles ont elles aussi considérablement augmenté. Heureusement, de nombreux membres de la communauté des développeur·euses ont reconnu la nécessité pour les modèles d’utiliser moins de ressources, tant d’un point de vue pratique qu’environnemental. Cet article entend étudier pourquoi la quantification et d’autres types de compression de modèles peuvent jouer le rôle de catalyseurs afin d’aboutir à une intelligence artificielle efficace.

Création d’une référence pour l’utilisation de PyTorch

La majeure partie de cet article explore certaines des fonctionnalités intermédiaires et avancées de PyTorch. Si vous débutez ou si vous êtes déjà expert ou experte et que vous utilisez actuellement une autre bibliothèque, mieux vaut commencer par quelques notions de base. Nous vous invitons à consulter le guide des débutants sur PyTorch qui présente une vue complète du machine learning au moyen du jeu de données Fashion MNIST.

Toujours si vous débutez sur PyTorch, voici quelques autres ressources à consulter :

  • PyTorch Community Stories : découvrez comment PyTorch influence des secteurs d’activité très variés comme l’agriculture, l’éducation, les voyages, etc.
  • PyTorch Beginner Series : explorez une playlist de vidéos sur les techniques fondamentales de PyTorch (utilisation des capteurs, modèles de construction, entraînements et inférences).

Quantification : mise en pratique de techniques éprouvées dans le domaine de l’intelligence artificielle

Il existe bien des manières de rendre l’intelligence artificielle plus efficace. Une première solution, qui d’ailleurs peut se révéler extrêmement efficace, consiste à collaborer pour concevoir du matériel et des logiciels destinés à optimiser les outils d’intelligence artificielle. Cependant, le développement de telles solutions matérielles et logicielles nécessite un temps et des ressources considérables. Une autre solution consiste à créer des architectures plus rapides et de taille plus réduite afin de gagner en efficacité. Toutefois, bon nombre d’entre elles souffrent d’un manque de précision si on les compare à des modèles plus importants, du moins à l’état actuel des choses. Une approche plus simple consiste à trouver des moyens pour réduire les ressources nécessaires afin de former et de diffuser les modèles existants. Dans PyTorch par exemple, pour y parvenir, il convient de compresser le modèle au moyen de la quantification.

La quantification est une technique mathématique qui a été utilisée pour créer des fichiers audio numériques compressés avec perte et convertir des signaux analogiques en signaux numériques. Grâce à des calculs mathématiques et à une précision réduite, la quantification permet de bien meilleures performances sur de nombreuses plateformes matérielles. Aussi, pourquoi utiliser la quantification pour rendre l’intelligence artificielle plus efficace ? Dans certains cas, les résultats montrent que l’utilisation de cette technique relativement simple peut conduire à une accélération sans précédent (de 2 à 4 fois) de l’inférence du modèle.

Les paramètres qui entrent dans la composition d’un modèle de deep learning sont habituellement des nombres décimaux à virgule flottante. Chacun d’eux nécessite 16 ou 32 bits de mémoire. Lorsque la quantification est utilisée, ces nombres sont souvent convertis au format INT4 ou INT8 qui occupent seulement 4 ou 8 bits. Autant dire une réduction de la quantité de mémoire nécessaire aux modèles. De plus, les fabricants de puces intègrent des calculs arithmétiques spéciaux qui accélèrent les opérations utilisant des nombres entiers par rapport à celles utilisant des nombres décimaux.

Il existe trois méthodes de quantification utilisables dans les modèles d’entraînement : dynamique, statique et entraînement avec prise en charge de la quantification (QAT). Nous vous présentons dans le tableau ci-dessous un aperçu des avantages et inconvénients de ces méthodes. Pour savoir comment mettre en œuvre chacune d’entre elles dans vos workflows d’intelligence artificielle, lisez la publication de blog Practical Quantization in PyTorch.

Méthode de quantification

Avantages

Inconvénients

Dynamique

  • Est facile à utiliser avec un seul appel d’API
  • Se révèle plus robuste en ce qui concerne la dérive de distribution et permet une précision légèrement meilleure
  • Fonctionne bien pour les modèles LSTM (mémoire longue à court terme) et Transformer

Traitement supplémentaire à chaque passe vers l’avant

Statique (également appelée PTQ)

  • Permet d’éliminer les traitements ce qui accélère l’inférence par rapport à la quantification dynamique

Nécessite parfois un nouvel étalonnage régulier pour contrer la dérive de distribution

Entraînement avec prise en charge de la quantification (QAT)

  • Propose une meilleure précision que la quantification statique
  • Propose une inférence plus rapide que le modèle dynamique

Coûts de calcul élevés

Fonctionnalités supplémentaires pour accélérer le workflow d’intelligence artificielle

La quantification n’est pas la seule manière de rendre plus efficace l’intelligence artificielle basée sur PyTorch. Les fonctionnalités sont régulièrement mises à jour et ci-dessous, figurent quelques autres moyens dont PyTorch peut améliorer les workflows d’intelligence artificielle :

  • Mode d’inférence : ce mode peut servir à écrire du code PyTorch si vous utilisez uniquement du code pour exécuter l’inférence. Le mode d’inférence change certaines suppositions si vous utilisez des capteurs pour accélérer l’inférence. En mentionnant à PyTorch que vous n’utiliserez pas les capteurs par la suite pour certaines applications (dans ce cas, la fonction autograd), l’outil procède à des ajustements pour accélérer l’exécution du code dans ces scénarios en particulier.

  • Faible précision : la quantification fonctionne uniquement au moment de l’inférence, c’est-à-dire après avoir entraîné le modèle. Concernant le processus d’entraînement lui-même, PyTorch utilise la fonctionnalité AMP (ou précision mixte automatique) pour trouver le meilleur format en fonction des capteurs utilisés (FP16, FP32 ou BF16). Le deep learning à faible précision dans PyTorch présente plusieurs avantages. Il permet de réduire la taille d’un modèle et la mémoire nécessaire pour entraîner les modèles et de limiter la puissance indispensable à leur exécution. Pour en savoir plus, consultez ce tutoriel d’utilisation de la fonctionnalité AMP avec les GPU CUDA.

  • Format channels-last : concernant les modèles de vision, NHWC (également appelé channels-last) se révèle un format de mémoire de capteur plus rapide dans PyTorch. Le fait de stocker les données au format channels-last accélère les opérations dans PyTorch. Le fait de formater les capteurs d’entrée au format channels-last réduit les traitements nécessaires à la conversion entre les différents types de format conduisant ainsi à une inférence plus rapide.

  • Prototype Optimize for inference : ce prototype TorchScript met en œuvre certaines optimisations génériques qui devraient accélérer les modèles dans tous les environnements, mais aussi préparer les modèles pour inférence avec des paramètres spécifiques à la conception. À ce stade, les principaux cas d’utilisation intègrent des modèles de vision sur les CPU (et les GPU). Étant donné qu’il s’agit d’un prototype, vous pourriez rencontrer des problèmes. Nous vous recommandons de les mentionner dans le référentiel GitHub PyTorch.

Comment ouvrir de nouvelles perspectives dans PyTorch

Des méthodes novatrices visant à accélérer les workflows d’intelligence artificielle sont régulièrement explorées dans le blog de PyTorch. C’est un endroit idéal pour se tenir au courant de techniques comme celles du BetterTransformer qui multiplie jusqu’à deux fois la vitesse et le débit des modèles Transformer pour les scénarios d’exécution courants. Si vous voulez en apprendre davantage sur la façon de mettre en œuvre des fonctionnalités spécifiques dans PyTorch, la page recipes vous permet d’effectuer des recherches par catégorie du type optimisation de modèles, entraînement distribué et intelligibilité. Cette publication est uniquement un exemple de la façon dont PyTorch fait progresser l’open source et l’intelligence artificielle.

Pour vous tenir au courant des dernières nouveautés sur Meta Open Source pour l’intelligence artificielle et le machine learning, consultez notre site open source, abonnez-vous à notre chaîne YouTube ou suivez-nous sur Facebook, Twitter et LinkedIn.