Bonjour, Habr! Nous continuons une série d'articles sur la participation d'une équipe de l'Université d'État de Saint-Pétersbourg (nous nous appelons EnterTildeDot) aux plus grandes compétitions étudiantes de superordinateurs au monde.

Dans cet article, nous examinerons la voie vers ASC'18 en utilisant l'exemple d'un membre de l'équipe, en accordant une attention particulière à la carte de visite des compétitions et des superordinateurs modernes en général - Linpack. Eh bien, regardons le secret pour réaliser un record et une performance anti-record d'un système informatique.
Un bref tour d'horizon des compétitions de superordinateurs
Des informations générales sur le type de compétition que vous pouvez trouver dans nos articles précédents, y compris le long post sur la compétition de cette année. Néanmoins, pour être complet, quelques informations sur le concours dans son ensemble, nous donnons toujours ici.
L'Asian Supercomputer Challenge est l'un des trois principaux événements organisés par les équipes de calcul haute performance chaque année, attirant de plus en plus d'équipes d'étudiants du monde entier. ASC, comme d'autres compétitions similaires, suppose l'existence d'un tour de qualification et final avec les dispositions suivantes:
- Activité principale: résolution de problèmes HPC;
- Équipe: 5 étudiants + coach;
- Phase de qualification: une description de la proposition en absence avec une description de la solution des problèmes présentés, sur la base de laquelle une liste de 20 finalistes est déterminée.
- L'étape finale: compétition à temps plein pour 20 équipes d'une durée d'environ 5 jours de compétition, comprenant l'assemblage et la configuration complète du cluster informatique, la résolution de problèmes, la présentation. Le cluster est assemblé sur la base de restrictions de puissance de 3 kW, soit à partir du fer fourni par les organisateurs, soit à partir du sien. Le cluster n'a pas accès à Internet. Les tâches coïncident partiellement avec les tâches de la phase de qualification, mais il existe également une tâche inconnue - Application mystère.
Eh bien, maintenant en ordre avec des retraites au programme éducatif. Contrairement aux autres membres de l'équipe qui ont déjà atteint la finale de l'ASC'17, je n'ai rejoint le mouvement compétitif que cette année. J'ai rejoint l'équipe en septembre, les devoirs de stage de qualification ne sont envoyés qu'en janvier, j'ai donc eu assez de temps pour étudier les concepts de base de la compétition, ainsi que pour étudier la seule tâche connue - HPL & HPCG. Une tâche sous une forme ou une autre se produit presque chaque année, cependant, on ne sait pas toujours à l'avance sur quel équipement la tâche doit être effectuée (parfois les organisateurs fournissent un accès à distance à leurs propres ressources).
HPL
HPL (High Performance Computing Linpack Benchmark) est un test des performances d'un système informatique, basé sur les résultats dont une liste moderne des meilleurs supercalculateurs du monde est formée. L'essence du test est de résoudre des systèmes denses d'équations algébriques linéaires. L'apparition de cette référence a introduit une métrique qui vous permet de classer les superordinateurs, tout en fournissant en même temps un «service de base» à la communauté HPC. Si vous regardez la liste des meilleurs supercalculateurs, vous pouvez comprendre que le secret de Lynpak a été résolu assez rapidement - prenez autant d'accélérateurs graphiques que possible et serez au sommet. Bien sûr, il y a des exceptions, mais ce sont les superordinateurs avec accélérateurs graphiques qui occupent les premières places. Qu'est-ce que le «service aux ours»? Le fait est qu'en plus de mesurer les performances, Lynpak n'est utilisé nulle part ailleurs et n'a rien à voir avec de vraies tâches informatiques. En conséquence, la course aux superordinateurs est allée du côté de l'obtention de la plus grande efficacité Linpak, et non de charges de travail réelles, comme la résolution de tâches USE typiques au lieu de maîtriser le programme scolaire.
Les développeurs HPL ont également créé un autre package - HPCG, sur la base duquel la notation des superordinateurs est également formée. Il est généralement admis que cette référence est plus proche des tâches réelles que HPL, et, d'une certaine manière, l'écart significatif entre les positions du supercalculateur dans ces deux listes reflète la situation réelle. Cependant, les dernières notes (juin 2018) ont été une agréable exception et, finalement, les premières positions des listes ont coïncidé.
Et maintenant sur le vrai HPL
Nous revenons à des moments plus pratiques de l'histoire et de la compétition. Linkpak est open source, disponible en téléchargement sur le site officiel , cependant, il n'y a guère de supercalculateur dans le top mondial dont les performances ont été mesurées par cette version particulière de la référence. Les fabricants d'accélérateurs publient leur propre version de HPL, optimisée pour des appareils spécifiques, ce qui vous permet d'obtenir des gains de performances significatifs. Bien sûr, les versions personnalisées de HPL doivent répondre à certains critères et doivent réussir des tests spéciaux.
Chaque fournisseur a sa propre version de HPL pour chaque accélérateur, cependant, contrairement au benchmark d'origine, il n'est pas question de source ouverte ici. Nvidia publie des versions HPL optimisées pour chacune des cartes, tandis que le code n'est plus fourni sous forme source, mais sous forme de fichiers binaires. De plus, il n'y a que deux façons d'y accéder:
- Vous avez un superordinateur avec des cartes Nvidia qui peuvent entrer en haut - Nvidia vous trouvera seul. Hélas, vous ne recevrez probablement pas de binaires, tout comme il n'y aura pas de possibilité de participer à l'optimisation des paramètres HPL. D'une manière ou d'une autre, vous obtiendrez une valeur de performance adéquate obtenue sur le benchmark optimisé.
- Vous participez à l'un des trois concours étudiants de superordinateurs. Mais nous reviendrons sur cette partie.
Alors, quelle est l'essence de la tâche, surtout si les oncles intelligents des grandes entreprises ont déjà optimisé la référence pour votre équipement?
Dans le cas de la phase de qualification de la compétition, décrivez les actions possibles pour augmenter les performances du système. Dans ce cas, il n'est pas nécessaire de rechercher des chiffres de performances absolus, car certaines équipes peuvent avoir accès à un cluster large et élégant de 226 nœuds avec des accélérateurs modernes, tandis que d'autres ne peuvent accéder qu'au numéro de classe informatique universitaire 226, que nous appelons le cluster.

Dans le cas de l'étape finale, il est déjà judicieux de comparer les valeurs absolues de performance. Cela ne veut pas dire qu'ici tout le monde est sur un pied d'égalité, mais au moins il y a une restriction sur la puissance maximale autorisée du système.
Le résultat de l'exécution du benchmark dépend principalement de deux composants: la configuration du cluster et la définition directe des paramètres du benchmark. Il convient également de noter l'influence du choix des compilateurs et des bibliothèques pour l'informatique matricielle et vectorielle, mais ici tout est assez ennuyeux, tout le monde utilise un compilateur Intel + MKL. Et dans le cas des binaires, vous n'avez pas du tout à choisir, car ils sont déjà assemblés. Le résultat de HPL est une valeur numérique qui montre combien d'opérations en virgule flottante par seconde ce système informatique effectue. L'unité de mesure principale est FLOPS (opérations à virgule flottante par seconde) avec les préfixes correspondants. Dans le cas de la phase finale de la compétition, nous parlons presque toujours de systèmes à l'échelle Tera.
Optimisation des résultats
La définition des paramètres de référence consiste en une sélection significative des données d'entrée de la tâche calculées par Lynpak (fichier HPL.dat). Dans ce cas, la dimension de ce problème a la plus grande influence - la taille de la matrice, la taille des blocs dans lesquels la matrice est divisée, dans quelle relation répartir les blocs, etc. ... Au total, il y a plusieurs dizaines de paramètres, des milliers de valeurs possibles. Bruteforce n'est pas le meilleur choix, surtout si le test sur des systèmes relativement petits est effectué de quelques minutes à quelques heures, selon la configuration (pour le GPU, le test est beaucoup plus rapide).
J'ai eu assez de temps pour étudier comment les schémas déjà décrits dans d'autres sources contribuent à l'optimisation des résultats du benchmark, et pour en identifier de nouveaux. J'ai commencé à exécuter des tests un grand nombre de fois, à lancer de nombreuses balises Google, à essayer d'accéder à des systèmes dont la configuration n'avait pas encore été testée afin d'exécuter le test sur eux également. En conséquence, avant même le début de la phase de qualification, un certain nombre de systèmes ont été testés, à la fois CPU et GPU, y compris même le Nvidia Quadro P5000 totalement inadapté. Au début de la phase de qualification, nous avions accès à plusieurs nœuds avec les P100 et P6000, ce qui nous a beaucoup aidés dans la préparation. La configuration de ce système était à bien des égards similaire à celle que nous avions prévu d'assembler dans le cadre de la phase finale de la compétition, et nous avons enfin eu accès à des réglages de bas niveau, y compris le changement de fréquence.
Quant à la configuration, la présence et le nombre d'accélérateurs ont le plus grand impact. Dans le cas d'un test d'un système avec un GPU, l'option la plus optimale est lorsque la partie informatique principale de la tâche est déléguée au composant GPU. Le composant CPU sera également chargé de tâches auxiliaires, mais il ne contribuera pas aux performances du système. Mais en même temps, les performances maximales du CPU doivent être prises en compte dans les performances maximales du système dans son ensemble, ce qui peut sembler extrêmement désavantageux en termes de rapport des performances maximales au pic (théorique). Lors de l'exécution de HPL sur un GPU, un système avec 2 accélérateurs GPU et deux processeurs ne sera au moins pas inférieur à un système avec 2 GPU et 20 CPU.
Après avoir décrit les propositions pour l'optimisation possible des résultats HPL, j'ai terminé ma partie de la proposition pour la phase de qualification et, en passant à la finale du concours, une nouvelle étape du concours a commencé - la recherche de sponsors. D'une part, nous avions besoin d'un sponsor qui couvrirait les coûts du vol de l'équipe vers la Chine, et d'autre part, un sponsor qui accepterait de fournir des accélérateurs graphiques à l'équipe. Avec le premier, nous avons finalement eu de la chance, une université a alloué une partie de l'argent et Devexperts a aidé à couvrir complètement les billets. Avec les sponsors, avec qui nous avions prévu de prêter des cartes, nous avons eu moins de chance, et maintenant nous repartons en finale avec la configuration de base du cluster sans aucune chance de compétitivité en HPL. Eh bien, rien, tirez le maximum de ce qu'ils donnent, pensons-nous.
ASC'18 final
Et nous voici en Chine, dans la petite ville selon les standards chinois - Nanchang, en finale. Nous assemblons le cluster pendant deux jours, puis les tâches.

Cette année, toutes les équipes ont reçu 4 cartes Nvidia V100, cela ne nous a pas donné d'avantages par rapport aux autres équipes, mais cela a permis de lancer HPL pas sur le CPU. Les nœuds donnent initialement à chacun 10, mais les supplémentaires (rappelez-vous de la limite de 3 kW) doivent être retournés avant le début des étapes des principales compétitions. Il y a une astuce ici - réduire la fréquence du CPU et du GPU, leurs performances diminuent, cependant, vous pouvez choisir de telles valeurs pour la fréquence que nous obtenons plus de performances par unité d'énergie consommée. En abaissant la fréquence, nous avons la possibilité d'ajouter encore plus d'accélérateurs, ce qui en fin de compte affectera les performances pour le mieux. Hélas, cette astuce nous serait beaucoup plus utile si nous venions à la compétition avec une valise d'accélérateurs, comme les autres participants. Néanmoins, nous avons pu nous permettre de laisser le nombre maximum de CPU. Étant donné que toutes les tâches de la compétition ne nécessitent pas de GPU, on soupçonnait que cela pourrait en quelque sorte jouer entre nos mains.
Ainsi, la configuration de cluster la plus courante en finale de la compétition est un minimum de nœuds, un maximum de cartes.

Linkpack final et un peu sur les disques
Les tâches du concours étaient liées à certains jours de compétition, et HPL était bien sûr le premier après le montage du cluster. La date limite de soumission des résultats HPL est le déjeuner du troisième jour de compétition, en outre, l'accès aux tâches restantes de cette journée de compétition s'ouvre immédiatement après la fin de Linpak. Cependant, Lynpak commence à conduire au début. Premièrement, pour vous assurer que le cluster est correctement assemblé, et deuxièmement, la configuration de Linpak n'est pas rapide, et comme aucune entrée supplémentaire n'est requise, pourquoi pas.
Nous avons assemblé notre cluster assez rapidement et avons commencé à inclure Lynpak. Pour notre configuration, nous avons reçu des valeurs tout à fait adéquates - de l'ordre de 20 TFlops, et tout irait bien, mais après la sortie, il y avait une ligne avec une erreur. Plus tôt, je n'ai reçu de telles erreurs que lorsque j'ai délibérément indiqué des tailles de bloc incorrectes dans lesquelles la matrice de tâches est divisée. Une très désagréable surprise nous attendait ici. Plus tôt, je vous ai dit qu'on nous avait donné 4 cartes V100, eh bien, donc ... nous n'avons pas reçu de binaires HPL pour eux et personne ne pouvait nous aider avec ça. Cela fait plusieurs mois, mais pour moi, c'est encore un mystère ce qui s'est passé lors de cette finale avec notre Linpak. Nous avons changé les versions des compilateurs et d'autres bibliothèques dans l'espoir de nous débarrasser de l'erreur, vérifié à plusieurs reprises si nous avions installé les accélérateurs correctement (puisque nous l'avons fait pour la première fois), mais nous n'avons toujours pas corrigé l'erreur.

La veille de la reddition de Linpak, nous avons de nouveau soigneusement examiné les critères d'évaluation des tâches.Par conséquent, pour Linpak, la formule se composait de deux éléments - une certaine valeur en fonction du résultat de l'équipe qui a remporté Linpak et du coefficient de réussite de la tâche. Il s'est avéré que ce coefficient est si élevé qu'il est complètement désavantageux de passer une valeur Lynpak adéquate, mais avec une erreur incompréhensible, par rapport au passage de n'importe quelle valeur, mais sans erreur. Après avoir soigneusement examiné tout, étant donné que beaucoup de temps a été consacré à la recherche d'une solution à l'erreur et que l'obtention des ensembles de données à partir des tâches suivantes dépend complètement du temps de réalisation de Linpak, nous avons décidé de fusionner tactiquement cette tâche. Un «record» absolu a donc été établi dans l'histoire des compétitions de superordinateurs parmi les valeurs correctes. Notre Lynpak a éclaté avec une valeur de 0,01 TFlops. Bien sûr, en optimisant la référence pour les processeurs existants, nous obtiendrions une valeur de performance légèrement plus élevée, cependant, cela n'aurait pas beaucoup affecté les points et le temps aurait été dépensé beaucoup plus. N'oubliez pas que Lynpak travaille depuis plus longtemps sur le processeur. Le meilleur résultat a été montré par l'Université nationale Tsing Hua - 43 TFlops. Après un jour ou deux, Jack Dongarra (le créateur de Lynpac), membre du comité organisateur du concours, nous a demandé nonchalamment, comment était Lynpak? Apparemment, à cette époque, il n'avait pas encore vu le tableau des résultats: sa réaction WHAAAT valait chaque heure que nous avons passée sur HPL.

Application mystère
Après avoir remis les repères, selon le plan préparé à l'avance, j'ai rejoint la partie de l'équipe qui était censée s'occuper de l'Application Mystère. Personne ne savait à l'avance quelle serait cette tâche, alors ils se préparaient au pire - ils avaient déjà installé tout ce qui pouvait être utile à partir d'un lecteur flash sur un cluster. En règle générale, la principale difficulté des tâches de cette section est de les collecter. Cette fois, cela s'est avéré un peu différent. L'application a été collectée presque la première fois, sans aucun problème. Les problèmes ont commencé lorsque nous avons eu une erreur sur la plupart des ensembles de données présentés à l'adresse, malgré le fait qu'il s'agissait d'une application fortran. À en juger par le comité des résultats, non seulement cette tâche nous a causé des problèmes.
Arme secrète: CPU
Eh bien, la dernière tâche à laquelle j'ai participé était prévue pour le prochain jour de compétition. Contrairement à Mystery Application, nous avons déjà vu un paquet avec lequel nous devions travailler - c'était cfl3d. Lorsque nous avons découvert qu'il s'agissait d'un produit de la NASA, pour une raison quelconque, tout le monde était ravi, pensant que tout irait bien à la fois avec l'assemblage et l'optimisation. Lorsque nous avons testé le paquet à la maison, il n'y a eu aucun problème d'assemblage, mais les cas d'utilisation étaient très intéressants. La plupart des exemples dépendaient de l'installation d'outils supplémentaires, et il s'est avéré que dans une tentative de recherche sur Google de l'un de ces outils - l'outil XX, nous avons trouvé un article de l'année 1995 où il était dit que maintenant l'outil XX est obsolète et utilise YY. Le site du produit est de la même époque - la documentation envoie souvent l'utilisateur vers les pages du site, mais seul le site sur des cadres et au-delà de la page principale ne fonctionnera pas. La pertinence des exemples laissait beaucoup à désirer.
Si c'est assez simple, l'essentiel de la tâche était un fractionnement délicat d'une grille à plusieurs niveaux tout en maintenant un niveau de précision donné. Bien sûr, la métrique principale ici était le temps. D'une manière ou d'une autre, il est arrivé que ce jour-là, nous étions aussi détendus que possible et avons fait ce que nous devions. La tâche était pour le CPU, et c'est exactement ce que nous avions beaucoup. Les fichiers d'entrée de la tâche avaient une forme très spécifique et, souvent, une grande taille - jusqu'à des centaines de lignes. Un membre de notre équipe a écrit un script qui a automatisé le processus de génération du fichier d'entrée, ce qui a accéléré le processus, probablement des centaines de fois. En fin de compte, tous les jeux de données ont été complétés et optimisés avec succès, il y avait même du temps pour essayer de reconstruire le package avec des options intéressantes, mais nous n'avons pas eu beaucoup d'accélération. Nous avons mieux rempli cette tâche que les autres, ayant reçu un prix spécial Application Innovation, ainsi que la 11e place dans l'épreuve par équipe (sur 20 en finale, sur 300+ parmi tous les participants au concours).

Le tableau avec les configurations des systèmes informatiques, ainsi que la photo principale, sont tirés du site http://www.hpcwire.com/ .