Konfigurationstipps für die SMDDP-Bibliothek (SageMaker AI Distributed Data Parallelism) - Amazon SageMaker AI

Konfigurationstipps für die SMDDP-Bibliothek (SageMaker AI Distributed Data Parallelism)

Lesen Sie die folgenden Tipps, bevor Sie die SMDDP-Bibliothek (SageMaker AI Distributed Data Parallelism) verwenden. Diese Liste enthält Tipps, die für alle Frameworks gelten.

Datenvorverarbeitung

Wenn Sie Daten während des Trainings mit einer externen Bibliothek, die die CPU nutzt, vorverarbeiten, kann es zu einem CPU-Engpass kommen, da SMDDP (SageMaker AI Distributed Data Parallel) die CPU für AllReduce-Operationen verwendet. Möglicherweise können Sie die Trainingszeit verkürzen, indem Sie die Vorverarbeitungsschritte in eine Bibliothek verschieben, die GPUs verwendet, oder indem Sie die gesamte Vorverarbeitung vor dem Training abschließen.

Einzelner oder mehrere Knoten

Wir empfehlen die Verwendung dieser Bibliothek mit mehreren Knoten. Die Bibliothek kann mit einem Einzelhost und mehreren Geräten (z. B. einer einzelnen ML-Compute-Instance mit mehreren GPUs) verwendet werden. Wenn Sie jedoch zwei oder mehr Knoten verwenden, führt die AllReduce Operation der Bibliothek zu einer deutlichen Leistungsverbesserung. Außerdem trägt NVLink auf einem einzelnen Host bereits zur AllReduce-Effizienz innerhalb der Knoten bei.

Skalierungseffizienz mit Debugger

Sie können den Amazon SageMaker Debugger verwenden, um die CPU- und GPU-Auslastung sowie andere interessante Kennzahlen während des Trainings zu überwachen und zu visualisieren. Sie können die integrierten Debuger-Regeln verwenden, um Probleme mit der Rechenleistung zu überwachen, wie, CPUBottleneck, LoadBalancing, und LowGPUUtilization. Sie können diese Regeln mit Debugger-Konfigurationen angeben, wenn Sie einen Amazon SageMaker Python SDK-Schätzer definieren. Wenn Sie AWS CLI und AWS SDK für Python (Boto3) für Trainings auf SageMaker AI verwenden, können Sie den Debugger wie in SageMaker Debugger mit Amazon SageMaker API konfigurieren gezeigt, aktivieren.

Um ein Beispiel für die Verwendung von Debugger in einem SageMaker-Trainingsjob zu sehen, können Sie auf eines der Notebook-Beispiele im GitHub-Repository von SageMaker Notebook Examples verweisen. Weitere Informationen über Debugger finden Sie unter Amazon SageMaker Debugger.

Batch-Größe

Beim verteilten Training sollten die Batchgrößen proportional zunehmen, wenn mehr Knoten hinzugefügt werden. Um die Konvergenzgeschwindigkeit zu erhöhen, wenn Sie Ihrem Trainingsjob mehr Knoten hinzufügen und die globale Batchgröße erhöhen, erhöhen Sie die Lernrate.

Eine Möglichkeit, dies zu erreichen, besteht in der schrittweisen Aufwärmphase der Lernrate, bei der die Lernrate im Laufe der Trainingsaufgabe von einem kleinen auf einen großen Wert erhöht wird. Durch diese Erhöhung wird ein plötzlicher Anstieg der Lernrate vermieden und eine gesunde Konvergenz zu Beginn der Ausbildung ermöglicht. Sie können beispielsweise eine lineare Skalierungsregel verwenden, bei der jedes Mal, wenn die Größe eines Minibatches mit k multipliziert wird, auch die Lernrate mit k multipliziert wird. Weitere Informationen zu dieser Technik finden Sie in der Forschungsarbeit Accurate, Large Minibatch SGD: Training ImageNet in 1 Stunde, Abschnitte 2 und 3.

Benutzerdefinierte MPI-Optionen

Die SMDDP-Bibliothek (SageMaker AI Distributed Data Parallel) verwendet Message Passing Interface (MPI), einen beliebten Standard für die Verwaltung der Kommunikation zwischen Knoten in einem Hochleistungscluster, und verwendet die NCCL-Bibliothek von NVIDIA für die Kommunikation auf GPU-Ebene. Wenn Sie die Datenparallelbibliothek mit einem TensorFlow oder Pytorch Estimator verwenden, richtet der jeweilige Container die MPI-Umgebung ein und führt den mpirun Befehl zum Starten von Jobs auf den Clusterknoten aus.

Sie können benutzerdefinierte MPI-Operationen mithilfe des custom_mpi_options-Parameters in der Estimator festlegen. Alle in diesem Feld übergebenen mpirun-Flags werden dem mpirun-Befehl hinzugefügt und von SageMaker AI zu Trainingszwecken ausgeführt. Sie können den distribution Parameter eines Estimator beispielsweise wie folgt definieren, um die NCCL_DEBUG Variable zu verwenden, um die NCCL-Version zu Beginn des Programms zu drucken:

distribution = {'smdistributed':{'dataparallel':{'enabled': True, "custom_mpi_options": "-verbose -x NCCL_DEBUG=VERSION"}}}

Verwenden Sie Amazon FSx und richten Sie eine optimale Speicher- und Durchsatzkapazität ein

Wenn Sie ein Modell auf mehreren Knoten mit verteilter Datenparallelität trainieren, wird dringend empfohlen, FSx for Lustre zu verwenden. Amazon FSx ist ein skalierbarer und leistungsstarker Speicherservice, der gemeinsam genutzten Dateispeicher mit schnellerem Durchsatz unterstützt. Wenn Sie Amazon FSx-Speicher in großem Maßstab verwenden, können Sie eine schnellere Datenladegeschwindigkeit über die Rechenknoten hinweg erreichen.

In der Regel würden Sie bei verteilter Datenparallelität erwarten, dass der gesamte Trainingsdurchsatz nahezu linear mit der Anzahl der GPUs skaliert. Wenn Sie jedoch suboptimalen Amazon FSx-Speicher verwenden, kann sich die Trainingsleistung aufgrund eines niedrigen Amazon FSx-Durchsatzes verlangsamen.

Wenn Sie beispielsweise den Bereitstellungstyp SCRATCH_2 des Amazon FSx-Dateisystems mit einer Mindestspeicherkapazität von 1,2 TiB verwenden, beträgt die I/O-Durchsatzkapazität 240 MB/s. Amazon FSx-Speicher funktioniert so, dass Sie physische Speichergeräte zuweisen können. Je mehr Geräte zugewiesen werden, desto größer ist der Durchsatz. Das kleinste Speicherinkrement für den Typ SRATCH_2 beträgt 1,2 TiB, und die entsprechende Durchsatzsteigerung beträgt 240 MB/s.

Gehen Sie davon aus, dass Sie über ein Modell verfügen, mit dem Sie auf einem 4-Node-Cluster über einen 100-GB-Datensatz trainieren können. Gehen Sie bei einer bestimmten Batchgröße, die für den Cluster optimiert ist, davon aus, dass das Modell eine Epoche in etwa 30 Sekunden abschließen kann. In diesem Fall beträgt die erforderliche I/O-Mindestgeschwindigkeit etwa 3 GB/s (100 GB/30 s). Dies ist offenbar eine viel höhere Durchsatzanforderung als 240 MB/s. Bei einer solch begrenzten Amazon FSx-Kapazität kann die Skalierung Ihres verteilten Trainingsauftrags auf größere Cluster I/O-Engpässe verschärfen. Der Durchsatz des Modelltrainings könnte sich in späteren Epochen verbessern, wenn sich der Cache ansammelt, aber der Amazon FSx-Durchsatz kann immer noch ein Engpass sein.

Um solche I/O-Engpässe zu vermeiden, sollten Sie die Speichergröße von Amazon FSx erhöhen, um eine höhere Durchsatzkapazität zu erzielen. Um einen optimalen I/O-Durchsatz zu ermitteln, können Sie in der Regel mit verschiedenen Amazon FSx-Durchsatzkapazitäten experimentieren und einen Durchsatz zuweisen, der Ihrer Schätzung entspricht oder etwas niedriger ist, bis Sie feststellen, dass dieser ausreicht, um die I/O-Engpassprobleme zu lösen. Im oben genannten Beispiel wäre Amazon FSx-Speicher mit 2,4 GB/s Durchsatz und 67 GB RAM-Cache ausreichend. Wenn das Dateisystem einen optimalen Durchsatz hat, sollte der Durchsatz beim Modelltraining entweder sofort oder nach der ersten Epoche, in der sich der Cache aufgebaut hat, seinen Höchstwert erreichen.

Weitere Informationen darüber, wie Sie die Speicher- und Bereitstellungstypen von Amazon FSx erhöhen können, finden Sie auf den folgenden Seiten in der Amazon FSx for Lustre-Dokumentation: