Ecrire du code AI une seule fois, exécuter n’importe où, ce n’est pas Java, c’est l’API unique d’Intel.


Intel Corporation
Samedi après-midi (16 novembre) à Supercomputing 2019, Intel a lancé un nouveau modèle de programmation appelé oneAPI. Intel décrit la nécessité de coupler étroitement le middleware et les frameworks directement au matériel spécifique comme l’un des points les plus douloureux du développement AI/Machine Learning. Le modèle oneAPI est destiné à abstraire ce couplage étroit, permettant aux développeurs de se concentrer sur leur projet réel et de réutiliser le même code lorsque le matériel sous-jacent change.
Ce genre de mantra « écrire une fois, courir n’importe où » rappelle les premiers pas de Sun pour le langage Java. Toutefois, Bill Savage, directeur général de la performance de calcul pour Intel, a déclaré à Ars que ce n’est pas une caractérisation précise. Bien que chaque approche aborde le même problème de base – le couplage étanche au matériel de la machine rendant la vie des développeurs plus difficile et faisant obstacle à la réutilisation du code – les approches sont très différentes.
-
Dans ce schéma fonctionnel simplifié du développement AI/ML, Intel veut isoler « Languages & Libraries » comme le point le plus douloureux.
Intel Corporation
-
oneAPI vise à découpler le middleware et les frameworks des détails granuleux du matériel sous-jacent qu’ils ciblent, rendant le code plus réutilisable.
Intel Corporation
-
Il est tentant, mais inexact, d’entendre une API écrire une seule fois n’importe quelle promesse et penser « oh, c’est Java pour AI ». oneAPI ne produit pas de bytecode, il extrait un ciblage matériel optimisé, de bas niveau sans le remplacer.
Intel Corporation
-
En plus de la programmation de bas niveau dans le nouveau langage Data Parallel C++ et de l’utilisation plus poussée des appels API, Intel met à disposition des outils de compatibilité, de débogage et d’analyse dans la couche oneAPI.
Intel Corporation
Lorsqu’un développeur écrit du code Java, le code source est compilé en bytecode, et une machine virtuelle Java adaptée au matériel local exécute ce bytecode. Bien que de nombreuses optimisations aient amélioré les performances de Java au cours des 20+ années qui se sont écoulées depuis son introduction, il est encore nettement plus lent que le code C++ dans la plupart des applications, généralement de moitié à un dixième plus rapide. En revanche, une API est destinée à produire du code objet direct sans pénalités de performance ou avec des pénalités de performance négligeables.
Lorsque nous avons interrogé Savage sur les attentes de conception et de performance d’une API, il a pris ses distances par rapport à Java, soulignant qu’il n’y avait pas de bytecode impliqué. Au lieu de cela, oneAPI est un ensemble de bibliothèques qui lient directement les appels d’API agnostiques sur le matériel à un code de bas niveau fortement optimisé qui pilote le matériel réel disponible dans l’environnement local. Ainsi, au lieu de « Java pour l’Intelligence Artificielle », la version à emporter de haut niveau s’apparente davantage à « OpenGL/DirectX pour l’Intelligence Artificielle ».
Pour un codage encore plus performant à l’intérieur de boucles étroites, OneAPI introduit également une nouvelle variante de langage appelée « Data Parallel C++ » qui permet au code optimisé même à très bas niveau de cibler plusieurs architectures. Data Parallel C++ exploite et étend les possibilités du C++ en parallèle SYCLune couche d’abstraction « single source » pour la programmation OpenCL.
Dans sa version actuelle, un développeur oneAPI doit toujours cibler le type de matériel de base pour lequel il ou elle code, par exemple les CPU, GPU ou FPGA. Au-delà de ce ciblage de base, oneAPI garde le code optimisé pour toutes les variantes matérielles supportées. Cela permettrait, par exemple, aux utilisateurs d’un projet développé par OneAPI d’exécuter le même code soit sur le Tesla v100 de Nvidia, soit sur le Tesla v100 d’Intel récemment publié. Ponte Vecchio GPU.
-
L’architecture 7nm Xe d’Intel est destinée à couvrir toute la gamme des applications GPU, mais Ponte Vecchio – le premier produit Xe – vise spécifiquement l’apprentissage et la formation en profondeur haut de gamme dans les environnements de datacenter et de supercalculateur.
Intel Corporation
-
Ponte Vecchio est un GPU exascale destiné à des charges de travail énormes, utilisant un processus 7nm, la technologie d’emballage Foveros d’Intel, et des liens interlinks hautes performances.
Intel Corporation
-
Le futur supercalculateur Aurora des laboratoires nationaux Argonne comprendra six GPU Ponte Vecchio et deux CPU Xeon Scalable dans chaque noeud.
Intel Corporation
Ponte Vecchio est le premier produit réel de la nouvelle gamme de GPU Xe d’Intel et s’adresse spécifiquement aux supercalculateurs HPC et aux centres de données. Bien que ni Savage ni d’autres cadres d’Intel auxquels Ars a parlé n’aient de calendrier ou ne parlent de produits concrets, une diapositive de la présentation Supercomputing 2019 d’Intel montre clairement que l’architecture Xe englobe les postes de travail, les mobiles et les jeux – il y aura donc des temps intéressants pour nos concurrents dans ces espaces.
Savage a déclaré à Ars que même si la version actuelle d’oneAPI nécessite toujours que les développeurs codent pour une famille d’architecture particulière – CPU, GPU, FPGA, etc – Intel prévoit une prochaine version pour permettre également la sélection automatique du type de matériel le plus optimal disponible.
La boîte à outils oneAPI est disponible dès maintenant chez Intel pour être utilisée et testée Devcloud.