In diesem Abschnitt wird erläutert, wie Sie zu Beginn der einem ML-Projekt:
- Modellarchitektur
- das Optimierungstool
- die Batchgröße
- Erstkonfiguration
Annahmen
Die Tipps in diesem Abschnitt setzen Folgendes voraus:
- Sie haben das Problem bereits formuliert, und Ihre Trainingsdaten zu einem gewissen Grad vorbereitet.
- Sie haben bereits eine Trainings- und Testpipeline eingerichtet.
- Sie haben bereits Messwerte ausgewählt und implementiert, die repräsentativ sind. was Sie in der bereitgestellten Umgebung messen möchten.
Unter der Voraussetzung, dass Sie alle vorherigen Voraussetzungen erfüllt haben, können Sie Zeit für die Modellarchitektur und die Trainingskonfiguration aufwenden.
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 verwandelt, enthält aber keine parameter-Werten Beispiel: einem neuronalen Netzwerk mit drei verborgenen Schichten von je 10 Knoten, 5 Knoten und 3 Knoten. ist eine Modellarchitektur.
- Ein Modell ist eine Modellarchitektur sowie bestimmte Werte für alle Parameter. Ein Modell besteht beispielsweise aus dem in der Definition der Modellarchitektur sowie spezifische Werte für die Gewichtungen und Verzerrungen jedes Knotens.
- Eine Modellfamilie ist eine Vorlage zum Erstellen einer Modellarchitektur mit einer Reihe von Hyperparametern.
Bei der Auswahl der Modellarchitektur müssen Sie (eines für jede Einstellung der Modell-Hyperparameter).
Versuchen Sie, wenn möglich, eine dokumentierte Codebasis zu finden, die etwas enthält, so nahe wie möglich am aktuellen Problem liegt. Reproduzieren Sie dieses Modell dann als Ausgangspunkt.
Optimierungstool auswählen
Kein Optimierungstool ist das „beste“ für alle Arten von ML-Problemen und Modellarchitekturen. Selbst wenn Sie nur die Leistung der Optimierungstools vergleichen, ist schwierig. 🤖Wir empfehlen die Verwendung etablierter, beliebter Optimierungstools, insbesondere wenn Sie ein neues Projekt starten.
Wir empfehlen, das für den Problemtyp am häufigsten verwendete Optimierungstool auszuwählen. woran Sie arbeiten. Wir empfehlen die folgenden bewährten Optimierungstools:
- SGD mit Impuls: Wir empfehlen die Nesterov-Variante.
- Adam und NAdam, die allgemeiner sind als SGD mit Dynamik. Adam hat vier abstimmbare Argumente und sind sie alle wichtig! Siehe Wie sollten Adams Hyperparameter abgestimmt?
Achten Sie auf alle Argumente des ausgewählten Optimierungstools. Optimierer mit mehr Hyperparametern erfordern in der Regel einen höheren Abstimmungsaufwand. Dies ist besonders schmerzhaft in den Anfangsphasen eines Projekts, wenn Sie versuchen, die besten Werte verschiedener anderer Hyperparameter (z. B. Lernrate), während Optimiererargumente wie folgt behandelt werden: als störend empfunden werden. Daher empfehlen wir den folgenden Ansatz:
- Wählen Sie zu Beginn des Projekts einen Optimierungstool aus, für den es nicht viele Einstellungsmöglichkeiten gibt.
Hyperparameter. Hier zwei Beispiele:
<ph type="x-smartling-placeholder">
- </ph>
- SGD mit festem Impuls.
- Adam mit korrigiertem Epsilon, Beta1 und Beta2.
- Wechseln Sie in späteren Phasen des Projekts zu einem allgemeineren Optimierungstool, das passt weitere Hyperparameter an, anstatt sie auf Standardwerte festzulegen.
Batchgröße auswählen
Zusammenfassung: Die Batchgröße bestimmt die Trainingsgeschwindigkeit. die Batchgröße nicht nutzen, um die Leistung des Validierungs-Datasets direkt zu optimieren.
Die Batchgröße bestimmt die Trainingszeit und Rechenressourcen stark konsumiert wird. Wenn Sie die Batchgröße erhöhen, verringert sich oft die Trainingszeit. die:
- Ermöglicht eine genauere Feinabstimmung von Hyperparametern innerhalb einer festgelegten Zeit zu einem besseren endgültigen Modell führen.
- Reduziert die Latenz des Entwicklungszyklus, sodass neue Ideen häufiger getestet werden.
Durch das Vergrößern der Batchgröße kann der Ressourcenverbrauch verringert oder erhöht werden. oder den Ressourcenverbrauch unverändert lassen.
Behandeln Sie die Batchgröße nicht als abstimmbaren Hyperparameter für die Validierung festgelegt. Wenn alle erfüllt sind, sollte die Modellleistung nicht davon abhängen, Batchgröße:
- Alle Hyperparameter sind optimal abgestimmt.
- Die Regularisierung ist ausreichend und gut abgestimmt.
- Die Anzahl der Trainingsschritte ist ausreichend.
Dieselbe Leistung sollte mit jeder Batchgröße erreichbar sein. (Siehe Shallue et al. 2018 und Warum sollte die Batchgröße nicht angepasst werden, um Leistung des Validierungs-Datasets?)
Zulässige Batchgrößen bestimmen und Trainingsdurchsatz schätzen
Für ein bestimmtes Modell und Optimierungstool unterstützt die verfügbare Hardware in der Regel Batchgrößen auswählen. Der begrenzende Faktor Accelerator-Arbeitsspeicher. Leider lässt sich nicht einfach kalkulieren, dass die Batchgrößen in den Arbeitsspeicher passen, ohne die API auszuführen oder zu kompilieren Schulungsprogramm. Die einfachste Lösung ist normalerweise das Ausführen von Trainingsjobs. bei verschiedenen Batchgrößen (z. B. Erhöhen der Potenz von 2) für eine kleine Anzahl der Schritte, bis einer der Jobs den verfügbaren Arbeitsspeicher überschreitet. Für lange genug trainieren, um eine zuverlässige Schätzung Trainingsdurchsatz:
Trainingsdurchsatz = Anzahl der pro Sekunde verarbeiteten Beispiele
oder entsprechend der Zeit pro Schritt:
Zeit pro Schritt = Batchgröße / Trainingsdurchsatz
Sind die Beschleuniger noch nicht gesättigt, wenn sich die Batchgröße verdoppelt, sollte sich auch der Trainingsdurchsatz verdoppeln (oder fast verdoppeln). Entsprechend sollte die Zeit pro Schritt konstant (oder zumindest fast konstant) wird, wenn die Batchgröße zunimmt. Ist dies nicht der Fall, die Trainingspipeline einen Engpass hat, z. B. E/A oder Synchronisierung zwischen Rechenknoten. Erwägen Sie, den Engpass zu diagnostizieren und zu beheben bevor Sie fortfahren.
Wenn der Trainingsdurchsatz nur bis zu einer maximalen Batchgröße ansteigt, werden nur Batchgrößen bis zu dieser maximalen Batchgröße berücksichtigt, auch wenn unterstützt die Hardware größere Batches. Alle Vorteile einer größeren Batchgröße setzen auf den Trainingsdurchsatz. steigt. Ist dies nicht der Fall, beheben Sie den Engpass oder verwenden Sie die kleinere Batchgröße.
Die Gradientenakkumulation simuliert eine größere Batchgröße als die Hardware Support und bietet daher keine Durchsatzvorteile. Sie sollten in der Regel eine Farbverläufe bei angewandten Arbeiten vermeiden.
Sie müssen diese Schritte möglicherweise jedes Mal wiederholen, wenn Sie das Modell oder mit dem Optimierungstool. Beispielsweise kann eine andere Modellarchitektur um in den Arbeitsspeicher zu passen.
Batchgröße auswählen, um die Trainingszeit zu minimieren
Unsere Definition der Trainingszeit:
- Trainingszeit = (Zeit pro Schritt) x (Gesamtzahl der Schritte)
Sie können die Zeit pro Schritt oft als annähernd konstant erachten für alle zulässigen Batchgrößen. Dies gilt in folgenden Fällen:
- Durch parallele Berechnungen entsteht kein Mehraufwand.
- Alle Engpässe im Training wurden diagnostiziert und behoben. Im vorherigen Abschnitt finden Sie Informationen zur Identifizierung Trainingsengpässe. In der Praxis gibt es in der Regel die durch die Erhöhung der Batchgröße entstehen.
Mit zunehmender Batchgröße ist die Gesamtzahl der Schritte erforderlich, um ein festgelegtes Leistungsziel sinkt in der Regel, die relevanten Hyperparameter sind. (Siehe Shallue et al. 2018) Die Verdoppelung der Batchgröße kann beispielsweise die Gesamtzahl der Schritte erforderlich. Diese Beziehung wird als perfekte Skalierung bezeichnet und sollte für alle Batchgrößen bis zu einer kritischen Batchgröße festhalten.
Über die kritische Batchgröße hinaus rückläufige Einnahmen. Das heißt, die Batchgröße wird erhöht, reduziert die Anzahl der Trainingsschritte nicht mehr, erhöht sie aber nie. Daher ist die Batchgröße, die die Trainingszeit minimiert, Größte Batchgröße, die die Anzahl der Trainingsschritte noch reduziert erforderlich. Diese Batchgröße hängt vom Dataset, Modell, und Optimierer. Es ist ein offenes Problem, wie man ihn berechnen kann, es für jedes neue Problem experimentell zu finden. 🤖
Achten Sie beim Vergleich von Batchgrößen auf den Unterschied zwischen Folgendem:
- Ein Beispielbudget oder Epochenbudget, bei dem alle Tests ausgeführt werden, während die Anzahl der Schulungsbeispielpräsentationen reparieren können.
- Ein Schrittbudget, bei dem alle Tests mit einer festen Anzahl von Trainingsschritten.
Beim Vergleich von Batchgrößen mit einem Epochenbudget wird nur die perfekte auch wenn größere Batches trotzdem durch eine Reduzierung der erforderlichen Trainingsschritte eine sinnvolle Beschleunigung. Häufig ist die größte Batchgröße, die von der verfügbaren Hardware unterstützt wird, kleiner als die kritische Batchgröße ist. Daher ist eine gute Regel ohne Tests dafür zu sorgen, dass der größte Batch Es ist sinnlos, eine größere Batchgröße zu verwenden, wenn diese die Schulungsdauer zu erhöhen.
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:
- Vorabkosten. beispielsweise beim Kauf neuer Hardware oder beim Umschreiben des Trainingspipeline, um Training mit mehreren GPUs / TPUs zu implementieren.
- Nutzungskosten: Zum Beispiel die Abrechnung mit den Ressourcenbudgets des Teams, Abrechnung durch einen Cloud-Anbieter, Strom-/Wartungskosten
Wenn für die Erhöhung der Batchgröße erhebliche Vorabkosten anfallen, kann es besser sein, die Batchgröße bis zum Projektbeginn zu erhöhen, ausgereift und es ist einfacher, den Kosten-Nutzen-Kompromiss zu bewerten. Die Implementierung von parallelen Trainingsprogrammen mit mehreren Hosts Programmfehler und kleinere Probleme Daher ist es wahrscheinlich besser, mit einer einfacheren ohnehin schon. Dagegen lässt sich die Trainingszeit erheblich verkürzen, kann sehr hilfreich sein, wenn viel Feinabstimmung Tests erforderlich sind.
Wir beziehen uns auf die Gesamtnutzungskosten (die mehrere unterschiedliche (Arten von Kosten) als Ressourcenverbrauch berechnet, der wie folgt berechnet wird:
Ressourcenverbrauch = Ressourcenverbrauch pro Schritt x Gesamtzahl der Schritte
Durch das Erhöhen der Batchgröße wird in der Regel die Gesamtzahl der Schritte reduziert. Ob der Ressourcenverbrauch zu- oder abnimmt, hängt von Wie sich der Verbrauch pro Schritt ändert, der von der Batchgröße abhängig ist:
- Durch das Erhöhen der Batchgröße kann der Ressourcenverbrauch verringert werden. Wenn z. B. jeder Schritt mit der größeren Batchgröße auf der gleichen Hardware wie die kleinere Batchgröße (mit mehr Zeit pro Schritt), ist jede Erhöhung der Ressource pro Schritt könnte durch die Abnahme der Anzahl der Schritte.
- Durch das Erhöhen der Batchgröße wird der Ressourcenverbrauch möglicherweise nicht geändert. Wenn sich durch die Verdoppelung der Batchgröße z. B. die Anzahl der Schritte halbiert, und verdoppelt die Anzahl der verwendeten GPUs, also den Gesamtverbrauch in Bezug auf die GPU-Stunden.
- Das Erhöhen der Batchgröße kann den Ressourcenverbrauch erhöhen. Wenn beispielsweise die Batchgröße aktualisiert werden muss, kann der Anstieg des Verbrauchs pro Schritt die Reduzierung der die Anzahl der Schritte.
Zum Ändern der Batchgröße müssen die meisten Hyperparameter neu abgestimmt werden
Die optimalen Werte der meisten Hyperparameter hängen von der Batchgröße ab. Daher muss zum Ändern der Batchgröße in der Regel die Abstimmung gestartet werden. noch einmal von vorne anfangen. Die Hyperparameter, die am stärksten interagieren mit der Batchgröße zu vergleichen. Daher ist es am wichtigsten, für jede Batchgröße:
- Die Hyperparameter des Optimierers (z. B. Lernrate und Impuls)
- 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, schwierig, zeitaufwendig und teuer, die anderen Hyperparameter abzustimmen für die neue Batchgröße aus.
Interaktion der Batchnorm mit der Batchgröße
Die Batch-Norm ist kompliziert und sollte im Allgemeinen eine andere Batch-Verarbeitungsmethode verwenden. als die Gradientenberechnung zur Statistikberechnung. Weitere Informationen finden Sie unter Implementierung der Batchnormalisierung Details finden Sie eine ausführliche Diskussion.
Anfangskonfiguration auswählen
In der ersten Phase der Hyperparameter-Abstimmung Ausgangspunkt für Folgendes:
- die Modellkonfiguration (z.B. Anzahl der Ebenen)
- Optimierungs-Hyperparameter (z.B. Lernrate)
- Anzahl der Trainingsschritte
Zum Ermitteln dieser Erstkonfiguration sind einige manuelle konfigurierte Trainingsläufe sowie „Trial and Error“.
Unser Leitprinzip lautet:
Einen einfachen, relativ schnellen und relativ geringen Ressourcenverbrauch finden Konfiguration, die eine angemessene Leistung liefert.
Dabei gilt:
- Einfach bedeutet, unnötige Pipelinefunktionen wie spezielle oder architektonische Tricks. Eine Pipeline ohne Dropout Regularisierung (oder bei deaktivierter Dropout-Regularisierung) einfacher ist als eine mit Dropout-Regularisierung.
- Die angemessene Leistung hängt vom Problem ab, aber mindestens ein vernünftig trainiertes Modell funktioniert viel besser als Zufall für das Validierungs-Dataset.
Schnelle Erstkonfiguration wählen, die ein Minimum an Energie verbraucht Ressourcen die Hyperparameter-Abstimmung viel effizienter. Beginnen Sie beispielsweise mit einem kleineren Modell.
Die Auswahl der Anzahl der Trainingsschritte beinhaltet das Ausgleichen folgender Spannungen:
- Wenn Sie mit mehr Schritten trainieren, kann die Leistung verbessert und der Hyperparameter vereinfacht werden Feinabstimmung. (Weitere Informationen finden Sie unter Shallue et al. 2018).
- Umgekehrt bedeutet das Training mit weniger Schritten, dass jeder Trainingslauf und verbraucht weniger Ressourcen. So lässt sich die Abstimmungseffizienz steigern, die Zeit zwischen den Zyklen durch, sodass Sie mehr Tests parallel durchführen können. Falls Sie außerdem zu Beginn des Tests ein unnötig großes Schrittbudget zu einem späteren Zeitpunkt im Projekt möglicherweise nur schwer zu ändern; zum Beispiel sobald Sie den Lernratenplan für diese Anzahl von Schritten angepasst haben.