HyperAI

PyTorchs Killerwaffe: EDL in GPU-Clustern Mit AdaptDL Optimieren

vor 4 Jahren
Populärwissenschaft
Information
Yang Bai
特色图像

EDL steht für Elastic Deep Learning, wird von der LF AI Foundation entwickelt und ist ein Trainingsframework für tiefe neuronale Netzwerke, das den Grad der Parallelität dynamisch anpassen kann.Es unterstützt die Verwaltung von Clustern mit mehreren Mandanten, kann die Warte- und Abschlusszeit des Modelltrainings ausgleichen und die Ressourcennutzung verbessern.

Das Trainieren von Deep-Learning-Modellen ist in der Regel zeitaufwändig und erfordert hohe Kosten hinsichtlich Rechenressourcen, Speicherplatz usw.

Am Beispiel des BERT-Modells dauert der Trainingsprozess auf der GPU oft mehr als 2.000 Stunden, während das Training der ResNet- und VGG-Modelle mindestens 100 Stunden dauert.

Nach der heutigen Kostenrechnung für Cloud Computing können die Kosten für das Modelltraining Tausende oder sogar Zehntausende Yuan betragen.Um die Kosten des Modelltrainings zu kontrollieren,Es entstanden Cluster zur gemeinsamen Nutzung von Rechenressourcen. Was wir heute vorstellen, ist AdaptDL, das vom Petuum CASL-Team entwickelt wurde und EDL in GPU-Clustern erheblich optimiert.

Herausforderungen gemeinsam genutzter Cluster

Mit gemeinsam genutzten ClusternMehrere Benutzer können Modelltrainingsaufgaben einzeln übermitteln.

Dadurch wird nicht nur die Verschwendung durch die Überbereitstellung von Rechenressourcen reduziert, sondern durch die Nutzung ungenutzter Ressourcen können Benutzer auch ein komplexes Modell in nur wenigen Tagen oder sogar Stunden auf einer einzigen Workstation trainieren.

Allerdings bringen gemeinsam genutzte Cluster auch einige eigene Probleme mit sich.

  Zu den typischen Herausforderungen gemeinsam genutzter Cluster gehören:

1. Ressourcenzuweisung:Wenn mehrere Aufgaben einen Cluster gemeinsam nutzen, muss die Zuweisung der GPU-Ressourcen sorgfältig geplant werden. Wenn Sie beispielsweise ein Modell trainieren, kann das Training mit der GPU auf derselben Maschine viel schneller erfolgen, als wenn Sie die GPUs auf mehreren Maschinen verwenden. Um einen Wettbewerb zwischen Trainingsaufgaben um die Netzwerkbandbreite zu vermeiden, sollten unterschiedliche verteilte Trainingsaufgaben GPUs auf unterschiedlichen Maschinen zugewiesen werden.

2. Trainingsgeschwindigkeit und Skalierbarkeit variieren:Die Auswahl der richtigen GPU-Konfiguration für Ihre Trainingsaufgabe erfordert eine ständige Überwachung der Trainingsgeschwindigkeit und Skalierbarkeit Ihres Modells, die sich im Laufe der Zeit ändern. Verwenden Sie größere Batchgrößen, insbesondere wenn Sie sich der Konvergenz nähern. Daher ist es besser, zu Beginn des Trainings weniger GPU-Ressourcen zu verwenden.

3. Trainingskonfiguration:Normalerweise müssen wir im Voraus wissen, welche GPUs verfügbar sind, damit wir sie für wichtige Trainings konfigurieren können. Dies ist in einem gemeinsam genutzten Cluster manchmal nicht möglich. Beispielsweise werden Batchgröße und Lernrate häufig anhand der Anzahl der GPUs bestimmt. Wenn bekannt ist, dass sich die GPUs auf unterschiedlichen Maschinen befinden, kann die Gradientenakkumulation zum Überwinden von Netzwerkengpässen usw. verwendet werden.

4. Fairness und Verfügbarkeit:Während der GPU-Spitzenauslastung müssen sich manche Benutzer möglicherweise in die Warteschlange einreihen und auf ungenutzte GPUs warten, manche Benutzer, die bereits Aufgaben ausführen, möchten jedoch die Anzahl der GPUs erhöhen, um die Geschwindigkeit zu erhöhen. Wie kann der Widerspruch zwischen beiden ausgeglichen und gelöst werden?

AdaptDL vereinfacht und beschleunigt das Modelltraining auf lokalen Rechnern und gemeinsam genutzten Clustern

AdaptDL löst die Probleme gemeinsam genutzter Cluster

Um die mit Pool-Computing und gemeinsam genutzten Clustern in Organisationen verbundenen Mängel zu beheben, hat das Petuum CASL-Team AdaptDL entwickelt.Um das verteilte Training auf gemeinsam genutzten Clustern zu vereinfachen und zu beschleunigen.

AdaptDL ist ein ressourcenadaptives Trainings- und Planungsframework für Deep Learning (DL). Es kann die Leistung von Trainingsaufgaben in Echtzeit überwachen und die Ressourcenzuweisung (wie GPUs, Recheninstanzen usw.) während der Aufgabenausführung flexibel anpassen.

Es behebt die oben genannten Probleme in gemeinsam genutzten Clustern und bietet die folgenden Vorteile:

1. Verbessern Sie die Nutzung gemeinsam genutzter GPU-Cluster:AdaptDL kann alle Modelltrainingsaufgaben analysieren und lernen, wie verschiedene Aufgaben unter unterschiedlichen GPU-Ressourcenkonfigurationen ausgeführt werden. Mithilfe des erlernten Wissens kann der AdaptDL-Scheduler GPU-Ressourcen für verschiedene Trainingsaufgaben fair und effizient konfigurieren. Mit zunehmender Anzahl der Trainingsaufgaben und einem besseren Verständnis der Leistungsmerkmale verschiedener Aufgaben lernt AdaptDL, die GPU flexibel neu zu konfigurieren.

2. Reduzieren Sie die Kosten für das Cloud-Modelltraining:AdaptDL kann eine moderate Anzahl von GPU-Instanzen in der Cloud bereitstellen, um unnötige Kosten zu vermeiden. AdaptDL kann den Cluster auch automatisch erweitern, wenn während des Trainings größere Batchgrößen verwendet werden.

3. Groß angelegte Schulungen einfach umsetzen:Die Verwendung größerer Batchgrößen kann das Training auf vielen GPUs beschleunigen, ist jedoch nicht einfach anzuwenden. Wenn einige Modelle eine zu große Batchgröße verwenden, kann sich die Trainingszeit aufgrund der verringerten statistischen Effizienz verlängern. Wenn die Batchgröße jedoch zu klein ist, kann die GPU nicht effektiv genutzt werden. AdaptDL kann auf gemeinsam genutzten Clustern, Cloud-Umgebungen und lokalen Maschinen automatisch die entsprechende Batchgröße auswählen.

Modelle, die AdaptDL verwenden, benötigen im Durchschnitt weniger Zeit zum Trainieren als Optimus und Tiresias

Für jede Modelltrainingsaufgabe kann AdaptDL die Batchgröße, Lernrate und Gradientenakkumulation automatisch anpassen. In der Cloud-Service-Plattform können Sie auch die Anzahl der Spot-Instanzen steuern.

Die Praxis bei Petuum zeigt, dass mit Hilfe von AdaptDL Shared Cluster Training-Modellen,Im Durchschnitt waren die Fertigstellungszeiten zwei- bis dreimal schneller und die Kosten dreimal niedriger, wenn Spot-Instances in AWS verwendet wurden.

Start

AdaptDL kann in zwei Modi verwendet werden.

1. Clusterplanung:Ermöglicht das Ausführen mehrerer Aufgaben auf einem Kubernetes-Cluster. Mithilfe der AdaptDL-Python-Bibliothek kann der AdaptDL-Scheduler in den PyTorch-Code integriert werden, um automatisch die optimale Anzahl von GPUs und die optimale Trainings-Batch-Größe auszuwählen.

2. Selbstständiges Training:Trainieren Sie Modelle mit adaptiver Batchgröße und Lernrate auf jedem Cluster oder lokalen Computer mit mehreren GPUs. AdaptDL kann automatisch herausfinden, wann eine größere Batchgröße verwendet werden muss, um das Modelltraining zu beschleunigen.

  Training mit der AdaptDL Python-Bibliothek:

Die Adaptdl-Python-Bibliothek vereinfacht den PyTorch-Trainingscode.Passen Sie die Batchgröße und Lernrate an.Es sind keine weiteren Einstellungen erforderlich.

python3 –m pip install adaptdl

Am Beispiel von PyTorch MNIST müssen nur wenige Codezeilen geändert werden. Wie in der folgenden Abbildung dargestellt:

AdaptDL bietet eine verteilte datenparallele Schnittstelle ähnlich der nativen Schnittstelle von PyTorch, wodurch die Änderung vorhandenen verteilten Trainingscodes vereinfacht wird.

Erster Schritt:

verwenden adaptdl.torch.AdaptiveDataLoader  Alternative torch.utils.data.DataLoader .

AdaptiveDataLoader kann während des Trainings automatisch die optimale Batchgröße auswählen, basierend auf dem Durchsatz und der statistischen Effizienz des Programms. Beim Ausführen eines Checkpoints kann der Zustand auch gespeichert werden, sodass das Training nach einem Neustart dort fortgesetzt werden kann, wo es unterbrochen wurde.

train_loader.autoscale_batch_size(1024)  AdaptDL erstellen  kann automatisch die effektivste Batchgröße für das Training auswählen,Die maximale globale Batchgröße in allen Trainingsprozessen beträgt 1024.

Nächste:

verwenden adaptdl.torch.AdaptiveDataParallel  Paketmodell.

adaptdl.torch.AdaptiveDataParallel  Während des Trainingsprozesses wird die Gradient Noise Scale berechnet, mit der die statistische Effizienz berechnet werden kann. Wenn sich die Batchgröße ändert,AdaptiveDataParallel  Die Lernrate wird automatisch entsprechend der Regel angepasst.

StandardmäßigAdaptiveDataParallel   Der verwendete Algorithmus ist AdaScale, der bei einer Vielzahl von Aufgaben gute Leistungen erbringt.

Während des KontrollpunktsAdaptiveDataParallel  Modellparameter, Optimiererstatus und LR-Schedulerstatus können automatisch gespeichert werden und diese Einstellungen können nach dem Neustart des Trainings mit einem Klick wiederhergestellt werden.

Mit den oben genannten Änderungen können Benutzer den Trainingscode auf ihrem lokalen Computer oder in einem verteilten Cluster ausführen. AdaptDL wählt die richtige Batchgröße und Lernrate für ein schnelleres verteiltes Training und führt automatisch eine Gradientenakkumulation durch, um Netzwerkprobleme zu überwinden.Vergleich des YOLOv3-Trainings auf Maschinen mit adaptiver und manueller Batchgröße. Adaptive bietet einen erheblichen Vorteil hinsichtlich Training und Batchgrößenvergleich.

Ohne AdaptDL verlängert sich die Trainingszeit, wenn eine zu kleine Batchgröße gewählt wird, da die GPU nicht vollständig ausgelastet wird. Im Gegenteil: Wenn Sie eine zu große Batchgröße wählen, führt dies auch zu einer längeren Trainingszeit, da für die Konvergenz mehr Epochen erforderlich sind.Im Vergleich dazu kann AdaptDL automatisch eine bessere Trainingsleistung erzielen, ohne eine feste Batchgröße auszuwählen.

  Clusterverwaltung mit AdaptDL-Scheduler:

Der AdaptDL-Scheduler kann automatisch die von der Trainingsaufgabe zu verwendenden GPU-Ressourcen bestimmen.Dadurch werden Trainingsaufgaben in gemeinsam genutzten Clustern intelligenter.

Durch die Flexibilität wird die Trainingsaufgabe erweitert, um zusätzliche GPUs zu verwenden, wenn die Leerlaufrate des Clusters hoch ist. Wenn die Clusterauslastungsrate hoch ist, wird sie verkleinert, um weniger GPU-Ressourcen zu verwenden, anstatt die Trainingsaufgabe anzuhalten.

Der AdaptDL-Scheduler bietet auch andere Funktionen,Beispielsweise durch die Organisation von Clustern, um Netzwerkkonflikte zwischen verschiedenen Aufgaben zu vermeiden und die Fairness zwischen konkurrierenden Trainingsaufgaben aufrechtzuerhalten.

Dank der Koordination zwischen dem Scheduler und jeder Trainingsaufgabe kann AdaptDL den gemeinsam genutzten Cluster effizient nutzen.

Wenn für eine Aufgabe eine größere Batchgröße effektiv genutzt werden kann, überträgt AdaptDL automatisch mehr GPUs auf den Job, um das Training zu beschleunigen. Wenn andererseits nur kleinere Batchgrößen verwendet werden können, können die ungenutzten GPUs effizienter anderen Aufgaben zugewiesen werden.

Der AdaptDL-Scheduler kann mit einem Klick auf jeder Kubernetes-Instanz mit Helm installiert werden. Der Befehl lautet wie folgt:

helm install adaptdl adaptdl-sched \
-— repo https://github.com/petuum/adaptdl/raw/helm-repo \
-— namespace adaptdl — create-namespace \
-— set docker-registry.enabled=true

Nach der Installation des AdaptDL-Schedulers können Sie die AdaptDL-CLI verwenden, um Trainingsaufgaben zu übermitteln.Die Trainingsaufgabe verwendet zunächst eine einzelne GPU und wird dann mehrmals mit unterschiedlichen GPU-Anzahlen neu gestartet, wobei AdaptDL die optimale Anzahl der zu verwendenden GPUs berechnet. Egal wie viele GPUs es gibt,AdaptDL wählt immer die effektivste Batchgröße und passt die Lernrate entsprechend an.

AdaptDL-Cluster-Tracking-Beispiel

Das farbige Balkendiagramm zeigt die Anzahl der Compute-Instanzen, die verschiedenen Aufgaben zugewiesen sind. AdaptDL kann die Anzahl der Recheninstanzen, die jede Aufgabe erhält, dynamisch optimieren.

Mit AdaptDL werden PyTorch-Trainingsjobs auf gemeinsam genutzten Clustern zwei- bis dreimal schneller ausgeführt. Darüber hinaus unterstützt der AdaptDL-Scheduler auch AWS-Spot-Instances, was die Kosten um das Dreifache senkt.

Schließlich können Sie AdaptDL und NNI auch verwenden, um die Workloads zur Hyperparameteroptimierung zu beschleunigen (AdaptDL + NNI Post).

Projektadresse:

https://github.com/petuum/adaptdl

Dieser Artikel wurde aus dem PyTorch Medium-Blog übersetzt.