Quantisierungsmethoden für 100-fache Beschleunigung bei der Inferenz großer Sprachmodelle

Quantisierungsmethoden für 100-fache Beschleunigung bei der Inferenz großer Sprachmodelle

Dieser Artikel untersucht hauptsächlich realisierbare Richtungen zur Beschleunigung der quantisierten Inferenz basierend auf den neuesten Forschungspapieren zu Mainstream-GPU-Hardware und Quantisierungsalgorithmen. Vor dem Hintergrund aktueller Quantisierungsschemata tauchen wir in das Thema ein. Eine kurze Einführung in die Quantisierung Die Modellquantisierung ist eine Technik zur Modellkompression, die darauf abzielt, die Modellgröße durch Anpassung der Bitbreite von Gewichten und Aktivierungen zu reduzieren. Diese Reduzierung trägt zur Senkung der Rechenlast, des GPU-Speicher-I/O und der Belegung bei, was letztendlich die Latenz verringert und den Durchsatz erhöht. Das folgende Diagramm veranschaulicht, wie die Quantisierung Deep Learning beschleunigt:

  • Schritt 1: Gewichts- und Aktivierungsspeicher werden aus dem Speicher in MatMul-Recheneinheiten geladen. Die Bitbreite von Gewichten und Aktivierungen hat erhebliche Auswirkungen auf die Datenübertragungslatenz.
  • Schritt 2: MatMul-Recheneinheiten führen Matrixmultiplikationen durch, wobei Bitbreite und Format ebenfalls die Latenz beeinflussen.
  • Schritt 3: Akkumulatoren haben typischerweise höhere Bitbreiten für eine hochpräzise Summierung. Nach der Summierung können die Werte in den Akkumulatoren einer erneuten Quantisierung unterzogen werden (die Ausgangsbitbreite bestimmt die Anzahl der Bits, die für den nächsten Verarbeitungsschritt übertragen und zurück in den Speicher geschrieben werden).

Eine schematische Übersicht über einen Deep-Learning-Beschleuniger Basierend auf verschiedenen Quantisierungsschemata gibt es zwei Hauptansätze: Quantisierungsbewusstes Training (QAT) und Nachträgliche Quantisierung (PTQ).

  • QAT (Quantization-Aware Training), auch als Online-Quantisierung bekannt, erfordert während des Trainings zusätzlichen Rechenaufwand. Es kombiniert die Quantisierung mit der Rückpropagierung, um die Modellgewichte anzupassen und sicherzustellen, dass das quantisierte Modell seine Genauigkeit beibehält.
  • PTQ (Post-Training Quantization), auch als Offline-Quantisierung bekannt, quantisiert ein vortrainiertes Modell mit minimalem oder gar keinem zusätzlichen Datenaufwand. Dieser Prozess umfasst die Kalibrierung, die eine Skalierung der Modellgewichte beinhalten kann. Es gibt zwei Arten von PTQ-Methoden:
  • Post-Dynamische Quantisierung (PDQ) ist nicht auf Kalibrierungsdatensätze angewiesen. Stattdessen konvertiert sie jede Schicht direkt mithilfe von Quantisierungsformeln. QLoRA (Quantization-aware Low-Rank Adaptation) verwendet diese Methode.
  • Post-Kalibrierungsquantisierung (PCQ) erfordert repräsentative Datensätze, um die Quantisierungsgewichte basierend auf der Ein- und Ausgabe jeder Schicht im Modell anzupassen. GPTQ (Generative Pre-training Transformer for Quantization) übernimmt diesen Ansatz.

Hardware-Unterstützung

NVIDIA-Serie Die NV-Serie von Grafikkarten hat sich aufgrund des CUDA-Ökosystems stets an der Spitze der Unterstützung verschiedener Präzisionen und Datentypen gehalten.

AMD-Serie Die MI300-Serie von AMD hat in einigen Tests Leistungsmetriken gezeigt, die die der H100 übertreffen, was sie zu einer vielversprechenden nächsten Wahl macht. Sie bieten auch Unterstützung für FP8-Typen.

Neben den NVIDIA- und AMD-Serien bieten auch inländische Karten eine gute Unterstützung für Datentypen wie FP16 und INT8 (derzeit fehlt es relativ an Unterstützung für FP8 und andere Datenformate). Wir werden sie hier nicht alle auflisten.

Herausforderungen bei der LLM-Quantisierung

Beginnen wir mit einem einfachen Vergleich. Wir haben eine grundlegende INT-Quantisierung sowohl an ResNet18- als auch an OPT-13B-Modellen durchgeführt. Wir haben festgestellt, dass die Leistung von ResNet18 kaum beeinträchtigt wurde, während OPT-13B erhebliche Verluste erlitt.

Warum zeigen neuronale Netze, die beide Gaußverteilungen folgen, solche Unterschiede? Dies ist hauptsächlich auf Ausreißer oder Anomalien in LLM zurückzuführen.

Ein einzelner Transformer-Block, bestehend aus dem Selbstaufmerksamkeitsmodul und dem linearen Modul. Die rote Verbindung ist die problematische Verbindung in Transformatoren mit Ausreißern. Wie durch die roten Markierungen in der obigen Transformatorenstruktur angezeigt, tritt das Problem der Quantisierung in Transformatoren an einer sehr spezifischen Stelle des Netzwerks auf. In einigen vollständig verbundenen Modulen, insbesondere in den letzten Schichten des Netzwerks, gibt es signifikante Ausreißer in der Summe der Layer-Normalisierungen. Das einfache Entfernen dieser Ausreißer würde die Genauigkeit des Netzwerks erheblich reduzieren, da sie einen bestimmten Zweck erfüllen. Diese Ausreißer zwingen den Aufmerksamkeitsmechanismus der nächsten Schicht, sich auf einige bedeutungslose Token im Text zu konzentrieren, wie Satztrenner, Punkte oder Kommas, wodurch diese spezifischen Token nicht signifikant aktualisiert werden. Gemäß dem Paper LLM.int8() wird offenbart, dass es Ausreißer in den Aktivierungen gibt, deren absolute Werte deutlich größer sind. Darüber hinaus sind diese Ausreißer in einer kleinen Anzahl von Merkmalen verteilt, die als emergente Merkmale bezeichnet werden. Es ist bekannt, dass Ausreißer einen erheblichen Einfluss auf die Leistung des Modells haben, und das direkte Verwerfen ist keine praktikable Lösung. Das Vorhandensein von Ausreißern macht den Bereich von fp16 sehr groß. Daher muss bei der Darstellung mit int8 jede Zahl einen großen Bereich von fp16 repräsentieren, was zu natürlichen Fehlern führt. Traditionelle CNNs haben dieses Problem ebenfalls angegangen, indem sie Kalibrierungsmethoden vorschlugen. Konkret werden fp16-Werte statistisch analysiert, und dann werden Algorithmen wie die KL-Divergenz verwendet, um große Werte zu verwerfen, wodurch der Bereich, den int8 zur Darstellung von fp16 benötigt, reduziert und die Genauigkeit verbessert wird. Die spezifische Menge des Verwerfens wird durch kontinuierliches Iterieren des KL-Algorithmus bestimmt, um den optimalen Bereich zu finden. Glücklicherweise sind diese Ausreißer sehr spezifisch. Sie treten nur in bestimmten Aufmerksamkeitsblöcken auf, und innerhalb dieser Blöcke nur in einer Schicht, und innerhalb dieser Schichten nur in wenigen Ausgabekanälen. Diese Ausreißer treten sogar im selben Kanal für jeden Datenpunkt auf ([1,3]). Basierend auf den obigen Schlussfolgerungen schlägt LLM.int8()[1]einen Algorithmus mit gemischter Präzision vor.

Schema von LLM.int8() Laut dem obigen Diagramm repräsentiert X die Aktivierungen jeder Schicht, mit so vielen Zeilen wie Sequenzlänge und so vielen Spalten wie versteckte Größe. Die gelben Balken im Diagramm stellen Ausreißer dar und veranschaulichen anschaulich ihr Verteilungsmuster (die zweite Schlussfolgerung). Die Bedeutung der vektorweisen Quantisierung besteht darin, dass für Spalten, die keine Ausreißer sind, symmetrisch mit int8 quantisiert wird. Da wir es mit Spalten zu tun haben, müssen bei der Matrixmultiplikation die entsprechenden Gewichte W aus den entsprechenden Zeilen für int8-Operationen extrahiert werden. Für die gelben Ausreißerspalten werden sowohl Zeilen als auch Spalten für fp16-Operationen verwendet. Schließlich werden die Ergebnisse der beiden Teile addiert, was einer direkten Matrixmultiplikation entspricht. Durch die gemischte Quantisierungsmethode von LLM.int8() ist die Genauigkeit fast identisch mit fp32, und die experimentellen Ergebnisdaten werden hier nicht eingefügt.

FP8 und INT8

Warum speziell FP8 und INT8 erwähnen? Dies liegt hauptsächlich an den neuesten GPU-Architekturen, wie der Hopper-Architektur und Tensor Cores, die FP8-Präzisionsberechnungen unterstützen. Daher lohnt es sich, die FP8-Quantisierung zu untersuchen.

Tensor Core (Hopper)(a)Weist 1 Bit entweder dem Bereich oder der Präzision zu(b)Unterstützt mehrere Akkumulator- und Ausgabetypen. Int8 unterscheidet sich von fp8 dadurch, dass es keinen Zwischenexponenten gibt und nur eine Mantisse enthält. Diese Datenrepräsentationsstruktur, wie im folgenden Diagramm gezeigt, eignet sich besser zur Darstellung einer gleichmäßigen Verteilung.

Gemäß [4] ist das FP8-E4/FP8-E5-Format genauer, wenn die Verteilung sehr ausgeprägte Ausreißer aufweist. Wenn die Verteilung jedoch gut funktioniert und eher einer Gaußform ähnelt, sind INT8 oder FP8-E2/FP8-E3 voraussichtlich besser geeignet.

Hier zeichnen wir für mehrere Verteilungen die ‚Bits der Genauigkeit‘ auf: invertierter und normalisierter RMSE. Wie in der obigen Abbildung gezeigt, schneidet INT8 bei einer gleichmäßigen Verteilung am besten ab. Für eine Normalverteilung ist FP8-E2 optimal, dicht gefolgt von INT8. Viele Verteilungen in neuronalen Netzen sind Gaußverteilungen, was darauf hindeutet, dass das Ergebnis der Verteilung eine hochrelevante Leistungsmetrik ist. Nur wenn Ausreißer auftreten, beginnt ein Format mit mehr Exponentenbits bessere Ergebnisse zu liefern. Der optimale Quantisierer basiert auf dem Lloyd-Max-Quantisierer und kann für diese Verteilungen ermittelt werden. Für Netzwerke wie ResNet18, MobileNetV2 usw., bei denen die Schichten meist Gauß-förmig sind, ist die Leistung mit Formaten wie FP8-E2 und INT am besten, während Formate wie FP8-E4 und FP8-E5 deutlich schlechter abschneiden. Wir stellen auch fest, dass Transformer-Modelle wie ViT und BERT bei FP8-E4 am besten abschneiden, gerade weil einige Schichten im Transformer sehr große Ausreißer aufweisen. Insbesondere haben einige Schichten viele Ausreißer in den Aktivierungen vor der Layer-Normalisierung. Da diese Ausreißer die Leistung erheblich beeinflussen und zu Nullfehlern beim Clipping führen, schneidet das FP8-E4-Format am besten ab, während FP8-E2/INT8-Formate deutlich schlechter abschneiden. Hat FP8 also im LLM-Bereich einen absoluten Vorteil gegenüber INT8? Das Gegenteil könnte der Fall sein, hauptsächlich aus folgenden Gründen:

  • Nach den Prinzipien der Festkomma- und Gleitkomma-Akkumulation im Schaltungsdesign sind FP8-MAC-Einheiten 50 % bis 180 % weniger effizient als INT8-Einheiten. Wenn die Arbeitslast rechengebunden ist, verlangsamt dies die Verarbeitungsgeschwindigkeit dedizierter Chips.
  • Für die meisten Netzwerke schneidet FP8 schlechter ab als INT8, selbst für Strukturen wie Transformer mit einer großen Anzahl von Ausreißern, die durch Methoden mit gemischter Präzision oder quantisierungsbewusstem Training behandelt werden können. Insgesamt können Gleitkommaformate wie FP8-E4 und FP8-E5 in Bezug auf Performance und Genauigkeit bei der Inferenz im Deep Learning INT8 nicht ersetzen, wenn es um reine Quantisierung geht. Wo liegen also die Vorteile und die Positionierung des FP8-Formats? Lassen Sie uns zunächst die Vorteile des FP8-Formats zusammenfassen:
  • FP8-Tensor-Cores sind schneller als 16-Bit-Tensor-Cores.
  • Reduziert Speicherbewegungen.
  • Wenn das Modell bereits in FP8 trainiert wurde, ist die Bereitstellung bequemer.
  • FP8 hat einen größeren dynamischen Bereich.
  • Die Konvertierungsschaltung von FP8 zu FP16/FP32/BF16 kann einfacher und direkter ausgelegt werden, ohne den Multiplikations- und Additionsaufwand, der für die Konvertierung von INT8/UINT8 zu FP erforderlich ist. Basierend auf diesen Vorteilen ist offensichtlich, dass FP8 eigentlich besser für das Training geeignet ist. Bezugnehmend auf [5] schneiden Modelle, die mit FP8 trainiert wurden, sowohl bei Pre-Training-Aufgaben als auch bei nachgelagerten Aufgaben ähnlich gut ab wie Modelle, die mit BF16-Hochpräzisionstraining trainiert wurden, ohne dass Hyperparameter wie Lernrate und Gewichtsabfall geändert werden müssen. Bemerkenswert ist, dass während des Trainings des GPT-175B-Modells im Vergleich zur TE-Methode das neu vorgeschlagene FP8-Gemischtpräzisions-Framework auf der H100-GPU-Plattform die Trainingszeit um 17 % und den Speicherverbrauch um 21 % reduzieren kann.

Zero-Shot-Leistung bei nachgelagerten Aufgaben. Die Modelle wurden entweder mit dem standardmäßigen BF16-Gemischtpräzisionsschema oder dem vorgeschlagenen FP8-Niedrigpräzisionsschema trainiert. Die Quantisierung von Modellen mit dem FP8-Format für die Inferenz kann QAT- oder PTQ-Prozesse (zur Vermeidung von Präzisionsverlusten) überflüssig machen, während gleichzeitig von der höheren Konvertierungseffizienz von FP8 zu FP16 und anderen Formaten profitiert wird, was die Inferenzleistung erheblich verbessert. Bezüglich der besten Kosteneffizienz der Quantisierung: Ähnlich wie das ExLlamaV2-Projekt, das GPTQ-Algorithmus-basierte 2-, 3-, 4-, 5-, 6- und 8-Bit-Quantisierung unterstützt, aber für LLMs: Welche Länge und welches Format bieten die beste Kosteneffizienz bei der Quantisierung? Bezugnehmend auf [6] wurden umfangreiche Experimente mit verschiedenen LLM-Architekturen durchgeführt, um die Auswirkungen unterschiedlicher Bit-Zuweisungen auf die Modellleistung zu bestimmen:

Bit-Ebene-Skalierungsgesetze für die durchschnittliche Zero-Shot-Leistung über vier Datensätze für OPT-Modelle mit 125 M bis 176 Mrd. Parametern. Die Zero-Shot-Leistung steigt für feste Modellbits stetig an, wenn wir die Quantisierungspräzision von 16 auf 4 Bit reduzieren. Bei 3 Bit kehrt sich dieser Zusammenhang um, wodurch 4-Bit-Präzision optimal wird.

  • Für eine gegebene Zero-Shot-Leistung bietet 4-Bit-Präzision die beste Skalierung für fast alle Modellserien und -größen (4-Bit-Präzision führt zu keinem signifikanten Leistungsabfall der Modellleistung). Die einzige Ausnahme ist BLOOM-176B, bei dem 3 Bit etwas besser abschneiden, aber nicht signifikant.
  • 4-Bit-Präzision ist derzeit die effektivste Präzision pro Bit, was auch darauf hindeutet, dass die Leistung der 3-Bit-Präzision verbessert werden könnte. Daher ist die Forschung an niedriger Bit-Präzision unter 4 Bit eine lohnende Richtung.
  • Die Forschung zur Bit-Ebene-Quantisierung zeigt, dass Datentypen und Blockgröße Schlüsselfaktoren sind, die die Effektivität der Bit-Ebene-Quantisierung beeinflussen. Basierend auf dem Obigen können wir schlussfolgern, dass die 4-Bit-Präzisionsquantisierung derzeit die kosteneffizienteste Lösung ist. Aber unter den 4-Bit-Daten, welcher Datentyp liefert bessere Quantisierungsergebnisse? Bezugnehmend auf [7] schlägt die LLM-FP4-Methode eine FP4-Quantisierung für große Sprachmodelle (LLMs) auf Post-Training-Weise vor, wobei Gewichte und Aktivierungen in 4-Bit-Gleitkommawerte quantisiert werden. Bestehende PTQ-Lösungen basieren hauptsächlich auf ganzen Zahlen und haben Probleme mit Bitbreiten unter 8 Bit. Im Vergleich zur Ganzzahl-Quantisierung ist die Gleitkomma-Quantisierung (FP) flexibler, besser geeignet für langschwänzige oder glockenförmige Verteilungen, und ist zur Standardwahl für viele Hardware-Plattformen geworden. Projektverweis: https://github.com/nbasyl/LLM-FP4 Ein Merkmal der FP-Quantisierung ist, dass ihre Leistung stark von der Auswahl der Exponentenbits und des Clipping-Bereichs abhängt. LLM-FP4 konstruiert eine robuste FP-PTQ-Baseline, indem es nach den optimalen Quantisierungsparametern sucht. Darüber hinaus gibt es in der Aktivierungsverteilung höhere Zwischenkanal-Varianzen und niedrigere Intrakanal-Varianzen, was die Schwierigkeit der Aktivierungsquantisierung erhöht. Um dieses Problem anzugehen, schlägt LLM-FP4 eine pro-Kanal-Aktivierungsquantisierung vor und zeigt, dass diese zusätzlichen Skalierungsfaktoren in Exponentenbias der Gewichte umparametrisiert werden können, was vernachlässigbare Kosten verursacht. LLM-FP4 quantisiert Gewichte und Aktivierungen in LLaMA-13B zum ersten Mal auf nur 4 Bit und erreicht eine durchschnittliche Punktzahl von 63,1 bei Common-Sense-Zero-Shot-Argumentationsaufgaben, was nur 5,8 unter der vollständigen Stichprobe liegt und das bisherige State-of-the-Art-Modell um 12,7 Prozentpunkte übertrifft. Die spezifischen Daten sind in der folgenden Abbildung zu finden:

Zero-Shot-Leistung bei Common-Sense-Argumentationsaufgaben mit LLaMA-Modellen. Wir bezeichnen E/W/A als Bitbreite von Wortembeddings, Modellgewicht bzw. Aktivierungen. Aus der obigen Abbildung lassen sich folgende Hauptschlussfolgerungen ziehen:

  • Wenn Aktivierungen nicht quantisiert werden und Wortembeddings zusammen mit Gewichten auf 4 Bit quantisiert werden, hat LLM-FP4 (FP-Typ) einen leichten Vorteil gegenüber Algorithmen wie GPTQ (INT-Typ).
  • Wenn Aktivierungen auf 8 Bit quantisiert werden und Wortembeddings zusammen mit Gewichten entweder auf 4 oder 8 Bit quantisiert werden, schneidet LLM-FP4 (FP-Typ) ähnlich gut ab wie andere Algorithmen (INT-Typ), ohne signifikanten Leistungsunterschied.
  • Wenn Aktivierungen auf 4 Bit quantisiert werden, zeigt LLM-FP4 (FP-Typ) eine deutliche Verbesserung im Vergleich zu anderen Algorithmen (INT-Typ). Zusammenfassend lässt sich sagen, dass FP4 derzeit keinen signifikanten Vorteil gegenüber INT4 hat, wenn Aktivierungen nicht auf 4 Bit quantisiert werden.

Einige bemerkenswerte Quantisierungsprojekte umfassen

GPTQ-for-LLaMa

  • Mit GPTQ quantisierte Modelle bieten erhebliche Geschwindigkeitsvorteile. Vereinfacht ausgedrückt quantisiert GPTQ jeden Parameter innerhalb eines Blocks einzeln, und nach jeder Parameterquantisierung werden Anpassungen an den anderen Parametern innerhalb des Blocks vorgenommen, um den durch die Quantisierung verursachten Präzisionsverlust auszugleichen.

  • Die GPTQ-Quantisierung erfordert einen Kalibrierungsdatensatz, um eine Post-Training-Quantisierung des Modells durchzuführen und quantisierte Gewichte zu erhalten. Das Konzept von GPTQ stammt von Yann LeCuns OBD-Algorithmus aus dem Jahr 1990, der kontinuierlich mit Methoden wie OBS, OBC (OBQ) verbessert wurde, und GPTQ ist eine beschleunigte Version der OBQ-Methode.

  • Das GPTQ-for-LLaMa-Repository bietet eine GPTQ-Quantisierungslösung speziell für LLaMa. Es wird für die Bereitstellung von LLaMa-Modellen auf GPUs empfohlen.

  • Projektlink: GPTQ-for-LLaMa ExLlama

  • ExLlama gibt es in zwei Versionen, ExLlama und ExLlamaV2, und dient als Inferenzbibliothek zum Ausführen lokaler LLMs auf modernen Consumer-GPUs.

  • ExLlamaV2 unterstützt 4-Bit-GPTQ-Modelle ähnlich wie V1, führt aber auch das neue „EXL2“-Format ein. EXL2 basiert auf denselben Optimierungsmethoden wie GPTQ, unterstützt 2-, 3-, 4-, 5-, 6- und 8-Bit-Quantisierung und ermöglicht das Mischen von Quantisierungsstufen innerhalb des Modells, um jede durchschnittliche Bitrate zwischen 2 und 8 Bit pro Gewicht zu erreichen.

  • ExLlamaV2 kann mehrere Quantisierungsstufen auf jede lineare Schicht anwenden und erzeugt so etwas wie eine spärliche Quantisierung, bei der wichtigere Gewichte (Spalten) mit mehr Bits quantisiert werden. Dieselben Neuabbildungstechniken, die es ExLlama ermöglichen, effizient mit sequentiellen Modellen zu arbeiten, ermöglichen dieses gemischte Format mit nahezu keiner Auswirkung auf die Leistung.

  • Im Allgemeinen bietet ExLlama eine etwas schnellere Inferenzgeschwindigkeit im Vergleich zu anderen Quantisierungsansätzen.

  • Projektlink: ExLlama GGML

  • GGML ist eine C-Bibliothek, die sich auf maschinelles Lernen konzentriert und von Georgi Gerganov erstellt wurde, daher die Abkürzung „GG“. Die Bibliothek bietet nicht nur grundlegende Elemente des maschinellen Lernens wie Tensoren, sondern auch ein einzigartiges Binärformat für die Verteilung von LLMs.

  • GGML ist in C geschrieben und unterstützt Ganzzahl-Quantisierung (4-Bit, 5-Bit, 8-Bit) und 16-Bit-Gleitkomma.

  • GGML arbeitet nahtlos mit der llama.cpp-Bibliothek zusammen, sodass Praktiker die Leistungsfähigkeit von LLMs effektiv nutzen können. Das Hauptziel der llama.cpp-Bibliothek ist es, die Verwendung von INT4-quantisierten LLaMA-Modellen auf dem MacBook zu ermöglichen.

  • Projektlink: GGML Transformer Engine Transformer Engine (TE) ist eine Bibliothek, die entwickelt wurde, um Transformer-Modelle auf NVIDIA-GPUs zu beschleunigen, einschließlich der Verwendung von 8-Bit-Gleitkomma-Präzision (FP8) auf Hopper-GPUs, wodurch sowohl beim Training als auch bei der Inferenz eine bessere Leistung bei geringerer Speichernutzung erzielt wird. TE bietet eine Reihe hochoptimierter Bausteine für gängige Transformer-Architekturen sowie eine API für automatische gemischte Präzision, die sich nahtlos in frameworkspezifischen Code integrieren lässt. Darüber hinaus enthält TE eine framework-unabhängige C+±API für FP8-Unterstützung in Transformatoren, die in andere Deep-Learning-Bibliotheken integriert werden kann. Hauptmerkmale umfassen:

  • Einfach zu verwendende Module zum Erstellen von Transformer-Layern mit FP8-Unterstützung.

  • Optimierung für Transformer-Modelle, einschließlich Kernel-Fusion.

  • Unterstützung für FP8 auf NVIDIA Hopper und NVIDIA Ada GPUs.

  • Optimierung für alle Präzisionen (FP16, BF16) auf NVIDIA Ampere GPU-Architektur und höheren Versionen. Projektlink: Transformer Engine Für Aufmerksamkeitstests können Sie te.LayerNormLinear importieren und die durchschnittliche Zeit für die Aufmerksamkeitsberechnung messen. StufeModellstrukturDatenformatRTX 4090RTX 3090Basic AttentionPyTorch Native AttentionFP1692ms183msBasic Attention + TELinear und LayerNorm tx-ErsatzFP1696msNicht unterstütztBasic Attention + TE’s LayerNorm-OptimierungTE.LayerNormLinearFP1696msNicht unterstütztTE FullTE Full Attention AlgorithmFP1674msNicht unterstütztTE Full + FP8FP Forward Propagation ReplacementFP842msNicht unterstützt Fazit der Tests: Bei der Transformer Engine gibt es bei Verwendung von fp16 eine Verbesserung von etwa 20 % gegenüber dem grundlegenden Aufmerksamkeitsalgorithmus. Darüber hinaus gibt es bei Verwendung von fp8 eine signifikante Verbesserung um 54,5 %, was darauf hindeutet, dass es sich lohnt, Zeit in die Verbesserung der Inferenzleistung zu investieren. Bitsandbytes: Bitsandbytes ist ein leichtgewichtiger Wrapper für benutzerdefinierte CUDA-Funktionen, die speziell für 8-Bit-Operationen, Matrixmultiplikation (LLM.int8()) und Quantisierungsfunktionen optimiert sind, und unterstützt hauptsächlich den LLM.int8()-Quantisierungsalgorithmus. Die Bitsandbytes-Bibliothek unterstützt Quantisierungsmethoden wie Quantile, lineare und dynamische Quantisierung. Es ist eine der einfachsten verfügbaren Methoden und erfordert keine Kalibrierungsdaten oder Kalibrierungsprozesse. Es kann ohne Weiteres mit jedem Modell verwendet werden, das torch.nn.Linear-Module enthält. Aktuelle Analysen deuten darauf hin, dass NF4 (NormalFloat-Datentyp) und FP4 gleichermaßen effektive 4-Bit-Quantisierungstechniken sind, die ähnliche Eigenschaften wie Inferenzgeschwindigkeit, Speicherverbrauch und Qualität des generierten Inhalts aufweisen. Der NormalFloat-Datentyp ist eine verbesserte Form der Quantisierungstechnik und repräsentiert die optimale Darstellung von Gewichten in einer Normalverteilung in informationstheoretischer Hinsicht. Er wird hauptsächlich von der QLoRA-Methode zum Feintuning von Modellen mit 4-Bit-Präzision verwendet. Nachfolgend sind einige Daten von QLoRA aufgeführt:

Durchschnittliche Perplexität von Pile Common Crawl für verschiedene Datentypen für OPT-, BLOOM-, LLaMA- und Pythia-Modelle mit 125 M bis 13 Mrd. Parametern. AIMET AIMET ist eine von Qualcomm bereitgestellte Bibliothek für fortschrittliche Modellquantisierungs- und Kompressionstechniken für neuronale Netzwerkmodelle. Es zielt darauf ab, die Inferenzgeschwindigkeit zu verbessern und gleichzeitig die Rechen- und Speicheranforderungen zu reduzieren, mit minimalen Auswirkungen auf die Genauigkeit. Beispielsweise können Modelle, die auf Qualcomm Hexagon DSP laufen, Geschwindigkeiten erreichen, die 5 bis 15 Mal schneller sind als auf Qualcomm Kyro CPU. AIMET dient als Spiegelbild der Quantisierungsimplementierung auf Nicht-NVIDIA-Hardware. Typischerweise repräsentiert es die grundlegenden Quantisierungsfähigkeiten, die von Hardwareherstellern bereitgestellt werden, und derzeit gibt es kein einzelnes Projekt, das universelle Quantisierungsfähigkeiten für verschiedene Hardwareplattformen bietet.

Fazit

Die 4-Bit-Quantisierung ist derzeit das kosteneffizienteste Quantisierungsschema. Die Optimierung variiert jedoch je nach Quantisierungsstufe von Wortembeddings, Gewichten und Aktivierungen. In den meisten Szenarien, abgesehen von Aktivierungen, die auf 4 Bit quantisiert sind, bietet die Ganzzahl-Quantisierung (Int) eine bessere Kosteneffizienz, einschließlich Nicht-Quantisierungsszenarien. Daher ist die Niedrigbit-Quantisierung, insbesondere der Fokus auf Aktivierungen durch Post-Training-Quantisierung (PTQ), eine vielversprechende Richtung zur Beschleunigung der Quantisierung. INT8 ist derzeit das am häufigsten verwendete Quantisierungsschema. Im Vergleich zu INT8 kann FP8 es in Quantisierungsszenarien nicht vollständig ersetzen, eignet sich jedoch für das Modelltraining und bietet eine Lösung für die Inferenzleistung, ohne dass eine Quantisierung erforderlich ist. Die Integration von FP8-bezogenen Techniken mit Hardware-Tensor-Cores, um die Inferenzgeschwindigkeit zu maximieren, ist eine neue Richtung, die es zu erkunden lohnt. Projekte, die auf dem GPTQ-Algorithmus basieren, dominieren die Landschaft der Large Language Models (LLM). Neue Datentypen (wie FP4 und NF4), niedrigere Bit-Präzision und dynamische Quantisierung bieten jedoch Chancen für Innovation und Forschung. Neben NVIDIA-GPUs bieten neue GPUs und CPUs (wie AMD, inländische GPUs und Qualcomm) neue Möglichkeiten. Die schnelle Anpassung von Quantisierungsalgorithmen an verschiedene Hardwareplattformen und die Maximierung der Hardwareleistung ist eine neue Richtung für die Erkundung.

Referenzpapiere

[1]LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale [2]Outliers Dimensions that Disrupt Transformers Are Driven by Frequency [3]Smoothquant: Accurate and efficient post-training quantization for large language models [4]FP8 versus INT8 for efficient deep learning inference [5]FP8-LM: Training FP8 Large Language Models [6]The case for 4-bit precision: k-bit Inference Scaling Laws [7]LLM-FP4: 4-Bit Floating-Point Quantized Transformers [8]GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers [9]Understanding the Impact of Post-Training Quantization on Large Language Models [10]QLoRA: Efficient Finetuning of Quantized LLMs

novita.ai bietet Stable Diffusion API und Hunderte von schnellen und günstigsten KI-Bildgenerierungs-APIs für 10.000 Modelle. 🎯 Schnellste Generierung in nur 2s, Pay-As-You-Go, mindestens 0,0015 $ für jedes Standardbild, Sie können Ihre eigenen Modelle hinzufügen und GPU-Wartung vermeiden. Kostenlose Weitergabe von Open-Source-Erweiterungen.

Empfohlene Lektüre

  1. Stable Diffusion API: Ein umfassender Leitfaden
  2. ChatGLM3: Open Source Chat LLMs