Des concours étudiants de superordinateurs sont organisés chaque année dans différentes parties du monde et visent à attirer de jeunes talents dans le domaine de l'informatique hautes performances dans l'industrie et la science. Cette année, notre équipe a participé à des compétitions asiatiques, et cet article discutera de l'expérience et des impressions acquises lors de cet événement.

Tâches et progression de la phase de qualification
Cette année, pour la première fois, aucune tâche n'a dû être résolue à l'aide de l'équipement fourni par les organisateurs: toutes les tâches devaient être exécutées sur notre matériel. Grâce à la persévérance et à la persévérance des professeurs, peu avant le début de la phase de qualification, notre équipe a eu accès à plusieurs nœuds avec les cartes vidéo NVIDIA P100 et P6000, ce qui nous a beaucoup aidés dans la préparation. Les tâches n'étaient pas très différentes de l'année dernière . Ils sont décrits ci-dessous.
- Assemblez la configuration du cluster et décrivez pourquoi certains composants ont été sélectionnés.
- Mesurez les performances du cluster avec Lynpak et HPCG. La différence par rapport à l'année dernière résidait uniquement dans le fait que l'année dernière, Linpak devait être optimisé pour le cluster fourni par les organisateurs avec les processeurs Intel Xeon Phi, et en cela - pour tout cluster disponible.
- Optimiser Relion (logiciel de reconnaissance d'images à partir d'un microscope cryoélectronique) pour les cartes vidéo.
- Construisez un réseau de neurones pour répondre aux recherches des utilisateurs en utilisant le framework CNTK et le jeu de données MS MARCO .
Lynpack et HPCG. Grâce à l'émergence de nouveaux nœuds avec des cartes vidéo et Vadim, qui n'était engagé que dans des tests de performances, nous avons considérablement progressé dans les première et deuxième tâches. Vadim a pu effectuer autant de tests que nécessaire pour adapter en toute confiance les paramètres à un système spécifique. De plus, il est devenu possible de réguler la consommation d'énergie sur les nouveaux nœuds, ce qui a permis de sélectionner la configuration du cluster en tenant compte des changements de fréquence du processeur et de la puce graphique. L'apparition de nouveaux nœuds a été le plus grand événement de l'équipe.
Relion. Le code écrit par les chimistes n'a pas été distingué par une architecture bien pensée et contenait des fichiers difficiles à lire de plusieurs milliers de lignes de code. La synchronisation a été fournie par l'appel système sleep()
. Il y avait des dizaines de gigaoctets d'entrée, encore plus de sortie, une itération a pris en moyenne quarante minutes, et il était impossible de comprendre immédiatement comment optimiser tout cela. Après deux semaines de recherche, mon propre allocateur de mémoire pour la carte vidéo a été écrit; La transformée de Fourier et quelques autres routines ont été portées sur des cartes vidéo. En raison de la complexité du code et du temps limité, d'autres optimisations ont été faites après l'étape préliminaire.
CNTK. Comme d'habitude, dans le problème de l'apprentissage automatique, la configuration de base du réseau neuronal a été donnée, à partir de laquelle cela vaut la peine de commencer. Le cadre et le réseau lui-même n'ont pas fonctionné hors de la boîte. CNTK avait besoin d'une version spéciale d'OpenMP, dans l'utilitaire pour vérifier le résultat, les fonctions avaient des types de paramètres incompatibles, et leur nombre ne correspondait pas. Quand tout a finalement commencé, ils ont commencé à s'occuper de l'architecture du réseau. Hélas, les réseaux de neurones sont toujours le point faible de notre équipe, nous n'avons donc pas apporté de modifications très complexes. Nous avons changé le pourcentage de neurones rejetés, la vitesse d'apprentissage, la valeur initiale et expérimenté en utilisant GRU au lieu de LSTM dans la partie récurrente.
Alors bravo, nous sommes allés en finale!
Cette fois, nous avons immédiatement écrit à notre parrain de l’année dernière et commencé à nous préparer. Bientôt, deux événements se sont produits: le parrain de l'année dernière nous a refusés et l'université a alloué des fonds pour couvrir une partie du coût du vol. Ensuite, il y a eu la génération d'idées où trouver le reste des fonds. En conséquence, la société Devexperts , qui développe des logiciels financiers pour les bourses, les courtiers et les sociétés d'investissement, s'est portée volontaire pour nous aider. Lors du tour de qualification, l'équipe résout les problèmes d'équipement dont elle dispose. Parfois, une partie des tâches est résolue sur du matériel fourni par les organisateurs. En finale, tout est exactement le même sauf un mais ... l'équipe n'a pas encore assemblé ce cluster!

L'année dernière, aucun des membres de l'équipe n'avait d'expérience dans la mise en place d'un cluster, c'est pourquoi nous avons eu peu de temps pour lancer des tâches compétitives, donc cette année nous avons mené une série de sessions de formation sur le cluster de formation. À chaque session de formation, nous avons créé des copies de sauvegarde des nœuds, complètement configuré un nœud, puis copié son image sur le réseau vers d'autres nœuds. Comme la pratique l'a montré, c'est le moyen le plus rapide et le plus indolore de configurer un cluster à partir de zéro, ce qui ne nécessite pas une connaissance approfondie des technologies de bas niveau. Quelques séances d'entraînement ont suffi pour déboguer et automatiser complètement le processus.

Finale: jour un et deux
Au cours des deux premiers jours du concours, les équipes se réunissent et mettent en place un cluster sur lequel toutes les applications seront ensuite lancées. En règle générale, plus il y a de cartes vidéo dans votre système, plus vous pouvez obtenir de performances sur la plupart des tâches et moins vous pouvez installer de nœuds dans un rack en raison de limitations de puissance (la puissance ne doit pas dépasser 3 kW, sinon les résultats de la tâche ne comptent pas). Cependant, il existe des applications dans lesquelles les cartes vidéo ne sont en aucun cas utilisées et la présence d'un grand nombre de nœuds peut être bénéfique.
Cette année, les sponsors de la compétition ont fourni quatre NVIDIA V100 à chaque équipe. Les premiers à trouver la bonne personne et à recevoir les précieux accélérateurs, nous nous sommes mis à l'installation. Personne dans l'équipe (y compris le coach) n'avait auparavant expérimenté l'installation de cartes vidéo sur le serveur. Après avoir étudié les instructions aimablement fournies par les organisateurs, nous avons fait face à la tâche, et nous n'avons même pas eu à retirer et démonter complètement le serveur, comme le font la plupart des équipes (voir vidéo).
Ensuite, il a fallu installer et configurer le système d'exploitation. En règle générale, les étudiants ont le moins confiance dans ce domaine, car il utilise des technologies de niche qui ne sont pas utiles dans d'autres domaines.Nous avons donc précédemment mené plusieurs formations pour configurer entièrement un système à cinq nœuds à partir de zéro sur le cluster de formation à l'aide de Clonzilla.
Les scripts de configuration ont été débogués sur un cluster virtuel à l'aide de Wagrant, car ce n'est que dans celui-ci qu'il est facile de générer plusieurs machines virtuelles identiques. En raison du faible niveau de logiciel que nous utilisons, Docker et d'autres technologies basées sur des espaces de noms Linux ne nous conviennent pas. Les scripts de configuration ne fonctionnent tout simplement pas sur eux.
Forts de l'expérience acquise en formation, nous avons déployé le système d'exploitation et d'autres packages encore plus rapidement qu'en formation - les performances du serveur ne peuvent être comparées à notre cluster de formation. L'une des caractéristiques du concours est le manque d'accès à Internet à partir des serveurs, nous avons donc téléchargé le référentiel avec des packages à l'avance et enregistré sur deux clés USB que nous avons prises avec nous.
Après avoir configuré le cluster, chaque membre de l'équipe s'est mis à configurer et à tester son application pour le nouveau système, et ici nous avons eu une surprise désagréable. La version de Linpak, qui est restée depuis la dernière année du concours, a refusé de fonctionner correctement sur le nouveau système. L'installation de différentes versions de CUDA, le tri des différentes options et paramètres du noyau n'ont pas donné l'effet souhaité. En conséquence, nous avons décidé de lancer la version habituelle non optimisée afin de ne pas perdre de points pour la tâche. (Cela est dû au nouveau système de notation de cette année: même si votre résultat est le meilleur en vitesse ou en performance, mais que la sortie est incorrecte, vous ne recevrez que la moitié du maximum de points possibles. La deuxième moitié des points est notée pour la conclusion correcte.)
Pour comprendre l'essence du problème, il vaut la peine de dire ce qu'est Lynpack. Lynpack est utilisé pour mesurer les performances des supercalculateurs et pour compiler une liste des supercalculateurs TOP500 les plus puissants au monde. La façon la plus simple de prendre une place de choix dans cette liste est d'acheter un cluster avec un grand nombre de cartes vidéo (le nombre de processeurs n'est pas si important, car 99% de la tâche est donnée à la carte vidéo). Pour chaque accélérateur, il existe une version optimisée de Lynpak, dont le code est généralement fermé. Le binaire ne peut être obtenu que si vous disposez d'un supercalculateur pouvant prendre une place dans la liste TOP500, ou si vous participez à un concours de supercalculateur. Malgré cela, les organisateurs du concours n'ont pas fourni de binaire, la branche russe de NVIDIA a également refusé de le faire. En Russie, il n'y a pas de clusters avec V100 qui pourraient être inclus dans la liste TOP500, par conséquent, les recherches par des collègues familiers ont également échoué. La situation est également incompréhensible par le fait que Linpak n'est utilisé nulle part sauf pour les tests de performances: ni en science, ni en technologie. Si vous voulez aider l'équipe et savoir comment obtenir le précieux programme, vous êtes les bienvenus en PM. Eh bien, nous, avec notre spontanéité immédiate, avons marqué cette histoire avec une diapositive dans la présentation finale, dont nous pourrions faire plaisir aux membres du jury.

Finale: troisième jour
Le troisième jour de la compétition, Linpak, HPCG, Relion et l'application secrète nous attendaient, et cette journée a été la plus difficile pour l'équipe. Après avoir rapidement traité avec Lynpak (voir la section précédente) et HPCG, nous avons obtenu des tâches de travail (données d'entrée) pour une application secrète. Il s'est avéré être un programme de calcul de la dynamique moléculaire de Siesta . La première déception a été que, pour une partie des tâches, Siesta a donné une erreur à l'adresse (malgré le fait qu'elle soit écrite en Fortran, dans laquelle il n'était pas si facile d'obtenir une telle erreur), et qu'il n'a pas été possible de la déboguer. Néanmoins, les tâches restantes ont été gagnées et, à la fin de la journée, nous les avons réussies.
Parallèlement à Siesta, nous avons dû lancer une Relion préalablement préparée. Tous les nœuds sans carte vidéo ont été donnés à Siesta, et les nœuds avec carte vidéo ont été donnés à Relion, de sorte que les programmes ne se sont pas interférés.
Au stade préliminaire, nous avons fortement modifié le code Relion afin qu'il fonctionne efficacement sur les cartes vidéo. Entre autres choses, nous avons parallélisé de nombreuses fonctions, réécrit l'allocateur de mémoire sur la carte vidéo, transféré les routines les plus gourmandes en ressources sur la carte vidéo et ajouté la possibilité d'utiliser des nœuds avec et sans carte vidéo simultanément. Cela a grandement accéléré le programme et a très bien fonctionné sur la technologie universitaire. Cependant, lors de la compétition, nous avons obtenu des cartes vidéo avec moins de mémoire, c'est pourquoi Relion s'est écrasé avec une erreur. Une analyse plus approfondie de l'erreur a montré que le code ne fonctionnera que s'il est réécrit pour le nouveau système. Nous n'avons pas eu le temps pour cela, et ce fut la deuxième déception de la troisième journée.
Finale: quatrième jour
Le quatrième jour de la compétition, CFL3D et MSMARCO sont restés, et cette journée a été beaucoup plus calme. Libérés des applications qui leur étaient assignées, les membres de l'équipe ont commencé à s'entraider. Pour CFL3D, qui a un format de fichier d'entrée très complexe, Ruslan a écrit un script qui le génère. Comme nous avions beaucoup de nœuds par rapport aux équipes avec un grand nombre de cartes vidéo, nous avons lancé plusieurs tâches en parallèle et après plusieurs démarrages de chaque tâche, nous avons pu sélectionner les paramètres optimaux.
Le lancement du MSMARCO pré-préparé n'a pas non plus causé de problèmes graves. Le prétraitement des données a duré plusieurs heures, car il n'y avait pas de temps pour une longue formation, mais grâce à des cartes vidéo plus puissantes, il a été possible de le terminer, mais avec moins d'époques. Nous avons encore un modèle formé à plusieurs époques de la phase de qualification (en finale, les données d'entrée ont changé, mais il n'y avait pas de nouveau fichier pour vérification), mais selon les règles, nous avions besoin d'un modèle qui avait été formé pendant la finale, et nous avons décidé de passer un modèle honnêtement formé. Malgré le travail bien coordonné et le manque de surprises, nous avons utilisé tout le temps alloué et avons terminé tard dans la soirée.
Finale: cinquième jour
Le lendemain, une présentation nous attendait. Le soir du quatrième jour, nous avons inséré les résultats obtenus dans un modèle préparé et rédigé un discours. La présentation a été facile, on ne nous a posé aucune question intéressante, mais pour une raison quelconque, seul l'orateur et les diapositives ont été autorisés à tourner.
Quelques heures plus tard, la cérémonie de remise des prix a commencé. Les sentiments étaient mitigés: d'une part, nous avons fait beaucoup mieux que l'année dernière, d'autre part - nous aurions pu faire encore mieux sans les erreurs ennuyeuses avec les applications. En conséquence, malgré le fait que notre cluster ne diffère pas dans un grand nombre de cartes vidéo, en raison du plus grand nombre de nœuds et de la persévérance, nous avons battu d'autres équipes dans CFL3D, pour lesquelles nous avons reçu un prix séparé dans la compétition. Au classement général, nous avons pris la onzième place sur vingt équipes qui ont atteint la finale (et sur trois cents équipes qui ont participé à l'étape préliminaire). Le champion du classement général, comme l'année dernière, était l'Université de Xinhua. Pour notre équipe, ce fut une victoire sur nous-mêmes: nous avons mieux performé que la dernière fois, avons acquis une expérience inestimable, que nous utiliserons l'année prochaine, et avons battu les autres dans l'une des tâches.

Conclusions et impressions générales
Une configuration en cluster dans laquelle il y a beaucoup plus de cartes vidéo que de processeurs est avantageuse dans la plupart des cas, mais pas universelle. Il y a moins de nœuds et toutes les applications ne peuvent pas, en principe, s'exécuter sur une carte vidéo. Ces applications incluent les programmes Fortran, qui, en raison de leur âge respectable, ne peuvent pas être réécrits pour une carte vidéo, et le plus souvent, ils n'utilisent même pas tous les cœurs de processeur. Pour de telles applications, la présence d'un grand nombre de nœuds vous permet d'exécuter plus de tâches parallèles, ce qui signifie plus d'optimiser les applications.
L'équipe ne connaît peut-être pas toutes les subtilités de l'installation des systèmes d'exploitation et de la diffusion d'images, mais cet écart est facilement remplacé par la formation. Bien sûr, les participants ne reconnaîtront pas toutes les subtilités, mais ils effectueront l'installation en toute confiance point par point. Les scripts d'installation sont facilement débogués sur les machines virtuelles.
Pendant le concours, vous pourrez rencontrer les plus beaux programmes open source. Programmes collectés par des scripts écrits illisibles, programmes qui utilisent des fonctions de bibliothèque réécrites avec des erreurs, programmes écrits en Fortran avec des insertions C, programmes avec des dépendances codées en dur et des indicateurs de compilation. Je ne me souviens pas d'un seul programme qui aurait été assemblé la première fois ou qui a produit une erreur compréhensible pendant l'assemblage. (Un nouvel exemple: l'ancienne version d'OpenMPI sur de nouveaux systèmes tente de connecter une bibliothèque avec un nom vide. Le problème ne peut être résolu de manière fiable qu'en remplaçant automatiquement les fichiers de création générés.) Le concours nous apprend à ne rien être surpris et à surmonter les difficultés. Je veux croire qu'une personne qui a travaillé avec un tel logiciel ne créera jamais quelque chose comme ça dans sa vie.
A la compétition, on ne peut s'empêcher de s'interroger sur l'ingéniosité chinoise. Cette année, les Chinois ont repensé une salle de conférence de forme carrée avec des coins coupés pour s'adapter au lieu de la compétition. Il a apporté des racks avec serveurs et un système de refroidissement avec sortie de liquide à la salle de bain la plus proche (je ne suis pas un expert en la matière et je ne connais pas le nom exact de l'équipement). Quand ils ont réalisé que la température dans la pièce ne tombait pas en dessous de trente degrés Celsius, ils ont apporté d'énormes blocs de glace dans les bassins. Bien sûr, cela n'a pas changé la situation, mais a fourni à l'équipe des boissons fraîches.

Remerciements
La participation au concours n'aurait pas été possible sans notre sponsor, Devexperts ( http://devexperts.com/ ). L'entreprise a engagé des frais de transport aérien vers la Chine.

Impressions de Chine
Certains membres de l'équipe étaient en Chine pour la première fois, ce qui a provoqué un léger choc culturel. Dit Anton.
La connaissance de la terre du soleil levant a commencé avec le fait que certains d'entre nous ont vu leurs batteries retirées pour être rechargées, car ils n'avaient pas de marque de puissance. Hormis cette conspiration, tout le reste s'est déroulé à l'amiable. Nous avons été accueillis par deux bénévoles avec un signe de notre université, après quoi nous avons été emmenés à l'hôtel en bus. Il est à noter qu'après Peter, où la neige était sur le point de fondre, en Chine, il faisait assez chaud (bien que les vrais habitants de Volgograd, bien sûr, n'aient même pas ressenti cela). A notre arrivée, nous avons été logés dans des chambres. Après des vols quotidiens, j'ai décidé de m'allonger sur un énorme matelas avec fatigue.
Le matelas était dur.
Samouraï déprimé.
A cette époque, il était environ dix heures du matin, donc une heure plus tard nous sommes allés visiter une université locale. Dire qu'il est grand, c'est ne rien dire. Si nous comparons le territoire du campus local et de l'Université d'État de Saint-Pétersbourg, alors l'Université de Nanchang est cinq fois plus. On nous a montré la salle à manger locale, où au cours des cinq jours suivants, nous avons mangé des nouilles et du riz. Pour la plupart, la première communication avec des Chinois ordinaires, dont la connaissance de l'anglais n'est pas si bonne, a commencé ici.
La salle à manger est aménagée de telle sorte que chaque fenêtre est un mini-point de vente où vous pouvez acheter quelque chose. Le paiement est effectué par une carte spéciale que vous, comme les cartes NFC, attachez simplement au lecteur. Tout se passe rapidement et il n'est pas nécessaire de faire la queue longtemps. Comprendre exactement ce que vous prenez est problématique. Vous devez utiliser les méthodes de l'ancien grand-père et pointer du doigt le plat souhaité. Le troisième jour dans une étagère à nouilles, ils ont commencé à nous reconnaître, ce qui a grandement simplifié nos vies. Certains ont même appris à compter jusqu'à dix pour ne pas pointer du doigt et faire preuve de respect pour les habitants. Si nous parlons de la nourriture elle-même, il y avait de telles boulettes bonnes et saines. Avec l'aide d'un bénévole, j'ai réussi à obtenir une délicieuse soupe, mais comme cela nécessite une interaction verbale avec le vendeur, ce n'était qu'une fois. En raison des assaisonnements, toute la viande est très épicée, avec un goût spécifique.
Le deuxième jour, nous avons rencontré le troisième volontaire, qui s'appelait Ksenia. (En règle générale, les Chinois proposent des noms faciles à prononcer pour communiquer avec les étrangers.) Elle étudie le russe depuis deux ans, elle nous a donc été confiée, une sorte d'expérience utile.

La compétition elle-même était déjà décrite en détail dans d'autres sections, mais je voudrais noter qu'il n'y avait que deux chaises pour l'équipe, donc je devais m'asseoir par terre, après quoi mes jambes ne demandaient que pitié, car je devais m'asseoir comme ça pendant dix heures les quatre jours de la compétition .