GPT praktische Serie – Berechnungsgenauigkeit und Quantifizierung großer Modelle wie Baichuan2

GPT praktische Reihengenauigkeit und Quantifizierung großer Modelle wie Baichuan2

Ohne spezielle Verarbeitung ist die Standardparametergenauigkeit von Deep Learning die Gleitkomma-32-Bit-Präzision (FP32). Die Parameter großer Modelle sind riesig und liegen zwischen 10 und 1000 B. Wenn Sie nicht auf die Optimierung achten, werden viele Grafikkartenressourcen und viel Trainingszeit verbraucht, und die gesamten Trainingsinvestitionen des KI-Algorithmuszentrums werden es tun an NVIDIA übergeben werden. Es gibt Stellen, an denen eine 32-Bit-Präzision nicht unbedingt erforderlich ist, und hier kommen Gleitkommapräzision und Quantisierung ins Spiel.

Wie kann der Trainings- und Vorhersageprozess großer Modelle beschleunigt werden? Wie kann die Nutzung des Videospeichers reduziert werden?
Welche einfachen und schnellen Möglichkeiten gibt es für den Einstieg?

gemischte Präzision

Mixed Precision Training ist eine Technik zur Beschleunigung des Deep-Learning-Trainings. Die Hauptidee besteht darin, Gleitkommazahlen mit geringerer Genauigkeit (z. B. FP16) zu verwenden, um die Gewichte und Aktivierungswerte im neuronalen Netzwerk innerhalb des tolerierbaren Bereichs der Genauigkeitsreduzierung darzustellen, wodurch der Speicherverbrauch und der Rechenaufwand reduziert und dadurch beschleunigt wird den Ausbildungsprozess.

Die Durchführung des gemischten Präzisionstrainings kann in folgende Schritte unterteilt werden:

  1. Konvertieren Sie die FP32-Gewichte in das FP16-Format und führen Sie dann eine Vorwärtsberechnung durch, um den FP32-Verlust (Verlust) zu erhalten.
  2. Berechnen Sie den Gradienten mit FP16.
  3. Konvertieren Sie die Farbverläufe in das FP32-Format und aktualisieren Sie sie auf die Gewichte.

Aufgrund der geringeren Genauigkeit von FP16 und des kleinen Bereichs der dargestellten Werte kann es zu Genauigkeitsverlusten kommen. Daher müssen beim gemischten Präzisionstraining einige Techniken verwendet werden, um die Genauigkeit des Modells aufrechtzuerhalten. Mithilfe der Gradientenskalierung (GradScaler) kann beispielsweise die Größe des Gradienten gesteuert werden, um zu verhindern, dass der Gradient zu schnell abfällt und die Genauigkeit des Modells beeinträchtigt wird.

Präzise digitale Darstellung

  • FP32: Gleitkommazahl mit einfacher Genauigkeit, dargestellt durch eine 32-Bit-Binärzahl, von der 1 Bit das Vorzeichenbit, 8 Bits das Exponentenbit und 23 Bits das Mantissenbit darstellen. Der darstellbare Wertebereich ist ± 3,4 × 1 0 38 ±3,4 × 10^ {38}± 3,4×1 038
  • FP16: Gleitkommazahl mit halber Genauigkeit, dargestellt durch eine 16-Bit-Binärzahl, von der 1 Bit das Vorzeichenbit, 5 Bits das Exponentenbit und 10 Bits das Mantissenbit darstellen. Der darstellbare Wertebereich ist ± 2 15 ± 2^{15}± 215 .
  • FP64: Gleitkommazahl mit doppelter Genauigkeit, dargestellt durch eine 64-Bit-Binärzahl, von der 1 Bit das Vorzeichenbit, 11 Bit das Exponentenbit und 52 Bit das Mantissenbit darstellt. Der darstellbare Wertebereich ist ± 1,8 × 1 0 308 ± 1,8 × 10^ {308}± 1,8×1 0308
  • INT8: 8-Bit-Ganzzahl, 1 Bit stellt das Vorzeichenbit dar und der darstellbare Wertebereich liegt zwischen -128 und 127 $.
  • INT4: 4-Bit-Ganzzahl, 1 Bit repräsentiert das Vorzeichenbit, der darstellbare Wertebereich ist − 8 bis 7 -8 bis 78 bis 7 .

Fügen Sie hier eine Bildbeschreibung ein

  • Umwandlungsprozess

Der Ablauf des gemischten Präzisionstrainings ist wie folgt:

  1. Konvertieren Sie die FP32-Gewichte in das FP16-Format und führen Sie dann eine Vorwärtsberechnung durch, um den FP32-Verlust (Verlust) zu erhalten.
  2. Berechnen Sie den Gradienten mit FP16.
  3. Konvertieren Sie die Farbverläufe in das FP32-Format und aktualisieren Sie sie auf die Gewichte.

Während des Trainingsprozesses autocastwerden Eingabe und Ausgabe in das FP16-Format konvertiert und GradScalerder Verlustwert skaliert, um einen zu schnellen Gradientenabfall zu vermeiden, der die Genauigkeit des Modells beeinträchtigt.

Quantifizieren

Quantisierung ist eine Berechnungsmethode, die ganzzahlige Werte zur Darstellung von Gleitkommazahlen verwendet und die Anzahl der durch Zahlen dargestellten Ziffern reduziert, um den Umfang der Modellspeicherung und -berechnungen zu reduzieren . Beim Deep Learning werden üblicherweise 32-Bit-Gleitkommazahlen zur Darstellung von Gewichten und Aktivierungswerten verwendet. Diese Präzision kann jedoch zu einem sehr hohen Rechen- und Speicheraufwand führen. Daher verwendet die Quantisierung kürzere Ganzzahlen zur Darstellung von Gewichtungen und Aktivierungen, wodurch der Speicher- und Rechenaufwand reduziert wird.

Bei der Quantisierung werden ganzzahlige Werte verwendet, um die Verwendung der Gleitkommaverarbeitung zu vermeiden, den Berechnungsprozess zu beschleunigen, gleichzeitig die Anzahl der zur Darstellung von Zahlen oder Werten verwendeten Bits zu reduzieren und die Speichertechnologie zu reduzieren. Durch das Speichern von Gewichten in Datentypen mit geringer Genauigkeit werden das Training von Modellparametern, der Vorhersageberechnungsprozess sowie der Speicherplatz des Modells und des Zwischencaches reduziert. Da die Quantisierung die Modellgröße reduziert, erleichtert sie die Bereitstellung von Modellen auf ressourcenbeschränkten Geräten wie CPUs oder eingebetteten Systemen.

Ein gängiger Ansatz besteht darin, die Modellgewichte von rohen 16-Bit-Gleitkommawerten auf weniger präzise 8-Bit-Ganzzahlwerte zu quantisieren .

8-Bit-Parameterquantisierung

Große Modell-LLMs wie GPT, Baichuan2, ChatGLM3 usw. haben hervorragende Fähigkeiten gezeigt, erfordern jedoch viel CPU und Speicher. Eine Methode kann Quantisierung verwenden, um diese Modelle zu komprimieren, um den Speicherbedarf zu reduzieren und die rechnerische Inferenz zu beschleunigen, und versuchen Sie dies Behalten Sie die Präzisionsleistung des Modells bei.


Im Quantisierungsprozess können zwei Methoden verwendet werden: dynamische Quantisierung und statische Quantisierung .

  • Die dynamische Quantisierung sammelt Daten zur Laufzeit und quantisiert das Modell basierend auf den Daten dynamisch.
  • Die statische Quantisierung quantisiert das Modell während des Trainings und wendet die Quantisierung zum Zeitpunkt der Inferenz an.

Die Quantisierung kann zu einer verringerten Modellgenauigkeit führen, da eine geringere Präzision zu Rundungsfehlern führen kann. Daher sind bei der Quantisierung einige Tricks erforderlich, um die Genauigkeit des Modells aufrechtzuerhalten, z. B. die Skalierung der Gewichte oder die Verwendung der Dynamikbereichsquantisierung.

Gleichzeitig muss das Modell vor der Quantifizierung getestet werden, um sicherzustellen, dass die Genauigkeit akzeptabel ist. Darüber hinaus können nicht alle Modelle quantisiert werden. Mit dieser Methode können nur Modelle quantisiert werden, die dynamische Quantisierung unterstützen .

Beispiel: load_in_8bit=True

 from transformers import AutoTokenizer, AutoModel 
 model = AutoModel.from_pretrained("THUDM/chatglm3-6b",
                                      revision='v0.1.0',
                                      load_in_8bit=True,
                                      trust_remote_code=True,
                                      device_map="auto")

Im Allgemeinen ist die Quantisierung eine sehr nützliche Methode, die den Speicher- und Rechenaufwand des Modells reduzieren und die Ausführungseffizienz des Modells auf dem Gerät verbessern kann.

Quantitatives Training

Beim Deep Learning ist Quantisierung eine Methode zur Reduzierung des für ein Modell erforderlichen Speicher- und Rechenaufwands durch Reduzierung der Anzahl der durch eine Zahl dargestellten Bits. Beim Training mit gemischter Präzision können Modellgewichte und -gradienten von FP32 auf FP16 umgerechnet werden, um Speicherplatz zu sparen und das Training zu beschleunigen. In diesem Sinne kann quantisiertes Training Aktivierungswerte in kürzere Ganzzahlen umwandeln und so den Speicher- und Rechenaufwand reduzieren .

PyTorch bietet einige Tools und APIs für quantitatives Training, wie z. B. QAT (Quantisierungsbewusstes Training) , Verwendung der Dynamikbereichsquantisierung usw. Eine davon ist die Verwendung von Adam8bit für quantitatives Training.

Quantitatives Denken

Mithilfe load_in_8bitvon Methoden kann eine Quantifizierung des Modells erreicht werden. Mit dieser Methode können Modellgewichte und Aktivierungswerte in 8-Bit-Ganzzahlen quantisiert werden, wodurch der Speicher- und Rechenaufwand reduziert wird. Die spezifische Implementierungsmethode ist wie folgt:

import torch
from transformers import AutoModel

# 加载模型
model = AutoModel.from_pretrained('bert-base-uncased',load_in_8bit=True)

Es ist zu beachten, dass die Verwendung von load_in_8bitMethoden zur Quantifizierung des Modells zu einer Verringerung der Modellgenauigkeit führen kann. Darüber hinaus können nicht alle Modelle quantisiert werden. Mit dieser Methode können nur Modelle quantisiert werden, die dynamische Quantisierung unterstützen.

Gefällt mir. Gefällt mir. Gefällt mir. Gefällt mir

Fanden es nützlich . Sammeln Sie es. Sammeln Sie es.

Ende


GPT-Kolumnenartikel:
Praktische GPT-Serie – ChatGLM2-Bereitstellung Ubuntu+Cuda11+Videospeicher 24G praktische Lösung

GPT-Praxisserie – Baichuan2-Lokalisierungsplan

GPT praktische Serie – ChatGLM3 lokale Bereitstellung CUDA11+1080Ti+ Grafikkarte 24G praktische Lösung

GPT-Praxisreihe – So optimieren Sie das ChatGLM2-Modelltraining mit Ihren eigenen Daten

GPT-Praxisserie – GPT-Schulung Pretraining, SFT, Belohnungsmodellierung, RLHF

GPT praktische Serie – P-Tuning lokalisiertes Training ChatGLM2 und andere LLM-Modelle, was genau hat es bewirkt? (zwei)

GPT praktische Serie – P-Tuning lokalisiertes Training ChatGLM2 und andere LLM-Modelle, was genau hat es bewirkt? (eins)

GPT Praktische Serieninterpretation der Feinabstimmung der Trainingsparameter des ChatGLM2-Modells

GPT-Praxisserie – GPT-Schulung Pretraining, SFT, Belohnungsmodellierung, RLHF


Kolumne zur Entscheidungsmaschine:
Falcon erstellt einen einfachen REST-API-Dienst

Decision Engine – Verwendung von Drools zur Implementierung einfacher Firewall-Richtlinien

Supongo que te gusta

Origin blog.csdn.net/Alex_StarSky/article/details/83933045
Recomendado
Clasificación