Konfigurationstipps für die Bibliothek für SageMaker verteilte Datenparallelitä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.

Konfigurationstipps für die Bibliothek für SageMaker verteilte Datenparallelität

Lesen Sie die folgenden Tipps, bevor Sie die Bibliothek für SageMaker verteilte Datenparallelität (SMDDP) verwenden. Diese Liste enthält Tipps, die für alle Frameworks gelten.

Datenvorverarbeitung

Wenn Sie Daten während des Trainings mit einer externen Bibliothek vorverarbeiten, die die CPU verwendet, kann es zu einem CPU-Engpass kommen, da SageMaker verteilte Daten parallel die CPU für AllReduce Operationen verwenden. 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.

Einzelne Knoten im Vergleich zu mehreren 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-Instanz 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.

Debuggen der Skalierungseffizienz mit Debugger

Sie können Amazon SageMaker Debugger verwenden, um die CPU- und GPU-Auslastung und andere relevante Metriken 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 for Python (Boto3) für das Training auf verwenden SageMaker, können Sie den Debugger aktivieren, wie unter Konfigurieren des SageMaker Debuggers mit der Amazon SageMaker -API gezeigt.

Ein Beispiel für die Verwendung des Debuggers in einem SageMaker Schulungsauftrag finden Sie in einem der Notebook-Beispiele im SageMaker Notebook-Beispiel- GitHub Repository . Weitere Informationen zum 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 Genaue, große Minibatch-SGD: Training ImageNet in 1 Stunde, Abschnitte 2 und 3.

Benutzerdefinierte MPI-Optionen

Die parallel SageMaker verteilte Datenbibliothek verwendet Message Passing Interface (MPI), einen beliebten Standard für die Verwaltung der Kommunikation zwischen Knoten in einem Hochleistungs-Cluster, und verwendet die NCCL-Bibliothek von NVIDIA für die Kommunikation auf GPU-Ebene. Wenn Sie die datenparallele Bibliothek mit einem TensorFlow oder Pytorch verwendenEstimator, richtet der jeweilige Container die MPI-Umgebung ein und führt den mpirun Befehl aus, um Aufträge auf den Cluster-Knoten zu starten.

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 für das Training 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: