Traitements IA : pourquoi il ne faut pas sous-estimer les CPU
Les GPU sont souvent présentés comme le véhicule de choix pour exécuter les workloads IA, mais la pression est forte pour étendre le nombre et les types d’algorithmes qui peuvent fonctionner efficacement sur les CPU.
Les processeurs graphiques (GPU, Graphics Processing Unit) suscitent beaucoup d’intérêt comme support optimal pour l’exécution de charges de travail d’IA. La recherche de pointe semble majoritairement s’appuyer sur la capacité des GPU et des puces d’IA les plus récentes à exécuter en parallèle de nombreuses charges de travail de deep learning. Cependant, le bon vieux processeur classique (CPU) a encore son rôle à jouer dans l’IA d’entreprise.
« Les CPU sont bon marché et se trouvent partout », constate Anshumali Shrivastava, professeur assistant au département d’informatique de l’Université Rice, basée à Houston au Texas. La tarification à la demande des microprocesseurs dans le cloud est nettement moins coûteuse que celle des GPU, et les services IT ont plus l’habitude de configurer et d’optimiser des serveurs équipés de CPU.
CPU vs GPU : une question de budgets ?
Les CPU conservent depuis longtemps l’avantage pour certains types d’algorithmes impliquant de la logique ou une forte sollicitation de la mémoire. C’est notamment le cas quand il s’agit de traiter des données de séries chronologiques ou certains signaux. L’équipe d’Anshumali Shrivastava développe une nouvelle catégorie d’algorithmes, appelés SLIDE (Sub-LInear Deep learning Engine), grâce auxquels les CPU devraient pouvoir servir pour encore plus de cas d’usage de l’intelligence artificielle.
D’après le chercheur, « si nous parvenons à créer des moteurs comme SLIDE, capables d’exécuter l’IA directement sur des CPU avec de bons résultats, cela pourrait changer la donne ».
Les premiers résultats ont montré que SLIDE, basé sur l’API OpenMP, est 3,5 fois plus performant que Tensorflow GPU (1 heure de traitement au lieu de 3,5) et jusqu’à 10 fois plus rapide que Tensorflow CPU pour le traitement des mêmes gros jeux de données multilabels réservés aux entraînements de classification de texte (Amazon 670k-une liste de labels de recommandations de produits –, Delicious 200K-réseau social basé sur des marque-pages web).
Pour obtenir ce benchmark, l’équipe de chercheurs a comparé les performances de son moteur à l’aide de deux Intel Xeon E5-2699 (22 cœurs, 44 threads, cadencé à 2,4 GHz) placé dans un serveur sous Ubuntu 16.04.05 LTS équipé d’une carte Nvidia V100 dotée de 32 Go de VRAM. En revanche, les auteurs n’indiquent pas la quantité de mémoire vive utilisée en corrélation avec ces CPU. Au-delà d’une différence d’architecture entre les deux équipements, l’expérience suggère en premier lieu que Tensorflow a été développé pour exécuter des workloads d’IA sur des GPU, tout comme d’autres frameworks.
Anshumali ShrivastavaProfesseur assistant au département d’informatique de l’Université Rice, Houston, Texas.
Anshumali Shrivastava pense que nous pourrions avoir atteint un point d’inflexion dans le développement de l’IA. Au départ, les travaux dans ce domaine s’appliquaient à de petits modèles et à des jeux de données relativement restreints. En développant des modèles importants, les chercheurs ont disposé de charges suffisantes pour exploiter véritablement le parallélisme massif des GPU. Mais aujourd’hui, la taille des modèles et le volume des jeux de données ont dépassé les limites de ces puces graphiques pour s’exécuter efficacement.
« Au point où nous en sommes, entraîner un algorithme d’IA traditionnel est devenu prohibitif [en termes de temps et de ressources] », regrette Anshumali Shrivastava. « Je crois qu’à l’avenir, nous assisterons à de nombreuses tentatives de créer des solutions moins chères pour une IA efficace à grande échelle. »
Les GPU, meilleurs en traitement parallèle
D’après Anshumali Shrivastava, les GPU sont devenues le vecteur privilégié pour l’entraînement des modèles d’IA, car le processus exige une opération quasiment identique sur tous les échantillons de données en même temps. Avec l’augmentation de la taille du jeu de données, le parallélisme massif apporté par les GPU s’est révélé indispensable : par rapport aux CPU, les GPU permettent des accélérations impressionnantes, lorsque la charge de travail est suffisamment volumineuse et facile à exécuter en parallèle.
Les GPU intègrent une mémoire spécialisée dans le rendu graphique : la VRAM. Actuellement, la meilleure GPU professionnelle du marché, la Nvidia Tesla A100, possède une capacité mémoire maximale de 80 Go de VRAM (un modèle de 40 Go existe également), mais surtout une bande passante estimée à 2 To/s. Les GPU gèrent très bien les multiplications matricielles, des opérations mathématiques communes dans le domaine du machine learning pour manipuler d’une seule traite toutes les données d’un dataset. Cependant, si le calcul ne tient pas dans la mémoire principale des GPU, il sera fortement ralenti, à moins de subdiviser les opérations.
Ce problème, les équipementiers, les fournisseurs cloud et les chercheurs tentent de le résoudre de plusieurs manières. La méthode la plus simple consiste à déployer plusieurs GPU par serveur. Les produits réservés aux HPC, certes coûteux, peuvent accueillir plusieurs dizaines de cartes PCie. C’est le cas du serveur 4 U SuperServer 6049GP-TRT proposé par Supermicro. Ce dernier doté d’un dual socket LGA 3647 et de 24 emplacements de RAM (6 To au maximum) peut accueillir jusqu’à 20 GPU par le biais de la norme PCie 3.0. L’on peut également citer la plateforme d’accélération Nvidia HGX capable d’accueillir 16 GPU A100.
Justement, de leur côté, AMD et Nvidia, les deux concepteurs de GPU sur le marché, ont imaginé des technologies comme les interfaces Nvidia Link et xGMI (chez AMD) pour interconnecter les GPU au sein des serveurs. En outre, l’emploi de VRAM au format HBM2 en lieu et place de la GDDR5 ou de la GDDR6 s’avère idéal pour les traitements lourds. Par ailleurs, les architectures GPU évoluent pour embarquer de plus en plus de cœurs et de quantité de VRAM.
Si Nvidia a amélioré le format qui régit la précision des calculs avec TF32, les plus gros modèles de Deep Learning nécessitent beaucoup de GPUs. Même avec un nombre conséquent de cartes, ils peuvent souffrir de problèmes de performance quand il s’agit de les entraîner sur des jeux de données différents.
C’est le problème rencontré par Microsoft avec GPT-3 d’OpenAI, le modèle NLP aux 175 milliards de paramètres s’exécutant sur un HPC doté de 285 000 cœurs et 10 000 GPUs. Dans ce cas-là, la consommation de VRAM était telle qu’il n’était pas possible d’obtenir des résultats satisfaisants à un coût acceptable et dans un temps raisonnable. Les chercheurs de Microsoft et de Nvidia ont conjointement développé DeepSpeed, une bibliothèque Pytorch pour optimiser les performances du modèle, de telle sorte que DeepSpeed permet théoriquement d’entraîner un modèle NLP doté de 10 milliards de paramètres sur un seul GPU V100. Cependant, l’on évoque ici des cas particuliers tels de très gros modèles NLP ou du traitement d’images et de vidéo à large échelle, qui pour la plupart des chercheurs et des entreprises ne sont ni abordables ni utiles.
Les CPU pour des algorithmes séquentiels
Trouver comment exécuter des algorithmes d’IA plus efficaces sur des CPU plutôt que des GPU « va considérablement élargir le marché de l’application de l’IA », affirme Bijan Tadayon, PDG de Z Advanced Computing, qui développe l’IA pour des applications IoT. Un algorithme plus efficace réduit également les besoins en énergie, ce qui est un véritable avantage pour des applications comme les drones, les équipements distants ou les appareils mobiles.
Dans un article issu d’une revue de l’Institution of Engineering and Technology, les chercheurs Zhibin Huang, Ning Ma, Shaojun Wang et Yu Peng de l’institut des technologies de Harbin, en chine, expliquent que les GPU sont beaucoup moins à l’aise avec les traitements parallèles à petite échelle, contrairement au CPU.
Bien souvent, les CPU sont un meilleur choix pour les applications qui effectuent des calculs statistiques complexes, tels que les algorithmes de traitement du langage naturel (NLP, Natural Language Processing) et certains algorithmes de deep learning sur des machines relativement modestes, constate Karen Panetta, membre de l’IEEE et doyenne du programme d’études supérieures en ingénierie à la Tufts University. Ainsi, les robots et appareils domestiques, qui utilisent un traitement NLP simple, fonctionnent de façon satisfaisante avec des CPU. D’autres tâches, comme la reconnaissance d’images, ou la localisation et cartographie simultanées (SLAM, Simultaneous Location and Mapping) pour les drones ou véhicules autonomes, fonctionnent également sur des CPU.
En outre, les algorithmes du type des modèles de Markov et des machines à vecteurs de support ou séparateurs à vaste marge (SVM, Support Vector Machine) utilisent des CPU. « Pour les faire passer sur des GPU, il faut paralléliser les données séquentielles, ce qui est tout sauf facile », témoigne Karen Panetta.
Repenser les modèles d’IA
Les méthodes d’IA traditionnelles reposent énormément sur les statistiques et les mathématiques. En conséquence, elles ont tendance à fonctionner plus efficacement sur des GPU conçues pour traiter de nombreux calculs en parallèle.
« Les modèles statistiques font non seulement une utilisation intensive du processeur, mais sont également rigides et ne se prêtent pas bien aux opérations dynamiques », explique Rix Ryskamp, PDG d’UseAIble.
Rix RyskampPDG, UseAIble
De nombreuses entreprises trouvent des moyens d’utiliser des CPU pour faciliter ce processus. UseAIble, par exemple, a développé un système baptisé Ryskamp Learning Machine, du nom de son PDG, qui réduit les besoins de calcul en ayant recours à la logique, pour éviter l’emploi de statistiques. L’algorithme n’utilise pas de pondérations dans son réseau neuronal, éliminant ainsi la raison principale pour laquelle les réseaux neuronaux exigent des calculs intensifs en GPU et réduisant par la même occasion les problèmes de boîte noire.
Rix Ryskamp pense que les architectes en machine learning doivent améliorer leurs compétences pour moins s’en remettre à des modèles statistiques nécessitant d’imposantes charges de travail de GPU.
« Pour obtenir de nouveaux résultats et utiliser différents types de matériel, y compris des équipements IoT et autres matériels en périphérie, nous devons entièrement repenser nos modèles, pas seulement les repackager », dit-il. « Il nous faut plus de modèles qui utilisent les processeurs déjà largement disponibles, qu’il s’agisse de CPU, de cartes IoT ou de tout autre matériel déjà installé chez les clients. »
Les CPU ou l’ambition de devenir le moteur de l’IA
Intel observe que les entreprises cherchent à exécuter toutes sortes de charges de travail d’IA sur ses CPU Xeon, indique Éric Gardner, directeur du marketing IA de la firme. Des sociétés évoluant dans des secteurs aussi divers que le commerce, les télécommunications, l’industrie ou la santé adoptent déjà l’IA dans leur pipeline CPU pour des déploiements à grande échelle.
Les cas d’utilisation comprennent la télémétrie et le routage réseau, la reconnaissance d’objets dans les caméras de vidéosurveillance, la détection d’anomalies dans les pipelines industriels et la détection d’objets en imagerie médicale. Les CPU fonctionnent mieux pour les algorithmes qui sont difficiles à exécuter en parallèle, ou pour les applications qui exigent plus de données que ne peut en contenir un accélérateur GPU standard. Voici quelques exemples d’applications susceptibles d’être plus efficaces sur des CPU :
- les systèmes de recommandation pour l’apprentissage et l’inférence qui nécessitent plus de mémoire pour empiler les couches ;
- les algorithmes classiques de machine learning qui sont difficiles à paralléliser pour les GPU ;
- les réseaux neuronaux récurrents qui font appel à des données séquentielles ;
- les modèles qui utilisent des échantillons de données de grande taille, par exemple des données 3D pour l’apprentissage et l’inférence ;
- les systèmes d’inférence en temps réel pour les algorithmes difficiles à paralléliser.