In den letzten Jahren hat sich das Gebiet der Verarbeitung natürlicher Sprache (NLP) rasant entwickelt. Während sich die Hardware verbessert hat, beispielsweise mit der neuesten Generation von Beschleunigern von NVIDIA und Amazon, stoßen Praktiker des fortgeschrittenen maschinellen Lernens (ML) immer noch regelmäßig auf Probleme, wenn sie ihre großen Sprachmodelle über mehrere GPUs skalieren.
In diesem Blogbeitrag fassen wir kurz den Aufstieg von NLP-Modellen im großen und kleinen Maßstab zusammen, hauptsächlich durch die von Hugging Face bereitgestellte Abstraktion und mit dem modularen Backend von Amazon SageMaker. Insbesondere heben wir die Einführung von vier zusätzlichen Funktionen innerhalb der SageMaker-Modellparallelbibliothek hervor, die 175 Milliarden Parameter für NLP-Modell-Vortraining und -Feinabstimmung für Kunden freischalten.
Wir haben diese Bibliothek auf der Trainingsplattform SageMaker verwendet und einen Durchsatz von 32 Samples pro Sekunde auf 120 ml.p4d.24xlarge-Instanzen und 175 Milliarden Parametern erreicht. Wir gehen davon aus, dass bei einer Erhöhung auf 240 Instanzen das Training des vollständigen Modells 25 Tage dauern würde.
Weitere Informationen zur Modellparallelität finden Sie im Dokument Amazon SageMaker-Modellparallelität: Ein allgemeines und flexibles Framework für das Training großer Modelle.
Sie können auch das GPT2-Notebook sehen, das wir verwendet haben, um diese Leistungszahlen auf unserem zu generieren GitHub-Repository.
Weitere Informationen zur Verwendung der neuen Funktionen innerhalb der SageMaker-Modellparallelität finden Sie unter Erweiterte Funktionen der SageMaker Model Parallel Library für PyTorch und Verwendung mit dem SageMaker Python SDK.
NLP auf Amazon SageMaker – Hugging Face und Modellparallelität
Wenn Hugging Face und NLP neu für Sie sind, müssen Sie unbedingt wissen, dass Anwendungen, die die Verarbeitung natürlicher Sprache (NLP) verwenden, allmählich eine Leistung auf menschlichem Niveau erreichen. Dies wird weitgehend durch einen Lernmechanismus, genannt Aufmerksamkeit, aus der ein Deep-Learning-Modell hervorging, das sogenannte Transformator, das viel besser skalierbar ist als frühere sequentielle Deep-Learning-Methoden. Die mittlerweile berühmte BERT-Modell wurde entwickelt, um aus dem Transformer Kapital zu schlagen, und entwickelte nebenbei mehrere nützliche NLP-Taktiken. Transformers und die Reihe von Modellen, sowohl innerhalb als auch außerhalb von NLP, die alle von BERT inspiriert wurden, sind die Hauptmaschine hinter Ihren Google-Suchergebnissen, in deiner Ergebnisse von Google Übersetzer und eine Vielzahl neuer Startups.
SageMaker und Hugging Face haben sich zusammengetan, um dies für Kunden so einfach wie nie zuvor zu machen. Wir haben Deep-Learning-Container (DLCs) für Hugging Face gestartet, damit Sie vortrainierte Modelle direkt von Hugging Face aus trainieren und hosten können Repository von über 26,000 Modellen. Wir haben gestartet der SageMaker-Schulungscompiler damit Sie die Laufzeit Ihrer Hugging Face Trainingsschleifen um bis zu 50 % beschleunigen können. Wir haben auch integriert das Hugging Face-Flaggschiff Transformers SDK mit unsere verteilten Schulungsbibliotheken um die Skalierung Ihrer NLP-Modelle einfacher als je zuvor zu machen.
Weitere Informationen zu Hugging Face Transformer-Modellen auf Amazon SageMaker finden Sie unter Unterstützung für Hugging Face Transformer-Modelle.
Neue Funktionen für umfangreiches NLP-Modelltraining mit der parallelen SageMaker-Modellbibliothek
Auf der AWS re:Invent 2020 hat SageMaker verteilte Bibliotheken eingeführt, die die beste Leistung in der Cloud für das Training von Computer-Vision-Modellen wie z Maske-RCNN und NLP-Modelle wie T5-3B. Möglich wird dies durch verbesserte Kommunikationsprimitive, die 20–40 % schneller sind als NCCL auf AWS, und Modellverteilungstechniken, die es extrem großen Sprachmodellen ermöglichen, über zehn bis hundert bis tausende von GPUs zu skalieren.
Die SageMaker Model Parallel Library (SMP) hat Ihnen schon immer die Möglichkeit gegeben, Ihr vordefiniertes NLP-Modell in PyTorch zu nehmen, sei es durch Hugging Face oder anderswo, und dieses Modell auf mehrere GPUs in Ihrem Cluster zu partitionieren. Anders gesagt, SMP zerlegt Ihr Modell in kleinere Teile, damit Sie keine OOM-Fehler (Out of Memory) erleben. Wir freuen uns, zusätzliche speichersparende Techniken hinzuzufügen, die für große Modelle entscheidend sind, nämlich:
- Tensorparallelität
- Optimizer-Status-Sharding
- Aktivierungs-Checkpointing
- Aktivierungsauslagerung
Sie können diese vier Funktionen kombinieren, um den Speicher effizienter zu nutzen und die nächste Generation extrem skalierter NLP-Modelle zu trainieren.
Verteiltes Training und Tensorparallelität
Um die Tensorparallelität zu verstehen, ist es hilfreich zu wissen, dass es viele Arten von verteiltem Training oder Parallelität gibt. Sie sind wahrscheinlich bereits mit dem häufigsten Typ vertraut, Datenparallelität. Der Kern der Datenparallelität funktioniert folgendermaßen: Sie fügen Ihrem Cluster einen zusätzlichen Knoten hinzu, z. B. indem Sie in Ihrem SageMaker-Schätzer von einer auf zwei ml.EC2-Instanzen wechseln. Anschließend verwenden Sie ein Datenparallel-Framework wie Horovod, PyTorch Distributed Data Parallel oder SageMaker Distributed. Dadurch werden Repliken Ihres Modells erstellt, eine pro Beschleuniger, und das Sharding der Daten an jeden Knoten sowie das Zusammenführen aller Ergebnisse während des Backpropagation-Schritts Ihres neuronalen Netzwerks übernommen. Denken Sie an einen verteilten Gradientenabstieg. Datenparallelität ist auch bei Servern beliebt; Sie teilen Daten in alle GPUs und gelegentlich in CPUs auf allen Ihren Knoten. Das folgende Diagramm veranschaulicht die Datenparallelität.
Modellparallelität ist etwas anders. Anstatt Kopien desselben Modells anzufertigen, zerlegen wir Ihr Modell in Einzelteile. Dann kümmern wir uns um den Betrieb, sodass Ihre Daten mathematisch immer noch auf genau die gleiche Weise durch Ihr neuronales Netzwerk fließen, aber verschiedene Teile Ihres Modells auf verschiedenen GPUs sitzen. Wenn Sie ml.p3.8xlarge verwenden, haben Sie vier NVIDIA V100, also sollten Sie Ihr Modell wahrscheinlich in 4 Teile zerlegen, einen Teil pro GPU. Wenn Sie auf zwei ml.p4d.24xlarge springen, sind das insgesamt 16 A100 in Ihrem Cluster, sodass Sie Ihr Modell möglicherweise in 16 Teile zerlegen. Dies wird manchmal auch genannt Pipeline-Parallelität. Das liegt daran, dass die Schichten im Netzwerk über GPUs verteilt sind und in einer Pipeline ausgeführt werden, um die GPU-Auslastung zu maximieren. Das folgende Diagramm veranschaulicht die Modellparallelität.
Um Modellparallelität im großen Maßstab zu ermöglichen, benötigen wir eine dritte Art der Verteilung: Tensorparallelität. Tensor-Parallelismus wendet die gleichen Konzepte einen Schritt weiter an – wir brechen die größten Schichten Ihres neuronalen Netzwerks auseinander und platzieren Teile der Schichten selbst auf verschiedenen Geräten. Dies ist relevant, wenn Sie mit 175 Milliarden Parametern oder mehr arbeiten und versuchen, auch nur ein paar Datensätze zusammen mit Teilen Ihres Modells in den RAM zu packen, um diesen Transformator zu trainieren. Das folgende Diagramm veranschaulicht die Tensorparallelität.
Aktivieren Tensorparallelität, legen Sie es in den smp-Optionen fest Sie übergeben an Ihren Schätzer.
Im vorhergehenden Code pipeline_parallel_degree
beschreibt, in wie viele Segmente Ihr Modell aufgeteilt werden sollte, basierend auf der oben besprochenen Pipeline-Parallelität. Ein anderes Wort dafür ist Partituren.
Um die Tensorparallelität zu aktivieren, setzen Sie tensor_parallel_degree
auf Ihr gewünschtes Niveau. Stellen Sie sicher, dass Sie eine Zahl auswählen, die gleich oder kleiner als die Anzahl der GPUs pro Instanz ist, also nicht größer als 8 für die ml.p4d.24xlarge-Maschinen. Weitere Skriptänderungen finden Sie unter Führen Sie einen parallelen Trainingsjob für verteilte SageMaker-Modelle mit Tensorparallelität aus.
Der Parameter ddp bezieht sich auf parallel verteilte Daten. Normalerweise aktivieren Sie dies, wenn Sie Datenparallelität oder Tensorparallelität verwenden, da die Modellparallelitätsbibliothek für diese Funktionen auf DDP angewiesen ist.
Optimizer State Sharding, Aktivierungs-Offloading und Checkpoints
Wenn Sie ein extrem großes Modell haben, benötigen Sie auch einen extrem großen Optimiererzustand. Das Vorbereiten Ihres Optimierers für SMP ist unkompliziert: Nehmen Sie ihn einfach von der Festplatte in Ihr Skript und laden Sie ihn in die smp.DistributedOptimizer()
Objekt.
Stellen Sie sicher, dass Sie dies beim Kalkulator durch Einstellung aktivieren shard_optimizer_state
zu Wahr in der smp_options
Sie verwenden, um SMP zu konfigurieren:
Ähnlich wie bei der Tensor- und Pipeline-Parallelität profiliert SMP Ihr Modell und Ihre Weltgröße (die Gesamtzahl der GPUs in allen Ihren Trainingsknoten), um die besten Platzierungsstrategien zu finden.
Beim Deep Learning werden die Ausgaben der Zwischenschicht auch Aktivierungen genannt, und diese müssen während des Vorwärtsdurchlaufs gespeichert werden. Dies liegt daran, dass sie für die Gradientenberechnung im Rückwärtsdurchgang verwendet werden müssen. In einem großen Modell kann das gleichzeitige Speichern all dieser Aktivierungen im Speicher zu erheblichen Speicherengpässen führen. Um diesen Engpass zu beheben, können Sie verwenden Aktivierungs-Checkpointing, die dritte neue Funktion in der SageMaker-Modellparallelitätsbibliothek. Aktivierungs-Checkpointing, oder Gradienten-Checkpointing, ist eine Technik, um die Speichernutzung zu reduzieren, indem Aktivierungen bestimmter Schichten gelöscht und während eines Rückwärtsdurchlaufs neu berechnet werden. Dies tauscht effektiv zusätzliche Rechenzeit gegen reduzierte Speichernutzung ein.
Schließlich Aktivierung auslagern verwendet direkt Aktivierungs-Checkpointing. Es ist eine Strategie, während des Modelltrainings nur wenige Tensoraktivierungen im GPU-RAM zu behalten. Insbesondere verschieben wir die Checkpoint-Aktivierungen während des Vorwärtsdurchlaufs in den CPU-Speicher und laden sie für den Rückwärtsdurchlauf eines bestimmten Mikrostapels zurück in die GPU.
Mikrobatches und Platzierungsstrategien
Weitere Themen, die bei Kunden manchmal Verwirrung stiften, sind Mikrobatches und Platzierungsstrategien. Beides sind Hyperparameter, die Sie der SageMaker-Modellparallelbibliothek zur Verfügung stellen können. Insbesondere Mikro-Batches sind relevant, wenn Modelle implementiert werden, die auf Pipeline-Parallelität beruhen, wie z. B. solche mit einer Größe von mindestens 30 Milliarden Parametern oder mehr.
Mikrobatches sind Teilmengen von Minibatches. Wenn sich Ihr Modell in seiner Trainingsschleife befindet, definieren Sie eine bestimmte Anzahl von Datensätzen, die aufgenommen und vorwärts und rückwärts durch die Schichten geleitet werden sollen – dies wird als a bezeichnet Minibatch, oder manchmal nur ein Portion. Ein vollständiger Durchlauf durch Ihren Datensatz wird als an bezeichnet Epoche. Um Vorwärts- und Rückwärtsdurchläufe mit Pipeline-Parallelität auszuführen, fragmentiert die parallele SageMaker-Modellbibliothek die Stapel in kleinere Teilmengen, sogenannte Mikrostapel, die einzeln ausgeführt werden, um die GPU-Auslastung zu maximieren. Der resultierende, viel kleinere Satz von Beispielen pro GPU wird als Mikrobatch bezeichnet. In unserem GPT-2-Beispiel Wir haben einen Standardwert von 1 Microbatch direkt zum Trainingsskript hinzugefügt.
Wenn Sie Ihre Trainingskonfiguration skalieren, Es wird dringend empfohlen, Ihre Stapelgröße und Mikrostapelgröße entsprechend zu ändern. Nur so kann eine gute Leistung sichergestellt werden: Sie müssen die Batchgröße und Mikrobatchgröße als Funktion Ihrer gesamten Weltgröße berücksichtigen, wenn Sie sich auf Pipeline-Parallelität verlassen.
Platzierungsstrategien sind, wie Sie SageMaker physisch mitteilen, wo Ihre Modellpartitionen platziert werden sollen. Wenn Sie sowohl model parallel als auch data parallel verwenden, ist die Einstellung placement_strategy
zu “cluster”
platziert Modellrepliken in Geräte-IDs (GPUs), die physisch nahe beieinander liegen. Wenn Sie Ihre Parallelisierungsstrategie jedoch wirklich präskriptiver gestalten möchten, können Sie sie in eine einzelne Zeichenfolge mit verschiedenen Kombinationen aus drei Buchstaben zerlegen: D für Datenparallelität, P
gibt Pipeline-Parallelität an, und T
für Tensorparallelität. Wir empfehlen generell, die Standardplatzierung von beizubehalten "cluster"
, da dies am besten für das Modelltraining in großem Maßstab geeignet ist. Die „Cluster“-Platzierung entspricht „DPT
".
Weitere Informationen zu Platzierungsstrategien finden Sie unter Platzierungsstrategie mit Tensorparallelität.
Beispielanwendungsfall
Stellen wir uns vor, Sie haben einen ml.p3.16xlarge in Ihrem Ausbildungsberuf. Das gibt dir 8 NVIDIA V100 pro Knoten. Denken Sie daran, dass Sie jedes Mal, wenn Sie eine zusätzliche Instanz hinzufügen, einen zusätzlichen Bandbreiten-Overhead erleben, daher ist es immer besser, mehr GP'Us auf einem einzelnen Knoten zu haben. In diesem Fall sind Sie mit einem ml.p3.16xlarge besser bedient als beispielsweise mit zwei ml.p3.8xlarges. Auch wenn die Anzahl der GPUs gleich ist, verlangsamt der zusätzliche Bandbreiten-Overhead des zusätzlichen Knotens Ihren Durchsatz.
Das folgende Diagramm veranschaulicht die Vier-Wege-Modellparallelität in Kombination mit der Zwei-Wege-Datenparallelität. Das bedeutet, dass Sie tatsächlich zwei Replikate Ihres Modells haben (denken Sie an Datenparallelität), wobei jede von ihnen auf vier GPUs partitioniert ist (Modellparallel).
Wenn eine dieser Modellpartitionen zu groß ist, um auf eine einzelne GPU zu passen, können Sie eine zusätzliche Art von Verteilung – Tensor-Parallelität – hinzufügen, um sie auszuspucken und beide Geräte zu nutzen.
Zusammenfassung
In diesem Blogbeitrag haben wir die verteilten Trainingsbibliotheken von SageMaker besprochen, wobei wir uns insbesondere auf die Modellparallelität konzentriert haben. Wir haben Leistungsbenchmarks aus unserem letzten Test geteilt und 32 Samples pro Sekunde über 120 ml.p4d.24xlarge-Instances und 175B-Parameter auf Amazon SageMaker erreicht. Wir gehen davon aus, dass wir bei einer Erhöhung auf 240 p4-Instanzen ein 175B-Parametermodell in 25 Tagen trainieren könnten.
Wir haben auch die neuesten Funktionen besprochen, die umfangreiches Training ermöglichen, nämlich Tensorparallelität, Optimizer State Sharding, Aktivierungs-Checkpointing und Aktivierungs-Offloading. Wir haben einige Tipps und Tricks geteilt, um dies durch Schulungen auf Amazon SageMaker zu ermöglichen.
Probieren Sie es selbst aus mit demselben Notebook, das unsere Zahlen generiert hat, das hier auf GitHub verfügbar ist. Sie können auch weitere GPUs für Ihr AWS-Konto anfordern Fordern Sie hier eine Dienstlimitgenehmigung an.
Über die Autoren
Emily Weber trat AWS kurz nach dem Start von SageMaker bei und versucht seitdem, der Welt davon zu erzählen! Abgesehen davon, dass sie neue ML-Erfahrungen für Kunden entwickelt, meditiert Emily gerne und studiert den tibetischen Buddhismus.
Aditya Bindal ist Senior Product Manager für AWS Deep Learning. Er arbeitet an Produkten, die es Kunden erleichtern, Deep-Learning-Modelle in AWS zu trainieren. In seiner Freizeit verbringt er gerne Zeit mit seiner Tochter, spielt Tennis, liest historische Romane und reist gern.
Luis Quintela ist der Software Developer Manager für die AWS SageMaker-Modellparallelbibliothek. In seiner Freizeit fährt er auf seiner Harley in der SF Bay Area.
- Coinsmart. Europas beste Bitcoin- und Krypto-Börse.
- Platoblockkette. Web3-Metaverse-Intelligenz. Wissen verstärkt. DEN FREIEN ZUGANG.
- CryptoHawk. Altcoin-Radar. Kostenlose Testphase.
- Quelle: https://aws.amazon.com/blogs/machine-learning/train-175-billion-parameter-nlp-models-with-model-parallel-additions-and-hugging-face-on-amazon-sagemaker/
- "
- 000
- 100
- 2020
- 39
- Über uns
- Beschleuniger
- Konto
- erreicht
- über
- Zusätzliche
- Adresse
- advanced
- Alle
- bereits
- Amazon
- Ein anderer
- Anwendungen
- Bereich
- verfügbar
- AWS
- Bucht
- BESTE
- Größte
- Milliarde
- Blog
- Building
- Verursachen
- Übernehmen
- Cloud
- Code
- Kombinationen
- gemeinsam
- Kommunikation
- Konfiguration
- Verwirrung
- Behälter
- Kernbereich
- könnte
- Kunden
- technische Daten
- entwickelt
- Entwickler:in / Unternehmen
- Entwicklung
- Gerät
- Geräte
- anders
- verteilt
- Verteilung
- nach unten
- angetrieben
- ermöglichen
- insbesondere
- Beispiel
- ERFAHRUNGEN
- Erfahrungen
- Extrem
- Gesicht
- beschleunigt
- Merkmal
- Eigenschaften
- Fiktion
- passen
- Folgende
- vorwärts
- gefunden
- Unser Ansatz
- voller
- Funktion
- Allgemeines
- erzeugen
- GitHub
- gehen
- gut
- Google-Suche
- GPU
- Hardware
- hilfreich
- Hervorheben
- historisch
- Ultraschall
- Hilfe
- HTTPS
- hunderte
- hat
- Information
- inspirierte
- integriert
- Probleme
- IT
- Job
- beigetreten
- springen
- Aufbewahrung
- Sprache
- grosse
- neueste
- starten
- LERNEN
- lernen
- Niveau
- Bibliothek
- Belastung
- Maschine
- Maschinelles Lernen
- Maschinen
- Making
- Manager
- Memory
- ML
- Modell
- für
- modulare
- vor allem warme
- schlauer bewegen
- nämlich
- Natürliche
- Netzwerk
- Neue Funktionen
- Fiber Node
- Notizbuch
- Zahlen
- Andere
- Papier
- Partnerschaft
- Leistung
- Stück
- Plattform
- Beliebt
- möglich
- primär
- Produkt
- Produkte
- Profil
- die
- RAM
- RE
- Lesebrillen
- empfehlen
- Aufzeichnungen
- Veteran
- Die Ergebnisse
- Führen Sie
- Laufen
- Said
- skalierbaren
- Skalieren
- Skalierung
- Sdk
- Suche
- kompensieren
- Einstellung
- sharding
- von Locals geführtes
- signifikant
- Größe
- So
- Software
- speziell
- Geschwindigkeit
- Ausgabe
- gespalten
- Bundesstaat
- Strategien
- Strategie
- liefern
- Taktik
- Techniken
- Test
- die Welt
- Tausende
- Durch
- Zeit
- Tipps
- Tipps und Tricks
- gemeinsam
- Themen
- Trades
- Ausbildung
- verstehen
- -
- Nutzen
- Seh-
- .
- arbeiten,
- Werk
- weltweit wie ausgehandelt und gekauft ausgeführt wird.
- Jahr