Sortie d’Intel Parallel Studio XE 2018

Intel est surtout connu pour ses processeurs, mais aussi pour ses outils de développement, notamment pour le calcul de haute performance avec sa suite Parallel Studio XE, dont la version 2018 vient de sortir. Ces logiciels visent le développement d’applications hautement parallèles, afin d’exploiter tous les cœurs des processeurs modernes à leur plus haut potentiel, mais aussi l’entièreté des nœuds de calcul d’un superordinateur. La suite contient notamment des compilateurs C++ et Fortran, des bibliothèques de haute performance (MKL, IPP, DAAL, etc.), ainsi que des outils d’analyse de performance et de débogage.

Les points principaux de cette nouvelle version concernent l’utilisation des instructions AVX-512, disponibles uniquement sur certaines gammes de processeurs (certains Xeon de dernière génération et les Xeon Phi). Les outils d’analyse sont plus poussés, comme chaque génération. Les compilateurs respectent les normes plus récentes de manière complète : C++14 au complet (C++17 en partie, officiellement finalisée depuis peu), Fortran 2008 au complet (Fortran 2015 en partie, toujours en cours de développement), OpenMP 5.0 en partie.

Langages

Le compilateur C++ se met au goût du jour avec la norme C++14. Parmi les fonctionnalités de C++17 déjà implémentée, on compte l’implémentation parallèle de la STL — ce qui se comprend, vu que l’objectif est d’avoir un code aussi parallèle que possible. L’idée est d’exécuter les différents algorithmes de la STL en parallèle, en changeant un seul paramètre. Bien évidemment, l’implémentation repose sur TBB, la bibliothèque d’Intel pour le calcul multifil. Malgré leur statut d’avant-gardistes en ce qui concerne les évolutions de C++, ni GCC ni Clang ne disposent de cette fonctionnalité. D’autres apports de C++17 sont aussi implémentés. À un niveau proche, la norme C11 est également gérée.

L’optimisation exploitant les profils (PGO) pointe également le bout de son nez. Elle exploite une trace d’exécution récupérée par VTune Amplifier (en utilisant les compteurs matériels des processeurs) pour décider les parties du code qui bénéficieront le plus des efforts d’optimisation, mais aussi pour déterminer certaines statistiques sur l’exécution du code (comme les branchements) pour certaines décisions d’optimisation.

Pour OpenMP, de nouvelles clauses sont implémentées, en suivant les développements de la version 5.0 de la norme, plus spécifiquement pour la gestion des tâches (TASK_REDUCTION, REDUCTION, IN_REDUCTION). Plus de constructions d’OpenMP 4 sont disponibles.

Bibliothèques de calcul

La MKL (math kernel library) s’oriente historiquement vers les opérations souvent requises par le calcul scientifique : algèbre linéaire, notamment creuse, transformée de Fourier, etc. Cette nouvelle version apporte un lot de fonctionnalités pour les réseaux neuronaux profonds (un sujet relativement à la mode), plus spécifiquement les opérations de convolution (pour les réseaux convolutionnels) et de produit scalaire. Les opérations BLAS entre entiers sont aussi développées, notamment de par leur utilité dans l’apprentissage profond (les nombres à virgule flottante sont remplacés par des entiers pour faciliter certains calculs).

Les IPP (integrated performance primitives) sont à l’opposé de la MKL : il s’agit d’algorithmes de bien plus haut niveau (compression, cryptographie, traitement d’images, etc.). Ainsi, la nouvelle version apporte une implémentation de l’algorithme de compression LZ4. L’API de GraphicsMagick a été répliquée pour de nouvelles fonctions pour redimensionner et flouter les images. Côté cryptographique, de nouvelles fonctions sont disponibles pour les courbes elliptiques.

La DAAL (data analytics acceleration library) est la dernière arrivée du lot. Elle est prévue pour l’exploitation des données, notamment l’apprentissage automatique. La version 2018 s’ouvre aux arbres de décision, ainsi qu’aux forêts, tant en classification que régression. Les couches disponibles pour les réseaux neuronaux s’enrichissent d’une addition membre à membre. Une série de nouveaux exemples montre l’intégration avec Spark MLib. La distribution Python d’Intel utilise notamment la DAAL pour accélérer une série d’opérations de scikit-learn.

De manière générale, les instructions AVX-512 sont utilisées très régulièrement. Aussi, les processeurs trop anciens ne sont plus gérés (comme les Pentium III, d’avant l’an 2000) — étonnement, la première génération de Xeon Phi n’est plus au goût du jour, entièrement remplacée par la seconde.

Outils d’analyse et de débogage

Advisor a été le plus retravaillé de tous les outils de la suite Intel. Il montre une série d’optimisations possibles du code, notamment au niveau de la vectorisation. La simulation des caches est arrivée en préversion. En effet, une mauvaise utilisation des caches d’un processeur peut faire s’écrouler la performance d’une application : le processeur doit alors chercher régulièrement des données en mémoire, plutôt que de réutiliser son cache. Quand cette fonction est activée, elle montre, dans les rapports, pour chaque boucle, le nombre d’opérations effectuées en mémoire et celles qui ne peuvent se faire depuis le cache.

Une nouveauté arrivée entre les versions 2017 et 2018 est l’analyse “sous les combles”. Il s’agit d’une visualisation de la performance d’une application selon les limitations matérielles, notamment la bande passante disponible vers la mémoire. Ce graphique présente la performance (en opérations effectuées par seconde) par rapport à l’intensité arithmétique (le nombre d’opérations effectuées par octet de données). Selon le niveau de cache utilisé, on peut déterminer un maximum d’opérations que l’on peut effectuer par seconde, étant donné la bande passante disponible pour se niveau de cache : si l’application est très proche de la limite pour le premier niveau de cache (le plus rapide), c’est qu’elle utilise le processeur au mieux. L’idée est donc de voir facilement où se situent les points faibles.

Sources : notes de version de la suite, du compilateur C++, du compilateur Fortran, de la MKL, des IPP, de la DAAL, de la distribution Python, d’Advisor ; Intel Advisor Roofline.

Advertisements

Microsoft dévoile le projet Brainwave pour l’inférence dans les réseaux neuronaux

On ne peut pas dire que les réseaux neuronaux (de préférence profonds) ne soient pas à la mode en intelligence artificielle. Google en a même lancé des processeurs spécifiques pour leur utilisation. Microsoft suit une toute autre voie : utiliser des composants programmables pour gérer la partie inférence, plutôt que des processeurs très spécifiques. Il faut dire que, au vu des utilisations de ces réseaux neuronaux dans les technologies du groupe, il est nécessaire d’investir dans le domaine : Bing les exploite pour comprendre les images, Skype pour la traduction en temps réel, par exemple. Comme les autres grands groupes, Microsoft a aussi lancé son propre outil pour les réseaux neuronaux : Cognitive Toolkit (ex-CNTK).

Depuis 2011, Microsoft déploie, dans son infrastructure infonuagique Azure, des FPGA, c’est-à-dire des circuits logiques programmables (contrairement aux TPU de Google, programmés à l’usine). Contrairement aux processeurs habituels, on peut donc changer le jeu d’instructions de ces circuits à volonté et l’optimiser pour les tâches à effectuer — la contrepartie étant une fréquence plus faible, de l’ordre de 500 MHz pour des FPGA récents et de 700 MHz pour les TPU. Là où Google doit changer ses TPU pour gérer de nouvelles fonctionnalités, Microsoft se contente de reprogrammer ses FPGA.

Les derniers déploiements côté Azure se concentrent sur la dernière itération des FPGA d’Intel (développée avant l’absorption d’Altera) : les Stratix 10, utilisant les processus de fabrication les plus récents d’Intel (14 nm). Le gain de performance par rapport à la génération précédente devrait atteindre un facteur deux.

La configuration de Microsoft sur ces nouveaux FPGA donne effectivement de bien meilleurs résultats que sur les précédents, avec un facteur d’accélération jusque vingt, selon la précision des nombres utilisés. Pour des nombres entiers sur seize bits, par carte, on passe ainsi de 1,4 à 12 Tflops ; sur huit bits, de 2 à 31 Tflops ; sur des nombres à virgule flottante (un encodage spécifique à Microsoft et non standardisé pour le moment, ms-fp8), de 4,5 à 90 Tflops. À titre de comparaison, les derniers processeurs graphiques de NVIDIA (génération Volta) peuvent atteindre 120 Tflops pour des nombres à virgule flottante de seize ou trente-deux bits ; les TPU de Google, 180 Tflops, mais avec une précision inconnue.

Microsoft prétend que sa solution dépasse toute forme de concurrence : leur matériel n’est pas spécifique à un type de réseau neuronal (la plupart des coprocesseurs spécifiques s’orientent vers les réseaux convolutionnels), mais a une performance qui se généralise à tout type de réseau (LSTM, GRU aussi bien que CNN). Il peut être utilisé tant avec leur propre outil (Cognitive Toolkit) que par celui de Google (TensorFlow). La flexibilité matérielle permettra cependant de s’ouvrir à n’importe quel outil (contrairement aux processeurs spécialisés).

L’objectif, “dans un futur proche”, est d’ouvrir cette puissance de calcul à tous les utilisateurs d’Azure pour leurs applications de l’apprentissage profond, même si aucune date précise n’a été donnée : Microsoft prend le temps d’encore améliorer sa solution.

Source et image : Microsoft Takes FPGA-Powered Deep Learning to the Next Level.

Voir aussi : Drilling Into Microsoft’s BrainWave Soft Deep Learning Chip.

Google revient sur les forces et faiblesses de ses TPU

Google investit énormément dans la recherche et le développement de produits basés sur des réseaux neuronaux artificiels profonds (souvent sous une appellation plus générique d'”intelligence artificielle” ou d'”apprentissage automatique”). Ces derniers existent depuis belle lurette (les premières traces d’un réseau neuronal comme modèle de calcul datent de 1959), mais ne sont réellement utilisés à grande échelle que depuis les années 2010, notamment avec l’introduction de la convolution dans la structure des réseaux.

Pour utiliser ces réseaux à très grande échelle, la performance de l’inférence (c’est-à-dire l’utilisation d’un réseau en pratique, par exemple pour déterminer les objets présents dans une image) devient extrêmement importante. C’est pourquoi, dès 2013, Google se lance dans le développement des TPU (tensor processing unit), tout d’abord pour accélérer l’inférence dans ces réseaux — un investissement dans l’avenir, le besoin n’étant pas encore pressant à l’époque.

Plus en détail, cette première génération est spécifiquement prévue pour un produit entre deux matrices de taille 256×256, avec des entiers de huit bits : il s’agit plus de coprocesseurs pour certaines opérations arithmétiques très précises (mais très utiles pour le contexte d’utilisation) que d’un vrai processeur à part entière. Le TPU fonctionne à une fréquence d’à peine 700 MHz, mais elle est largement suffisante pour écraser toute concurrence, avec un pic à 92 téraopérations par seconde. Ces processeurs disposent de deux canaux DDR3 pour l’accès à la mémoire, qui limitent bien souvent la performance du système.

Cependant, un TPU est extrêmement limité dans les opérations qu’il peut effectuer : il ne dispose que de onze instructions (à comparer aux centaines d’instructions disponibles en x86). Ainsi, il est incapable d’effectuer un branchement conditionnel (if), donc des boucles. L’exécution n’est jamais réordonnée (ce qui permet d’utiliser au mieux les circuits d’un processeur plus traditionnel). Beaucoup d’éléments du processeur sont gérés par un logiciel extérieur, celui qui contrôle le TPU.

Les premiers TPU sont arrivés dans les centres informatiques de Google vers 2015, selon les résultats de comparaisons effectuées en laboratoire dès 2013. Ils ont été évalués face aux CPU (Intel, de génération Haswell) et GPU (NVIDIA K80) de l’époque, du matériel de 2014. Les gains étaient nombreux : chaque puce était plus petite et consommait moins (trente fois moins qu’un GPU, quatre-vingts fois moins qu’un CPU : 40 W par TPU), on pouvait donc en mettre nettement plus par serveur. Par contre, les CPU et GPU sont nettement mieux équilibrés : un TPU pêche par manque de bande passante pour l’accès à la mémoire, qui interdit dans bon nombre d’applications d’utiliser l’entièreté de son potentiel de calcul. Cependant, même ainsi, ils dépassent la performance de processeurs plus classiques — mais uniquement pour l’inférence, ces processeurs étant trop rudimentaires pour l’entraînement de tels réseaux neuronaux.

Cette expérience acquise a permis d’améliorer le principe des TPU, afin d’en déployer la deuxième génération cette année. Notamment, pour la mémoire, les deux canaux de mémoire DDR3 ont été remplacés par de la mémoire HBM, comme bon nombre d’accélérateurs actuels. Également, cette nouvelle édition s’oriente vers les nombres à virgule flottante plutôt qu’uniquement des entiers, ce qui permet de l’utiliser pour l’entraînement plutôt qu’uniquement l’inférence. Google n’a pas donné énormément de détails au sujet de la nouvelle itération, notamment pour la comparer au matériel sorti cette année (on pense surtout aux nouveaux GPU NVIDIA, qui incluent un module de calcul spécifiquement prévu pour l’apprentissage profond), ni sur ses pistes pour la troisième génération.

Source et images : Hot Chips: Google TPU Performance Analysis.

Voir aussi : une introduction détaillée au TPU, une analyse poussée des serveurs à base de TPU2.

Flang, le compilateur Fortran basé sur LLVM, enfin annoncé

L’annonce du développement de Flang est loin d’être récente : elle date de novembre 2015. Ensuite, silence radio, jusqu’à l’ouverture du dépôt Flang sur GitHub, en mai de cette année. Un développeur de NVIDIA vient d’annoncer officiellement l’ouverture du projet au grand public.

En quelques mots, Flang est la culmination d’un effort de NVIDIA, plus particulièrement sa filiale PGI (connue pour son compilateur Fortran), sous l’impulsion donnée par la NNSA du Département de l’énergie américain. Ces presque deux ans de projet ont mené assez loin. L’objectif était de partir du compilateur existant de PGI et de le porter pour qu’il utilise l’infrastructure de LLVM (représentation intermédiaire, passes d’optimisation, génération du code assembleur, etc.), pas d’écrire un compilateur de zéro.

En l’état, Flang possède les mêmes fonctionnalités que le compilateur de PGI, c’est-à-dire l’entièreté de la norme Fortran 2003, quelques fonctionnalités de la révision de 2008 et des extensions propriétaires pour améliorer la compatibilité avec le Fortran primitif. Contrairement à Clang, qui est à la pointe en termes de fonctionnalités des derniers standards C++, Flang ne s’intéresse pas à Fortran 2015 pour le moment ; pour Fortran 2008, la priorité est mise sur les sous-modules et les constructions BLOCK et DO CONCURRENT. Au niveau d’OpenMP, Flang utilise la bibliothèque de support de LLVM ; la version 4.5 de la norme est presque entièrement implémentée pour les processeurs multicœurs.

Contrairement à Clang et au projet LLVM en général, Flang est principalement écrit en C et cela ne devrait pas changer. Ce choix a été posé pour reprendre autant de code de PGI que possible, tout en respectant les règles de codage du projet LLVM. L’objectif est de passer à C++ dans le futur, les développeurs sont ouverts à la discussion, mais préféreront se focaliser sur des points précis à discuter avec la communauté. Au niveau de la licence, Flang est actuellement disponible sous la licence Apache, mais sera distribué sous la même licence que LLVM lorsque son code aura été approuvé pour intégration à LLVM. En l’état, Flang passe toute la suite de tests de PGI, de nouveaux sont ajoutés en permanence.

Côté technique, Flang n’utilise pas les API de LLVM pour générer la représentation intermédiaire des programmes Fortran : il écrit directement dans un fichier, puis fait appel à opt et llc au besoin par la suite. La partie frontale de Flang est organisée en deux exécutables, l’un étant prévu pour les utilisateurs (il gère les paramètres de compilation) et appelant le deuxième pour la compilation effective. Pour le moment, il ne fonctionne que sous Linux, sur les architectures x86-64 (pour le grand public), ARM (comme les téléphones portables et certains nouveaux supercalculateurs) et OpenPOWER.

Source : [Flang-announce] Flang Fortran front-end for LLVM.

Intel Xeon Phi Knights Mill : un processeur prévu pour l’apprentissage profond

Les premières annonces datent déjà, mais voilà seulement qu’Intel lâche les premiers détails techniques sur la déclinaison de ses processeurs Xeon Phi pour l’apprentissage profond, sous le nom de code Knights Mill. Il ne s’agit pas d’une nouvelle génération, mais bien d’une variation des cœurs existants (Knights Landing), avec l’intégration d’instructions supplémentaires spécifiques.

En quelques mots, ce coprocesseur devrait être disponible pendant le quatrième trimestre de cette année. La performance devrait être améliorée d’un facteur quatre par rapport à Knights Landing dans le cadre très particulier de l’apprentissage profond. Intel résume ces améliorations par l’exploitation d’une “nouvelle” forme de parallélisme. Trois sources de parallélisme sont exploitées depuis des années : plusieurs fils d’exécution par cœur (TLP, avec quatre fils par cœur), plusieurs instructions en parallèle dans un même fil (ILP), une instruction travaillant sur plusieurs valeurs (DLP, avec les instructions AVX-512).

Avec Knights Mill, Intel ajoute un parallélisme au niveau de chaque pipeline d’exécution (PLP), avec des instructions qui effectuent quatre opérations de type FMA (fused multiply and add) consécutives en même temps. Contrairement au jeu d’instructions AVX, qui travaille sur des données différentes (chaque opération est effectuée indépendamment des autres), ces instructions QuadFMA effectuent leur somme sur le résultat de l’instruction FMA précédente.

Ce genre de construction est souvent évitée sur les processeurs “modernes”, car elle ajoute une latence non négligeable : au vu de la fréquence des processeurs, le temps de transfert de l’information entre deux transistors ne peut pas être ignoré ! Cette lenteur certaine (une instruction QuadFMA prend trois cycles par opération FMA effectuée, c’est-à-dire un total de douze cycles) est cachée par un degré de parallélisme entre instructions suffisamment grand.

L’utilité apparaît assez rapidement : ces instructions FMA correspondent aux opérations de produit matriciel, extrêmement utilisées notamment pour l’apprentissage profond.

Une autre nouveauté de ces cœurs est la précision variable avec certaines instructions : les entrées et les sorties n’ont pas toujours la même précision. Ainsi, il est possible de mélanger des entiers sur seize bits et d’obtenir une somme sur trente-deux bits, par exemple. Selon Intel, ce stratagème permet d’obtenir le meilleur des deux mondes : les opérations avec une précision moindre s’effectuent plus rapidement, mais la sortie avec une plus grande précision facilite la convergence.

Ces opérations ne sont disponibles que sur des entiers. En effet, ils fournissent un niveau de précision similaire aux nombres à virgule flottante, mais sans les complexités d’implémentation (surtout la norme IEEE 754) : ces derniers n’ont pas vraiment d’avantages par rapport aux entiers dans le contexte de l’apprentissage profond.

Un troisième élément de Knights Mill est la partie logicielle, prévue pour exploiter les nouvelles possibilités du matériel. La MKL aura droit à ses mises à jour pour exploiter au mieux ces nouveaux processeurs. De plus, Intel met aussi à disposition MKL-DNN, une extension à la MKL avec une API similaire (mais incompatible) ; la différence est que MKL-DNN est disponible sous une licence libre.

Il est ainsi intéressant de voir qu’Intel poursuit la même piste que NVIDIA pour encore accélérer l’apprentissage profond : ajouter des composants extrêmement spécifiques qui effectuent quelques opérations sur des opérandes très précises (avec une faible précision) avec une très haute vitesse (et une consommation énergétique en baisse).

Source et images : Hot Chips: Intel Knights Mill Live Blog.

Intel et Huawei s’apprêtent à collaborer dans le domaine du calcul de haute performance

L’annonce a probablement de quoi étonner : Intel et Huawei annoncent un partenariat dans le domaine du calcul de haute performance. En effet, si Intel est un nom très répandu dans le domaine (surtout pour ses processeurs Xeon, moins pour ses coprocesseurs Xeon Phi), Huawei est nettement plus connu pour les télécommunications et téléphones mobiles que pour ses serveurs de calcul. Pourtant, Huawei a développé une large gamme de serveurs à haute densité (exploitant exclusivement des processeurs Intel), sous le nom FusionServer, ainsi que des serveurs bien plus gros dans la gamme KunLun.

Les termes de l’accord portent sur le développement de serveurs fabriqués par Huawei, prévus pour le calcul de haute performance et les services infonuagiques, avec des processeurs Intel (Xeon et Xeon Phi) et sa technologie d’interconnexion entre serveurs Omni-Path. Ainsi, Huawei pourra différentier ses produits par rapport à la concurrence en incluant des composants plus centrés sur le calcul de haute performance.

L’accord prévoit aussi la construction de trois centres d’innovation dans le domaine du calcul de haute performance (deux en Chine, un en Europe, à Munich), où Huawei et Intel lanceront des activités communes, comme des formations, des optimisations d’applications existantes ou encore l’animation de communautés.

Le partenariat avec Huawei se justifie par sa stratégie expansionniste ces dernières années : sa gamme de produits dans le domaine s’étend à vue d’œil, ses profits croissent au même rythme. D’ailleurs, en nombre de serveurs livrés, Huawei est maintenant troisième mondial, juste derrière Dell et HPE (quatrième en termes de revenus). La compagnie compte également seize superordinateurs dans la liste des cinq cents les plus puissants au monde, dont sept en Europe (notamment le Polonais HETMAN, d’une puissance d’un pétaflops).

Au niveau recherche et développement, Intel et Huawei jouent dans la même cour : Huawei a le plus gros budget R&D en Chine, un peu plus de dix milliards de dollars (soit quatorze pour cent de ses revenus) ; Intel monte à vingt-deux pour cent, c’est-à-dire presque treize milliards de dollars. Toute synergie sera donc la bienvenue pour les deux groupes.

Sources : Huawei and Intel Sign Up For HPC Collaboration, Huawei and Intel Sign a MOU to Accelerate HPC Innovation (image).

FUJITSU annonce le développement d’un processeur pour l’apprentissage profond

FUJITSU continue ses développements pour les prochaines générations de superordinateurs. Après le remplacement de l’architecture SPARC64 par ARM, voici l’annonce de processeurs spécifiques pour l’apprentissage profond, des DLU (deep learning unit). L’objectif est de fournir des puces dix fois plus efficaces en termes de puissance de calcul par watt consommé que la concurrence. Ces processeurs sont en développements depuis 2015, mais la première annonce n’a eu lieu qu’à la conférence ISC 2017, centrée autour du calcul de haute performance.

Comme les autres fabricants, FUJITSU mise sur des calculs avec une faible précision pour augmenter la performance et diminuer la consommation d’énergie : en effet, pas besoin d’une très grande précision pour ces réseaux neuronaux (une trop grande précision favoriserait le surapprentissage : le réseau est capable de reproduire les données d’entrée, mais pas d’extrapoler sur de nouvelles données). Ainsi, les DLU ne pourraient gérer que quatre types de données : des nombres à virgule flottante sur trente-deux (précision simple) ou seize bits (demi-précision), ainsi que des entiers de même taille.

Vus de haut, ces processeurs sont constitués d’une série d’unités de calcul spécifiques, des DPU (deep learning processing unit), connectés par des liens à haute performance. Un cœur de calcul distinct gère l’exécution sur les DPU et négocie les accès en mémoire.

Chacun de ces DPU est constitué de seize DPE (deep learning processing element), qui effectuent les calculs. Plus en détail, chaque DPE comporte huit unités de calcul SIMD, avec une banque de registres assez grande : cette dernière n’est pas contrôlée par le matériel comme un cache classique, mais uniquement par du logiciel.

La mémoire est assurée par des puces HBM2, tandis qu’il est possible de rassembler une série de DPU (les processeurs) par une interface Tofu : FUJITSU envisage de créer des systèmes de très grande taille, modulable à l’infini.

Les premiers DLU devraient être disponibles en 2018 en tant que coprocesseurs de calcul : les machines devront disposer d’un autre processeur pour lancer l’apprentissage du réseau neuronal. Cependant, tout comme Intel avec ses Xeon Phi, la deuxième génération de DPU devrait être capable de s’affranchir de ce processeur principal. On ne peut que remarquer des similitudes avec l’approche d’Intel et ses Lake Crest, à venir également l’année prochaine. NVIDIA aurait-il du souci à se faire pour ses processeurs graphiques optimisés pour l’apprentissage profond ?

Source et images : Fujitsu Will Pursue AI with Custom-Built Processor.