Heim >Technologie-Peripheriegeräte >KI >Analyse der KI-Trainingsbeschleunigungsprinzipien und Austausch technischer Praxis

Analyse der KI-Trainingsbeschleunigungsprinzipien und Austausch technischer Praxis

WBOY
WBOYnach vorne
2023-04-12 18:55:101537Durchsuche

Dieser Austausch analysiert systematisch die wichtigsten Leistungsengpässe im KI-Modell-Trainingsprozess sowie die aktuellen wichtigsten Beschleunigungslösungen und technischen Prinzipien für diese Engpässe und stellt einige praktische Ergebnisse der Baidu Intelligent Cloud in dieser Hinsicht vor.

Der heutige Austausch besteht hauptsächlich aus drei Teilen:

Zunächst werden wir vorstellen, warum wir das KI-Training beschleunigen müssen, das heißt, was der allgemeine Hintergrund und Ausgangspunkt ist;

# 🎜🎜#Im zweiten Teil analysieren wir systematisch die Leistungsengpässe, die während des eigentlichen Trainingsprozesses auftreten können, und stellen dann die aktuellen wichtigsten Beschleunigungslösungen vor, um diese Probleme anzugehen; #Einführung in den dritten Teil der KI-Trainingsbeschleunigungssuite AIAK-Training der Baidu-Baige-Plattform hat praktische Auswirkungen auf die Beschleunigung einiger Modelltrainings.

1. Warum wird das KI-Training beschleunigt?

In einem KI-System umfasst ein Modell von der Produktion bis zur Anwendung im Allgemeinen zwei Phasen: Offline-Training und Inferenzbereitstellung.

Die Offline-Trainingsphase ist der Prozess der Generierung eines Modells. Benutzer müssen die Datensätze und neuronalen Netzwerkalgorithmen vorbereiten, die zum Trainieren des Modells gemäß ihren eigenen Aufgabenszenarien erforderlich sind.

Der Algorithmus kann als hochkomplexe nichtkonvexe mathematische Funktion verstanden werden, die viele Variablen und Parameter enthält. Der Prozess des Modelltrainings besteht tatsächlich darin, die Parameter im neuronalen Netzwerkmodell zu lernen.

Nachdem das Modelltraining begonnen hat, werden die Daten gelesen, dann zur Vorwärtsberechnung an das Modell gesendet und der Fehler mit dem tatsächlichen Wert berechnet. Führen Sie dann die umgekehrte Berechnung durch, um den Parametergradienten zu erhalten, und aktualisieren Sie schließlich die Parameter. Das Training umfasst mehrere Runden von Dateniterationen.

Nach Abschluss des Trainings speichern wir das trainierte Modell, stellen es dann online bereit, akzeptieren die tatsächlichen Eingaben des Benutzers und schließen die Schlussfolgerung durch Vorwärtsberechnung ab.

Unabhängig davon, ob es sich um Training oder Schlussfolgerung handelt, liegt der Kern in der Datenberechnung. Um die Recheneffizienz zu beschleunigen, werden Training und Inferenz im Allgemeinen über heterogene Beschleunigungschips wie GPUs durchgeführt.

Darüber hinaus, gemessen an der Entwicklungsgeschichte von Deep-Learning-Modellen, um weiterhin die Obergrenze der Genauigkeit des Modells zu durchbrechen, Die Anzahl der Modellparameter nimmt tatsächlich rapide zu. Eine größere Anzahl von Parametern führt jedoch zu einem höheren Rechenaufwand. Analyse der KI-Trainingsbeschleunigungsprinzipien und Austausch technischer Praxis

Die linke Seite der Abbildung unten stammt aus einer öffentlichen Veröffentlichung. Aus dieser Zusammenfassung sehen wir, dass sich der Berechnungsbetrag des Modells vor 2010 in etwa 20 Monaten verdoppelt hat. Von 2010 bis 2015 verdoppelten sich herkömmliche Modellrechnungen alle 5-6 Monate. Nach 2015 zeichnete sich der Trend zum Training großer Modelle ab, und der Rechenaufwand stieg um das Zehn- bis Hundertfache.

Modelltraining stellt immer höhere Anforderungen an Rechenleistung und Infrastruktur. Das Training erfordert mehr Rechenleistung und dauert länger, was auch zu höheren Ressourcenkosten führt. Hier listen wir die in einigen Veröffentlichungen oder Studien veröffentlichten Kostendaten auf, die darauf hinweisen, dass die Kosten für das Modelltraining sehr hoch sind.

Daher ist es tatsächlich entscheidend, wie man das Modelltraining stabil durchführt und wie man weiterhin Kosten senkt und die Effizienz steigert.

Vor diesem Hintergrund startete Baidu Intelligent Cloud die heterogene Computing-Plattform Baidu Baige·AI mit dem Ziel, Software und Hardware für KI-Szenarien bereitzustellen. In-One-Lösung. Durch den vierschichtigen Technologie-Stack aus KI-Computing, KI-Speicher, KI-Beschleunigung und KI-Containern erfüllt es die Anforderungen von Geschäftsszenarien der oberen Ebene. Analyse der KI-Trainingsbeschleunigungsprinzipien und Austausch technischer Praxis

Die KI-Rechenschicht bietet leistungsstarke GPU-, Kunlun- und andere heterogene Chipressourcen, leistungsstarkes RDMA- oder IB-Netzwerk und den selbst entwickelten Super-KI-Computer X-MAN. usw.;

    KI-Speicherschicht, einschließlich Objektspeicher-BOS zur Erfüllung der Anforderungen des Data-Lake-Speichers und leistungsstarkes paralleles Dateisystem PFS speziell für KI; Beschleunigungsschicht, einschließlich Data Lake Storage Acceleration Suite RapidFS, AI Training Acceleration Suite AIAK-Training, AI Inference Acceleration Suite AIAK-Inference; von Cloud Native, um den Anforderungen einer flexiblen Planung von GPU-, KI-Jobs usw. gerecht zu werden. Der Inhalt der cloudnativen KI wurde speziell in unserem letzten technischen offenen Kurs geteilt.
  • Wenn wir an Leistungsbeschleunigung denken, fällt uns vielleicht als Erstes die Verwendung besserer Hardware ein.
  • Dies führt zu einer gewissen Leistungsverbesserung, nutzt jedoch in den meisten Fällen möglicherweise nicht die gesamte Rechenleistung der Hardware aus. Der Hauptgrund dafür ist, dass die Ausführungseffizienz des Trainingscodes nicht optimal angepasst wurde oder besser. Ausgezeichneter Zustand.
  • Um mit mehr Anforderungen kompatibel zu sein, bietet das Framework im Allgemeinen einige allgemeinere Optimierungsfunktionen, wobei mehr Wert auf Benutzerfreundlichkeit, ökologische Konstruktion usw. gelegt wird.
  • Zweitens, wenn Algorithmeningenieure Algorithmen entwerfen Die Kernenergie besteht darin, die Genauigkeit des Modells zu verbessern, der Leistungseffizienz nicht genügend Aufmerksamkeit zu schenken und in einigen Fällen einige allgemeine Optimierungsmöglichkeiten des Frameworks nicht zu nutzen.

Wenn wir uns daher für die Verwendung eines bestimmten Modellalgorithmus entscheiden, müssen wir ihn bewusst optimieren, um eine bessere Ressourceneffizienz und Trainingseffizienz zu erreichen. Allerdings gibt es hier auch viele technische Herausforderungen:

  • Es gibt viele Faktoren, die die Leistung beeinflussen, die entsprechend den Betriebseigenschaften verschiedener Modelle analysiert werden müssen.
  • Leistungsoptimierung erfordert das Verständnis der Prinzipien B. wenn wir heterogenes Chip-Computing optimieren, ist professionelle heterogene Forschungs- und Entwicklungserfahrung erforderlich, und die technische Schwelle ist relativ hoch. In einigen Fällen müssen wir bei verteilten Schulungen möglicherweise Cluster-Hardware und Netzwerktopologie kombinieren Optimierung der Skalierbarkeitsprobleme in herkömmlichen Trainingsszenarien.
  • Diese Herausforderungen haben die Optimierung der Modelltrainingsleistung stark beeinflusst. Aus diesem Grund haben wir die AIAK-Training-Beschleunigungssuite auf den Markt gebracht, in der Hoffnung, die Optimierungskosten durch abstrakte und benutzerfreundliche Schnittstellen zu senken und kollaborative Software- und Hardware-Optimierungsmethoden vollständig zu nutzen . Beschleunigen Sie die Modellschulungsleistung Ihrer Kunden in der Baidu Smart Cloud.

Analyse der KI-Trainingsbeschleunigungsprinzipien und Austausch technischer Praxis2. Trainingsleistungs-Overhead-Analyse und Beschleunigungslösung

Bevor wir die spezifischen Auswirkungen des AIAK-Trainings vorstellen, stellen wir zunächst die wichtigsten technischen Ideen und Lösungsprinzipien unter dem Thema Trainingsbeschleunigung vor.

Da die Optimierung des Modelltrainings selbst eine umfassende Arbeit von Software und Hardware ist und der Technologie-Stack relativ komplex ist, können die heutigen Inhalte definitiv nicht alle Details abdecken. Wir werden unser Bestes geben, um die wichtigsten Ideen abzudecken.

Werfen wir zunächst einen Blick auf die aktuelle Modelltrainingslösung. In der vergangenen Entwicklungsphase gab es zwei wichtige Änderungen bei Modelltrainingslösungen. Zum einen der Wechsel vom Einzelkartentraining zum verteilten Training und zum anderen der Wechsel vom datenparallelen Training zum mehrdimensionalen hybriden Paralleltraining. Die wichtigsten treibenden Punkte hierbei sind die Menge an Trainingsdaten und die Menge an Modellparametern.

Einzelkarten-Trainingsmethode: Bei tatsächlicher Verwendung dieses Modus sind die Anzahl der Modellparameter und das Datenvolumen im Allgemeinen relativ gering und die Trainingszeit einer einzelnen Karte ist akzeptabel. Die Modellparameterskala muss sicherstellen, dass der Videospeicher einer einzelnen Karte während des Trainingsprozesses die obere Speichergrenze erreichen kann. Gemäß der Konfiguration der Videospeicherkapazität der neuen GPU-Karte beträgt die maximale Größe, die im Allgemeinen platziert werden kann, 1 Milliarde Parameter.
  • Wenn die Größe des Datensatzes relativ groß ist, da der gesamte Datensatz mehrmals durchlaufen werden muss Während des Trainingsprozesses wird das Training mit einer einzelnen Karte lange dauern. Zu diesem Zeitpunkt kann es von einer einzelnen Karte auf mehrere Karten erweitert werden, um das Training durch einen verteilten Ansatz zu beschleunigen.
  • Die hier am weitesten verbreitete Methode ist die Datenparallelität. Beim Datenparallelitätsschema wird der Datensatz gleichmäßig in mehrere Teile unterteilt. Anschließend wird das vollständige Modell auf jeder Karte gespeichert und die unterteilten Teildatensätze werden unabhängig und parallel verarbeitet.

Wenn die Anzahl der Modellparameter beispielsweise groß genug ist, erreicht die Anzahl der Parameter Dutzende oder Hunderte von Milliarden, und eine einzelne Karte kann nicht das gesamte Modell abdecken. Auch hier werden Modellparallelität oder hybride Parallellösungen verwendet Es treten sowohl Datenparallelität als auch Modellparallelität auf.

Modellparallelität teilt das Modell in verschiedene Karten auf und platziert einen Teil des Modells auf jeder Karte. Dabei wird der Tensor nach den verschiedenen Aufteilungsmethoden unterteilt, z. B. Aufteilung zwischen Schichten und Parallelität Pipeline-Parallelansätze.

Da im allgemeinen Modelltraining häufiger Datenparallelität verwendet wird, konzentrieren wir uns auf Datenparallelität als Beispiel, um die Ideen der Leistungsoptimierung vorzustellen.

Analyse der KI-Trainingsbeschleunigungsprinzipien und Austausch technischer PraxisWir verstehen zunächst den Leistungsaufwand im Einzelkarten-Trainingsprozess aus der Gesamtperspektive von Software und Hardware.

Die linke Seite des Bildes unten zeigt unseren Schulungsprozess aus Software-Perspektive. Der Prozess des Einzelkartentrainings umfasst hauptsächlich das Lesen von Daten, die Datenvorverarbeitung, die Vorwärtsberechnungsausgabe und die Verlustberechnung, die Rückwärtsberechnung gemäß der Verlustfunktion, um den Gradienten jedes Schichtparameters zu erhalten, und schließlich die Aktualisierung der Modellparameter entsprechend dem Gradienten. Setzen Sie diesen Vorgang fort, bis das Training konvergiert.

Die rechte Seite des Bildes unten ist ein vereinfachtes Knoten-Hardware-Topologiediagramm. An der Spitze steht der Datenspeicher, der lokaler Speicher oder Netzwerkspeicher sein kann. Dann sind da noch die CPU und der Speicher. Es gibt 8 GPU-Karten, die über mehrere PCIe-Switches mit der Nummer 0 bis 7 verbunden sind, und die 8 Karten sind über NVSwitch miteinander verbunden. Unterschiedliche Recheninstanzen haben unterschiedliche Hardwaretopologien.

  • Wenn das Training beginnt, werden zuerst Daten gelesen, was das Lesen von Daten vom Speichermedium in den Speicher umfasst, hauptsächlich Speicher-E/A-Overhead. Je nach Speichermedium ist die Menge der zu lesenden Daten unterschiedlich, und auch der Zeitaufwand für diesen Teil ist unterschiedlich.
  • Der nächste Schritt ist die Datenvorverarbeitung, bei der hauptsächlich einige Datenverbesserungsvorgänge ausgeführt werden B. die Größe des Bildes ändern, Kontrast, Sättigung usw. anpassen. Dieser Teil der Arbeit wird größtenteils auf der CPU erledigt. Nachdem die Datenvorverarbeitung auf der CPU abgeschlossen ist, müssen sie vom Host-Speicher in den GPU-Speicher kopiert werden, was den Speicherkopieraufwand zwischen dem Host und dem Gerät mit sich bringt.
  • Starten Sie dann die Vorwärtsberechnung und umgekehrte Berechnung, Parameteraktualisierung, weitere Vorgänge in diesem Teil werden hauptsächlich von der GPU ausgeführt, und die Hauptzeit wird für die GPU-Berechnung aufgewendet. Dieser Vorgang kann auch mit einigen Vorgängen auf der CPU unterbrochen sein und möglicherweise auch ein Kopieren zwischen dem Host und dem Gerätespeicher erfordern.

Aus Sicht einer einzelnen Karte gibt es daher hauptsächlich Overheads bei E/A, CPU-Vorverarbeitung, Datenkopieren zwischen CPU und GPU, GPU-Berechnung usw.

Analyse der KI-Trainingsbeschleunigungsprinzipien und Austausch technischer Praxis

Dann werfen wir einen Blick auf den Prozess der Datenparallelität.

Die linke Seite der folgenden Abbildung zeigt immer noch den Hauptprozess des Trainings, und die rechte Seite zeigt die Hardware-Topologie eines Trainingsclusters mit 3 Maschinen und 24 Karten. Die 3 Maschinen sind über das Netzwerk miteinander verbunden .

Wir haben im vorherigen Teil auch eingeführt, dass bei der Datenparallelität jedes Gerät die Vorwärts- und Rückwärtsberechnungsprozesse parallel und unabhängig ausführt. Daher tritt bei jedem Trainingsprozess auch der zuvor erwähnte Leistungsaufwand für eine einzelne Karte auf Probleme in der Ausbildung.

Die Datenparallelitätsgarantie entspricht mathematisch dem Einzelkartentraining. Es muss sichergestellt werden, dass die Modellparameter jeder Karte während des Iterationsprozesses konsistent bleiben. Einerseits ist es notwendig, den Initialisierungsstatus der Modellparameter jeder GPU-Karte konsistent zu machen. Dies geschieht normalerweise durch Senden des Parameterstatus auf der ersten Karte an andere Karten vor Beginn des Trainings.

Während des Trainings ist aufgrund der unterschiedlichen Daten, die von jedem Gerät verarbeitet werden, auch der durch Vorwärtsberechnung erhaltene Modellverlustwert unterschiedlich, sodass der Gradient für jedes Gerät auch umgekehrt berechnet werden muss wird gemittelt und die Modellparameter werden mit dem gemittelten Gradientenwert aktualisiert, um sicherzustellen, dass die Modellparameter jeder Karte während des Iterationsprozesses konsistent bleiben.

Die Gradientenmittelung umfasst den Prozess der Kommunikation, einschließlich der Kommunikation zwischen Karten innerhalb von Knoten sowie des Netzwerkkommunikations-Overheads über Knoten hinweg. Die Kommunikation umfasst hier synchrone Kommunikation und asynchrone Kommunikation. Um jedoch die Konvergenz des Modelltrainings sicherzustellen, wird im Allgemeinen die synchrone Kommunikationslösung verwendet, und nachfolgende Optimierungsarbeiten werden auch auf der Grundlage synchroner Kommunikation durchgeführt.

Aus dem oben Gesagten ist ersichtlich, dass die Datenparallelität im Vergleich zum Einzelkartentraining hauptsächlich zusätzlichen Kommunikationsaufwand verursacht.

Analyse der KI-Trainingsbeschleunigungsprinzipien und Austausch technischer Praxis

Durch die obige Analyse wissen wir, dass die Beschleunigung des KI-Trainings nicht nur ein bestimmter Aspekt der Arbeit ist, sondern auch das Laden von Daten, die Modellberechnung und die Verteilung erfordert Kommunikation und andere Dimensionen werden umfassend betrachtet. Das hier erwähnte Laden von Daten umfasst Daten-E/A, Vorverarbeitung, Speicherkopie und andere Prozesse.

In der spezifischen Optimierungspraxis bedeutet die Beschleunigung des Modelltrainings bei einem zu optimierenden Modell eine kontinuierliche Verbesserung des Gesamtdurchsatzes des Trainings (der Anzahl der Proben, die pro Sekunde trainiert werden können). In diesem Prozess können wir im Allgemeinen zunächst den Trainingsdurchsatz einer einzelnen Karte analysieren. Wenn sich der Trainingsdurchsatz einer einzelnen Karte verbessert, können wir uns dann mit der Erweiterung von einer einzelnen Karte auf mehrere Karten befassen, um zu sehen, wie wir das Trainingsbeschleunigungsverhältnis verbessern können mehrere Karten.

Zuallererst, Single-Card-Trainingsoptimierung, das ultimative Optimierungsziel besteht darin, alle Zeit mit GPU-Computing zu verbringen, und die Beschleunigerauslastung beträgt 100 %. Natürlich ist es in der Praxis schwierig, diesen Zustand vollständig zu erreichen, aber wir können unsere Arbeit an diesem Indikator orientieren oder messen.

Der Schlüssel zur Leistungsoptimierung einer einzelnen Karte besteht aus zwei Teilen:

  • Optimieren Sie zunächst die Datenladeeffizienz. Vom Speichersystem aus können wir leistungsstärkere Speichermedien oder parallele Dateisysteme, die auf diesen Hochgeschwindigkeitsspeichermedien basieren, oder einige Cache-Beschleunigungssysteme verwenden. Wie bereits erwähnt, bietet Baidu Baige auch entsprechende Speichersystemlösungen wie PFS, RapidFS usw. an. Darüber hinaus muss der Datenleseprozess im Framework Dataloader optimiert werden.
  • Die zweite ist die Optimierung der Modellberechnungseffizienz. Die Hauptüberlegung besteht darin, wie die Berechnungsimplementierung optimiert und die Nutzungseffizienz der Berechnungseinheit verbessert werden kann. Dies erfordert möglicherweise eine detaillierte Analyse in Verbindung mit dem Modell.

Erweitern Sie dann von einer einzelnen Karte auf mehrere Karten. Das Ziel besteht darin, ein lineares Beschleunigungsverhältnis zu erreichen. Der Indikator des linearen Beschleunigungsverhältnisses gibt lediglich an, ob die Trainingsleistung doppelt so hoch ist wie die einer einzelnen Karte, wenn das Training von 1 Karte auf 2 Karten erweitert wird.

Der Kern besteht darin, die Effizienz der verteilten Kommunikation zu optimieren. Einerseits ist es die Optimierung der Hardwareebene. Andererseits müssen wir in der tatsächlichen Kommunikation überlegen, wie wir vorgehen gute Nutzung der Bandbreitenressourcen des Netzwerks, oder ob der Kommunikationsprozess ausgeblendet werden kann usw.

Analyse der KI-Trainingsbeschleunigungsprinzipien und Austausch technischer Praxis

Im Folgenden gehen wir ausführlich auf diese Aspekte ein.

Das erste ist die Optimierung des Datenladens.

Nachdem wir einen Datenlader instanziiert haben, iterieren wir den Datenlader weiter, um einen Datenstapel für das Modelltraining zu lesen.

Wenn hier keine Optimierung durchgeführt wird, wie im oberen Teil der Abbildung unten gezeigt, werden der Datenladeprozess jeder Charge und der Modelltrainingsprozess jeder Charge tatsächlich nacheinander ausgeführt. Aus der GPU-Perspektive kommt es zu Berechnungslücken, die durch das Laden von Daten verursacht werden, und zu einer Zeitverschwendung bei den Rechenressourcen.

Wie können wir neben der Verwendung besserer Hardware, um die Effizienz des Datenlesens direkt zu verbessern, wie bereits erwähnt, diese noch optimieren?

Tatsächlich gibt es während des KI-Trainingsprozesses zwei Schlüsselfunktionen beim Datenzugriff:

  • Nachdem der Datensatz gemischt wurde, erfolgt jede Runde Das Training erfordert, dass die Batch-Daten und die Zugriffssequenz bekannt sind.
  • Das Datenlesen von zwei beliebigen Batches kann parallel erfolgen, da keine Abhängigkeit zwischen den Daten besteht.

Daher können wir, wenn wir uns nicht auf Änderungen auf Hardwareebene verlassen, den Datenvorabruf durchführen. Beim Training des ersten Datenstapels können wir den nächsten Stapel laden Advance Batch Data ermöglicht die vollständige Parallelisierung des I/O-Prozesses und der Berechnung auf der GPU.

Analyse der KI-Trainingsbeschleunigungsprinzipien und Austausch technischer Praxis

Zunächst müssen wir die vorhandenen Optimierungslösungen im Dataloader sinnvoll nutzen. Stellen Sie zunächst die Hyperparameter „num_workers“ sinnvoll ein und lesen Sie die Daten durch mehrere Dieser Schritt ermöglicht den Vorabruf von Daten aus dem Speichersystem in den Hostspeicher. Die zweite besteht darin, vom Host-Speicher in den GPU-Speicher zu kopieren, was durch den Pinned-Memory-Mechanismus beschleunigt werden kann.

Lassen Sie uns kurz das Hauptprinzip der Pinned-Memory-Beschleunigung vorstellen: Es gibt zwei Arten von Speicherdaten: auslagerbarer Speicher und fixierter Speicher. Die Daten im auslagerbaren Speicher können auf die Festplatte ausgelagert werden. In diesem Fall kann es beim Ausführen von H2D erforderlich sein, zuerst von der Festplatte in den Speicher zu lesen und dann vom Speicher in den Videospeicher zu kopieren. Darüber hinaus müssen Sie beim Kopieren von auslagerbaren Speicherdaten in den GPU-Speicher zunächst einen temporären angehefteten Speicherpuffer erstellen, die Daten vom auslagerbaren Speicher in den angehefteten Speicher kopieren und sie dann an die GPU übertragen, was ebenfalls zusätzliche Datenübertragungsvorgänge erfordert.

Wenn wir jedoch die obige Lösung aktivieren, implementieren wir nur den Vorabruf vom Speichersystem zum Host-Speicher und beschleunigen so die Datenkopiergeschwindigkeit vom Host zum Gerät. Die Speicherkopie vom Host zum Gerät und der eigentliche Berechnungskern werden jedoch weiterhin seriell auf der GPU ausgeführt, d. h. es besteht immer noch eine kleine Zeitlücke auf der GPU.

AIAK hat weitere Optimierungen vorgenommen, um dieses Problem zu lösen, wodurch die Überlappung von H2D und Vorwärtsberechnung realisiert werden kann.

Analyse der KI-Trainingsbeschleunigungsprinzipien und Austausch technischer Praxis

In einem datenparallelen Szenario muss darauf geachtet werden, dass die Daten gleichmäßig aufgeteilt werden müssen.

Wenn die jedem Trainingsprozess zugewiesenen Daten unausgeglichen sind, ist der Berechnungsumfang unterschiedlich, was dazu führt, dass die Abschlusszeit der Vorwärtsberechnung und der Rückwärtsberechnung jedes Prozesses unterschiedlich ist und dann der Prozess Schließt die Berechnung zuerst ab. Während des umgekehrten Prozesses wird zuerst die Gradientenkommunikationsverbindung eingegeben. Da es sich bei der Allreduce-Kommunikation jedoch um einen synchronen Kommunikationsvorgang handelt, müssen alle Prozesse gleichzeitig gestartet und beendet werden wartet darauf, dass alle anderen Prozesse ebenfalls AllReduce initiieren. Erst dann kann der Kommunikationsvorgang gemeinsam abgeschlossen werden. Aufgrund unterschiedlicher Geschwindigkeiten kann es zu Ressourcenleerlaufproblemen kommen.

Um dieses Problem zu lösen, muss jeder Prozess dieselbe Stapelgröße zum Lesen von Daten verwenden und die Datenmenge in jedem Stapel muss ausgeglichen sein. Bilddaten haben für das Training im Allgemeinen eine feste Größe, während NLP-Modelle Anweisungen variabler Länge verarbeiten müssen, was möglicherweise eine spezielle Verarbeitung erfordert. Beispielsweise können Daten auf die gleiche Länge aufgefüllt oder durch Sortieren der Beispiellängen usw. gleichmäßig verteilt werden.

Analyse der KI-Trainingsbeschleunigungsprinzipien und Austausch technischer Praxis

Die Optimierung der Recheneffizienz wird im Folgenden vorgestellt.

Die Berechnung umfasst Vorwärts-, Rückwärts- und Parameteraktualisierungen. Ziel der Optimierung von Berechnungen ist es, die Rechenleistung heterogener Hardware voll auszunutzen. Im Idealfall soll die tatsächliche Rechenleistung des GPU-Chips den theoretischen Höhepunkt erreichen.

Lassen Sie uns es zunächst aus der Perspektive eines einzelnen Bedieners analysieren. Wenn wir uns auf die Durchführung einer Berechnungsoperation auf der GPU vorbereiten, umfasst der vereinfachte Prozess vier Schritte.

  • Zuerst wird ein GPU-Berechnungskern asynchron auf der CPU gestartet;
  • Wenn der Kernel zur Ausführung geplant ist, muss er zunächst die Berechnungsanforderungen auslesen der globale Speicher auf den GPU-Daten;
  • Ausführen der Berechnung starten;
  • Wenn die Berechnung abgeschlossen ist, müssen die Berechnungsergebnisse zurück in den globalen Speicher geschrieben werden.

Je nach Anteil des Rechen- und Speicherzugriffsaufwands werden Betreiber im Allgemeinen als Rechenengpässe oder Speicherzugriffsengpässe klassifiziert.

Bei der Erweiterung von einem Operator auf ein vollständiges Modelltraining müssen viele Kernel-Berechnungen kontinuierlich durchgeführt werden, sodass zwischen den Kernel-Berechnungen viel Lese- und Schreibvorgänge beim Kernel-Start und Zwischenergebnissen erforderlich sind. Dies führt zu Berechnungslückenproblemen.

Aus dem oben Gesagten ist ersichtlich, dass die Optimierung der Modellberechnungseffizienz eine umfassende Berücksichtigung der Speicherzugriffsoptimierung, Berechnungsoptimierung und anderer Overhead-Optimierung erfordert.

  • Bei der Speicherzugriffsoptimierung geht es vor allem darum, die Zeit für die Datenübertragung zwischen dem Videospeicher und der Recheneinheit zu verkürzen. Aus Sicht der Betreiberimplementierung ist es notwendig, die GPU-Speicherhierarchiearchitektur sinnvoll zu nutzen, z. B. Daten in einen schnelleren Speicher wie den gemeinsam genutzten Speicher zu verschieben, den Zugriff auf den globalen Speicher zu reduzieren und dadurch Speicherzugriffszeit zu sparen. Oder stellen Sie eine gute Überlappung zwischen Berechnungsanweisungen und Speicherzugriffsanweisungen her, um das Verhältnis des Berechnungsspeicherzugriffs zu verbessern. Bei der Erweiterung von einem einzelnen Operator auf mehrere Operatoren müssen Sie auch überlegen, wie Sie das Lesen und Schreiben von Zwischenergebnissen reduzieren können. Dieses Problem kann im Allgemeinen durch Operatorfusion optimiert werden Das Problem liegt wahrscheinlich darin, dass die Aufgaben nicht korrekt in Blöcke unterteilt sind oder die Vorteile des GPU-Parallelrechnens nicht vollständig genutzt werden, was zu einer geringen Parallelität führt. Es ist auch möglich, dass der kombinierte Befehlssatz nicht verwendet wird, was zu einer geringen Recheneffizienz führt, oder dass Hochleistungsrecheneinheiten wie Tensor Core nicht verwendet werden, was zu einer Verschwendung von Ressourcen führt. Unterschiedliche Probleme entsprechen auch unterschiedlichen Optimierungsmethoden;
  • Kernelstart und anderer Overhead, es wird viel Zeit für den Speicherzugriff oder die Berechnung aufgewendet, Optimierungsmethoden, die in Betracht gezogen werden können, wie Operatorfusion, Cuda Graph usw . .

Analyse der KI-Trainingsbeschleunigungsprinzipien und Austausch technischer PraxisDie erste ist die Operatorfusion. Wenn ein Operator auf der zugrunde liegenden GPU ausgeführt wird, werden ein oder mehrere Kernel-Starts initiiert, und die interaktiven Daten zwischen Kerneln müssen auch durch den Videospeicher geleitet werden. Durch die Operator-Fusion werden mehrere GPU-Kernel für eine einheitliche Initiierung zusammengeführt Ausführung.

Da die Anzahl der auszuführenden Operatoren reduziert wird, kann der Aufwand für die Kernel-Planung und -Initiierung reduziert werden.
  • Durch Fusion können Zwischenprodukte hergestellt werden durch Register usw. geleitet. Dadurch wird die Hin- und Rückübertragung vom globalen Speicher vermieden, was die Wartezeit für den Videospeicher erheblich verkürzt.
Wie setzt man die Operatorfusion konkret um?

Analyse der KI-Trainingsbeschleunigungsprinzipien und Austausch technischer PraxisEine Möglichkeit, ineffiziente Vorgänge im Modell zu analysieren, handschriftliche Fusionsoperatoren basierend auf Expertenerfahrung. Bei der GPU geht es hauptsächlich um die Forschung und Entwicklung von CUDA-Operatoren, und hier gibt es eine gewisse Schwelle. AIAK-Training bietet eine effiziente und optimierte Betreiberimplementierung basierend auf typischen Modellstrukturen oder Kundenbedürfnissen.

Eine andere Möglichkeit besteht darin, die Lösung zu kompilieren und zu optimieren. Die rechnerische Optimierung wird durch Kompilierung durchgeführt und Code wird automatisch generiert, wodurch die Kosten für die manuelle Optimierung auf unterschiedlicher Hardware reduziert werden. Allerdings sind viele aktuelle Kompilierungslösungen stärker für Inferenz optimiert und Trainingslösungen befinden sich noch in einem rasanten Entwicklungsprozess. Unter dem Gesichtspunkt der ultimativen Leistung wird die Arbeit von Handschriftfusionsoperatoren jedoch noch einige Zeit lang unverzichtbar sein.

Im Folgenden werden einige praktische Fälle der Operatorfusion vorgestellt. Die erste ist die Optimierung typischer Modellnetzwerkstrukturen.

Analyse der KI-Trainingsbeschleunigungsprinzipien und Austausch technischer PraxisDie folgende Abbildung zeigt unsere Berechnungsfusionsoptimierung für das Kernmodul WindowAttention im SwinTransformer-Modell.

WindowAttention-Struktur, die Kernbetriebsformel ist in der folgenden Abbildung dargestellt. Während des Berechnungsprozesses müssen 7 Berechnungskerne nacheinander ausgeführt werden. In Verbindung mit einigen Umformungs- und anderen Konvertierungsvorgängen müssen insgesamt 10 Kernel gestartet werden. Durch die Leistungsanalyse wurde festgestellt, dass während des eigentlichen Ausführungsprozesses der Intervallredundanz-Overhead des Startkernels mehr als 80 % der End-to-End-Zeit ausmacht, was zu einem großen Optimierungsraum für dieses Modul führt.

Durch die Verschmelzung dieser Kernel zu einem wird die Ausführungszeit des gesamten Moduls von 392 Mikrosekunden auf 13 Mikrosekunden reduziert und ein einzelner Operator wird um das 30-fache beschleunigt. Die Trainingseffizienz des gesamten Modells wurde durchgängig um mehr als 20 % beschleunigt.

Die Kernidee dieser Optimierung besteht aus drei Hauptpunkten:

  • besteht darin, die dreistufige Speicherzugriffspipeline der GPU: Videospeicher sinnvoll zu nutzen , gemeinsam genutzter Speicher, registrieren;
  • #🎜 🎜#Verwenden Sie die Blockierungsstrategie, um 2 Matrixmultiplikationen und Softmax zu verschmelzen.
  • Nutzen Sie Tensor Core vollständig und nutzen Sie es Neuberechnung statt Neuladen bei umgekehrter Berechnung. Dadurch wird der Speicherzugriffsaufwand erheblich reduziert.

Analyse der KI-Trainingsbeschleunigungsprinzipien und Austausch technischer Praxis

Die folgende Abbildung ist ein Beispiel für die Fusion von Datenoperationen, bei der es sich um eine Optimierung der Koordinatenkomprimierungsoperationen im FCOS3D-Modell handelt.

Durch die Leistungsanalyse wurde festgestellt, dass während dieses Vorgangs viele GPU-Lücken auftreten und die GPU-Auslastung gering ist. Die Hauptfunktion dieser Operation besteht darin, den 3D-Tensor basierend auf dem Index in einen 2D-Tensor zu komprimieren. In der nativen Implementierung wird der Index zuerst auf der Hostseite generiert, dann wird eine H2D-Kopie durchgeführt und schließlich wird die Tensor-Komprimierung abgeschlossen, was zu zusätzlichem Kopier- und Warteaufwand führt.

Zu diesem Zweck haben wir diesen Teil des Vorgangs erneut implementiert. Die Kernidee besteht darin, alle Vorgänge auf die GPU zu migrieren, die Indexgenerierung und Tensorkomprimierung direkt auf der GPU abzuschließen und so die CPU-Belastung zu reduzieren Vermeidung unnötiger CPU-GPU-Speicherkopien.

Die Ausführungszeit eines einzelnen Operators wird von 9,69 Millisekunden auf 32 Mikrosekunden reduziert, was das End-to-End-Training des gesamten Modells um mehr als 10 % beschleunigt.

Analyse der KI-Trainingsbeschleunigungsprinzipien und Austausch technischer Praxis

Als nächstes stellen wir eine weitere Idee der Computeroptimierung vor, die darin besteht, die Parallelität der Berechnungen zu verbessern und die Vorteile der GPU voll auszunutzen Paralleles Rechnen, auch anhand einiger praktischer Fälle zur Einführung.

Wir haben festgestellt, dass bei einigen Modellen einige Vorgänge seriell ausgeführt werden. Beispielsweise werden in einigen Zielerkennungsmodellen während des Verlustberechnungsprozesses einige Vorgänge nicht stapelweise ausgeführt, sondern in einer For-Schleife für jedes Bild oder jede Probe. In diesem Fall erhöhen wir die Stapelgröße, da die Serialisierung hier möglicherweise nicht erfolgt die Leistung erbringen, die wir wollen.

Nehmen Sie als Beispiel die SimOTA-Operation in YOLOv7. In der nativen Implementierung wird jedes Bild eines Stapels durch eine for-Schleife durchlaufen und dann wird die SimOTA-Label-Zuweisung für die GTBox des Bildes durchgeführt. Diese serielle Implementierung führt zu einer sehr ineffizienten GPU-Auslastung für diesen Teil des Vorgangs.

Bei der Verarbeitung der einzelnen Bilder besteht keine Abhängigkeit zwischen den Daten. Daher besteht eine unserer Aufgaben darin, die serielle Berechnung in eine parallele Batch-Berechnung umzuwandeln und die Effizienz dieses Teils der Berechnung zu beschleunigen, indem die Etikettenzuweisung für einen Daten-Batch parallelisiert wird.

Analyse der KI-Trainingsbeschleunigungsprinzipien und Austausch technischer Praxis

Im Endergebnis sank die SimOTA-Betriebszeit von 384 Millisekunden auf 69 Millisekunden, die Recheneffizienz erhöhte sich um das 5,5-fache und die End-to-End-to-End-Funktion -Endschulung des gesamten Modells. Effizienzsteigerung um mehr als 18 %.

Es gibt andere ähnliche Szenarien während des Modelltrainingsprozesses, wie z. B. die Parameteraktualisierung. Wenn Parameter aktualisiert werden, wird jeder Parameter standardmäßig in einer Schleife durchlaufen. Anschließend startet jeder Parameter einen Cuda-Kernel zur Parameteraktualisierung und führt ihn dann nacheinander aus.

Als Reaktion auf diese Situation hat AIAK auch die Optimierung von FusedOptimizer hinzugefügt. Durch die Fusion des Parameteraktualisierungsoperators können Parameter stapelweise aktualisiert und die Anzahl der Kernel-Starts erheblich reduziert werden.

Analyse der KI-Trainingsbeschleunigungsprinzipien und Austausch technischer Praxis

Eine weitere Optimierungsmethode, CUDA Graph, wird im Folgenden vorgestellt, hauptsächlich um den Overhead des CPU-Startkernels zu reduzieren.

CUDA Graph ist eine Funktion, die in der CUDA 10-Version eingeführt wurde. Sie kann eine Reihe von CUDA-Kerneln in einer einzigen Einheit kapseln und mehrere GPU-Kernel über einen CPU-Startvorgang starten, wodurch die Anzahl der CPUs reduziert wird Starten Sie Kernel von Overhead.

Wie in der Abbildung unten gezeigt, muss die CPU standardmäßig mehrere Kernel nacheinander starten. Wenn die Kernel-Berechnungszeit relativ kurz ist, kann die Startlücke zwischen Kerneln zu einem Leistungsengpass führen. Mit CUDA Graph müssen Sie nur etwas mehr Zeit für die Erstellung des Graphen aufwenden, und die anschließende Ausgabe des Graphen kann die Lücke zwischen den Kerneln während der tatsächlichen Ausführung erheblich verkürzen.

Jetzt haben viele Frameworks auch Unterstützung für CUDA Graph hinzugefügt, sodass K diese Funktion durch Einfügen von Code aktivieren kann. Es gibt jedoch einige Nutzungseinschränkungen, z. B. keine Unterstützung der dynamischen Form, keine Unterstützung des dynamischen Kontrollflusses, keine Möglichkeit, CPU-Vorgänge während des Prozesses zu erfassen usw. Sie können versuchen, diese Optimierungsfunktion basierend auf der Modellsituation zu verwenden.

Analyse der KI-Trainingsbeschleunigungsprinzipien und Austausch technischer Praxis

Das Folgende ist die letzte Berechnungsoptimierungsmethode, um die Tensor Core-Recheneinheit vollständig zu nutzen.

Eine GPU enthält im Allgemeinen mehrere SMs, und jeder SM umfasst Rechenkerne unterschiedlicher Datentypen sowie verschiedene Speicherressourcen. Auf der linken Seite der Abbildung unten ist ein schematisches Diagramm eines NVIDIA A100 SM dargestellt. Ein SM enthält 64 FP32 CUDA-Kerne und 4 Tensor-Kerne.

Beim Training des Modells wird standardmäßig hauptsächlich FP32 CUDA Core für die Berechnung verwendet, und Tensor Core ist eine spezielle Hardware-Ausführungseinheit, die aus der Volta-GPU-Serie eingeführt wurde. Sie wird hauptsächlich zur Beschleunigung von Matrizen oder Volumina verwendet . Kumulierte Betriebseffizienz.

Im Vergleich zu FP32 CUDA Core, das nur Berechnungen auf zwei Skalaren gleichzeitig durchführen kann, kann Tensor Core Berechnungen auf zwei Matrizen gleichzeitig durchführen, sodass der Berechnungsdurchsatz von Tensor Core viel höher ist von FP32 CUDA Core.

In A100 unterstützt Tensor Core eine Vielzahl von Gleitkomma-Datentypen. Für Deep-Learning-Training kann es sich um die Modi FP16, BF16 und TF32 handeln.

TF32 wird hauptsächlich in Trainingsszenarien mit einfacher Genauigkeit verwendet. Im Vergleich zum FP32-Training wird der theoretische Rechendurchsatz bei gleichen Anforderungen an die Speicherzugriffsbandbreite um das Achtfache erhöht.

FP16/BF16 wird hauptsächlich in gemischten Präzisionstrainingsszenarien verwendet. Im Vergleich zum FP32-Training werden die Speicherzugriffsanforderungen um die Hälfte reduziert und der theoretische Rechendurchsatz um das 16-fache erhöht.

Mit Tensor Core können Sie die zugrunde liegende cublas- oder cuda-Schnittstelle zum Programmieren verwenden. Für Algorithmenentwickler ist es einfacher, die im Framework bereitgestellte TF32-Trainings- oder Mixed-Precision-Trainingslösung zu verwenden.

Analyse der KI-Trainingsbeschleunigungsprinzipien und Austausch technischer Praxis

Der erste ist der TF32-Trainingsmodus, TF32 wurde von Ampere eingeführt.

TF32 Im Ausdruck von Gleitkommazahlen gibt es 8 Exponentenbits, 10 Mantissenbits und 1 Vorzeichenbit. Das Exponentenbit ist dasselbe wie bei FP32, dh der Datendarstellungsbereich ist derselbe, aber das Mantissenbit ist niedriger als bei FP32 und dasselbe wie bei FP16.

Es ist zu beachten, dass TF32 kein offener numerischer Typ ist, sondern ein Rechenmodus von Tensor Core. Das heißt, Benutzer können keine Gleitkommazahl vom Typ TF32 erstellen.

Wenn TF32 aktiviert ist, konvertiert Tensor Core bei der Berechnung von Matrizen oder Faltungsoperationen automatisch FP32 in TF32. Nach Abschluss der Berechnung ist der Ausgabedatentyp immer noch der FP32-Typ.

TF32-Training ist in einigen Framework-Versionen standardmäßig aktiviert. In einigen Framework-Versionen muss es möglicherweise manuell über Umgebungsvariablen oder Parameterkonfiguration aktiviert werden. Weitere Informationen finden Sie im Benutzerhandbuch des Frameworks .

Da jedoch der Genauigkeitsbereich von TF32 im Vergleich zu FP32 reduziert ist, müssen Sie während des tatsächlichen Trainings auf die Auswirkungen auf die Konvergenzgenauigkeit des Modells achten.

Analyse der KI-Trainingsbeschleunigungsprinzipien und Austausch technischer Praxis

Training mit gemischter Präzision bezieht sich auf die Verwendung der gemischten Präzision FP32 und FP16 für das Training bei gleichzeitiger Minimierung des Verlusts der Modellgenauigkeit.

Die Hauptvorteile des gemischten Präzisionstrainings sind: Im Vergleich zum FP32-Training wird der Speicherbedarf reduziert und es können größere Netzwerke trainiert oder größere Batchgrößen verwendet werden. Die Verwendung einer geringeren Speicherbandbreite kann die Datenübertragung beschleunigen, und Berechnungen mit halber Genauigkeit können auch mathematische Operationen beschleunigen.

Da der Bereich des Exponentenbits und des Mantissenbits von FP16 jedoch kleiner ist als der von FP32 , Daher werden der numerische Darstellungsbereich und die Genauigkeit verringert. Bei der tatsächlichen Verwendung kann es aufgrund des engen Darstellungsbereichs zu numerischen Überlaufproblemen oder aufgrund unzureichender Genauigkeit zu Rundungsfehlern kommen.

Um ähnliche Probleme zu optimieren, gibt es in der gemischten Präzisionstrainingslösung mehrere wichtige technische Aufgaben:

  • Operator-Black- und White-List-Mechanismus: Das Framework verwendet die Black- und White-List, um die Genauigkeit für den Operator automatisch auszuwählen. Während des Modelltrainingsprozesses wird die Umwandlungsoperation automatisch zur Typkonvertierung eingefügt Eingreifen des Entwicklers. Für Berechnungen, bei denen es auf die numerische Genauigkeit ankommt, wird weiterhin FP32 verwendet, während für numerisch sichere Berechnungen wie die Matrixmultiplikation FP16 verwendet wird.
  • Während des Trainingsprozesses wird eine Kopie der FP32-Gewichte gespeichert Parameter werden verwendet, um Parameter während des Trainings zu aktualisieren und Rundungsfehlerprobleme zu optimieren In der Regel wird der Gradient auch n-fach verstärkt, sodass er in den Darstellungsbereich von FP16 fällt. Der spezifische Prozess ist auf der linken Seite der folgenden Abbildung dargestellt.
  • Derzeit unterstützen alle Frameworks gemischte Präzision. Die AIAK-Training-Komponente führt darüber hinaus den AMP O2-Mixed-Precision-Modus in NVIDIA Apex ein, der aggressiver mehr Berechnungen an FP16 überträgt, um das Training zu beschleunigen. Im Vergleich zum Standard-O1-Modus wird die Geschwindigkeit weiter verbessert, die Genauigkeit kann jedoch beeinträchtigt sein und muss bei bestimmten Modellen überprüft werden.

AIAK-Training bietet eine Nutzungsmethode, die mit der nativen Nutzung des Taschenlampenverstärkers kompatibel ist und die Aktivierung des O2-Modus erleichtert.

Analyse der KI-Trainingsbeschleunigungsprinzipien und Austausch technischer Praxis Das ist auch ein sehr großes Thema und beinhaltet viel Inhalt.

Wie bereits erwähnt, wird die Kommunikation hauptsächlich im verteilten Training eingeführt, da die Erweiterung von einer einzelnen Karte auf mehrere Karten eine gewisse Datensynchronisierung zwischen mehreren Karten erfordert.

Die folgende Abbildung listet eine Gesamtarchitektur zur Kommunikationsoptimierung auf:

Die unterste Schicht ist die Netzwerkprotokollschicht, einschließlich des traditionellen TCP-Netzwerks und derjenigen, die in verwendet werden Trainingsszenarien Immer mehr Hochleistungs-RDMA-Netzwerke sind RoCE oder IB. Baidu Baige bietet auch Unterstützung für diese zugrunde liegenden Netzwerklösungen. Offensichtlich ist die Verbesserung der Hardware-Infrastruktur zur Erhöhung der Netzwerkbandbreite und Reduzierung der Latenz der direkteste und effektivste Weg zur Optimierung der Kommunikationsleistung.
  • Dann gibt es noch die Kommunikationsbibliotheksschicht. Da für die Kommunikation das zugrunde liegende Netzwerkprotokoll verwendet werden muss und tatsächliche Anwendungen möglicherweise mehrere Kommunikationsprimitive umfassen, z. B. Punkt-zu-Punkt-Kommunikation, kollektive Kommunikation usw., sind auch einige stark gekapselte und optimierte Kommunikationsbibliotheken erschienen. In GPU-Trainingsszenarien verwenden wir im Allgemeinen die NCCL-Kommunikationsbibliothek, die eine bessere Leistung bietet.
  • Basierend auf der zugrunde liegenden Kommunikationsbibliothek kann das übergeordnete Framework einfacher eine verteilte Trainingskommunikationsarchitektur aufbauen. Zu den gebräuchlichsten gehören die Parameterserverarchitektur und die kollektive Kommunikationsarchitektur. Derzeit übernehmen Modelle in CV/NLP und anderen Bereichen hauptsächlich eine kollektive Kommunikationsarchitektur.
  • Die Kommunikationsstrategieschicht optimiert hauptsächlich die Kommunikationseffizienz auf der Anwendungsschicht, wie z. B. Kommunikationsversteckung, Kommunikationsfusion, Kommunikationskomprimierung, Kommunikationsfrequenzreduzierung und andere verschiedene Ideen zusammen.

Analyse der KI-Trainingsbeschleunigungsprinzipien und Austausch technischer Praxis Schauen wir uns zunächst die Optimierungsideen auf der Ebene der Kommunikationsstrategie an. Die erste ist die versteckte Kommunikationsoptimierung.

Bei der Datenparallelität wird die Gradientensynchronisationskommunikation während des umgekehrten Trainingsvorgangs durchgeführt. Nachdem der Gradient umgekehrt berechnet wurde, kann der globale Gradientendurchschnitt durchgeführt werden.

Wenn keine Mechanismusoptimierung durchgeführt wird, werden die umgekehrte Berechnung und Kommunikation nacheinander durchgeführt, und es entsteht eine Zeitlücke bei der Berechnung.

Da beim umgekehrten Vorgang keine Datenabhängigkeit zwischen der Kommunikation des vorherigen Gradienten und der Berechnung des nächsten Gradienten besteht, können die Kommunikation des vorherigen Gradienten und die Berechnung des nächsten Gradienten parallelisiert werden. Lassen Sie die zeitaufwändigen Aspekte der beiden sich überschneiden, sodass ein Teil der zeitaufwändigen Kommunikation ausgeblendet werden kann.

Auf der Implementierungsebene werden Kommunikations- und Berechnungsoperatoren normalerweise für verschiedene Cuda-Streams geplant, und Berechnungsoperatoren werden für Berechnungsstreams in verschiedenen Streams geplant und parallel ausgeführt, wodurch eine parallele Überlappung der Gradientenkommunikation und Berechnung in umgekehrter Richtung erreicht wird.

Derzeit ist diese Optimierungsfunktion standardmäßig im Framework aktiviert.

Analyse der KI-Trainingsbeschleunigungsprinzipien und Austausch technischer Praxis Zweitens: Optimierung der Kommunikationsintegration.

Standardmäßig muss jeder Gradient im Modell einen Kommunikationsvorgang initiieren. Wenn die Größe eines einzelnen Gradienten relativ klein ist, ist die Auslastung der Netzwerkbandbreite bei der tatsächlichen Kommunikation kleiner Datenpakete sehr gering und die Kommunikationsleistung schlecht.

Bei der Kommunikationsfusion werden mehrere Gradienten für eine Kommunikation zusammengeführt. Aus der Analyse des Kommunikations-Overhead-Modells geht hervor, dass sie nicht nur die Bandbreitennutzung verbessern, sondern auch die Initialisierungsverzögerungszeit der Kommunikation reduzieren kann.

Heutzutage unterstützen viele verteilte Trainings-Frameworks standardmäßig auch die Gradientenfusionsstrategie. Einige Implementierungen erfordern zunächst eine Gradientenaushandlung, um die Kommunikationssequenz zu bestimmen.

Obwohl das Framework standardmäßig die Kommunikationsfusion unterstützt, kann die Größe der Gradientenfusion im Allgemeinen über Parameter konfiguriert werden. Benutzer können den geeigneten Fusionsschwellenwert entsprechend den Anforderungen der physischen Umgebung und des Modells anpassen und sollten in der Lage sein, bessere Vorteile zu erzielen.

Analyse der KI-Trainingsbeschleunigungsprinzipien und Austausch technischer Praxis

Wenn Sie sich in einem Trainingsszenario mit geringer Netzwerkbandbreite befinden, z. B. einer TCP-Umgebung mit geringer Bandbreite, kann die Verzögerung bei der Gradientensynchronisation zum größten Leistungsengpass des Trainings werden.

  • In diesem Fall kommt als Optimierungsmethode die Kommunikationskomprimierung in Betracht. Bei der Kommunikationskomprimierung gibt es hauptsächlich drei verschiedene Komprimierungsideen:
  • Quantisierungskomprimierung, z. B. Verwendung einer geringeren Präzision zur Darstellung von Farbverläufen. Diese Methode hat eine niedrigere Komprimierungsrate und kann von maximal 32 Bit auf 1 Bit komprimieren, was einer maximalen Komprimierung entspricht 32 Mal.
  • Spärliche Komprimierung, typische Algorithmen wie der DGC-Algorithmus. Die Kernidee besteht darin, in jeder Iteration nur wichtige Gradienten zu übertragen, dh der Gradientenwert überschreitet einen festgelegten Schwellenwert und gleichzeitig, um den Informationsverlust zu reduzieren verbleibende unwichtige Gradienten werden übertragen. Der Gradient wird lokal akkumuliert. Solange genügend Zeit vorhanden ist, wird der akkumulierte Gradient schließlich den eingestellten Schwellenwert überschreiten und dann wird ein Gradientenaustausch durchgeführt. Auf diese Weise wird die Menge an Kommunikationsdaten reduziert und der Bedarf an Netzwerkbandbreite verringert. Um gleichzeitig die Auswirkungen auf die Modellkonvergenz zu verringern, wird diese auch durch verschiedene Methoden wie Impulskorrektur, Gradientenbeschneidung, Impulsfaktormaskierung und Vorwärmtraining gemildert. Diese Lösung unterstützt derzeit hauptsächlich den SGD-Optimierer.
  • Methode zur Komprimierung einer Matrix mit niedrigem Rang. Die Kernidee besteht darin, eine große Gradientenmatrix in mehrere kleine Gradientenmatrizen zu zerlegen und das Kommunikationsvolumen durch die Übertragung kleiner Matrizen zu reduzieren.

Analyse der KI-Trainingsbeschleunigungsprinzipien und Austausch technischer Praxis

Zur Optimierung der Kommunikationshäufigkeitsreduzierung besteht die einfachste Idee darin, die Stapelgröße zu erhöhen, sodass in jeder Iteration mehr Daten verwendet werden, wodurch die Anzahl der Iterationen verringert wird, was bedeutet, dass das Kommunikationsvolumen verringert wird.

Je größer die Batchgröße, desto besser. Eine größere Batchgröße kann dazu führen, dass die Modellkonvergenzgenauigkeit abnimmt oder sich die Konvergenzgeschwindigkeit verlangsamt. Als Reaktion auf ähnliche Probleme hat die Industrie auch Optimierungsalgorithmen wie LARS und LAMB vorgeschlagen, die ähnliche Probleme durch adaptive Anpassung der Lernrate über Schichten lindern können. AIAK-Training hat ebenfalls Unterstützung hinzugefügt.

Um die Batchgröße zu erhöhen, können Sie bei ausreichendem Videospeicher den Batchsize-Superparameter direkt anpassen. Wenn der Videospeicher knapp ist, können Sie durch Gradientenakkumulation auch mehrere Gradientenkommunikationen überspringen, was tatsächlich einer Erhöhung der Stapelgröße entspricht.

Analyse der KI-Trainingsbeschleunigungsprinzipien und Austausch technischer Praxis

Im Folgenden wird eine Optimierungslösung für die Kommunikationstopologie vorgestellt – hierarchische Topologiekommunikation, die auch auf Situationen abzielt, in denen die Netzwerkbandbreite zwischen Maschinen relativ gering ist.

Durch hierarchische Kommunikation kann die hohe Verbindungsbandbreite innerhalb der Maschine vollständig genutzt werden, während die Auswirkungen einer geringen Netzwerkbandbreite zwischen Maschinen abgeschwächt werden können.

Diese Kommunikationslösung wurde auch in AIAK implementiert. In einer 25-Gbit/s-TCP-Umgebung wurden 4 Maschinen und 32 Karten für das SwinTransformer-Training getestet. Durch geschichtetes Allreduce kann die Leistung um 85 % beschleunigt werden.

Analyse der KI-Trainingsbeschleunigungsprinzipien und Austausch technischer Praxis

Abschließend führen wir eine Optimierung auf der Ebene der zugrunde liegenden Kommunikationsbibliothek ein, die GPU Direct RDMA-Kommunikationstechnologie. Diese Technologie erfordert die Hardwareumgebung zur Unterstützung des RDMA-Netzwerks.

RDMA-Kommunikation ermöglicht es lokalen Anwendungen, den virtuellen Speicher von Remote-Anwendungen im Benutzermodus direkt zu lesen und zu schreiben. Der gesamte Kommunikationsprozess, mit Ausnahme des ersten Schritts der Übermittlung einer Sendeanforderung, der die Beteiligung der CPU erfordert, wird von der abgeschlossen Es sind keine Speicherkopien, keine Systemunterbrechung und keine Softwareverarbeitung erforderlich, sodass eine extrem niedrige Latenz und eine hohe Bandbreite erreicht werden können.

Im GPU-Szenario bietet die GPU Direct RDMA-Technologie außerdem Unterstützung für RDMA, um direkt auf den GPU-Videospeicher zuzugreifen. Dadurch wird das Hin- und Herkopieren von Daten zwischen GPU-Videospeicher und Host-Speicher während der Kommunikation vermieden, wodurch Verzögerungen bei der maschinenübergreifenden Kommunikation weiter reduziert werden.

In tatsächlichen Fällen haben wir jedoch festgestellt, dass einige Benutzer eine RDMA-Umgebung gekauft haben, aber nicht tatsächlich die GDR-Technologie verwendet haben, was zu einer geringen Kommunikationseffizienz geführt hat. Hier sind mehrere wichtige Konfigurationselemente aufgeführt. Wenn Sie ähnliche Probleme haben, können Sie diese beheben und in Ordnung bringen.

Analyse der KI-Trainingsbeschleunigungsprinzipien und Austausch technischer Praxis

Wir haben einige der aktuellen wichtigsten Ideen und Lösungen zur Leistungsoptimierung vorgestellt. Unabhängig von der E/A-Optimierung, der Rechenoptimierung und der Kommunikationsoptimierung geht es bei den einfachsten Optimierungsideen hauptsächlich darum, wie der Betrieb selbst optimiert werden kann kann reduzieren Die Häufigkeit, mit der die Operation ausgeführt wird, oder ob die Operation mit anderen Prozessen parallelisiert werden kann, um den Overhead usw. zu verbergen.

3. AIAK-Tranining Acceleration Kit Practice

Um es richtig zu aktivieren, muss jeder Benutzer ein klares Verständnis der technischen Implementierungsprinzipien des Frameworks haben. Um die Kosten für die Trainingsoptimierung zu vereinfachen, haben wir das AIAK-Training-Beschleunigungspaket entwickelt.

AIAK-Training baut vollständige Link-Optimierungsfunktionen rund um das Laden von Daten, Modellberechnung, Kommunikation usw. auf. Gleichzeitig werden wir diese Optimierungsfunktionen in einer einfachen und benutzerfreundlichen Oberfläche kapseln, die Benutzer einfügen können Codezeilen zum Vergleichen Bequeme integrierte Nutzung. Gleichzeitig bauen wir auch einen Mechanismus zur automatisierten Optimierung von Strategiekombinationen auf, um Benutzern automatisch bei der Auswahl effektiver Optimierungsstrategien zu helfen.

Bei spezifischer Verwendung können die Komponenten der Beschleunigungsbibliothek unabhängig voneinander installiert und bereitgestellt werden, oder Sie können direkt das von uns bereitgestellte Container-Image verwenden.

Analyse der KI-Trainingsbeschleunigungsprinzipien und Austausch technischer Praxis

Im Folgenden sind einige spezifische Anwendungsfälle aufgeführt.

Wie im Bild unten gezeigt, dient es hauptsächlich der Optimierung des Datenladers. In diesem Szenario ist das Modell relativ klein, die Datensatzgröße ist ebenfalls relativ klein und die reine Berechnungsgeschwindigkeit ist tatsächlich schneller. Die Ladezeit für EPOCHE-übergreifende Daten ist jedoch relativ lang, was dazu führt, dass E/A zeitaufwändig wird der Hauptengpass.

Durch die Verwendung der in AIAK bereitgestellten Prozesswiederverwendung und des vollständigen Prefetch-Mechanismus wird das gesamte Modelltraining um 166 % beschleunigt.

Analyse der KI-Trainingsbeschleunigungsprinzipien und Austausch technischer Praxis

Das Bild unten zeigt einen Fall der Modellberechnungsoptimierung.

Transformer-Klassenmodell-Trainingsszenario: Während des tatsächlichen Trainings ist die Kommunikationsskalierbarkeit nahezu linear, das E/A-Zeitaufwendungsverhältnis ist ebenfalls sehr niedrig und die Berechnung ist der Hauptleistungsengpass.

Für dieses Modell hat AIAK-Training eine Reihe von Optimierungen auf Berechnungsebene durchgeführt, darunter Operatorfusion der Hauptstrukturen, gemischte Präzision, Abstimmung großer Chargen usw., und die Trainingseffizienz des gesamten Modells ist um 169 % gestiegen .

Analyse der KI-Trainingsbeschleunigungsprinzipien und Austausch technischer Praxis

Der Fall in der folgenden Abbildung wendet hauptsächlich die Optimierung auf Kommunikationsebene an und ermöglicht Optimierungsstrategien für Netzwerke mit geringer Bandbreite in der Cloud-TCP-Umgebung. Bei einigen klassischen Modellen wie resnet50, bert und vgg16 kann sie beschleunigt werden 26 % ~78 %.

Analyse der KI-Trainingsbeschleunigungsprinzipien und Austausch technischer Praxis

In autonomen Fahrszenarien haben wir außerdem eine Reihe von Optimierungen der Modelltrainingsleistung für typische 2D-Vision-, 3D-Vision-, Lidar- und Pre-Fusion-Modelle vorgenommen und die Trainingsleistung wurde um 49 % bis 391 % beschleunigt. . .


Analyse der KI-Trainingsbeschleunigungsprinzipien und Austausch technischer Praxis

Das obige ist der detaillierte Inhalt vonAnalyse der KI-Trainingsbeschleunigungsprinzipien und Austausch technischer Praxis. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:51cto.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen