Le trilemme HPC : choisir entre performances, portabilité et productivité
Les sciences physiques décrivent le monde à l'aide des mathématiques appliquées. La sismologie, l'électromagnétique et la dynamique des fluides s'appuient toutes sur des techniques telles que les équations différentielles partielles et les simulations par différences finies pour modéliser les phénomènes physiques.
Python et son écosystème scientifique de bibliothèques comme NumPy, SciPy et MatPlotLib offrent aux scientifiques et aux chercheurs des frameworks pour développer des solutions sophistiquées spécifiques à un domaine en utilisant relativement peu de lignes de code aisément accessibles. Cette polyvalence et cette productivité ont fait de Python l'un des principaux langages scientifiques et d'ingénierie modernes. Dans quel autre langage de programmation pouvez-vous littéralement importer l'antigravité ?
Bien que Python pur soit plus lent que les langages compilés, son rôle principal dans le calcul haute performance (HPC) est d'offrir une interface accessible à des bibliothèques hautement optimisées écrites dans des langages compilés de bas niveau tels que C, C++, Fortran, et même CUDA, SYCL ou HIP pour la prise en charge du GPU. Les bibliothèques scientifiques de Python, telles que NumPy et SciPy, tirent parti de ces backends compilés pour offrir des performances élevées tout en conservant la facilité d'utilisation de Python. Cependant, ce modèle dépend toujours de la disponibilité d'un code HPC optimisé pour les tâches spécifiques à un domaine, ce qui nécessite souvent une expertise et des ressources spécialisées pour le développement et la maintenance.
La solution Devito : laisser les scientifiques être des scientifiques
L'équipe de Devito Codes avait pour objectif d'apporter la compilation juste-à-temps (JIT) de code de qualité HPC à différences finies dans l'écosystème Python. Avec Devito, les scientifiques peuvent travailler dans le framework symbolique et mathématique de Python (SymPy), écrire des résolveurs complexes d'équations différentielles partielles et des problèmes d'optimisation axés sur des objectifs, et générer de manière transparente du code HPC parallélisé et optimisé pour le matériel pour toutes les principales architectures de CPU et de GPU.
Devito Codes profite de gains majeurs avec Intel Xeon 6
Un noyau Devito Codes destiné à un propagateur anisotrope acoustique pour modèle TTI (un modèle sismique typique de l'industrie de l'énergie) illustre les gains de performances des processeurs Intel Xeon 6 par rapport aux processeurs Intel Xeon Scalable de 5ᵉ génération1.
« La plupart des utilisateurs adoptent les produits Devito dans un premier temps pour augmenter leur productivité », déclare Gerard Gorman, PDG et co-fondateur de Devito Codes. « Grâce à une forme unique de prototypage rapide, nos produits servent de laboratoire de calcul. »
La création d'un framework Python capable de produire des noyaux hautes performances pour des tâches de simulation, d'inversion et d'optimisation sur divers matériels n'est pas simple. Devito intègre plusieurs technologies HPC, notamment OpenMP pour les systèmes de mémoire partagée, OpenACC pour les accélérateurs et MPI pour le parallélisme et la portabilité. Les optimisations avancées nécessitent un réglage spécifique au matériel avec des langages spécialisés tels que CUDA, HIP et SYCL. Devito Codes applique presque toutes les techniques d'optimisation connues pour le calcul structuré et intègre en permanence de nouvelles avancées, garantissant des gains de performances au fil du temps, qui rivalisent souvent ou surpassent les solutions commerciales spécialisées.
En éliminant la complexité du développement de code HPC, Devito Codes permet aux utilisateurs de transférer des projets entre des systèmes sans effort, en tirant parti de toutes les ressources informatiques disponibles. Les opérateurs et les fournisseurs de services HPC peuvent maintenir leur infrastructure actuelle, l'étendre avec des tableaux hétérogènes et la mettre à niveau de manière significative, tout en garantissant la compatibilité et la performance des charges de travail.
Avec DevitoPRO, un géophysicien peut prendre un algorithme d'un article de recherche et l'implémenter en un après-midi, une tâche qui aurait normalement nécessité des mois de codage et d'optimisation. Cette rapidité permet aux équipes d'expérimenter et d'innover à un rythme sans précédent, accélérant ainsi les tests et le déploiement de nouveaux algorithmes. - Mathias Louboutin, architecte senior de solutions, Devito
DevitoPRO
Devito a été créé dans le framework d'une initiative de l'Intel Parallel Computing Centre menée par le professeur Gerard Gorman de l'Imperial College de Londres. Le projet initial a créé un logiciel open source hautes performances pour l'imagerie sismique. Le projet a mûri et est devenu un véritable compilateur d'optimisation pour les charges de travail HPC. Son équipe a lancé DevitoPRO, une édition pour les entreprises avec des fonctionnalités propriétaires, des optimisations avancées pour les performances et un support commercial.
DevitoPRO est principalement destiné à l'exploration géophysique dans le secteur de l'énergie. En plus de compiler un code portable hautement optimisé pour les simulations sismiques créées en Python, DevitoPRO offre des propagateurs et des opérateurs de gradient hautes performances pour l'inversion des formes d'onde complètes (FWI) et la migration temporelle inverse (RTM). DevitoPRO fournit également une assistance technique, des formations, le développement de logiciels personnalisés et l'optimisation spécifique du matériel pour les clients.
Devito continue de proposer une technologie logicielle de compilateur et de calcul symbolique à usage général en tant que logiciel open source et sans brevet pour les chercheurs du monde universitaire et de l'industrie.
Étendre la portabilité du code avec SYCL et Intel
Traditionnellement, la création d'un code portable pouvant fonctionner sur des processeurs hétérogènes nécessitait la compilation de noyaux uniques pour chaque type de matériel : des noyaux CUDA pour les GPU NVIDIA, des noyaux HIP pour les GPU AMD et C/C++ pour les CPU x86 et RISC. SYCL a offert aux programmeurs HPC une nouvelle option multiplateforme pour compiler du code HPC optimisé.
« La fusion du calcul symbolique et de la technologie de compilateur avancée de Devito garantit la génération d'un code fiable, vérifiable et optimisé, essentielle pour les logiciels mathématiques axés sur les missions. Bien que le code d'IA générative ne dispose pas de ce niveau de précision et de fiabilité, la combinaison des deux technologies peut permettre d'accroître encore plus la productivité dans le développement et le test de nouveaux algorithmes. » - Gerard Gorman, PDG et co-fondateur de Devito Codes
SYCL est une couche d'abstraction C++ parallèle multiplateforme avec des API qui peuvent trouver et gérer les ressources de données et l'exécution de code sur des dispositifs mixtes de plusieurs fournisseurs, y compris des CPU, des GPU et des FPGA. SYCL est la base de moneAPI et de Data Parallel C++ qu'Intel a implémentés sur les GPU Intel® pour centres de données.
Devito Codes et les ingénieurs Intel ont collaboré pour apporter la génération de code SYCL à DevitoPRO, y compris des optimisations spécifiques pour les accélérateurs de GPU Intel® Data Center séries Max 1100 et 1550. Pour le déploiement, les utilisateurs de DevitoPRO doivent simplement cibler les GPU Intel pour centres de données pour des compilations à la volée (JIT) qui bénéficient des avantages de performances de SYCL.
Des performances accrues pour la sismologie des ondes élastiques avec les calculs en précision mixte
Les ondes sismiques se propagent sous deux formes : les ondes primaires longitudinales (ondes P) et les ondes secondaires transversales (ondes S). La modélisation des ondes P, une méthode que les sismologues appellent analyse acoustique, est relativement simple d'un point de vue mathématique et informatique, car l'énergie des ondes et le mouvement des particules se déplacent dans la même dimension. La modélisation conjointe des ondes P et S, ce que les sismologues appellent l'analyse élastique, complique les choses sur le plan géométrique.
Ces deux formes d'onde se déplaçant dans trois dimensions à des angles de 90 degrés, leur description nécessite plus d'équations d'onde avec plus de composants. L'analyse élastique nécessite également une résolution beaucoup plus élevée pour produire des résultats précis, ce qui implique la collecte d'un volume de données nettement plus élevé.
Les ondes sismiques se présentent sous deux formes : les ondes primaires longitudinales (P) et les ondes secondaires transversales (S).
« Si vous utilisez des produits élastiques, votre empreinte mémoire sera, dans le meilleur des cas, quatre à cinq fois plus importante que pour l'acoustique », explique Fabio Luporini, directeur technique et co-fondateur de Devito Codes. « Cela est dû tout simplement à des raisons physiques. Vous modélisez simultanément plus de champs d'ondes dans une équation aux dérivées partielles couplées que vous devez garder en mémoire. »
Devito Codes développe des algorithmes en précision mixte, une technique de calcul d'IA qui permet de gérer des charges de travail de calcul élastiques sur le matériel actuel. Les charges de travail qui peuvent se permettre une petite perte de précision sont converties du FP-32 (virgule flottante 32 bits) à un mélange soigneusement conçu de FP-32 et de FP-16 (16 bits), qui représentent les mêmes valeurs en utilisant la moitié de la mémoire. Dans le monde de l'analyse élastique, la réduction de moitié d'un ensemble de données d'un pétaoctet à 500 To produit des gains de performances à chaque étape, de la gestion de la mémoire et des E/S à l'écriture des snapshots sur disque.
Les codes Devito doublent les performances avec une précision mixte2
Les tests Devito Codes montrent que le décalage et la précision mixte (FP-16/FP-32) multiplient les performances par deux et réduisent l'encombrement mémoire par deux, ce qui se traduit par un débit considérablement plus rapide2.
Les charges de travail FP-16 sont également traitées plus rapidement sur les CPU et les GPU qui prennent en charge une précision mixte, tels que les processeurs Intel® Xeon® 6 et les GPU Intel Data Center. Lors des tests initiaux, l'analyse d'ondes élastiques exécutée en précision mixte avec Devito Codes a permis de multiplier par deux les performances,1 l'équivalent d'une amélioration radicale des performances sans mise à niveau du matériel.
Conclusion : chaque accroissement de performances compte
Devito Codes et Intel continuent d'affiner et d'optimiser les technologies de compilateur afin d'obtenir plus de performances des systèmes HPC hétérogènes pour des simulations par différences finies. Pour les clients open-source de Devito et DevitoPRO, ce travail est indispensable.
« Le traitement des données sismiques pour l'imagerie subsurface peut coûter des millions de dollars en dépenses de calcul par projet », déclare M. Gorman. Nous devons donc optimiser chaque pourcentage de performances, car le temps c'est de l'argent. »
Pour les dernières mises à jour, rendez-vous sur Devito Codes sur GitHub ou devitocodes.com.