Anleitung zum Erstellen eines neuen Projekts

In diesem Abschnitt wird erläutert, wie Sie zu Beginn eines ML-Projekts Folgendes auswählen können:

  • Modellarchitektur
  • der Optimierer
  • Batchgröße
  • Erstkonfiguration

Annahmen

Bei den Hinweisen in diesem Abschnitt wird Folgendes vorausgesetzt:

  • Sie haben bereits das Problem formuliert und Ihre Trainingsdaten zum Teil vorbereitet.
  • Sie haben bereits eine Trainings- und Testpipeline eingerichtet.
  • Sie haben bereits Messwerte ausgewählt und implementiert, die so repräsentativ wie möglich für das sind, was Sie in der bereitgestellten Umgebung messen möchten.

Wenn Sie alle vorherigen Voraussetzungen erfüllt haben, können Sie sich nun der Modellarchitektur und der Trainingskonfiguration widmen.

Modellarchitektur auswählen

Beginnen wir mit den folgenden Definitionen:

  • Eine Modellarchitektur ist ein System zum Erstellen von Vorhersagen. Eine Modellarchitektur enthält das Framework zum Konvertieren von Eingabedaten in Vorhersagen, jedoch keine Parameterwerte. Ein neuronales Netzwerk mit drei versteckten Ebenen mit je 10, 5 Knoten bzw. 3 Knoten ist beispielsweise eine Modellarchitektur.
  • Ein model ist eine Modellarchitektur mit spezifischen Werten für alle Parameter. Ein Modell besteht beispielsweise aus dem in der Definition der Modellarchitektur beschriebenen neuronalen Netzwerk sowie bestimmten Werten für die Gewichte und Verzerrungen jedes Knotens.
  • Eine Modellfamilie ist eine Vorlage zum Erstellen einer Modellarchitektur anhand eines Satzes von Hyperparametern.

Die Auswahl der Modellarchitektur bedeutet im Prinzip, dass Sie eine Reihe verschiedener Modelle auswählen (eines für jede Einstellung der Modell-Hyperparameter).

Versuchen Sie nach Möglichkeit, eine dokumentierte Codebasis zu finden, die dem aktuellen Problem möglichst nahekommt. Reproduzieren Sie dieses Modell dann als Ausgangspunkt.

Optimierer auswählen

Kein Optimierer ist für alle Arten von ML-Problemen und Modellarchitekturen die „Beste“. Selbst der Leistungsvergleich ist schwierig. 🤖Wir empfehlen die Verwendung bewährter, beliebter Optimierungstools, insbesondere wenn Sie ein neues Projekt starten.

Wir empfehlen Ihnen, das beliebteste Optimierungstool für die Art des Problems auszuwählen, an dem Sie arbeiten. Wir empfehlen die folgenden bewährten Optimierungstools:

Achten Sie auf alle Argumente des ausgewählten Optimierungstools. Optimierer mit mehr Hyperparametern erfordern in der Regel mehr Abstimmungsaufwand. Dies ist besonders zu Beginn der Projektphase, wenn Sie versuchen, die besten Werte verschiedener anderer Hyperparameter (z. B. die Lernrate) zu ermitteln, während Optimierungsargumente als Ärgernis behandelt werden. Daher empfehlen wir den folgenden Ansatz:

  1. Wählen Sie zu Beginn des Projekts einen Optimierer ohne viele einstellbare Hyperparameter aus. Hier zwei Beispiele:
    • SGD mit festem Impuls
    • Adam hat Epsilon, Beta1 und Beta2 repariert.
  2. Wechseln Sie in späteren Phasen des Projekts zu einem allgemeineren Optimierungstool, mit dem mehr Hyperparameter abgestimmt werden, anstatt sie auf Standardwerte zu fixieren.

Batchgröße auswählen

Zusammenfassung: Die Batchgröße bestimmt die Trainingsgeschwindigkeit. Verwenden Sie die Batchgröße nicht, um die Leistung des Validierungssatzes direkt zu optimieren.

Die Batchgröße bestimmt stark die Trainingszeit und den Verbrauch von Rechenressourcen. Durch Erhöhen der Batchgröße verringert sich häufig die Trainingszeit. Dies hat folgende Auswirkungen:

  • Ermöglicht eine gründlichere Abstimmung von Hyperparametern innerhalb eines festgelegten Zeitintervalls, wodurch möglicherweise ein besseres endgültiges Modell erzielt wird.
  • Verringert die Latenz des Entwicklungszyklus, sodass neue Ideen häufiger getestet werden können.

Das Erhöhen der Batchgröße kann den Ressourcenverbrauch verringern oder erhöhen oder den Ressourcenverbrauch unverändert lassen.

Behandeln Sie die Batchgröße nicht als einstellbaren Hyperparameter für die Leistung des Validierungssatzes. Wenn alle der folgenden Bedingungen erfüllt sind, sollte die Modellleistung nicht von der Batchgröße abhängen:

  • Alle Optimierungs-Hyperparameter sind optimal abgestimmt.
  • Die Regularisierung ist ausreichend und gut abgestimmt.
  • Die Anzahl der Trainingsschritte ist ausreichend.

Die gleiche endgültige Leistung sollte bei jeder Batchgröße erreichbar sein (siehe Shallue et al. 2018 und Warum sollte die Batchgröße nicht angepasst werden, um die Leistung des Validierungs-Datasets direkt zu verbessern?).

Zulässige Batchgrößen ermitteln und Trainingsdurchsatz schätzen

Für ein bestimmtes Modell und einen bestimmten Optimierer unterstützt die verfügbare Hardware in der Regel eine Reihe von Batchgrößen. Der begrenzende Faktor ist in der Regel der Beschleunigerspeicher. Leider kann es schwierig sein, zu berechnen, welche Batchgrößen in den Speicher passen, ohne das vollständige Trainingsprogramm auszuführen oder zumindest zu kompilieren. Die einfachste Lösung besteht in der Regel darin, Trainingsjobs in unterschiedlichen Batchgrößen (z. B. durch Erhöhen von 2) für eine kleine Anzahl von Schritten auszuführen, bis einer der Jobs den verfügbaren Arbeitsspeicher überschreitet. Trainieren Sie für jede Batchgröße lange genug, um eine zuverlässige Schätzung des Trainingsdurchsatzes zu erhalten:

Trainingsdurchsatz = Anzahl der pro Sekunde verarbeiteten Beispiele

oder entsprechend der Zeit pro Schritt:

Zeit pro Schritt = Batchgröße ÷ Trainingsdurchsatz

Wenn die Beschleuniger noch nicht ausgelastet sind und sich die Batchgröße verdoppelt, sollte sich der Trainingsdurchsatz ebenfalls verdoppeln (oder mindestens doppelt). Entsprechend sollte die Zeit pro Schritt konstant (oder zumindest nahezu konstant) sein, wenn die Batchgröße zunimmt. Wenn dies nicht der Fall ist, hat die Trainingspipeline einen Engpass, z. B. bei E/A oder bei der Synchronisierung zwischen Rechenknoten. Sie sollten den Engpass diagnostizieren und beheben, bevor Sie fortfahren.

Wenn der Trainingsdurchsatz nur bis zu einer bestimmten maximalen Batchgröße zunimmt, sollten Sie nur Batchgrößen bis zu dieser maximalen Batchgröße berücksichtigen, auch wenn die Hardware eine größere Batchgröße unterstützt. Bei allen Vorteilen einer größeren Batchgröße wird davon ausgegangen, dass der Trainingsdurchsatz steigt. Wenn nicht, beheben Sie den Engpass oder verwenden Sie die kleinere Batchgröße.

Die Gradientenakkumulation simuliert eine größere Batchgröße, als die Hardware unterstützen kann, und bietet daher keine Durchsatzvorteile. Generell sollten Sie bei der angewendeten Arbeit die Akkumulation von Gradienten vermeiden.

Möglicherweise müssen Sie diese Schritte jedes Mal wiederholen, wenn Sie das Modell oder die Optimierung ändern. Mit einer anderen Modellarchitektur kann beispielsweise eine größere Batchgröße in den Speicher passen.

Wählen Sie die Batchgröße aus, um die Trainingszeit zu minimieren

Hier ist unsere Definition der Trainingsdauer:

  • Trainingszeit = (Zeit pro Schritt) x (Gesamtzahl der Schritte)

Häufig ist die Zeit pro Schritt für alle zulässigen Batchgrößen ungefähr konstant. Dies gilt in folgenden Fällen:

  • Durch parallele Berechnungen entsteht kein Overhead.
  • Alle Trainingsengpässe wurden diagnostiziert und behoben. Informationen zur Identifizierung von Trainingsengpässen finden Sie im vorherigen Abschnitt. In der Praxis ist mit der Erhöhung der Batchgröße in der Regel zumindest ein gewisser Aufwand verbunden.

Wenn die Batchgröße zunimmt, nimmt die Gesamtzahl der Schritte, die zum Erreichen eines festen Leistungsziels erforderlich sind, in der Regel ab, vorausgesetzt, Sie stimmen beim Ändern der Batchgröße alle relevanten Hyperparameter neu ab. (Siehe Shallue et al. 2018.) Eine Verdoppelung der Batchgröße kann beispielsweise die Gesamtzahl der erforderlichen Schritte halbieren. Diese Beziehung wird als perfekte Skalierung bezeichnet und sollte für alle Batchgrößen bis zu einer kritischen Batchgröße gelten.

Über die kritische Batchgröße hinaus führt eine Erhöhung der Batchgröße zu sinkenden Ergebnissen. Das heißt, durch Erhöhen der Batchgröße wird die Anzahl der Trainingsschritte nicht mehr reduziert, aber nie erhöht. Daher ist die Batchgröße, die die Trainingszeit minimiert, in der Regel die größte Batchgröße, die dennoch die Anzahl der erforderlichen Trainingsschritte reduziert. Die Batchgröße hängt vom Dataset, Modell und der Optimierung ab. Die Berechnung dieser Batchgröße ist noch offen, abgesehen davon, dass sie für jedes neue Problem experimentell ermittelt werden muss. 🤖

Achten Sie beim Vergleich der Batchgrößen auf folgende Unterschiede:

  • Ein Beispielbudget oder ein Epochenbudget – alle Tests werden ausgeführt, während die Anzahl der Trainingsbeispielpräsentationen festgelegt wird.
  • Ein Schrittbudget, bei dem alle Tests mit einer festen Anzahl von Trainingsschritten ausgeführt werden.

Beim Vergleich von Batchgrößen mit einem Epochenbudget wird nur das perfekte Skalierungssystem geprüft, auch wenn größere Batchgrößen eine sinnvolle Beschleunigung liefern könnten, da die Anzahl der erforderlichen Trainingsschritte reduziert wird. Häufig ist die größte Batchgröße, die von der verfügbaren Hardware unterstützt wird, kleiner als die kritische Batchgröße. Daher empfiehlt es sich (ohne Tests auszuführen), die größtmögliche Batchgröße zu verwenden.Es macht keinen Sinn, eine größere Batchgröße zu verwenden, wenn sich dadurch die Trainingszeit erhöht.

Wählen Sie die Batchgröße aus, um den Ressourcenverbrauch zu minimieren

Mit der Erhöhung der Batchgröße sind zwei Arten von Ressourcenkosten verbunden:

  • Vorauszahlungen. Beispiel: Erwerb neuer Hardware oder Umschreiben der Trainingspipeline, um ein Training mit mehreren GPUs / TPUs zu implementieren.
  • Nutzungskosten: Zum Beispiel: Abrechnung über die Ressourcenbudgets des Teams, Abrechnung durch einen Cloud-Anbieter, Strom-/Wartungskosten.

Wenn das Erhöhen der Batchgröße erhebliche Vorabkosten verursacht, ist es möglicherweise besser, die Erhöhung der Batchgröße so lange zu verschieben, bis das Projekt ausgereift ist und es einfacher ist, den Kompromiss zwischen Kosten und Nutzen abzuwägen. Die Implementierung paralleler Trainingsprogramme mit mehreren Hosts kann zu bugs und subtilen Problemen führen. Daher ist es wahrscheinlich besser, mit einer einfacheren Pipeline zu beginnen. Andererseits kann eine deutliche Beschleunigung der Trainingszeit zu Beginn des Prozesses sehr vorteilhaft sein, wenn viele Abstimmungstests erforderlich sind.

Wir bezeichnen die Gesamtnutzungskosten (die mehrere Arten von Kosten umfassen können) als Ressourcenverbrauch. Sie wird folgendermaßen berechnet:

Ressourcenverbrauch = Ressourcenverbrauch pro Schritt x Gesamtzahl der Schritte

Wenn Sie die Batchgröße erhöhen, verringert sich in der Regel die Gesamtzahl der Schritte. Ob der Ressourcenverbrauch zu- oder abnimmt, hängt davon ab, wie sich der Verbrauch pro Schritt ändert und hängt wie folgt von der Batchgröße ab:

  • Das Erhöhen der Batchgröße kann den Ressourcenverbrauch verringern. Wenn beispielsweise jeder Schritt mit der größeren Batchgröße auf der gleichen Hardware wie die kleinere Batchgröße ausgeführt werden kann (mit nur einer geringen Erhöhung der Zeit pro Schritt), kann die Erhöhung des Ressourcenverbrauchs pro Schritt durch die Verringerung der Anzahl der Schritte aufgewogen werden.
  • Das Erhöhen der Batchgröße wirkt sich möglicherweise nicht auf den Ressourcenverbrauch aus. Wenn sich beispielsweise die Verdoppelung der Batchgröße die Anzahl der erforderlichen Schritte halbiert und die Anzahl der verwendeten GPUs verdoppelt, ändert sich der Gesamtverbrauch (in Bezug auf GPU-Stunden) nicht.
  • Wenn Sie die Batchgröße erhöhen, kann sich der Ressourcenverbrauch erhöhen. Wenn beispielsweise zum Erhöhen der Batchgröße ein Hardwareupgrade erforderlich ist, kann die Steigerung des Verbrauchs pro Schritt die Reduzierung der Anzahl der Schritte aufwiegen.

Zum Ändern der Batchgröße müssen die meisten Hyperparameter neu abgestimmt werden

Die optimalen Werte der meisten Hyperparameter sind von der Batchgröße abhängig. Wenn Sie die Batchgröße ändern, muss der Abstimmungsprozess daher in der Regel noch einmal von vorn gestartet werden. Die Hyperparameter, die am stärksten mit der Batchgröße interagieren und daher für jede Batchgröße am wichtigsten sind, sind:

  • Die Hyperparameter der Optimierung (z. B. Lernrate und Momentum)
  • Die Regularisierungs-Hyperparameter

Beachten Sie dies bei der Auswahl der Batchgröße zu Beginn eines Projekts. Wenn Sie später zu einer anderen Batchgröße wechseln müssen, kann es schwierig, zeitaufwendig und teuer sein, die anderen Hyperparameter für die neue Batchgröße neu abzustimmen.

Interaktion der Batchnorm mit der Batchgröße

Die Batchnormalisierung ist kompliziert und sollte im Allgemeinen eine andere Batchgröße als die Gradientenberechnung zur Berechnung der Statistiken verwenden. Ausführliche Informationen finden Sie unter Implementierungsdetails für die Batchnormalisierung.

Anfangskonfiguration auswählen

In der ersten Phase der Hyperparameter-Abstimmung werden Startpunkte für Folgendes festgelegt:

  • der Modellkonfiguration (z.B. Anzahl der Ebenen)
  • Hyperparameter der Optimierung (z.B. Lernrate)
  • Anzahl der Trainingsschritte

Das Festlegen dieser Anfangskonfiguration erfordert einige manuell konfigurierte Trainingsläufe sowie Versuch und Irrtum.

Unser Leitprinzip lautet:

Finden Sie eine einfache, relativ schnelle Konfiguration mit relativ geringem Ressourcenverbrauch, die eine angemessene Leistung erzielt.

Dabei gilt:

  • Einfach bedeutet, unnötige Pipelinefeatures wie spezielle Regularisierung oder Architekturtricks zu vermeiden. Eine Pipeline ohne Dropout-Regularisierung (oder mit deaktivierter Dropout-Regularisierung) ist beispielsweise einfacher als eine mit Dropout-Regularisierung.
  • Eine angemessene Leistung hängt vom Problem ab, aber mindestens ein hinreichend trainiertes Modell funktioniert viel besser als das Zufallsverfahren im Validierungs-Dataset.

Wenn Sie eine schnelle Anfangskonfiguration wählen, die nur minimale Ressourcen beansprucht, ist die Hyperparameter-Abstimmung wesentlich effizienter. Beginnen Sie beispielsweise mit einem kleineren Modell.

Die Auswahl der Anzahl der Trainingsschritte beinhaltet einen Ausgleich zwischen folgender Spannung:

  • Das Training für weitere Schritte kann die Leistung verbessern und die Hyperparameter-Abstimmung vereinfachen. Weitere Informationen finden Sie unter Shallue et al. 2018.
  • Umgekehrt bedeutet das Training mit weniger Schritten, dass jeder Trainingslauf schneller ist und weniger Ressourcen verbraucht. Dadurch wird die Abstimmungseffizienz erhöht, da die Zeit zwischen den Zyklen verkürzt wird und Sie mehr Tests parallel ausführen können. Wenn Sie außerdem zu Beginn des Projekts ein unnötig großes Schrittbudget ausgewählt haben, kann es später im Projekt schwer sein, es zu ändern, z. B. wenn Sie den Lernratenplan für diese Anzahl von Schritten optimiert haben.