Von 0,01 TFlops HPL bis zur ASC'18-Anwendungsinnovation

Published on August 10, 2018

Von 0,01 TFlops HPL bis zur ASC'18-Anwendungsinnovation

Hi, Habr! Wir führen eine Reihe von Artikeln über die Teilnahme des Teams der St. Petersburg State University (wir nennen uns EnterTildeDot) an den weltweit größten Studentencomputerwettbewerben.



In diesem Artikel betrachten wir den Weg zu ASC'18 am Beispiel eines Teammitglieds, wobei der Visitenkarte der Konkurrenz und modernen Supercomputern im Allgemeinen - Linpack - besondere Aufmerksamkeit gewidmet wird. Lassen Sie uns das Geheimnis einer Rekord- und Anti-Rekord-Leistung eines Computersystems betrachten.


Kurze Exkursion zu Supercomputer-Wettbewerben


Allgemeine Informationen darüber, welche Art von Wettbewerben dies sind, finden Sie in unseren letzten Artikeln , einschließlich der langen Post zum diesjährigen Wettbewerb. Um das Bild zu vervollständigen, geben wir hier jedoch noch einige Informationen zum gesamten Wettbewerb.


Die Asian Supercomputer Challenge ist eine von drei großen Wettbewerben für Hochleistungs-Computing-Teams, die jedes Jahr mehr und mehr Studententeams aus der ganzen Welt zur Teilnahme anzieht. Wie auch bei ähnlichen Wettbewerben erfordert ASC eine Qualifikations- und Endrunde mit folgenden Bestimmungen:


  • Hauptaktivität: HPC-Problemlösung;
  • Team: 5 Schüler + Trainer;
  • Auswahlphase: Eine Beschreibung des Vorschlags mit einer Beschreibung der Lösung der vorgelegten Aufgaben, auf deren Grundlage eine Liste von 20 Finalisten festgelegt wird.
  • Die letzte Etappe: ein persönlicher Wettbewerb für 20 Teams mit einer Dauer von etwa fünf Tagen, einschließlich der vollständigen Montage und Konfiguration des Computing-Clusters, der Problemlösung und der Präsentation. Das Cluster wird auf der Grundlage von Leistungsbegrenzungen von 3 kW entweder aus dem vom Veranstalter zur Verfügung gestellten Bügeleisen oder von seinem eigenen zusammengestellt. Der Cluster hat keinen Zugang zum Internet. Die Aufgaben überschneiden sich mit den Aufgaben der Qualifikationsphase, es gibt jedoch auch eine unbekannte Aufgabe - die Mystery-Anwendung.

Nun, jetzt mit Abweichungen zum Bildungsprogramm. Im Gegensatz zu anderen Teammitgliedern, die das ASC'17-Finale bereits erreicht haben, nahm ich nur in diesem Jahr am Wettbewerb teil. Ich bin im September zum Team gestoßen, Aufträge für die Qualifikationsphase werden erst im Januar gesendet, sodass ich genügend Zeit hatte, die Grundkonzepte des Wettbewerbs zu erlernen und an der einzig bekannten Aufgabe zu arbeiten - HPL & HPCG. Eine Aufgabe wird fast jedes Jahr in der einen oder anderen Form erfüllt, es ist jedoch nicht immer im Voraus bekannt, mit welcher Ausrüstung die Aufgabe ausgeführt werden muss (manchmal stellen die Organisatoren den Fernzugriff auf ihre eigenen Ressourcen bereit).


HPL


HPL (High Performance Computing Linpack Benchmark) - ein Test der Leistung des Computersystems, auf dessen Ergebnis eine moderne Liste aufbautdie besten Supercomputer der Welt. Der Kern des Tests besteht in der Lösung dichter Systeme linearer algebraischer Gleichungen. Mit dem Erscheinen dieses Benchmarks wurde eine Metrik eingeführt, mit der Sie Supercomputer klassifizieren können, während HPC gleichzeitig für die Community eine Art „Misserfolg“ bietet. Wenn Sie sich die Liste der besten Supercomputer ansehen, können Sie verstehen, dass das Geheimnis von Lynpack ziemlich schnell aufgedeckt wurde. Nehmen Sie so viele Grafikbeschleuniger wie möglich und Sie werden ganz oben sein. Natürlich gibt es Ausnahmen, aber meist werden die Spitzenplätze von Supercomputern mit Grafikbeschleunigern belegt. Was ist der "schlechte Dienst"? Tatsache ist, dass Linpack nicht nur die Leistung misst, sondern auch nirgendwo sonst verwendet wird und nichts mit echten Rechenproblemen zu tun hat. Ergebend,


HPL-Entwickler haben auch ein anderes Paket erstellt - HPCG, auf dessen Basis auch die Supercomputer- Bewertung gebildet wird . Es wird angenommen, dass dieser Benchmark eher an realen Problemen als an HPL liegt, und in gewisser Weise spiegelt die signifikante Diskrepanz zwischen den Positionen des Supercomputers in diesen beiden Listen den tatsächlichen Zustand der Dinge wider. Die jüngsten Bewertungen (Juni 2018) waren jedoch eine angenehme Ausnahme, und schließlich fielen die ersten Positionen der Listen zusammen.


Und jetzt zum richtigen HPL


Wir kehren zu praktischeren Momenten der Geschichte und des Wettbewerbs zurück. Linpak opensen, die auf der offiziellen Website zum Download zur Verfügung steht , hat allerdings kaum einen Top-Supercomputer, dessen Leistung an dieser Version des Benchmarks gemessen wurde. Hersteller von Beschleunigern stellen ihre eigenen HPL-Versionen her, die für bestimmte Geräte optimiert sind, wodurch erhebliche Leistungssteigerungen erzielt werden können. Natürlich müssen benutzerdefinierte Versionen von HPL bestimmte Kriterien erfüllen und spezielle Tests erfolgreich bestehen.


Jeder Hersteller hat eine eigene HPL-Version für jeden Beschleuniger. Im Gegensatz zum ursprünglichen Benchmark wird jedoch kein Open-Source erwähnt. Nvidia veröffentlicht HPL-Versionen, die für jede der Karten optimiert wurden, während der Code bereits nicht als Quelldateien, sondern als Binärdateien ausgeliefert wird. Darüber hinaus gibt es nur zwei Möglichkeiten, auf sie zuzugreifen:


  • Sie haben einen Supercomputer mit Nvidia-Karten, der die Spitze betreten kann - Nvidia wird Sie alleine finden. Leider werden Sie die Binärdateien wahrscheinlich nicht erhalten, da es keine Möglichkeit gibt, an der Optimierung der HPL-Parameter teilzunehmen. Auf jeden Fall erhalten Sie einen angemessenen Leistungswert, der bei einem optimierten Benchmark ermittelt wird.
  • Sie nehmen an einem von drei Supercomputer-Wettbewerben teil. Aber wir werden auf diesen Teil zurückkommen.

Worum geht es also bei der Aufgabe, vor allem, wenn intelligente Onkel von großen Unternehmen den Maßstab für Ihre Ausrüstung bereits optimiert haben?
Im Fall der Qualifikationsphase des Wettbewerbs - beschreiben Sie die möglichen Maßnahmen zur Steigerung der Systemleistung. In diesem Fall besteht keine Notwendigkeit, nach absoluten Leistungszahlen zu suchen, da einige Teams Zugriff auf einen großen und Klassencluster von 226 Knoten mit modernen Beschleunigern haben und andere nur auf die Klassennummer 226 des Hochschulcomputers, die wir als Cluster bezeichnen.



Im Fall der Endphase ist es schon sinnvoll, die absoluten Leistungswerte zu vergleichen. Nicht zu sagen, dass alle hier gleichberechtigt sind, aber es gibt zumindest eine Einschränkung der maximal zulässigen Leistung des Systems.


Das Ergebnis der Benchmark-Implementierung hängt hauptsächlich von zwei Komponenten ab: der Clusterkonfiguration und der Einstellung der Parameter des Benchmarks. Erwähnenswert wäre auch der Einfluss der Auswahl von Compilern und Bibliotheken für Matrix- und Vektorberechnungen, aber hier ist alles ziemlich langweilig, jeder nutzt den Compiler von Intel + MKL. Bei Binärdateien gibt es keine Wahl, da sie bereits zusammengebaut sind. Das Ergebnis von HPL ist ein numerischer Wert, der angibt, wie viele Gleitkommaoperationen das Computersystem pro Sekunde ausführt. Die grundlegende Maßeinheit ist FLOPS (Floating-Point-Operationen pro Sekunde) mit den entsprechenden Präfixen. In der Endphase des Wettbewerbs sprechen wir fast immer von Tera-Systemen.


Ergebnisoptimierung


Das Einstellen der Benchmark-Parameter besteht aus einer sinnvollen Auswahl von Eingabedaten für eine von Linpack berechnete Aufgabe (HPL.dat-Datei). In diesem Fall hat die Dimensionalität dieser Aufgabe den größten Einfluss - die Größe der Matrix, die Größe der Blöcke, in die die Matrix unterteilt ist, das Verhältnis, in dem Blöcke verteilt sind usw. Die Gesamtzahl der Parameter beträgt mehrere Dutzend, die möglichen Werte sind Tausende. Bruteforce ist nicht die beste Wahl, insbesondere wenn der Test auf relativ kleinen Systemen je nach Konfiguration einige Minuten bis einige Stunden dauert (für die GPU wird der Test viel schneller durchgeführt).


Ich hatte genug Zeit, um die Muster zu studieren, die bereits in anderen Quellen beschrieben wurden, um die Benchmark-Ergebnisse zu optimieren und neue Ergebnisse aufzuzeigen. Ich begann sehr oft, Tests durchzuführen, machte viele Google-Tablets und versuchte, auf Systeme mit einer zuvor nicht getesteten Konfiguration zuzugreifen, um den Benchmark-Test durchzuführen. Daher wurden bereits vor dem Beginn der Qualifikationsphase eine Reihe von Systemen getestet, sowohl CPU als auch GPU, darunter sogar völlig ungeeignet für diesen Nvidia Quadro P5000. Zu Beginn des Qualifyings hatten wir mit P100 und P6000 Zugang zu mehreren Knoten, was uns bei der Vorbereitung sehr geholfen hat. Die Konfiguration dieses Systems ähnelte in vielerlei Hinsicht derjenigen, die wir in der Endphase des Wettbewerbs zusammenbauen wollten, und schließlich erhielten wir Zugang zu den Low-Level-Einstellungen.


Bei der Konfiguration haben das Vorhandensein und die Anzahl der Beschleuniger den größten Einfluss. Wenn Sie ein System mit einer GPU testen, ist die beste Option die, wenn der Hauptcomputerteil der Aufgabe an die GPU-Komponente delegiert wird. Die CPU-Komponente wird auch mit Hilfsaufgaben geladen, trägt jedoch nicht zur Systemleistung bei. Gleichzeitig muss jedoch die Spitzenleistung der CPU bei der Spitzenleistung des Gesamtsystems berücksichtigt werden, was im Hinblick auf das Verhältnis von maximaler Leistung zu Spitze (theoretisch) äußerst unrentabel erscheinen kann. Wenn HPL auf einer GPU ausgeführt wird, ist ein System mit 2 GPU-Beschleunigern und zwei Prozessoren mindestens einem System mit 2 GPUs und 20 CPUs nicht unterlegen.


Nachdem ich die Vorschläge zur möglichen Optimierung der HPL-Ergebnisse beschrieben hatte, erhielt ich schließlich einen Teil des Vorschlags für die Qualifikationsphase. Nachdem ich das Finale des Wettbewerbs erreicht hatte, begann eine neue Phase des Wettbewerbs - die Suche nach Sponsoren. Zum einen brauchten wir einen Sponsor, der die Kosten für den Flug des Teams nach China tragen würde, zum anderen einen Sponsor, der sich bereit erklärt, dem Team Grafikbeschleuniger zur Verfügung zu stellen. Am Ende hatten wir Glück mit dem ersten, die Universität stellte einen Teil des Geldes zur Verfügung und Devexperts half uns dabei, die Tickets vollständig abzudecken . Mit Sponsoren, von denen wir die Karten ausleihen wollten, hatten wir weniger Glück und hier fliegen wir mit der grundlegenden Cluster-Konfiguration erneut ins Finale, ohne eine einzige Chance auf die Wettbewerbsfähigkeit von HPL. Nun, nichts, drücke das Maximum aus, was sie geben, dachten wir.


Schluss ASC'18


Und hier sind wir in China, in der winzigen chinesischen Stadt - Nanchang - im Finale. An zwei Tagen sammeln wir einen Cluster und dann - Rätsel.



In diesem Jahr erhielten alle Teams 4 Nvidia V100-Karten. Dies brachte uns keine Vorteile gegenüber anderen Teams, es erlaubte uns jedoch nicht, HPL auf der CPU auszuführen. Die Knoten werden anfangs um 10 Uhr vergeben. Die zusätzlichen Knoten (3-kW-Grenze beachten) müssen zurückgegeben werden, bevor die wichtigsten Aufgaben des Wettbewerbs erreicht werden. Hier gibt es einen Trick: Durch die Verringerung der Frequenz von CPU und GPU sinkt ihre Leistung. Sie können jedoch Werte für die Frequenz auswählen, mit der wir mehr Leistung pro Energieeinheit erzielen. Durch die Reduzierung der Frequenz können wir noch mehr Beschleuniger hinzufügen, was sich letztendlich auf die Leistung auswirkt. Leider wäre dieser Trick für uns viel nützlicher, wenn wir wie andere Teilnehmer mit einem Koffer mit Beschleunigern zum Wettbewerb kamen. Dennoch, Wir könnten es uns leisten, die maximale CPU-Kapazität zu verlassen. Da nicht alle Wettbewerbsaufgaben eine GPU erfordern, bestand der Verdacht, dass dies in gewisser Weise in unsere Hände spielen könnte.
Daher ist die häufigste Clusterkonfiguration im Finale des Wettbewerbs das Minimum an Knoten, das Maximum an Karten.



Finales Linpack und einige Rekorde


Die Aufgaben des Wettbewerbs waren an bestimmte Wettkampftage gebunden, und HPL war natürlich der erste von ihnen, nachdem das Cluster montiert wurde. Die Frist für die Übermittlung der HPL-Ergebnisse ist das Mittagessen am dritten Tag des Wettbewerbs. Darüber hinaus können die anderen Aufgaben dieses Wettkampftages unmittelbar nach der Lieferung von Lynpak geöffnet werden. Dennoch beginnt Linpak in den ersten Tagen zu fahren. Erstens, um sicherzustellen, dass der Cluster korrekt zusammengestellt ist, und zweitens ist das Lynpack-Setup nicht schnell und da keine zusätzlichen Eingabedaten erforderlich sind, warum dann nicht.


Wir haben unseren Cluster ziemlich schnell aufgebaut und mit Linpack angefangen. Für unsere Konfiguration haben wir ziemlich angemessene Werte erhalten - ungefähr 20 TFlops, und alles wäre in Ordnung, aber nach der Ausgabe des Ergebnisses war ein String mit einem Fehler. Zuvor erhielt ich ähnliche Fehler nur, wenn ich absichtlich falsche Größen von Blöcken angegeben habe, in die die Task-Matrix unterteilt ist. Hier warteten wir auf eine sehr unangenehme Überraschung. Ich habe vorhin gesagt, dass wir 4 V100-Karten erhalten haben, also ... HPL-Binaries, die wir nicht für sie erhalten haben, und niemand konnte uns dabei helfen. Ein paar Monate sind vergangen, aber für mich ist es immer noch ein Rätsel, was bei diesem Finale mit unserer Linpack passiert ist. Wir haben die Versionen von Compilern und anderen Bibliotheken in der Hoffnung geändert, den Fehler zu beseitigen, und haben wiederholt überprüft, ob wir die Beschleuniger korrekt installiert haben (wie wir es zum ersten Mal gemacht haben).



In der Nacht vor der Auslieferung von Lynpak haben wir die Kriterien für die Bewertung der Aufgaben erneut sorgfältig geprüft. Daher bestand die Formel für Lynpak aus zwei Komponenten - einige davon sind abhängig vom Ergebnis des Teams, das Lingpack gewonnen hat, und dem Koeffizienten für die erfolgreiche Ausführung der Aufgabe. Es stellte sich also heraus, dass dieser Koeffizient so groß ist, dass es völlig unrentabel ist, einen ausreichenden Lingpack-Wert zu übergeben, jedoch mit einem unverständlichen Fehler im Vergleich zur Abgabe eines beliebigen Werts, jedoch ohne Fehler. Nachdem wir alles sorgfältig geprüft und berücksichtigt haben, dass viel Zeit darauf verwendet wurde, eine Lösung für den Fehler zu finden, und dass das Abrufen von Datensätzen aus den folgenden Aufgaben vollständig vom Zeitpunkt der Auslieferung von Lynpack abhängt, haben wir uns entschieden, diese Aufgabe taktisch zusammenzuführen. Damit wurde in der Geschichte von Supercomputer-Wettbewerben ein absoluter "Rekord" unter den korrekten Werten aufgestellt. Unser Lynpak ist in Bedeutung gekommen0,01 TFlops. Durch die Optimierung des Benchmarks für die verfügbaren CPUs würden wir natürlich einen etwas höheren Performance-Wert erhalten, dies hätte jedoch die Ergebnisse nicht wesentlich beeinflusst und die Zeit wäre deutlich höher gewesen. Denken Sie daran, dass Linpack auf einer CPU viel länger läuft. Die National Tsing Hua University zeigte das beste Ergebnis - 43 TFlops. Nach ein oder zwei Tagen fragte uns Jack Dongarra (der Schöpfer von Lynpak), der Mitglied des Organisationskomitees des Wettbewerbs ist, gelegentlich und fragte, wie es Lynpak sei. Anscheinend hatte er das Board damals noch nicht mit den Ergebnissen gesehen: Seine WHAAAT-Reaktion war jede Stunde wert, die wir mit der HPL verbracht hatten.



Mystery-Anwendung


Nachdem ich die Benchmarks bestanden hatte, schloss ich mich einem Teil des Teams an, der die Mystery Application durchführen sollte. Niemand wusste im Voraus, was die Aufgabe sein würde, also bereiteten sie sich auf das Schlimmste vor - sie installierten im Voraus alles, was von einem Flash-Laufwerk zu einem Cluster nützlich sein könnte. In der Regel besteht die Hauptschwierigkeit der Aufgaben in diesem Abschnitt darin, sie zu sammeln. Diesmal war alles etwas anders. Die Anwendung wurde fast das erste Mal ohne Probleme gesammelt. Die Probleme begannen, als bei den meisten der präsentierten Datensätze ein Fehler bei der Adresse auftrat, obwohl es sich um eine Fortran-Anwendung handelte. Nach der Ergebnisliste zu urteilen, bereitete uns nicht nur diese Aufgabe Probleme.


Geheimwaffe: CPU


Nun, die letzte Aufgabe, an der ich teilgenommen habe, war für den nächsten Wettkampftag geplant. Im Gegensatz zur Mystery-Anwendung haben wir zuvor das Paket gesehen, mit dem wir arbeiten mussten - es war cfl3d. Als wir herausfanden, dass es sich hierbei um ein NASA-Produkt handelt, waren aus irgendeinem Grund alle begeistert. Sie dachten, dass wirklich alles mit dem Build und der Optimierung gut laufen würde. Als wir das Paket zu Hause getestet haben, gab es keine Probleme mit der Montage, aber die Anwendungsbeispiele waren sehr interessant. Die meisten Beispiele hatten Abhängigkeiten bei der Installation zusätzlicher Tools. Bei einem Versuch, eines dieser Tools - Tool XX zu googeln, fanden wir den Artikel aus dem Jahr 1995, in dem das Tool XX als veraltet eingestuft wurde und YY verwendet wurde. Eine Produkt-Site aus derselben Zeit - die Dokumentation schickte den Benutzer häufig zu den Seiten der Site. Nur die Site in den Frames und über die Hauptseite hinaus funktioniert jedoch nicht. Die Relevanz der Beispiele ließ zu wünschen übrig.


Wenn es sehr einfach ist, bestand die Aufgabe darin, ein mehrstufiges Gitter aufzuteilen, während die angegebene Genauigkeit beibehalten wurde. Natürlich war die Hauptkennzahl die Zeit. Irgendwie passierte es, dass wir an diesem Tag bereits sehr entspannt waren und einfach das machten, was wir hätten sein sollen. Die Aufgabe war für die CPU, und genau das hatten wir viel. Die Eingabeaufgabendateien hatten ein sehr spezifisches Aussehen und oft eine große Größe - bis zu Hunderte von Zeilen. Ein Skript wurde von einem Mitglied unseres Teams geschrieben, das den Prozess der Bildung der Eingabedatei automatisierte, was den Prozess möglicherweise Hunderte Male beschleunigte. Am Ende waren alle Datensätze erfolgreich fertiggestellt und optimiert, es war sogar Zeit, das Paket mit einigen interessanten Optionen neu zu erstellen, aber wir haben nicht viel Beschleunigung bekommen. Wir haben diese Aufgabe besser als andere erledigt.



Die Tabelle mit den Konfigurationen der Computersysteme sowie das Hauptfoto, das von der Website http://www.hpcwire.com/ aufgenommen wurde .