Deep-Learning-Tuning-Leitfaden

Deep Learning Tuning Guide: Optimierung des Gleichgewichts zwischen Leistung und Ressourcenverbrauch

Willkommen beim Leitfaden zur Optimierung der Deep-Learning-Parameter! Dieser Blogbeitrag richtet sich an Ingenieure und Forscher, die an der Maximierung der Deep-Learning-Leistung interessiert sind, vorausgesetzt, Sie verfügen über Grundkenntnisse in maschinellem Lernen und Deep-Learning-Konzepten. In diesem Artikel konzentrieren wir uns auf den Prozess der Hyperparameter-Optimierung, behandeln aber auch einige andere Aspekte des Deep Learning. Beginnen wir mit der Anleitung zum Starten eines neuen Projekts

Deep-Learning-Tuning-Leitfaden

1. Eine Anleitung zum Starten eines neuen Projekts

Bevor Sie mit der Abstimmung beginnen, stellen Sie sicher, dass Folgendes erledigt ist:

  1. Grundlegende Aufgaben wie Problemformulierung und Datenbereinigung.
  2. Es gibt einen Workflow für Schulung und Bewertung.
  3. Geeignete Bewertungsmetriken wurden ausgewählt und implementiert, um die Leistung in der Bereitstellungsumgebung darzustellen.

1.1 Modellarchitektur auswählen

Wenn Sie ein neues Projekt starten, empfehlen wir, zunächst eine effiziente und häufig verwendete Modellarchitektur auszuwählen. Dadurch kann das Modell schnell in einen funktionsfähigen Zustand versetzt werden, und es ist auch möglich, später ein benutzerdefiniertes Modell zu erstellen. Modellarchitekturen enthalten häufig verschiedene Hyperparameter, wie z. B. die Anzahl der Schichten, Schichtbreiten und Aktivierungsfunktionstypen.

Wenn möglich, suchen Sie nach einer Arbeit, die sich auf das Problem bezieht, und reproduzieren Sie das Modell dort als Ausgangspunkt.

1.2 Auswahl eines Optimierers

Kein einzelner Optimierer ist für alle Arten von maschinellen Lernproblemen und Modellarchitekturen geeignet. Wir empfehlen, mit dem gängigsten Optimierer für die Art des vorliegenden Problems zu beginnen. Verwenden Sie zunächst einen ausgereiften und beliebten Optimierer und optimieren Sie ihn dann nach Bedarf weiter.

1.3 Wählen Sie die Chargengröße aus

Die Stapelgröße ist ein wichtiger Faktor bei der Bestimmung der Trainingsgeschwindigkeit und des Rechenressourcenverbrauchs. Die richtige Auswahl der Chargengröße ist für eine optimale Leistung von entscheidender Bedeutung. Die Bestimmung der geeigneten Chargengröße erfordert normalerweise die folgenden Schritte:

  1. Bestimmen Sie eine mögliche Stapelgröße und schätzen Sie den Trainingsdurchsatz: Ermitteln Sie die maximale Stapelgröße, die vom Speicher des Beschleunigers (GPU/TPU) unterstützt wird. Führen Sie das Training mit unterschiedlichen Batch-Größen über eine kleine Anzahl von Experimenten durch, um die Zeit pro Schritt zu bestimmen und so den Trainingsdurchsatz abzuschätzen.
    Trainingsdurchsatz = Anzahl der pro Sekunde verarbeiteten Proben Trainingsdurchsatz Trainingsdurchsatz = \frac{Anzahl der pro Sekunde verarbeiteten Proben}{Trainingsdurchsatz}Trainingsdurchsatz=TrainingsbauchAnzahl der pro Sekunde verarbeiteten Proben
    Alternativ können wir die Zeit pro Schritt schätzen:
    Zeit pro Schritt = Batch-Größe-Trainingsdurchsatz Zeit pro Schritt = \frac{Batch-Größe}{Trainingsdurchsatz}Zeit pro Schritt=TrainingsdurchsatzChargengröße _ _ _ _ _ _ _
  2. Wählen Sie eine geeignete Batch-Größe, um die Trainingszeit zu minimieren: Durch Erhöhen der Batch-Größe kann die Anzahl der Trainingsschritte und damit die Trainingszeit reduziert werden. Normalerweise ist die Batch-Größe, die die Trainingszeit minimiert, die größte Batch-Größe.
  3. Wählen Sie eine geeignete Batch-Größe, um den Ressourcenverbrauch zu minimieren: Berücksichtigen Sie Vorabkosten und Nutzungskosten und wählen Sie eine geeignete Batch-Größe, um den Ressourcenverbrauch auszugleichen.

1.4 Wählen Sie die Erstkonfiguration

Bevor wir mit der Optimierung der Hyperparameter beginnen, müssen wir die Anfangskonfiguration bestimmen. Dazu gehören die Modellkonfiguration, die Hyperparameter des Optimierers und die Anzahl der Trainingsschritte. Bei der Entscheidung für eine Erstkonfiguration empfehlen wir, eine einfache, relativ schnelle und wenig ressourcenintensive Konfiguration zu finden, um vernünftige Ergebnisse zu erzielen.

Die Wahl einer schnellen und weniger ressourcenintensiven Anfangskonfiguration kann die Optimierung von Hyperparametern effizienter machen.

In den folgenden Kapiteln dieses Artikels werden wir uns mit dem Prozess der Hyperparameter-Optimierung befassen, einschließlich der Anpassung der Lernrate, der Regularisierung von Hyperparametern usw. Gleichzeitig werden wir weitere nützliche Informationen zur Optimierung der Deep-Learning-Parameter behandeln.

2. Wissenschaftliche Methoden zur Verbesserung der Modellleistung

Im ersten Kapitel haben wir einen Ausgangspunkt festgelegt, die Modellarchitektur, den Optimierer und die entsprechende Stapelgröße ausgewählt. Wir werden nun wissenschaftliche Ansätze zur Verbesserung der Modellleistung weiter untersuchen, um unseren Nutzen zu maximieren.

2.1 Inkrementelle Anpassungsstrategie

Bei der Optimierung der Modellleistung ist es eine kluge Entscheidung, eine inkrementelle Optimierungsstrategie anzuwenden. Wir beginnen mit einer einfachen Konfiguration und fügen nach und nach Funktionen und Verbesserungen hinzu, während wir gleichzeitig unser Verständnis des Problems vertiefen. Durch kontinuierliche Anpassung werden wir immer bessere Konfigurationen finden und die beste Konfiguration ständig aktualisieren, was als „Going Live“ bezeichnet wird.

Diese inkrementelle Anpassungsstrategie beinhaltet die Wiederholung der folgenden vier Schritte:

  1. Bestimmen Sie die Ziele der nächsten Experimentierrunde: Identifizieren Sie, was Sie als Nächstes verbessern möchten.
  2. Entwerfen und führen Sie ein Experiment durch: Richten Sie ein Experiment basierend auf Ihren Zielen ein und führen Sie es durch.
  3. Aus Experimentergebnissen lernen: Sammeln Sie Experimentergebnisse und lernen Sie daraus.
  4. Überlegen Sie, ob eine neue optimale Konfiguration eingeführt werden soll: Entscheiden Sie anhand der experimentellen Ergebnisse, ob eine neue optimale Konfiguration übernommen werden soll.

Durch diesen iterativen Prozess werden wir das Modell schrittweise optimieren und die Leistung kontinuierlich verbessern.

2.2 Exploration und Nutzung

Bei der Optimierung des Modells sollten wir uns auf ein besseres Verständnis des Problems konzentrieren und nicht nur auf die Reduzierung der Fehlerrate des Validierungssatzes. Die meiste Zeit sollte mit „Erkunden“ und nur wenig Zeit mit „Ausnutzen“ verbracht werden.

Indem wir ein tiefes Verständnis des Problems erlangen, können wir unnötige Änderungen vermeiden, identifizieren, auf welche Hyperparameter der Validierungssatzeffekt empfindlich reagiert, neue Richtungen entdecken, ungültige entfernen und den Suchraum für eine effizientere Optimierung verkleinern. Eine solche Untersuchung kann uns helfen, das Problem besser zu verstehen und letztendlich die Modellleistung zu optimieren.

2.3 Wählen Sie das Ziel für die nächste Experimentierrunde aus

Bei der Optimierung eines Modells sollte jede Versuchsrunde ein klares Ziel haben und klein genug sein, damit die Experimente tatsächlich Fortschritte in Richtung des Ziels machen können. Wenn wir versuchen würden, mehrere Funktionen hinzuzufügen oder mehrere Fragen gleichzeitig zu beantworten, wäre es möglicherweise nicht möglich, die Auswirkungen der einzelnen Funktionen zu entschlüsseln.

Zu den Zielen eines Experiments könnten beispielsweise gehören:

  • Versuchen Sie, die Trainingspipeline zu verbessern, indem Sie beispielsweise neue Regularisierer, Vorverarbeitungsmethoden usw. verwenden.
  • Verstehen Sie die Auswirkungen bestimmter Modellhyperparameter, wie z. B. Aktivierungsfunktionen.
  • Maximieren Sie die Validierungssatzmetrik.

Jedes Ziel sollte spezifisch sein und die Verbesserungsbereiche, die Sie verbessern möchten, klar angeben. Auf diese Weise können wir uns auf die Lösung eines bestimmten Problems konzentrieren, anstatt uns mit zu vielen Änderungen gleichzeitig herumschlagen zu müssen.

2.4 Gestaltung der nächsten Experimentierrunde

Nachdem wir die Ziele und redundanten Hyperparameter für die Experimente identifiziert haben, werden wir eine Reihe von Studien entwerfen, um Fortschritte bei der Erreichung der Ziele der Experimente zu erzielen. Diese Studien bestehen aus einer Reihe von Versuchen, bei denen es sich jeweils um eine andere Kombination von Hyperparameterkonfigurationen handelt.

2.4.1 Identifizieren Sie Zielhyperparameter, redundante Hyperparameter und feste Hyperparameter

Für ein bestimmtes Ziel werden alle Hyperparameter als Ziel-Hyperparameter, redundante Hyperparameter oder feste Hyperparameter kategorisiert.

  • Ziel-Hyperparameter: Der Hyperparameter, dessen Einfluss auf die Modellleistung wir messen möchten.
  • Redundante Hyperparameter: Hyperparameter, die für einen fairen Vergleich verschiedener Ziel-Hyperparameterwerte optimiert werden müssen, ähnlich wie redundante Parameter in der Statistik.
  • Feste Hyperparameter: Hyperparameter, die für die aktuelle Experimentierrunde auf festen Werten gehalten werden, sie müssen sich nicht ändern, oder wir möchten nicht, dass sie sich ändern.

Feste Hyperparameter schränken die Schlussfolgerungen aus den experimentellen Ergebnissen ein, da sich diese Parameter während des Experiments nicht ändern. Daher müssen wir sorgfältig auswählen, welche Hyperparameter korrigiert werden sollen, um falsche Schlussfolgerungen zu vermeiden.

2.4.2 Erstellen einer Studienreihe

Der Prozess der Erstellung einer Studie umfasst mehrere Aspekte:

  1. Wählen Sie die gewünschten Hyperparametervariablen für das Experiment aus.
  2. Wählen Sie einen Wertebereich (d. h. einen Suchraum) für diese Hyperparameter.
  3. Wählen Sie die Anzahl der Versuche aus.
  4. Wählen Sie einen automatischen Suchalgorithmus aus (falls Sie einen automatischen Suchalgorithmus verwenden).

Wir möchten den Trainingsprozess durch Experimente durchführen und gleichzeitig redundante Hyperparameter optimieren, um verschiedene Ziel-Hyperparameterwerte fair zu vergleichen. In einfachen Fällen können wir für jeden Ziel-Hyperparameterwert eine separate Studie entwerfen und redundante Hyperparameter optimieren. Auf diese Weise können wir die Leistung verschiedener Ziel-Hyperparameterwerte vergleichen.

In komplexeren Fällen müssen wir möglicherweise eine große Anzahl von Ziel-Hyperparameterwerten vergleichen, und eine große Anzahl unabhängiger Studien kann nicht durchgeführt werden. An diesem Punkt können wir die Zielhyperparameter im selben Suchraum wie die redundanten Hyperparameter platzieren und einen Suchalgorithmus verwenden, um die Werte beider Hyperparameter abzutasten. In diesem Fall müssen wir sicherstellen, dass der Suchalgorithmus die Werte der Ziel-Hyperparameter einheitlich durchsucht, um unfaire Vergleiche verschiedener Ziel-Hyperparameterwerte zu vermeiden.

2.4.3 Informationsgehalt und Kosten von Bilanzierungsversuchen

Beim Entwerfen eines Experiments müssen wir ein begrenztes Budget bereitstellen, um die folgenden drei Anforderungen vollständig zu erfüllen:

  1. Vergleichen Sie verschiedene Werte ausreichender Zielhyperparameter.
  2. Optimieren redundanter Hyperparameter auf einem ausreichend großen Suchraum.
  3. Den Suchraum redundanter Hyperparameter ausreichend dicht abtasten.

Diese drei Anforderungen stellen sicher, dass wir aus Experimenten genügend Erfahrungen sammeln können, um mit Sicherheit vernünftige Schlussfolgerungen ziehen zu können.

Die gleichzeitige Erfüllung aller drei Anforderungen erfordert jedoch möglicherweise eine Erhöhung der Anzahl von Versuchen, wodurch die Ressourcenkosten steigen. In der Praxis müssen wir diese drei Anforderungen ausbalancieren und sie entsprechend den Merkmalen des Problems und den Einschränkungen der Rechenressourcen zuweisen. Nach der Durchführung einer Studie müssen wir feststellen, ob die Studie den redundanten Hyperparameterraum ausreichend durchsucht hat, um die Leistung verschiedener Ziel-Hyperparameterwerte fair zu vergleichen.

2.5 Sammeln Sie Erfahrungen aus experimentellen Ergebnissen

Während der Experimente sollten wir uns nicht nur darauf konzentrieren, die ursprünglichen wissenschaftlichen Ziele jeder Versuchsreihe zu erreichen, sondern auch auf die Entstehung anderer Probleme achten. Wenn ein Problem festgestellt wird, sollten wir das Experiment ändern und erneut ausführen. Letztendlich besteht das Ziel jeder Reihe von Experimenten darin, die Beweise zu bewerten, die das Experiment für dieses Ziel liefert.

Manchmal müssen wir jedoch einige Probleme angehen, bevor wir experimentelle Fortschritte machen können. Bevor wir eine Reihe experimenteller Ergebnisse analysieren, sollten wir uns die folgenden zusätzlichen Fragen stellen:

  1. Ist der Suchraum groß genug? Wenn der untersuchte Sweet Spot nahe der Grenze des Suchraums liegt, kann es erforderlich sein, den Suchraum zu erweitern.
  2. Werden genügend Punkte aus dem Suchraum entnommen? Wenn nicht, müssen möglicherweise weitere Versuche durchgeführt werden.
  3. Wie viele Studien waren in jeder Studie nicht durchführbar? Wenn es viele undurchführbare Punkte gibt, muss der Suchraum möglicherweise optimiert oder neu parametrisiert werden.
  4. Hat das Modell Optimierungsprobleme? Was können wir aus der Trainingskurve der besten Versuche lernen?
  5. Haben Sie in Ihrem Experiment ein Überanpassungsproblem festgestellt? Wenn ja, müssen möglicherweise zusätzliche Regularisierungstechniken verwendet werden.
  6. Können Prüfungen am Ende der Trainingskurve noch verbessert werden? Wenn ja, müssen Sie möglicherweise die Anzahl der Trainingsschritte erhöhen oder den Lernratenplan anpassen.
  7. Gibt es eine hohe Schritt-zu-Schritt-Varianz beim Trainingsfehler oder beim Validierungsfehler spät im Training? Mögliche Abhilfemaßnahmen umfassen die Erhöhung der Batchgröße, die Verwendung von mehr Validierungsdaten, die Verwendung des Lernratenabfalls oder die Verwendung der Polyak-Mittelwertbildung.

Durch die Beantwortung der oben genannten Fragen können wir die Studie optimieren, den Suchraum verbessern und mehr Versuche durchführen oder andere Korrekturmaßnahmen ergreifen, um dem ursprünglichen Ziel näher zu kommen.

2.5.1 Identifizieren falscher Suchraumgrenzen

Wenn die besten aus dem Suchraum abgetasteten Punkte nahe an seinen Grenzen liegen, liegt möglicherweise ein Problem mit dem Suchraum vor. In diesem Fall kann es erforderlich sein, die Grenzen des Suchraums zu erweitern, um bessere Punkte zu finden. Um die Grenzen des Suchraums zu untersuchen, können wir ein einfaches Hyperparameter-Achsendiagramm zeichnen, in dem die Validierungszielwerte für abgeschlossene Versuche gegen einen Hyperparameter wie die Lernrate aufgetragen werden. Jeder Punkt entspricht einem Versuch, und der Validierungszielwert sollte normalerweise der optimale Wert sein, der während des Trainings erreicht wird. Wenn die besten Punkte an den Rändern des Suchraums liegen, kann es erforderlich sein, die Grenzen des Suchraums zu erweitern.

2.5.2 Es werden nicht genügend Punkte im Suchraum abgetastet

Es kann schwierig sein festzustellen, ob der Suchraum dicht genug abgetastet wurde. In der Praxis nehmen wir normalerweise so viele Stichproben, wie wir uns leisten können, und kalibrieren unsere Intuition darüber, wie viele Punkte sich im „guten“ Bereich des Suchraums befinden, indem wir uns die verschiedenen Achsendiagramme der Hyperparameter ansehen.

2.5.3 Trainingskurve prüfen

Die Untersuchung von Trainingskurven ist eine einfache Möglichkeit, häufige Fehlerarten zu identifizieren und kann uns dabei helfen, Prioritäten für die nächsten Schritte zu setzen. Normalerweise betrachten wir die Trainingskurve zumindest für die besten paar Versuche und gehen auf die folgenden Fragen ein: Liegt eine Überanpassung vor? Weisen Trainings- oder Validierungsfehler spät im Training eine hohe Schritt-zu-Schritt-Varianz auf? Können Versuche am Ende des Trainings noch verbessert werden? Diese Fragen helfen bei den nächsten Schritten im experimentellen Design.

2.5.4 Ist es sinnvoll, die Isolationskarte zur Erkennung von Änderungen zu verwenden?

Ein Isolationsdiagramm ist eine spezielle Art von Basis-Hyperparameter-Achsendiagramm, das für vergleichbare Vergleiche zwischen verschiedenen Werten eines Ziel-Hyperparameters verwendet wird. Durch das Zeichnen des Isolationsdiagramms können wir einfacher die Hyperparametereinstellungen bestimmen, die zur besten Leistung führen. Dies ist nützlich, um die Wirkung verschiedener Hyperparameterwerte zu vergleichen.

2.5.5 Automatisieren Sie das allgemeine Zeichnen

Um Zeit zu sparen, ist es am besten, so viele Diagramme wie möglich zu automatisieren. Wir können automatisch grundlegende Hyperparameter-Achsendiagramme, Trainingskurven und andere nützliche Visualisierungen generieren. Auf diese Weise können wir die experimentellen Ergebnisse bequemer anzeigen und vergleichen.

Die oben genannten Methoden sind hilfreich, um Erfahrungen aus den experimentellen Ergebnissen zu sammeln und den nächsten Schritt des experimentellen Designs und der Parameteranpassung zu steuern. Gleichzeitig werden wir im Verlauf des Experiments nach und nach lernen und neue Wege entdecken, um die Forschung zu optimieren.

2.6 Bestimmen Sie, ob diese Trainings-Workflow-Änderung oder Hyperparameter-Konfiguration übernommen werden soll

Bei der Entscheidung, ob Änderungen am Modell oder Trainingsverfahren vorgenommen oder neue Hyperparameterkonfigurationen übernommen werden sollen, müssen wir die Quelle der verschiedenen Änderungen in den Ergebnissen verstehen. Es gibt mehrere Hauptquellen für Abweichungen, die zu inkonsistenten Ergebnissen führen können:

  1. Trainervarianz, Retrain-Varianz oder Versuchsvarianz: Der Unterschied zwischen Trainingsläufen mit verschiedenen Zufallsstartwerten. Beispielsweise können unterschiedliche Zufallsinitialisierungen, Datenumstellungen, Dropout-Masken, Datenerweiterungs-Betriebsmodi und die Reihenfolge paralleler Vorgänge zu Versuchsvarianzen führen.
  2. Hyperparameter-Suchvarianz oder Lernvarianz: Die Variation der Ergebnisse, die durch unser Verfahren zur Auswahl von Hyperparametern verursacht wird. Beispielsweise können Quasi-Random-Search-Suchen, die zwei verschiedene Seeds im selben Suchraum verwenden, zu unterschiedlichen Hyperparameterwerten führen.
  3. Datenerfassung und Stichprobenvarianz: Die zufällige Aufteilung von Trainings-, Validierungs- und Testdaten oder die Varianz des Trainingsdatengenerierungsprozesses.

Wenn wir versuchen, Schlussfolgerungen über einen einzelnen Punkt im Hyperparameterraum hinaus zu ziehen, geht es uns vor allem darum, Varianz zu lernen. Die Lernvarianz hängt von der Anzahl der Versuche und dem Suchraum ab und ist normalerweise größer als die Versuchsvarianz.

Wir können den besten Test mehrmals durchführen, um die Trainingsvarianz abzuschätzen, bevor wir uns für einen Kandidatenwechsel entscheiden. Dies hilft uns zu bestimmen, ob ein neuer Hyperparameterpunkt (oder eine andere Änderung) übernommen werden soll, und stellt sicher, dass die übernommene Änderung zu einer echten Verbesserung führt, ohne zu viel Komplexität hinzuzufügen.

2.7 Nach der Erkundung

Sobald wir mit der Erkundung eines „guten“ Suchraums fertig sind und identifiziert haben, welche Hyperparameter optimiert werden müssen, sind Bayes’sche Optimierungstools eine erwägenswerte Option. In dieser Phase verlagert sich unser Fokus vom Erlernen weiterer Optimierungen auf die Erstellung einer optimalen Konfiguration für den Start von Modellen oder andere Zwecke.

Zu diesem Zeitpunkt sollten wir über einen genauen Suchraum verfügen, der die lokale Region um den am besten beobachteten Versuch enthält und bereits ausreichend beprobt ist. Unsere Erkundungsarbeit sollte die wichtigsten zu optimierenden Hyperparameter und ihre sinnvollen Bereiche aufdecken.

Wir können diese Hyperparameter verwenden, um den Suchraum zu konstruieren und die endgültige Autotuning-Studie innerhalb des Budgets durchzuführen. In solchen Fällen können Bayes'sche Optimierungstools automatisch die optimale Hyperparameterkonfiguration finden.

An dieser Stelle sollten wir auch darüber nachdenken, die Leistung des Modells im Testsatz zu überprüfen. Bei der Entscheidung, ob die durch die Bayes'sche Optimierung ermittelte optimale Konfiguration übernommen werden soll, müssen wir sicherstellen, dass die Änderung tatsächlich zu einer signifikanten Verbesserung führt und gleichzeitig die Einführung unnötiger Komplexität vermeidet.

3. Bestimmen Sie die Anzahl der Schritte für jeden Trainingslauf

Beim Modelltraining gibt es zwei Haupttypen von Arbeitsmodi: rechengebunden und rechenungebunden.

Wenn das Training rechengebunden ist: Das Training wird dadurch begrenzt, wie lange wir bereit sind zu warten, nicht durch die Menge der Trainingsdaten oder andere Faktoren. In diesem Fall bedeutet die Beschleunigung des Trainings eine Verbesserung des Trainingseffekts, und die optimale Trainingszeit liegt innerhalb des Zeitrahmens, den wir zu warten bereit sind.

Wenn das Training nicht durch Berechnungen eingeschränkt ist: Wir können es uns leisten, länger zu trainieren, wenn wir wollen. In diesem Fall gehen wir davon aus, dass wir in der Lage sind, auf einen sehr geringen Trainingsfehler zu trainieren, aber ein längeres Training verbessert den Validierungsfehler möglicherweise nicht wesentlich. Ein großzügiges Trainingszeitbudget kann die Optimierung erleichtern, insbesondere wenn der Zeitplan für den Lernratenabfall optimiert wird, da zwischen ihnen eine starke Wechselwirkung besteht.

3.1 So entscheiden Sie, wie lange trainiert werden soll, wenn das Training nicht durch Berechnungen begrenzt ist

Ohne rechnerisch gebunden zu sein, besteht unser Hauptziel darin, sicherzustellen, dass wir lange genug trainieren, damit das Modell eine optimale Leistung erbringt, und gleichzeitig zu vermeiden, dass zu viel durch die Anzahl der Trainingsschritte verschwendet wird. Im Zweifelsfall sollten wir uns eher für eine Verlängerung der Schulungszeit entscheiden. Wir müssen den Parameter max_train_steps während des Trainings nicht anpassen, um bessere Ergebnisse zu erzielen, sondern wählen einen Wert aus, verwenden ihn für alle Experimente und optimieren den Wert entsprechend den experimentellen Ergebnissen.

Um einen geeigneten Startkandidaten für max_train_steps zu ermitteln, können wir einen Lernraten-Suchalgorithmus verwenden. Der Algorithmus führt Versuche über einen kurzen Zeitraum durch und ermittelt die Anzahl der Schritte, die erforderlich sind, um den Trainingssatz mit einer Strategie zur Aktualisierung der konstanten Lernrate „perfekt“ anzupassen. Dieser Startwert dient als Kandidat für max_train_steps.

Bei der Entscheidung für max_train_steps sollten wir auch Änderungen in der Modellarchitektur oder den Daten berücksichtigen, da diese Faktoren die angemessene Anzahl von Trainingsschritten beeinflussen können.

3.2 So entscheiden Sie, wie lange trainiert werden soll, wenn das Training durch Berechnungen begrenzt ist

Da das Training rechnerisch gebunden ist, müssen wir mit begrenzten Ressourcen und Geduld so viel Verständnis wie möglich erlangen, um die Hyperparameter des Modells besser abzustimmen. Wir empfehlen zwei Anpassungsrunden:

Runde 1: Ein kurzer Trainingslauf, um die besten Modell- und Optimierer-Hyperparameter zu finden. In dieser Runde können wir das Problem so gut wie möglich verstehen, indem wir mit schnellen Schaltzeiten experimentieren.

Zweite Runde: Längeres Training der in der ersten Runde gefundenen optimalen Hyperparameterkonfiguration, um das endgültige Modell zu erhalten. Die Trainingszeit dieser Runde kann länger sein als die der ersten Runde, um die Leistung des Modells weiter zu verbessern.

In der ersten Runde können wir mit verschiedenen Zeitplänen für den Lernratenabfall experimentieren. Das Optimierungspotenzial für den Zeitplan für den Lernratenabfall ist jedoch relativ gering, während andere Hyperparameter normalerweise einen größeren Einfluss haben.

Durch schrittweises Erhöhen des Trainingsschrittlimits können wir in jeder Runde ein maximales Verständnis erreichen und das endgültig trainierte Modell schrittweise optimieren. In jeder Runde stellen wir sicher, dass die vorherigen Auswahlen noch korrekt sind und nehmen bei Bedarf Anpassungen vor.

Letztendlich können wir eine kleine Anzahl langer Experimente durchführen, um das endgültige Modell am optimalen Hyperparameterpunkt zu erhalten und so sicherzustellen, dass die Schlussfolgerungen, die wir in der kurzen Trainingszeit ziehen, auch nach langem Training noch zutreffen.

4. Zusätzliche Ergänzungen zur Trainingspipeline

In diesem Kapitel geht es hauptsächlich um die Optimierung der Trainingspipeline und einige zusätzliche Überlegungen. Nachfolgend beschreiben wir jeden Teil im Detail:

4.1 Optimierung der Eingabepipeline

Die Leistung der Eingabepipeline kann durch verschiedene Faktoren eingeschränkt sein, wie z. B. die Datenlesegeschwindigkeit, die Komplexität der Datenvorverarbeitung usw. Um die Leistung der Eingabepipeline zu optimieren, können folgende Eingriffe in Betracht gezogen werden:

  • Verwenden Sie Profilerstellungstools wie Perfetto (für JAX) oder TensorFlow Profiler (für TensorFlow), um leistungsbeschränkte Eingabepipelines zu diagnostizieren.
  • Stellen Sie sicher, dass der Datenspeicherort mit dem Trainingsprozess übereinstimmt, um E/A-Verzögerungen zu vermeiden, insbesondere beim Lesen von Trainingsdaten über das Netzwerk.
  • Erwägen Sie bei einer teuren Online-Datenvorverarbeitung eine einmalige Offline-Vorverarbeitung und das Speichern der Ergebnisse aus Effizienzgründen.
  • Verwenden Sie Prefetching-Tools wie tf.data.Dataset.prefetch, um Daten im Voraus abzurufen und das Training zu beschleunigen. Auf diese Weise bleibt die GPU nicht im Leerlauf, weil sie während des Trainings auf Daten wartet, wodurch die Trainingseffizienz verbessert wird.

4.2 Bewertung der Modellleistung

Bei der Bewertung der Modellleistung gibt es einige Vorgehensweisen, die dabei helfen können, genauere Ergebnisse zu erzielen:

  • Bewerten Sie mit einer größeren Batch-Größe als beim Training, um den Einfluss von Zufälligkeiten im Bewertungsprozess zu reduzieren.
  • Bewerten Sie die Modellleistung regelmäßig in festen Schrittintervallen statt in festen Zeitintervallen, um die Trainingskurve besser verfolgen zu können.
  • Achten Sie bei der Auswahl von Stichproben für die regelmäßige Auswertung auf Aspekte wie Stichprobengröße, Datenbalance usw., um sicherzustellen, dass die Leistung des Stichprobendatensatzes der des gesamten Datensatzes ähnelt.

4.3 Checkpoints speichern und nachträglich den besten Checkpoint auswählen

Um die Belastbarkeit und Wiederherstellung des Modells während des Trainings sicherzustellen, wird empfohlen, regelmäßig Prüfpunkte zu speichern. Ein Checkpoint ist eine Momentaufnahme des Modells während des Trainings, die zur Wiederherstellung des Modellzustands oder zur Fortsetzung des Trainings nach einer Trainingsunterbrechung verwendet werden kann.

Der beste Prüfpunkt ist nicht unbedingt der letzte Prüfpunkt. Insbesondere wenn die Leistung des Validierungssatzes im Laufe der Zeit nicht kontinuierlich zunimmt, sollte der beste Prüfpunkt im Nachhinein ausgewählt werden. Sie können die Leistung des Validierungssatzes als Maß verwenden und während des Trainings den Prüfpunkt mit der besten Leistung des Validierungssatzes als besten Prüfpunkt auswählen.

4.4 Einrichten der Experimentverfolgung

Die Verfolgung der Ergebnisse verschiedener Experimente kann bei der Lösung von Modellierungsproblemen sehr hilfreich sein. Beim Verfolgen von Experimenten können Sie eine Tabelle verwenden, um Informationen wie die Konfiguration des Experiments, die Anzahl der Durchläufe, die beste Modellleistung usw. aufzuzeichnen, um die Überprüfung und den Vergleich von Experimenten zu erleichtern.

Mit der Experimentverfolgung können Sie sich ein klareres Bild davon machen, wie jedes Experiment funktioniert hat, und Leistungsunterschiede zwischen verschiedenen Konfigurationen vergleichen. Dies hilft, das Verhalten des Modells besser zu verstehen und als Leitfaden für die anschließende experimentelle Gestaltung und Parameteroptimierung zu dienen.

4.5 Implementierungsdetails von BatchNorm

BatchNorm kann normalerweise durch LayerNorm ersetzt werden, in einigen Fällen muss jedoch möglicherweise trotzdem BatchNorm verwendet werden. Wenn Sie BatchNorm in einem Setup mit mehreren Geräten verwenden, müssen Sie sich der Datensynchronisierungsprobleme zwischen Geräten bewusst sein.

BatchNorm ist eine Technik zur Beschleunigung des Trainings, die die interne Kovariatenverschiebung reduziert und den Gradientenabstiegsprozess beschleunigt. In einem Setup mit mehreren Geräten können nicht synchronisierte BatchNorm-Parameteraktualisierungen auf jedem Gerät zu Leistungseinbußen oder instabilem Training führen.

Daher muss beim Training mit mehreren Geräten sichergestellt werden, dass die BatchNorm-Parameter zwischen den Geräten synchron bleiben. Die Parametersynchronisierung kann mithilfe eines verteilten Trainingsframeworks erreicht werden, beispielsweise mithilfe von Horovod oder anderen verteilten Trainingstools.

4.6 Überlegungen zu Multi-Host-Pipelines

Beim Multi-Host-Training müssen Sie auf die folgenden Punkte achten:

  • Protokollierung: Die Protokollierung wird nur auf einem Host durchgeführt, um Konflikte und Verwirrung zu vermeiden, die dadurch entstehen, dass mehrere Hosts gleichzeitig Protokolle schreiben.
  • Bewertung: Die Bewertung der Modellleistung wird nur auf einem Host durchgeführt, um die Konsistenz der Bewertungsergebnisse sicherzustellen.
  • Zufallszahlengenerator: Halten Sie die Seeds des Zufallszahlengenerators auf jedem Host konsistent, um durch Zufälligkeit verursachte inkonsistente Ergebnisse zu vermeiden.
  • Prüfpunkt: Der Prüfpunkt sollte auf einem Host gespeichert werden, um die Konsistenz und Wiederherstellung des Prüfpunkts sicherzustellen.
  • Daten-Sharding: Teilen Sie Daten ordnungsgemäß auf, um die Leistung zu verbessern und die Daten-Shard-Konsistenz über mehrere Hosts hinweg sicherzustellen.

Indem Sie auf diese Probleme achten, können Sie den reibungslosen Ablauf des Multi-Host-Trainings sicherstellen und Probleme vermeiden, die durch Inkonsistenzen zwischen mehreren Hosts verursacht werden. Auf diese Weise können die Rechenressourcen mehrerer Geräte vollständig genutzt, die Trainingsgeschwindigkeit beschleunigt und die Modellleistung verbessert werden.

Supongo que te gusta

Origin blog.csdn.net/weixin_42010722/article/details/131848416
Recomendado
Clasificación