Jährlich finden in verschiedenen Teilen der Welt studentische Supercomputer-Wettbewerbe statt, die junge Talente für das Hochleistungsrechnen in Industrie und Wissenschaft gewinnen sollen. In diesem Jahr hat unser Team an asiatischen Wettbewerben teilgenommen. In diesem Artikel werden die Erfahrungen und Eindrücke dieser Veranstaltung erörtert.

Aufgaben und Fortschritt der Qualifikation
In diesem Jahr gab es zum ersten Mal keine Aufgaben, die mit den von den Organisatoren bereitgestellten Geräten gelöst werden mussten: Alle Aufgaben mussten auf ihrer eigenen Hardware ausgeführt werden. Dank der Beharrlichkeit und Beharrlichkeit der Professoren konnte unser Team kurz vor Beginn der Qualifikationsphase mit den NVIDIA P100- und P6000-Grafikkarten auf mehrere Knoten zugreifen, was uns bei der Vorbereitung sehr geholfen hat. Die Aufgaben unterschieden sich nicht wesentlich vom letzten Jahr . Sie werden unten beschrieben.
- Stellen Sie die Clusterkonfiguration zusammen und beschreiben Sie, warum bestimmte Komponenten ausgewählt wurden.
- Messen Sie die Clusterleistung mit Lynpak und HPCG. Der Unterschied zum Vorjahr bestand nur darin, dass Linpak im vergangenen Jahr für den von den Organisatoren mit Intel Xeon Phi-Prozessoren bereitgestellten Cluster optimiert werden musste, und zwar für jeden verfügbaren Cluster.
- Optimieren Sie Relion (Software zur Erkennung von Bildern von einem Kryoelektronikmikroskop) für Grafikkarten.
- Erstellen Sie ein neuronales Netzwerk, um auf Benutzersuchen mithilfe des CNTK- Frameworks und des MS MARCO- Datasets zu reagieren.
Lynpack und HPCG. Dank der Entstehung neuer Knoten mit Grafikkarten und Vadim, der nur an Leistungstests beteiligt war, sind wir bei der ersten und zweiten Aufgabe erheblich vorangekommen. Vadim konnte so viele Testläufe wie nötig durchführen, um die Parameter sicher an ein bestimmtes System anzupassen. Außerdem wurde es möglich, den Stromverbrauch auf den neuen Knoten zu regulieren, wodurch die Clusterkonfiguration unter Berücksichtigung von Änderungen in der Frequenz des Prozessors und des Grafikchips ausgewählt werden konnte. Das Erscheinen neuer Knoten war das größte Ereignis für das Team.
Relion. Der von Chemiechemikern geschriebene Code zeichnete sich nicht durch eine durchdachte Architektur aus und enthielt schwer lesbare Dateien mit mehreren tausend Codezeilen. Die Synchronisation wurde durch den Systemaufruf sleep()
bereitgestellt. Es gab Dutzende von Gigabyte an Eingabe, noch mehr Ausgabe, eine Iteration dauerte durchschnittlich vierzig Minuten, und es war unmöglich, sofort zu verstehen, wie man all dies optimiert. Nach zweiwöchiger Suche wurde mein eigener Speicherzuweiser für die Grafikkarte geschrieben. Die Fourier-Transformation und einige andere Routinen wurden auf Grafikkarten portiert. Aufgrund der Komplexität des Codes und der begrenzten Zeit wurden nach der Vorstufe weitere Optimierungen vorgenommen.
CNTK. Wie üblich wurde beim Problem des maschinellen Lernens die Grundkonfiguration des neuronalen Netzwerks angegeben, von der es sich zu beginnen lohnt. Das Framework und das Netzwerk selbst funktionierten nicht sofort. CNTK benötigte eine spezielle Version von OpenMP. Im Dienstprogramm zur Überprüfung des Ergebnisses hatten die Funktionen inkompatible Parametertypen und ihre Anzahl stimmte nicht überein. Als endlich alles begann, beschäftigten sie sich mit der Architektur des Netzwerks. Leider sind neuronale Netze immer noch die Schwachstelle unseres Teams, daher haben wir keine sehr komplexen Änderungen vorgenommen. Wir haben den Prozentsatz der verworfenen Neuronen, die Lerngeschwindigkeit und den Anfangswert geändert und im Wiederholungsteil mit GRU anstelle von LSTM experimentiert.
Also Prost, wir sind ins Finale gegangen!
Dieses Mal haben wir sofort an den Sponsor unseres letzten Jahres geschrieben und mit den Vorbereitungen begonnen. Bald ereigneten sich zwei Ereignisse: Der Sponsor des letzten Jahres lehnte uns ab, und die Universität stellte Mittel zur Deckung eines Teils der Flugkosten bereit. Als nächstes kam die Generierung von Ideen, wo der Rest der Mittel zu finden ist. Infolgedessen hat sich das Unternehmen Devexperts , das Finanzsoftware für Börsen, Makler und Investmentunternehmen entwickelt, freiwillig gemeldet, um uns zu helfen. In der Qualifikationsrunde löst das Team Probleme mit der Ausrüstung, die ihm zur Verfügung steht. Manchmal wird ein Teil der Aufgaben mit den von den Organisatoren bereitgestellten Geräten gelöst. Im Finale ist bis auf einen alles genau gleich, aber ... das Team muss diesen Cluster noch zusammenstellen!

Letztes Jahr hatte keines der Teammitglieder Erfahrung mit der Einrichtung eines Clusters, weshalb wir wenig Zeit hatten, um Wettbewerbsaufgaben zu starten. Deshalb haben wir dieses Jahr eine Reihe von Schulungen zum Schulungscluster durchgeführt. Bei jeder Schulungssitzung haben wir Sicherungskopien von Knoten erstellt, einen Knoten vollständig konfiguriert und dann das Image über das Netzwerk auf andere Knoten kopiert. Wie die Praxis gezeigt hat, ist dies die schnellste und schmerzloseste Methode, um einen Cluster von Grund auf neu zu konfigurieren, ohne dass fundierte Kenntnisse über Technologien auf niedriger Ebene erforderlich sind. Ein paar Workouts reichten aus, um den Prozess vollständig zu debuggen und zu automatisieren.

Finale: Tag eins und zwei
In den ersten beiden Tagen des Wettbewerbs stellen die Teams einen Cluster zusammen und richten ihn ein, auf dem anschließend alle Anwendungen gestartet werden. Je mehr Grafikkarten in Ihrem System vorhanden sind, desto mehr Leistung können Sie in der Regel für die meisten Aufgaben erzielen und desto weniger Knoten können Sie aufgrund von Leistungsbeschränkungen in einem Rack installieren (die Leistung sollte 3 kW nicht überschreiten, da sonst die Ergebnisse der Aufgabe nicht zählen). Es gibt jedoch Anwendungen, in denen Grafikkarten in keiner Weise verwendet werden, und das Vorhandensein einer großen Anzahl von Knoten kann vorteilhaft sein.
In diesem Jahr stellten die Sponsoren des Wettbewerbs jedem Team vier NVIDIA V100 zur Verfügung. Als erste, die die richtige Person gefunden und die geschätzten Beschleuniger erhalten haben, haben wir uns an die Installation gemacht. Niemand im Team (einschließlich des Trainers) hatte zuvor Erfahrung mit der Installation von Grafikkarten auf dem Server. Nachdem wir die freundlicherweise von den Organisatoren bereitgestellten Anweisungen gelesen hatten, haben wir die Aufgabe gemeistert und mussten den Server nicht einmal vollständig herausziehen und zerlegen, wie es die meisten Teams tun (siehe Video).
Als nächstes musste das Betriebssystem installiert und konfiguriert werden. In der Regel haben die Schüler das geringste Vertrauen in diesen Bereich, da hier Nischentechnologien verwendet werden, die in anderen Bereichen nicht nützlich sind. Daher haben wir zuvor mehrere Schulungen durchgeführt, um ein System mit fünf Knoten im Schulungscluster mit Clonzilla von Grund auf vollständig zu konfigurieren.
Konfigurationsskripte wurden mit Wagrant in einem virtuellen Cluster debuggt, da nur darin mehrere identische virtuelle Maschinen problemlos ausgelöst werden können. Aufgrund der geringen Software, die wir verwenden, sind Docker und andere Technologien, die auf Linux-Namespaces basieren, für uns nicht geeignet. Konfigurationsskripte funktionieren einfach nicht mit ihnen.
Mit den Erfahrungen aus dem Training haben wir das Betriebssystem und andere Pakete noch schneller als im Training bereitgestellt - die Serverleistung kann nicht mit unserem Trainingscluster verglichen werden. Eines der Merkmale des Wettbewerbs ist der fehlende Zugriff von Servern auf das Internet. Daher haben wir das Repository mit Paketen im Voraus heruntergeladen und auf zwei USB-Laufwerken aufgezeichnet, die wir mitgenommen haben.
Nach dem Einrichten des Clusters machte sich jedes Teammitglied daran, seine Anwendung für das neue System einzurichten und zu testen, und hier hatten wir eine unangenehme Überraschung. Die Version von Linpak, die seit dem letzten Jahr des Wettbewerbs erhalten geblieben ist, hat sich geweigert, korrekt an dem neuen System zu arbeiten. Die Installation verschiedener CUDA-Versionen, das Sortieren nach verschiedenen Optionen und Kerneleinstellungen führte nicht zum gewünschten Effekt. Aus diesem Grund haben wir uns entschlossen, die übliche nicht optimierte Version zu starten, um keine Punkte für die Aufgabe zu verlieren. (Dies ist auf das neue Bewertungssystem in diesem Jahr zurückzuführen: Selbst wenn Ihr Ergebnis die beste Geschwindigkeit oder Leistung aufweist, die Ausgabe jedoch nicht korrekt ist, erhalten Sie nur die Hälfte der maximal möglichen Punkte. Die zweite Hälfte der Punkte wird für die richtige Schlussfolgerung bewertet.)
Um die Essenz des Problems zu verstehen, lohnt es sich zu sagen, was Lynpack ist. Lynpack wird verwendet, um die Leistung von Supercomputern zu messen und eine Liste der leistungsstärksten TOP500- Supercomputer der Welt zu erstellen. Der einfachste Weg, einen hohen Platz in dieser Liste einzunehmen, ist der Kauf eines Clusters mit einer großen Anzahl von Grafikkarten (die Anzahl der Prozessoren ist nicht so wichtig, da 99% der Aufgabe der Grafikkarte übertragen werden). Für jeden Beschleuniger gibt es eine optimierte Version von Lynpak, deren Code in der Regel geschlossen ist. Die Binärdatei kann nur erhalten werden, wenn Sie einen Supercomputer haben, der einen Platz in der TOP500-Liste einnehmen kann, oder wenn Sie an einem Supercomputer-Wettbewerb teilnehmen. Trotzdem stellten die Organisatoren des Wettbewerbs keine Binärdatei zur Verfügung, die russische Niederlassung von NVIDIA lehnte dies ebenfalls ab. In Russland gibt es keine Cluster mit V100, die in die TOP500-Liste aufgenommen werden könnten. Daher waren Suchanfragen von vertrauten Kollegen ebenfalls erfolglos. Die Situation ist auch nicht nachvollziehbar, da Linpak nur für Leistungstests verwendet wird: weder in der Wissenschaft noch in der Technologie. Wenn Sie dem Team helfen möchten und wissen, wie Sie das geschätzte Programm erhalten, sind Sie in PM willkommen. Nun, wir haben diese Geschichte mit unserer unmittelbaren Spontanität mit einer Folie in der Abschlusspräsentation markiert, die wir den Jurymitgliedern gefallen konnten.

Finale: Tag drei
Am dritten Tag des Wettbewerbs warteten Linpak, HPCG, Relion und die geheime App auf uns, und dieser Tag war der schwierigste für das Team. Nachdem wir uns schnell mit Lynpak (siehe vorherigen Abschnitt) und HPCG befasst hatten, erhielten wir Arbeitsaufgaben (Eingabedaten) für eine geheime Anwendung. Es stellte sich heraus, dass es sich um ein Programm zur Berechnung der Molekulardynamik von Siesta handelt . Die erste Enttäuschung war, dass Siesta bei einem Teil der Aufgaben einen Fehler an der Adresse gab (trotz der Tatsache, dass er in Fortran geschrieben wurde, in dem es nicht so einfach war, einen solchen Fehler zu erhalten) und es nicht möglich war, ihn zu debuggen. Trotzdem haben sich die restlichen Aufgaben verdient und am Ende des Tages haben wir sie erfolgreich bestanden.
Parallel zu Siesta mussten wir ein zuvor vorbereitetes Relion starten. Alle Knoten ohne Grafikkarten wurden an Siesta übergeben, und Knoten mit Grafikkarten wurden an Relion übergeben, sodass sich die Programme nicht gegenseitig störten.
In der Vorphase haben wir den Relion-Code stark geändert, damit er auf Grafikkarten effektiv funktioniert. Unter anderem haben wir viele Funktionen parallelisiert, den Speicherzuweiser auf der Grafikkarte neu geschrieben, die ressourcenintensivsten Routinen auf die Grafikkarte übertragen und die Möglichkeit hinzugefügt, Knoten mit und ohne Grafikkarte gleichzeitig zu verwenden. Dies beschleunigte das Programm erheblich und funktionierte hervorragend in der Universitäts-Technologie. Beim Wettbewerb haben wir jedoch Grafikkarten mit weniger Speicher bekommen, weshalb Relion mit einem Fehler abgestürzt ist. Eine eingehendere Analyse des Fehlers ergab, dass der Code nur funktioniert, wenn er für das neue System neu geschrieben wird. Wir hatten keine Zeit dafür und dies war die zweite Enttäuschung des dritten Tages.
Finale: vierter Tag
Am vierten Tag des Wettbewerbs blieben CFL3D und MSMARCO, und dieser Tag war viel ruhiger. Befreit von den ihnen zugewiesenen Anwendungen, begannen die Teammitglieder, sich gegenseitig zu helfen. Für CFL3D, das ein sehr komplexes Eingabedateiformat hat, hat Ruslan ein Skript geschrieben, das es generiert. Da wir im Vergleich zu Teams mit einer großen Anzahl von Grafikkarten viele Knoten hatten, haben wir mehrere Aufgaben parallel gestartet und nach mehreren Starts jeder Aufgabe konnten wir die optimalen Parameter auswählen.
Der Start des vorbereiteten MSMARCO verursachte ebenfalls keine ernsthaften Probleme. Die Vorverarbeitung der Daten dauerte mehrere Stunden, weshalb keine Zeit für langes Training blieb. Dank leistungsfähigerer Grafikkarten war es jedoch möglich, sie zu vervollständigen, wenn auch mit weniger Epochen. Wir haben noch ein Modell, das in mehr Epochen aus der Qualifikationsphase trainiert wurde (im Finale haben sich die Eingabedaten geändert, aber es gab keine neue Datei zur Überprüfung), aber nach den Regeln brauchten wir ein Modell, das während des Finales trainiert wurde, und wir entschieden uns, ein ehrlich trainiertes Modell zu bestehen. Trotz der gut koordinierten Arbeit und des Mangels an Überraschungen haben wir die gesamte zugewiesene Zeit genutzt und sind am späten Abend fertig geworden.
Finale: fünfter Tag
Am nächsten Tag wartete eine Präsentation auf uns. Am Abend des vierten Tages fügten wir die erhaltenen Ergebnisse in eine vorbereitete Vorlage ein und schrieben eine Rede. Die Präsentation war einfach, uns wurden keine interessanten Fragen gestellt, aber aus irgendeinem Grund durften nur der Sprecher und die Folien schießen.
Einige Stunden später begann die Preisverleihung. Die Gefühle waren gemischt: Einerseits haben wir viel besser abgeschnitten als letztes Jahr, andererseits hätten wir noch besser abschneiden können, wenn nicht die nervigen Fehler bei den Anwendungen gewesen wären. Trotz der Tatsache, dass sich unser Cluster bei einer großen Anzahl von Grafikkarten aufgrund der größeren Anzahl von Knoten und Ausdauer nicht unterschied, schlugen wir andere Teams in CFL3D, für die wir im Wettbewerb einen separaten Preis erhielten. In der Gesamtwertung belegten wir den elften Platz von zwanzig Teams, die das Finale erreichten (und von dreihundert Teams, die an der Vorrunde teilnahmen). Der Champion in der Gesamtwertung war wie im letzten Jahr die Xinhua University. Für unser Team war dies ein Sieg über uns selbst: Wir haben besser als beim letzten Mal abgeschnitten, wertvolle Erfahrungen gesammelt, die wir nächstes Jahr nutzen werden, und andere bei einer der Aufgaben geschlagen.

Schlussfolgerungen und allgemeine Eindrücke
Eine Cluster-Konfiguration, in der viel mehr Grafikkarten als Prozessoren vorhanden sind, ist in den meisten Fällen vorteilhaft, jedoch nicht universell. Es gibt weniger Knoten und nicht jede Anwendung kann im Prinzip auf einer Grafikkarte ausgeführt werden. Zu diesen Anwendungen gehören Fortran-Programme, die aufgrund ihres respektablen Alters nicht für eine Grafikkarte umgeschrieben werden können und in den meisten Fällen nicht einmal alle Prozessorkerne verwenden. Bei solchen Anwendungen können Sie durch das Vorhandensein einer großen Anzahl von Knoten mehr parallele Aufgaben ausführen, was bedeutet, dass Anwendungen optimiert werden.
Das Team kennt möglicherweise nicht alle Feinheiten der Installation von Betriebssystemen und des Castings von Images, aber diese Lücke kann leicht durch Schulungen ersetzt werden. Natürlich werden die Teilnehmer nicht alle Feinheiten erkennen, aber sie werden die Installation Punkt für Punkt sicher durchführen. Skripts für die Installation können problemlos auf virtuellen Maschinen getestet werden.
Während des Wettbewerbs können Sie sich mit den schönsten Open Source-Programmen treffen. Programme, die von unleserlichen geschriebenen Skripten gesammelt werden, Programme, die fehlerhaft umgeschriebene Bibliotheksfunktionen verwenden, Programme, die in Fortran mit C-Einfügungen geschrieben wurden, Programme mit fest codierten Abhängigkeiten und Kompilierungsflags. Ich kann mich nicht an ein einzelnes Programm erinnern, das beim ersten Zusammenstellen erstellt worden wäre oder das beim Zusammenstellen einen verständlichen Fehler verursacht hat. (Ein neues Beispiel: Eine alte Version von OpenMPI auf neuen Systemen versucht, eine Bibliothek mit einem leeren Namen zu verbinden. Das Problem kann nur durch automatisches Ersetzen in generierten Make-Dateien zuverlässig gelöst werden.) Der Wettbewerb lehrt uns, über nichts überrascht zu sein und Schwierigkeiten zu überwinden. Ich möchte glauben, dass eine Person, die mit solcher Software gearbeitet hat, niemals so etwas in ihrem Leben schaffen wird.
Beim Wettbewerb überrascht man immer wieder der chinesische Einfallsreichtum. In diesem Jahr haben die Chinesen einen quadratischen Konferenzraum mit abgeschnittenen Ecken neu gestaltet, um ihn an den Veranstaltungsort anzupassen. Es brachte Racks mit Servern und ein Kühlsystem mit Flüssigkeitsauslass zum nächsten Badezimmer (ich bin kein Experte auf diesem Gebiet und kenne den genauen Namen des Geräts nicht). Als sie bemerkten, dass die Temperatur im Raum nicht unter dreißig Grad Celsius fiel, brachten sie riesige Eisblöcke in die Becken. Dies änderte natürlich nichts an der Situation, versorgte das Team jedoch mit gekühlten Getränken.

Danksagung
Die Teilnahme am Wettbewerb wäre ohne unseren Sponsor Devexperts ( http://devexperts.com/ ) nicht möglich gewesen. Dem Unternehmen entstanden die Kosten für Flugreisen nach China.

Impressionen aus China
Einige Mitglieder des Teams waren zum ersten Mal in China, was einen leichten kulturellen Schock verursachte. Erzählt Anton.
Die Bekanntschaft mit dem Land der aufgehenden Sonne begann mit der Tatsache, dass einige von uns ihre Batterien zum Laden abnehmen ließen, weil sie keine Strommarke hatten. Abgesehen von dieser Verschwörung verlief alles andere einvernehmlich. Wir wurden von zwei Freiwilligen mit einem Schild unserer Universität empfangen, wonach wir mit dem Bus zum Hotel gebracht wurden. Es ist erwähnenswert, dass es nach Peter, wo der Schnee schmelzen sollte, in China ziemlich heiß war (obwohl die wirklichen Bewohner von Wolgograd dies natürlich nicht einmal fühlten). Bei der Ankunft wurden wir in Zimmern untergebracht. Nach den täglichen Flügen beschloss ich, mich vor Müdigkeit auf eine riesige Matratze fallen zu lassen.
Schwer war eine Matratze.
Deprimierter Samurai.
Zu dieser Zeit war es ungefähr zehn Uhr morgens, also besuchten wir eine Stunde später eine örtliche Universität. Zu sagen, dass er groß ist, bedeutet nichts zu sagen. Wenn wir das Gebiet des örtlichen Campus und der St. Petersburg State University vergleichen, ist die Nanchang University fünfmal so groß. Uns wurde der lokale Speisesaal gezeigt, wo wir in den nächsten fünf Tagen Nudeln und Reis aßen. Hier begann größtenteils die erste Kommunikation mit gewöhnlichen Chinesen, deren Englischkenntnisse nicht so gut sind.
Der Speisesaal ist so angeordnet, dass jedes Fenster ein Mini-Einzelhandelsgeschäft ist, in dem Sie etwas kaufen können. Die Zahlung erfolgt mit einer speziellen Karte, die Sie wie NFC-Karten einfach an den Leser anhängen. Alles geht schnell und es besteht keine Notwendigkeit, lange in der Schlange zu stehen. Es ist problematisch, genau zu verstehen, was Sie nehmen. Sie müssen die Methoden des alten Großvaters anwenden und Ihren Finger auf das gewünschte Gericht richten. Am dritten Tag in einem Nudelregal erkannten sie uns, was unser Leben erheblich vereinfachte. Einige lernten sogar, bis zehn zu zählen, um nicht mit den Fingern zu zeigen und den Bewohnern Respekt zu erweisen. Wenn wir über das Essen selbst sprechen, dann gab es gute und gesunde Knödel. Mit Hilfe eines Freiwilligen gelang es mir, eine köstliche Suppe zu bekommen, aber da dies eine mündliche Interaktion mit dem Verkäufer erfordert, war dies nur einmal. Aufgrund der Gewürze ist alles Fleisch sehr scharf mit einem bestimmten Geschmack.
Am zweiten Tag trafen wir uns mit dem dritten Freiwilligen, dessen Name Ksenia war. (Die Chinesen haben in der Regel leicht auszusprechende Namen für die Kommunikation mit Ausländern.) Sie studiert seit zwei Jahren Russisch, daher wurde sie uns zugewiesen, eine Art nützliche Erfahrung.

Der Wettbewerb selbst wurde bereits in anderen Abschnitten ausführlich beschrieben, aber ich möchte darauf hinweisen, dass es nur zwei Stühle für das Team gab, so dass ich auf dem Boden sitzen musste, wonach meine Beine nur um Gnade baten, weil ich alle vier Tage des Wettbewerbs zehn Stunden lang so sitzen musste .