SageMaker Bewährte Methoden für verteilte Modellparallelität - Amazon SageMaker

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

SageMaker Bewährte Methoden für verteilte Modellparallelität

Beachten Sie die folgenden Richtlinien, wenn Sie einen verteilten Trainingsjob mit der SageMaker Modellparallelbibliothek ausführen.

Die richtige Konfiguration für ein bestimmtes Modell einrichten

Bei der Skalierung eines Modells empfehlen wir Ihnen, die folgende Liste der Reihe nach durchzugehen. In jedem Listenelement werden die Vorteile der Verwendung der Techniken der Bibliothek sowie die möglichen Kompromisse erörtert.

Tipp

Wenn ein Modell mit einer Teilmenge der Bibliotheksfeatures gut passt, führt das Hinzufügen weiterer Modellparallelität oder speicherschonender Features in der Regel nicht zu einer Leistungssteigerung.

Verwendung großer GPU-Instancetypen
  • Im Bereich der Modellparallelität empfiehlt es sich, leistungsstarke Instances mit großen GPU-Speichern zu verwenden, um den Mehraufwand zu bewältigen, der durch Modellparallelitätsoperationen wie die Partitionierung von Modellen auf mehrere GPUs entsteht. Wir empfehlen die Verwendung von ml.p4d oder ml.p3dn Instances für das Training großer DL-Modelle. Diese Instances sind außerdem mit dem Elastic Fabric Adapter (EFA) ausgestattet, der eine höhere Netzwerkbandbreite bietet und umfangreiche Trainings mit Modellparallelität ermöglicht.

Status des Sharding-Optimierers
  • Die Auswirkungen des Sharding-Optimizer-Status hängen von der Anzahl der parallel Datenränge ab. In der Regel kann ein höherer Grad an Datenparallelität (proportional zur Größe des Rechenknotens) die Effizienz der Speichernutzung verbessern.

    Wenn Sie einen Cluster verkleinern möchten, stellen Sie sicher, dass Sie die State-Sharding-Konfiguration des Optimizers überprüfen. Beispielsweise passt ein großes DL-Modell mit Optimizer-State-Sharding, das auf einen Rechencluster mit 16 GPUs (z. B. zwei P4d- oder P4de-Instances) passt, möglicherweise nicht immer auf einen Knoten mit 8 GPUs (z. B. eine einzelne P4d- oder P4de-Instance). Dies liegt daran, dass der kombinierte Speicher von 8 GPUs geringer ist als der kombinierte Speicher von 16 GPUs, und der erforderliche Speicher pro GPU für das Sharding über 8 GPUs ist ebenfalls höher als der Speicher pro GPU für das Sharding über das 16-GPU-Szenario. Infolgedessen passt der erhöhte Speicherbedarf möglicherweise nicht in den kleineren Cluster.

    Weitere Informationen finden Sie unter Optimizer-Zustandsfragmentierung.

Checkpoint bei der Aktivierung
  • Die Speichereffizienz kann verbessert werden, indem Aktivierungsprüfpunkte für eine Gruppe von Modulen verwendet werden. Je mehr Sie die Module gruppieren, desto effizienter ist die Speichernutzung. Beim Checkpoint sequentieller Module für Ebenen gruppiert das strategy Argument der smp.set_activation_checkpointing Funktion die Ebenen für das Checkpointing zusammen. Beispielsweise ist das Gruppieren von zwei oder mehr Ebenen für Checkpoints speichereffizienter als das Gruppieren von Checkpoints für jeweils eine Ebene. Dadurch wird zusätzliche Rechenzeit gegen einen geringeren Speicherverbrauch eingetauscht.

    Weitere Informationen finden Sie unter Aktivierungs-Prüfpunkte.

Tensor-Parallelität
  • Der Grad der Tensorparallelität sollte eine Zweierpotenz (2, 4, 8,..., 2 n) sein, wobei der maximale Grad der Anzahl der GPUs pro Knoten entsprechen muss. Wenn Sie beispielsweise einen Knoten mit 8 GPUs verwenden, sind die möglichen Zahlen für den Grad der Tensorparallelität 2, 4 und 8. Wir empfehlen keine willkürlichen Zahlen (wie 3, 5, 6 und 7) für den Grad der Tensorparallelität. Wenn Sie mehrere Knoten verwenden, kann eine Fehlkonfiguration des Grads der Tensorparallelität dazu führen, dass Tensorparallelität zwischen den Knoten ausgeführt wird. Dies erhöht den Mehraufwand für die Kommunikation von Aktivierungen zwischen den Knoten und kann rechenintensiv werden.

    Weitere Informationen finden Sie unter Tensor-Parallelität.

Pipeline-Parallelität zwischen Knoten
  • Sie können die Pipeline-Parallelität sowohl innerhalb eines einzelnen Knotens als auch über mehrere Knoten hinweg ausführen. Wenn Sie Pipeline-Parallelität in Kombination mit Tensorparallelität verwenden, empfehlen wir, die Pipeline-Parallelität über mehrere Knoten hinweg auszuführen und die Tensorparallelität innerhalb einzelner Knoten beizubehalten.

  • Die Pipeline-Parallelität umfasst die folgenden drei Drehregler: microbatches, active_microbatches, und prescaled_batch.

    • Wenn Sie Tensorparallelität mit Pipeline-Parallelität verwenden, empfehlen wir die Aktivierung von prescaled_batch, damit die Batchgröße pro Modellparallelgruppe für effizientes Pipelining erhöht werden kann. Wenn prescaled_batch aktiviert ist, wird die im Trainingsskript festgelegte Losgröße tp_size mal die für jeden Rang festgelegte Losgröße ohne prescaled_batch.

    • Eine Erhöhung der Anzahl von microbatches hilft dabei, effizientes Pipelining und bessere Leistung zu erreichen. Beachten Sie, dass die effektive Mikrobatchgröße die Chargengröße geteilt durch die Anzahl der Mikrobatchen ist. Wenn Sie die Anzahl der Mikrobatchen erhöhen und gleichzeitig die Chargengröße konstant halten, verarbeitet jede Mikrocharge weniger Proben.

    • Die Anzahl von active_microbatches ist die maximale Anzahl von Mikrobatches, die während der Pipelining gleichzeitig verarbeitet werden. Für jeden aktiven Mikrobatch, der gerade verarbeitet wird, belegen seine Aktivierungen und Gradienten GPU-Speicher. Daher beansprucht eine Erhöhung von active_microbatches mehr GPU-Speicher.

  • Wenn sowohl der GPU- als auch der GPU-Speicher nicht ausreichend ausgelastet sind, erhöhen Sie active_microbatches für eine bessere Parallelisierung beim Pipelining.

  • Weitere Informationen zur Verwendung von Tensorparallelität mit Pipeline-Parallelität finden Sie unter Tensor-Parallelität kombiniert mit Pipeline-Parallelität.

  • Beschreibungen der oben genannten Parameter finden Sie unter Parameter für smdistributed in der SageMaker Python SDK-Dokumentation.

Aktivierungen auf die CPU auslagern
  • Stellen Sie sicher, dass dies in Kombination mit Aktivierungs-Checkpointing und Pipeline-Parallelität verwendet wird. Um sicherzustellen, dass das Entladen und Vorladen im Hintergrund erfolgt, geben Sie für den Microbatches-Parameter einen Wert größer als 1 an.

  • Beim Auslagern von Aktivierungen können Sie möglicherweise die Gesamtzahl der Mikrobatches erhöhen active_microbatches und manchmal auch an sie anpassen. Das hängt davon ab, welche Module mit Checkpoints versehen sind und wie das Modell partitioniert ist.

    Weitere Informationen finden Sie unter Aktivierungs-Entladung.

Referenzkonfigurationen

Das Schulungsteam für SageMaker Modellparallelität bietet die folgenden Referenzpunkte auf der Grundlage von Experimenten mit dem GPT-2-Modell, einer Sequenzlänge von 512 und einer Vokabelgröße von 50.000.

Die Anzahl der Modellparameter Instance-Typ Pipeline-Parallelität Tensor-Parallelität Zustands-Sharding im Optimizer Checkpointing bei der Aktivierung Vorskalierter Stapel Batch-Größe
10 Milliarden 16 ml.p4d.24xlarge 1 4 True Jede Transformatorschicht True batch_size=40
30 Milliarden 16 ml.p4d.24xlarge 1 8 True Jede Transformatorschicht True batch_size=32
60 Milliarden 32 ml.p4d.24xlarge 2 8 True Jede Transformatorschicht True batch_size=56, microbatches=4, active_microbatches=2

Sie können aus den vorherigen Konfigurationen extrapolieren, um die GPU-Speicherauslastung für Ihre Modellkonfiguration zu schätzen. Wenn Sie beispielsweise die Sequenzlänge für ein Modell mit 10 Milliarden Parametern oder die Größe des Modells auf 20 Milliarden erhöhen, möchten Sie möglicherweise zuerst die Batchgröße verringern. Wenn das Modell immer noch nicht passt, versuchen Sie, den Grad der Tensorparallelität zu erhöhen.

Ihr Trainingsskript ändern

  • Bevor Sie die Funktionen der SageMaker Modellparallel-Bibliothek in Ihrem Trainingsskript verwenden, lesen Sie sich das durchTipps und Fallstricke der SageMaker Distributed Model Parallelism Library.

  • Verwenden Sie den SageMaker lokalen Modus, um einen Trainingsjob schneller zu starten. Auf diese Weise können Sie einen Trainingsjob schnell lokal auf einer SageMaker Notebook-Instanz ausführen. Abhängig von der Größe der ML-Instanz, auf der Ihre SageMaker Notebook-Instanz ausgeführt wird, müssen Sie möglicherweise die Größe Ihres Modells anpassen, indem Sie die Modellkonfigurationen ändern, z. B. die verborgene Breite, die Anzahl der Transformator-Layer und die Aufmerksamkeit Heads. Prüfen Sie, ob das reduzierte Modell auf der Notebook-Instance gut funktioniert, bevor Sie einen großen Cluster für das Training des vollständigen Modells verwenden.

Überwachen und Protokollieren eines Schulungsjobs mithilfe der SageMaker Konsole und Amazon CloudWatch

Verwenden Sie die über die Konsole bereitgestellte Visualisierung, um Messwerte auf Systemebene wie CPU-Speicherauslastung, GPU-Speicherauslastung und GPU-Auslastung zu überwachen. SageMaker

  1. Wählen Sie im linken Navigationsbereich die Option Training aus.

  2. Wählen Sie Training Jobs (Trainingsaufträge) aus.

  3. Wählen Sie im Hauptbereich den Namen des Trainingsjobs aus, für den Sie weitere Details anzeigen möchten.

  4. Durchsuchen Sie den Hauptbereich und suchen Sie den Abschnitt Monitor, um sich die automatisierte Visualisierung anzusehen.

  5. Um die Protokolle der Trainingsjobs einzusehen, wählen Sie im Bereich Monitor die Option Protokolle anzeigen aus. Sie können auf die verteilten Trainingsjob-Protokolle des Trainingsjobs in zugreifen. CloudWatch Wenn Sie ein verteiltes Training mit mehreren Knoten gestartet haben, sollten Sie mehrere Protokollstreams mit Tags im Format algo-n-1234567890 sehen. Der Algo-1-Protokollstream verfolgt Trainingsprotokolle vom Hauptknoten (0.).

Weitere Informationen finden Sie unter Überwachen und analysieren Sie Schulungsjobs mithilfe von Amazon CloudWatch Metrics.

Berechtigungen

Um einen SageMaker Trainingsjob mit Modellparallelität oder den SageMaker verteilten Schulungsbeispielnotizbüchern auszuführen, stellen Sie sicher, dass Sie in Ihrer IAM-Rolle über die richtigen Berechtigungen verfügen, z. B. die folgenden: