Heim > Artikel > Technologie-Peripheriegeräte > Durch die Änderung einiger Codezeilen beschleunigt PyTorch die Alchemie und die Zeit für die Modelloptimierung wird erheblich verkürzt.
Wie kann man die Geschwindigkeit von „Alchemie“ in PyTorch verbessern?
Kürzlich hat uns der bekannte Machine-Learning- und KI-Forscher Sebastian Raschka seinen Trick gezeigt. Ihm zufolge reduzierte seine Methode die BERT-Optimierungszeit von 22,63 Minuten auf 3,15 Minuten, indem nur wenige Codezeilen geändert wurden, ohne die Genauigkeit des Modells zu beeinträchtigen, und die Trainingsgeschwindigkeit wurde um das ganze Siebenfache erhöht.
Der Autor gab sogar an, dass der gesamte Trainingsprozess nur 2 Minuten dauert, wenn 8 GPUs zur Verfügung stehen, wodurch eine 11,5-fache Leistungsbeschleunigung erreicht wird.
Schauen wir uns an, wie er es geschafft hat.
Zunächst verwendet der Autor das DistilBERT-Modell für die Forschung, eine optimierte Version von BERT, deren Umfang jedoch um 40 % reduziert ist nahezu kein Leistungsverlust. Der zweite ist der Datensatz „IMDB Large Movie Review“, ein großer Filmrezensionsdatensatz, der insgesamt 50.000 Filmrezensionen enthält. Der Autor verwendet Methode c in der folgenden Abbildung, um die Stimmung der Filmkritiken im Datensatz vorherzusagen.
Nachdem die Grundaufgaben klar erklärt wurden, folgt der Trainingsprozess von PyTorch. Damit jeder diese Aufgabe besser verstehen kann, stellt der Autor auch ausführlich eine Aufwärmübung vor, nämlich das Trainieren des DistilBERT-Modells anhand des IMDB-Filmrezensionsdatensatzes. Wenn Sie den Code selbst ausführen möchten, können Sie mithilfe der entsprechenden Python-Bibliotheken eine virtuelle Umgebung einrichten, wie unten gezeigt:
Die Versionen der relevanten Software sind wie folgt:
Überspringen Sie jetzt die langweiligen. Für eine Einführung in das Laden von Daten müssen Sie nur wissen, dass dieser Artikel den Datensatz in 35.000 Trainingsbeispiele, 5.000 Validierungsbeispiele und 10.000 Testbeispiele unterteilt. Der erforderliche Code lautet wie folgt:
Codeteil-Screenshot
Vollständige Codeadresse:
https://github.com/rasbt/ schnell er-pytorch -blog/blob/main/1_pytorch-distilbert.py
Führen Sie dann den Code auf der A100-GPU aus und erhalten Sie die folgenden Ergebnisse:
Screenshot einiger Ergebnisse
Wie oben erwähnt Wie im Code gezeigt, ist das Modell von der zweiten bis zur dritten Runde etwas überpassend und die Überprüfungsgenauigkeit sinkt von 92,89 % auf 92,09 %. Nach einer Feinabstimmung des Modells von 22,63 Minuten betrug die endgültige Testgenauigkeit 91,43 %.
Verwenden der Trainer-Klasse
Der nächste Schritt besteht darin, den obigen Code zu verbessern. Der Verbesserungsteil besteht hauptsächlich darin, das PyTorch-Modell in LightningModule einzubinden, damit die Trainer-Klasse von Lightning verwendet werden kann. Einige Code-Screenshots lauten wie folgt:
Vollständige Codeadresse: https://github.com/rasbt/faster-pytorch-blog/blob/main/2_pytorch-with-trainer.py
Der obige Code erstellt eine LightningModule, das definiert, wie Training, Validierung und Tests durchgeführt werden. Im Vergleich zum zuvor angegebenen Code liegt die Hauptänderung in Teil 5 (d. h. ### 5 Finetuning), in dem es um die Feinabstimmung des Modells geht. Anders als zuvor verpackt der Feinabstimmungsteil das PyTorch-Modell in die LightningModel-Klasse und verwendet die Trainer-Klasse, um das Modell anzupassen.
Der vorherige Code zeigte einen Rückgang der Validierungsgenauigkeit von Runde 2 zu Runde 3, aber der verbesserte Code verwendet ModelCheckpoint, um das beste Modell zu laden. Auf derselben Maschine erreichte das Modell in 23,09 Minuten eine Testgenauigkeit von 92 %.
Beachten Sie: Wenn Sie Checkpointing deaktivieren und zulassen, dass PyTorch im nicht deterministischen Modus ausgeführt wird, wird dieser Lauf am Ende die gleiche Laufzeit wie normales PyTorch haben (Zeit 22,63 Minuten statt 23,09 Minuten).
Automatisches Training mit gemischter Präzision
Wenn die GPU außerdem Training mit gemischter Präzision unterstützt, können Sie die GPU einschalten, um die Recheneffizienz zu verbessern. Die Autoren verwenden ein automatisches Training mit gemischter Präzision und wechseln zwischen 32-Bit- und 16-Bit-Gleitkomma ohne Einbußen bei der Genauigkeit.
Unter dieser Optimierung kann mithilfe der Trainer-Klasse ein automatisches gemischtes Präzisionstraining mit einer Codezeile erreicht werden:
Die oben genannten Vorgänge können die Trainingszeit verkürzen von 23,09 Minuten auf 8,75 Minuten, was fast dreimal schneller ist. Die Genauigkeit des Testsatzes beträgt 92,2 % und ist gegenüber den vorherigen 92,0 % sogar leicht verbessert.
Verwenden des statischen Diagramms Torch.Compile
Die jüngste Ankündigung von PyTorch 2.0 zeigt, dass das PyTorch-Team eine neue toch.compile-Funktion eingeführt hat. Diese Funktion kann die Ausführung von PyTorch-Code beschleunigen, indem sie optimierte statische Diagramme generiert, anstatt dynamische Diagramme zum Ausführen von PyTorch-Code zu verwenden.
Da PyTorch 2.0 noch nicht offiziell veröffentlicht wurde, müssen Sie zunächst Torchtriton installieren und auf die neueste Version von PyTorch aktualisieren, um diese Funktion nutzen zu können.一 Ändern Sie dann den Code, indem Sie diese Zeile hinzufügen:
Das Obige beschreibt das gemischte Präzisionstraining zum Beschleunigen von Code auf einer einzelnen GPU. Als nächstes stellen wir die Multi-GPU-Trainingsstrategie vor. Die folgende Abbildung fasst mehrere verschiedene Multi-GPU-Trainingstechniken zusammen.
Möchten Sie verteilte Datenparallelität implementieren kann durch DistributedDataParallel erreicht werden. Sie müssen nur eine Codezeile ändern, um Trainer zu verwenden.
Nach diesem Optimierungsschritt auf 4 A100-GPUs folgt dieser Absatz Der Code wurde 3,52 Minuten lang ausgeführt, um eine Testgenauigkeit von 93,1 % zu erreichen.
# 🎜 🎜#
Deep Speed
Endlich, Der Autor untersuchte die Ergebnisse der Verwendung der Deep-Learning-Optimierungsbibliothek DeepSpeed und der Multi-GPU-Strategien in Trainer. Zuerst müssen Sie die DeepSpeed-Bibliothek installieren:
Dann ändern Sie einfach eine Codezeile. Aktivieren Sie diese Bibliothek:
Nach dieser Welle dauerte es Es dauerte 3,15 Minuten, bis es erreicht war. Es wurde eine Testgenauigkeit von 92,6 % erreicht. PyTorch hat jedoch auch eine Alternative zu DeepSpeed: vollständig geshardtes DataParallel, aufgerufen mit strategy="fsdp", dessen Fertigstellung schließlich 3,62 Minuten dauerte.
Das Obige ist, wie der Autor Verbessert das PyTorch-Modell. Für die Methode zum Trainieren der Geschwindigkeit können interessierte Freunde dem Original-Blog folgen und es ausprobieren. Ich glaube, Sie werden die gewünschten Ergebnisse erzielen.
Das obige ist der detaillierte Inhalt vonDurch die Änderung einiger Codezeilen beschleunigt PyTorch die Alchemie und die Zeit für die Modelloptimierung wird erheblich verkürzt.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!