Von 0,01 TFlops HPL bis ASC'18 Application Innovation

Hallo Habr! Wir setzen eine Reihe von Artikeln über die Teilnahme eines Teams der St. Petersburg State University (wir nennen uns EnterTildeDot) an den weltweit größten Studenten-Supercomputer-Wettbewerben fort.



In diesem Artikel betrachten wir den Weg zu ASC'18 am Beispiel eines Teammitglieds, wobei wir der Visitenkarte von Wettbewerben und modernen Supercomputern im Allgemeinen - Linpack - besondere Aufmerksamkeit widmen. Schauen wir uns das Geheimnis an, um eine Rekord- und Anti-Rekord-Leistung eines Computersystems zu erzielen.


Eine kurze Tour durch Supercomputer-Wettbewerbe


Allgemeine Informationen darüber, welche Art von Wettbewerb diese sind, finden Sie in unseren vorherigen Artikeln , einschließlich des langen Beitrags über den diesjährigen Wettbewerb. Der Vollständigkeit halber geben wir hier jedoch noch einige Informationen über den gesamten Wettbewerb.


Die Asian Supercomputer Challenge ist eines der drei wichtigsten Hochleistungs-Computing-Team-Events, an denen jährlich immer mehr Studententeams aus der ganzen Welt teilnehmen. ASC geht wie andere ähnliche Wettbewerbe von einer Qualifikations- und Endrunde mit folgenden Bestimmungen aus:


  • Hauptaktivität: Lösung von HPC-Problemen;
  • Team: 5 Schüler + Trainer;
  • Qualifikationsphase: eine Abwesenheitsbeschreibung des Vorschlags mit einer Beschreibung der Lösung der vorgestellten Probleme, auf deren Grundlage eine Liste von 20 Finalisten erstellt wird.
  • Die letzte Phase: Vollzeitwettbewerb für 20 Teams mit einer Dauer von ca. 5 Wettkampftagen, einschließlich der vollständigen Montage und Konfiguration des Computerclusters, Problemlösung und Präsentation. Der Cluster wird auf der Grundlage von Leistungsbeschränkungen von 3 kW zusammengebaut, entweder aus dem von den Organisatoren bereitgestellten Eisen oder aus seinem eigenen. Der Cluster hat keinen Internetzugang. Die Aufgaben stimmen teilweise mit den Aufgaben der Qualifikationsphase überein, aber es gibt auch eine unbekannte Aufgabe - Mystery Application.

Nun, jetzt in Ordnung mit Rückzügen zum Bildungsprogramm. Im Gegensatz zu anderen Teammitgliedern, die bereits das Finale von ASC'17 erreicht haben, bin ich erst in diesem Jahr der Wettbewerbsbewegung beigetreten. Ich bin im September dem Team beigetreten. Die Aufgaben für die Qualifikationsphase werden erst im Januar gesendet. Ich hatte also genügend Zeit, um die Grundkonzepte des Wettbewerbs sowie die einzige bekannte Aufgabe - HPL & HPCG - zu studieren. Eine Aufgabe in der einen oder anderen Form tritt fast jedes Jahr auf. Es ist jedoch nicht immer im Voraus bekannt, welche Ausrüstung die Aufgabe ausführen muss (manchmal bieten die Organisatoren Fernzugriff auf ihre eigenen Ressourcen).


HPL


HPL (High Performance Computing Linpack Benchmark) ist ein Test der Leistung eines Computersystems, auf dessen Grundlage eine moderne Liste der weltweit besten Supercomputer erstellt wird. Die Essenz des Tests besteht darin, dichte Systeme linearer algebraischer Gleichungen zu lösen. Mit dem Erscheinen dieses Benchmarks wurde eine Metrik eingeführt, mit der Sie Supercomputer bewerten und gleichzeitig der HPC-Community einen „Bärenservice“ bieten können. Wenn Sie sich die Liste der besten Supercomputer ansehen, können Sie verstehen, dass das Geheimnis von Lynpak ziemlich schnell gelöst wurde - nehmen Sie so viele Grafikbeschleuniger wie möglich und werden Sie ganz oben sein. Natürlich gibt es Ausnahmen, aber es sind Supercomputer mit Grafikbeschleunigern, die die Spitzenplätze einnehmen. Was ist der "Bärendienst"? Tatsache ist, dass Lynpak nicht nur die Leistung misst, sondern auch nirgendwo anders verwendet wird und nichts mit echten Computeraufgaben zu tun hat. Infolgedessen ging das Supercomputer-Rennen dazu über, die höchste Linpak-Effizienz und nicht die tatsächliche Arbeitsbelastung zu erzielen, wie das Lösen typischer USE-Aufgaben, anstatt den Lehrplan der Schule zu beherrschen.


HPL-Entwickler haben auch ein weiteres Paket erstellt - HPCG, auf dessen Grundlage auch die Bewertung von Supercomputern gebildet wird. Es ist allgemein anerkannt, dass dieser Benchmark näher an realen Aufgaben liegt als HPL, und in gewisser Weise spiegelt die signifikante Diskrepanz zwischen den Positionen des Supercomputers in diesen beiden Listen die reale Situation wider. Die jüngsten Bewertungen (Juni 2018) waren jedoch eine angenehme Ausnahme, und schließlich stimmten die ersten Positionen der Listen überein.


Und jetzt zum echten HPL


Wir kehren zu praktischeren Momenten der Geschichte und des Wettbewerbs zurück. Linkpak ist Open Source und steht auf der offiziellen Website zum Download zur Verfügung. Es gibt jedoch kaum einen Supercomputer auf der Welt, dessen Leistung anhand dieser speziellen Version des Benchmarks gemessen wurde. Die Hersteller von Beschleunigern veröffentlichen ihre eigene Version von HPL, die für bestimmte Geräte optimiert ist, sodass Sie erhebliche Leistungssteigerungen erzielen können. Natürlich müssen benutzerdefinierte Versionen von HPL bestimmte Kriterien erfüllen und spezielle Tests erfolgreich bestehen.


Jeder Anbieter hat für jeden Beschleuniger eine eigene Version von HPL. Im Gegensatz zum ursprünglichen Benchmark ist hier jedoch keine Open-Source-Version zu erwarten. Nvidia veröffentlicht HPL-Versionen, die für jede der Karten optimiert sind, während der Code nicht mehr in Quellform, sondern in Binärdateien geliefert wird. Darüber hinaus gibt es nur zwei Möglichkeiten, auf sie zuzugreifen:


  • Sie haben einen Supercomputer mit Nvidia-Karten, der die Spitze erreichen kann - Nvidia wird Sie alleine finden. Leider erhalten Sie höchstwahrscheinlich keine Binärdateien, da keine Möglichkeit besteht, an der Optimierung der HPL-Parameter teilzunehmen. Auf die eine oder andere Weise erhalten Sie einen angemessenen Leistungswert, der auf dem optimierten Benchmark erhalten wird.
  • Sie nehmen an einem von drei studentischen Supercomputer-Wettbewerben teil. Aber wir werden auf diesen Teil zurückkommen.

Was ist das Wesentliche der Aufgabe, insbesondere wenn intelligente Onkel großer Unternehmen den Benchmark für Ihre Geräte bereits optimiert haben?
Beschreiben Sie im Falle der Qualifikationsphase des Wettbewerbs die möglichen Maßnahmen zur Steigerung der Systemleistung. In diesem Fall ist es nicht erforderlich, absolute Leistungszahlen zu verfolgen, da einige Teams mit modernen Beschleunigern auf einen großen und noblen Cluster von 226 Knoten zugreifen können, während andere nur auf die Universitätscomputernummer 226 zugreifen können, die wir als Cluster bezeichnen.



Im Endstadium ist es bereits sinnvoll, die absoluten Leistungswerte zu vergleichen. Um nicht zu sagen, dass hier alle gleichberechtigt sind, aber zumindest die zulässige maximale Leistung des Systems eingeschränkt ist.


Das Ergebnis der Benchmark-Ausführung hängt hauptsächlich von zwei Komponenten ab: der Cluster-Konfiguration und der direkten Einstellung der Parameter des Benchmarks. Es wäre auch erwähnenswert, welchen Einfluss die Auswahl der Compiler und Bibliotheken für das Matrix- und Vektor-Computing hat, aber hier ist alles ziemlich langweilig, jeder verwendet einen Compiler von Intel + MKL. Und bei Binärdateien müssen Sie überhaupt keine Auswahl treffen, da diese bereits zusammengestellt sind. Das Ergebnis von HPL ist ein numerischer Wert, der angibt, wie viele Gleitkommaoperationen pro Sekunde dieses Computersystem ausführt. Die Hauptmaßeinheit ist FLOPS (FLoating-Point Operations Per Second) mit entsprechenden Präfixen. Im Falle der letzten Phase des Wettbewerbs handelt es sich fast immer um Tera-Systeme.


Ergebnisoptimierung


Das Festlegen der Benchmark-Parameter besteht in einer aussagekräftigen Auswahl der Eingabedaten der von Lynpak berechneten Aufgabe (HPL.dat-Datei). In diesem Fall hat die Dimension dieses Problems den größten Einfluss - die Größe der Matrix, die Größe der Blöcke, in die die Matrix unterteilt ist, in welcher Beziehung die Blöcke verteilt werden usw. ... Insgesamt gibt es mehrere zehn Parameter, Tausende möglicher Werte. Bruteforce ist nicht die beste Wahl, insbesondere wenn der Test auf relativ kleinen Systemen je nach Konfiguration von einigen Minuten bis zu einigen Stunden durchgeführt wird (für die GPU ist der Test viel schneller).


Ich hatte genug Zeit, um zu untersuchen, wie die bereits in anderen Quellen beschriebenen Muster zur Optimierung der Benchmark-Ergebnisse beitragen, und um neue zu identifizieren. Ich habe sehr oft damit begonnen, Tests durchzuführen, viele Google-Tags gestartet und versucht, auf Systeme mit einer zuvor nicht erprobten Konfiguration zuzugreifen, um auch den Benchmark für sie auszuführen. Infolgedessen wurden bereits vor Beginn der Qualifikationsphase eine Reihe von Systemen getestet, sowohl CPU als auch GPU, einschließlich sogar des völlig ungeeigneten Nvidia Quadro P5000. Zu Beginn der Qualifikationsphase hatten wir mit dem P100 und P6000 Zugriff auf mehrere Knoten, was uns bei der Vorbereitung sehr geholfen hat. Die Konfiguration dieses Systems ähnelte in vielerlei Hinsicht derjenigen, die wir im Rahmen der letzten Phase des Wettbewerbs zusammenbauen wollten, und wir erhielten schließlich Zugriff auf Einstellungen auf niedriger Ebene, einschließlich der Änderung der Frequenz.


Bei der Konfiguration hat das Vorhandensein und die Anzahl der Beschleuniger den größten Einfluss. Beim Testen eines Systems mit einer GPU ist die optimale Option, wenn der Hauptcomputerteil der Aufgabe an die GPU-Komponente delegiert wird. Die CPU-Komponente wird auch mit Zusatzaufgaben geladen, trägt jedoch nicht zur Systemleistung bei. Gleichzeitig muss jedoch die Spitzenleistung der CPU bei der Spitzenleistung des Gesamtsystems berücksichtigt werden, was hinsichtlich des Verhältnisses von maximaler Leistung zu Spitzenleistung (theoretisch) äußerst nachteilig aussehen kann. Wenn HPL auf einer GPU ausgeführt wird, ist ein System mit 2 GPU-Beschleunigern und zwei Prozessoren einem System mit 2 GPUs und 20 CPUs zumindest nicht unterlegen.


Nachdem ich die Vorschläge für eine mögliche Optimierung der HPL-Ergebnisse beschrieben hatte, beendete ich meinen Teil des Vorschlags für die Qualifikationsphase und als ich in das Finale des Wettbewerbs eintrat, begann eine neue Phase des Wettbewerbs - die Suche nach Sponsoren. Einerseits brauchten wir einen Sponsor, der die Kosten für den Flug des Teams nach China übernimmt, und andererseits einen Sponsor, der sich freundlicherweise bereit erklärt, dem Team Grafikbeschleuniger zur Verfügung zu stellen. Mit dem ersten hatten wir letztendlich Glück, eine Universität stellte einen Teil des Geldes zur Verfügung und Devexperts half dabei, die Tickets vollständig zu decken. Mit den Sponsoren, mit denen wir Karten ausleihen wollten, hatten wir weniger Glück, und jetzt fliegen wir wieder mit der Grundkonfiguration des Clusters ins Finale, ohne die Chance auf Wettbewerbsfähigkeit bei HPL zu haben. Nun, nichts, drück das Maximum aus dem heraus, was sie geben, dachten wir.


Final ASC'18


Und hier sind wir in China, in der für chinesische Verhältnisse winzigen Stadt - Nanchang im Finale. Wir bauen den Cluster für zwei Tage zusammen und dann die Aufgaben.



In diesem Jahr wurden alle Teams mit 4 Nvidia V100-Karten ausgestattet. Dies verschaffte uns keine Vorteile gegenüber anderen Teams, ermöglichte jedoch den Start von HPL nicht auf der CPU. Knoten geben anfangs jedem 10, aber die zusätzlichen (denken Sie an die 3-kW-Grenze) müssen zurückgegeben werden, bevor die Phase der Hauptwettbewerbsaufgaben beginnt. Hier gibt es einen Trick: Reduzieren Sie die Frequenz der CPU und der GPU, ihre Leistung nimmt ab. Sie können jedoch solche Werte für die Frequenz auswählen, mit der wir mehr Leistung pro verbrauchter Energieeinheit erzielen. Durch Verringern der Frequenz erhalten wir die Möglichkeit, noch mehr Beschleuniger hinzuzufügen, was sich letztendlich positiv auf die Leistung auswirkt. Leider wäre dieser Trick für uns viel nützlicher, wenn wir wie andere Teilnehmer mit einem Koffer Beschleuniger zum Wettbewerb kommen würden. Trotzdem konnten wir es uns leisten, die maximale Anzahl an CPUs zu belassen. Da nicht alle Aufgaben des Wettbewerbs eine GPU erfordern, bestand der Verdacht, dass dies in irgendeiner Weise in unsere Hände spielen könnte.
Die häufigste Clusterkonfiguration im Finale des Wettbewerbs ist also ein Minimum an Knoten, ein Maximum an Karten.



Letztes Linkpack und ein bisschen über Rekorde


Die Aufgaben beim Wettbewerb waren an bestimmte Wettbewerbstage gebunden, und HPL war natürlich der erste von ihnen, nachdem der Cluster zusammengestellt worden war. Die Frist für die Einreichung der HPL-Ergebnisse ist das Mittagessen des dritten Wettbewerbstages. Darüber hinaus wird der Zugriff auf die verbleibenden Aufgaben dieses Wettbewerbstages unmittelbar nach Abschluss von Linpak geöffnet. Lynpak beginnt jedoch in den frühen Tagen zu fahren. Erstens, um sicherzustellen, dass der Cluster korrekt zusammengesetzt ist, und zweitens, ist das Einrichten von Linpak nicht schnell, und da keine zusätzlichen Eingaben erforderlich sind, warum nicht.


Wir haben unseren Cluster ziemlich schnell zusammengestellt und Lynpak aufgenommen. Für unsere Konfiguration haben wir ziemlich angemessene Werte erhalten - in der Größenordnung von 20 TFlops, und alles wäre in Ordnung, aber nachdem das Ergebnis angezeigt wurde, gab es eine Zeile mit einem Fehler. Früher habe ich solche Fehler nur erhalten, wenn ich absichtlich falsche Blockgrößen angegeben habe, in die die Taskmatrix unterteilt ist. Eine sehr unangenehme Überraschung erwartete uns hier. Vorhin habe ich Ihnen gesagt, dass wir 4 V100-Karten erhalten haben, also ... wir haben keine HPL-Binärdateien für sie erhalten, und niemand konnte uns dabei helfen. Es ist einige Monate her, aber für mich ist es immer noch ein Rätsel, was bei diesem Finale mit unserem Linpak passiert ist. Wir haben die Versionen von Compilern und anderen Bibliotheken geändert, um den Fehler zu beheben. Wir haben wiederholt überprüft, ob wir die Beschleuniger korrekt installiert haben (seit wir dies zum ersten Mal getan haben), aber wir konnten den Fehler immer noch nicht beheben.



In der Nacht vor der Übergabe von Linpak haben wir die Kriterien für die Bewertung von Aufgaben erneut sorgfältig geprüft. Daher bestand die Formel für Linpak aus zwei Komponenten - einem bestimmten Wert, der vom Ergebnis des Teams, das Linpak gewonnen hat, und dem Koeffizienten für den erfolgreichen Abschluss der Aufgabe abhängt. Es stellte sich heraus, dass dieser Koeffizient so groß ist, dass es völlig nachteilig ist, einen angemessenen Lynpak-Wert zu übergeben, jedoch mit einem unverständlichen Fehler, verglichen mit dem Übergeben eines Werts, jedoch ohne Fehler. Nachdem wir alles sorgfältig überlegt hatten, da viel Zeit für die Suche nach einer Lösung für den Fehler aufgewendet wurde und das Abrufen von Datensätzen aus den folgenden Aufgaben vollständig vom Zeitpunkt der Fertigstellung von Linpak abhängt, haben wir uns entschlossen, diese Aufgabe taktisch zusammenzuführen. So wurde in der Geschichte der Supercomputer-Wettbewerbe ein absoluter „Rekord“ unter den korrekten Werten aufgestellt. Unser Lynpak platzte mit einem Wert von 0,01 TFlops. Wenn wir den Benchmark für vorhandene CPUs optimieren, erhalten wir natürlich einen etwas höheren Leistungswert. Dies hätte die Punkte jedoch nicht wesentlich beeinflusst, und die Zeit wäre erheblich höher gewesen. Denken Sie daran, dass Lynpak viel länger an der CPU gearbeitet hat. Das beste Ergebnis zeigte die National Tsing Hua University - 43 TFlops. Nach ein oder zwei Tagen fragte uns Jack Dongarra (der Schöpfer von Lynpac), ein Mitglied des Organisationskomitees des Wettbewerbs, beiläufig, wie Lynpak vorgeht. Anscheinend hatte er zu diesem Zeitpunkt die Ergebnisliste noch nicht gesehen: Seine WHAAAT-Reaktion war jede Stunde wert, die wir für HPL aufgewendet haben.



Mystery-Anwendung


Nachdem ich gemäß dem im Voraus erstellten Plan Benchmarks übergeben hatte, schloss ich mich dem Teil des Teams an, der sich mit der Mystery-Anwendung befassen sollte. Niemand wusste im Voraus, was diese Aufgabe sein würde, also bereiteten sie sich auf das Schlimmste vor - sie hatten zuvor alles installiert, was von einem Flash-Laufwerk in einem Cluster nützlich sein konnte. In der Regel besteht die Hauptschwierigkeit der Aufgaben in diesem Abschnitt darin, sie zu sammeln. Diesmal stellte sich heraus, dass alles etwas anders war. Die Bewerbung wurde fast zum ersten Mal ohne Probleme gesammelt. Die Probleme begannen, als bei den meisten der präsentierten Datensätze an der Adresse ein Fehler auftrat, obwohl es sich um eine fortran-Anwendung handelte. Dem Ergebnisausschuss nach zu urteilen, hat uns nicht nur diese Aufgabe Probleme bereitet.


Geheimwaffe: CPU


Nun, die letzte Aufgabe, an der ich teilgenommen habe, war für den nächsten Wettkampftag geplant. Im Gegensatz zu Mystery Application haben wir bereits ein Paket gesehen, mit dem wir arbeiten mussten - es war cfl3d. Als wir herausfanden, dass dies ein NASA-Produkt ist, waren alle aus irgendeinem Grund begeistert und dachten, dass dort sowohl bei der Montage als auch bei der Optimierung alles in Ordnung sein würde. Als wir das Paket zu Hause getestet haben, gab es keine Probleme mit der Montage, aber die Anwendungsfälle waren sehr interessant. Die meisten Beispiele hatten Abhängigkeiten von der Installation zusätzlicher Tools, und es kam vor, dass wir bei dem Versuch, eines dieser Tools - Tool XX - zu googeln, einen Artikel aus dem Jahr 1995 fanden, in dem gesagt wurde, dass Tool XX jetzt veraltet ist und YY verwendet. Die Website des Produkts stammt aus derselben Zeit - die Dokumentation hat den Benutzer häufig zu den Seiten der Website geschickt, aber nur die Website in Frames und über die Hauptseite hinaus funktioniert nicht. Die Relevanz der Beispiele ließ zu wünschen übrig.


Wenn es ganz einfach ist, bestand das Wesentliche der Aufgabe darin, ein mehrstufiges Raster unter Beibehaltung einer bestimmten Genauigkeit aufzuteilen. Natürlich war die Hauptmetrik hier die Zeit. Irgendwie kam es vor, dass wir an diesem Tag so entspannt wie möglich waren und einfach das taten, was wir mussten. Die Aufgabe war für die CPU, und genau das hatten wir viel. Die Eingabedateien der Aufgabe hatten eine sehr spezifische Form und oft eine große Größe - bis zu Hunderten von Zeilen. Ein Mitglied unseres Teams hat ein Skript geschrieben, das den Prozess der Generierung der Eingabedatei automatisiert und den Prozess wahrscheinlich hunderte Male beschleunigt hat. Letztendlich wurden alle Datensätze erfolgreich abgeschlossen und optimiert. Es gab sogar Zeit zu versuchen, das Paket mit einigen interessanten Optionen neu zu erstellen, aber wir haben nicht viel Beschleunigung erhalten. Wir haben diese Aufgabe besser als andere erledigt, nachdem wir einen Sonderpreis für Anwendungsinnovation sowie den 11. Platz im Team-Event erhalten haben (von 20 im Finale, von 300+ unter allen Teilnehmern des Wettbewerbs).



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

Source: https://habr.com/ru/post/de419847/


All Articles