Skip to content
Anleitungen
ChatGPT
AutoGPTQ: Ein benutzerfreundliches LLMs-Quantisierungspaket

AutoGPTQ: Ein benutzerfreundliches LLMs-Quantisierungspaket

Einführung in AutoGPTQ

Mit dem Aufkommen größerer Sprachmodelle (LLMs) in der KI-Landschaft ist die Optimierung ihrer Effizienz zu einem wichtigen Bestreben geworden. AutoGPTQ bietet eine Lösung und bietet ein benutzerfreundliches LLMs-Quantisierungspaket, das auf dem GPTQ-Algorithmus aufbaut. Mit benutzerfreundlichen APIs ermöglicht AutoGPTQ einen effizienten Ansatz zur Bewältigung von Quantisierungsaufgaben in Machine-Learning-Workflows.

Sie können AutoGPTQ bei Github hier (opens in a new tab)überprüfen.

Aktualisierungen und Leistung von AutoGPTQ

AutoGPTQ ist ein dynamisches Projekt, das ständig seine Funktionen und Fähigkeiten verbessert. Die neuesten Updates beinhalten die Integration mit den Leistungsoptimierungsbibliotheken, die Unterstützung verschiedener Modeltypen und die Verbesserung der Geschwindigkeit des CUDA-Kernels.

Eine der Hauptstärken von AutoGPTQ ist seine Inferenzgeschwindigkeit. Der GPU-Vergleich zeigt eine beeindruckende Geschwindigkeitsmetrik, Tokens/Sekunde, wobei das quantisierte Modell, das AutoGPTQ verwendet, andere übertrifft. Beispielsweise übertrifft das quantisierte Llama-7b-Modell das Originalmodell in Bezug auf die Inferenzgeschwindigkeit (25,53 Token/s gegenüber 18,87 Token/s), wenn eine Eingabechargengröße von 1 verwendet wird, eine Decodierstrategie mit Beam Search verwendet wird und das Modell gezwungen wird, 512 Tokens zu generieren.

# AutoGPTQ-Leistungsvergleich
performance_comparison = {
    "Modell": ["llama-7b", "moss-moon 16b", "gpt-j 6b"],
    "GPU": ["1xA100-40G", "1xA100-40G", "1xRTX3060-12G"],
    "num_beams": [1, 4, 1],
    "fp16": [18,87, 68.79, None],
    "gptq-int4": [25,53, 91.30, 29.55]
}

Installation von AutoGPTQ

Der Einstieg in AutoGPTQ ist einfach. Die neueste stabile Version kann über pip installiert werden, um eine schnelle Einrichtung zu ermöglichen:

pip install auto-gptq

Für bestimmte Setups können vorkompilierte Wheels heruntergeladen und installiert werden, um den Build-Vorgang zu überspringen:

# Gehen Sie zunächst in das Verzeichnis, in dem das Wheel gespeichert ist, und führen Sie dann den folgenden Befehl aus
pip install auto_gptq-0.2.0+cu118-cp310-cp310-linux_x86_64.whl 
# Installieren Sie das v0.2.0 AutoGPTQ vorkompilierte Wheel für Linux in einer Umgebung mit Python=3.10 und CUDA=11.8

Darüber hinaus bietet das Paket Optionen zum Deaktivieren von CUDA-Erweiterungen oder zur Unterstützung bestimmter Modelle wie LLaMa:

# Deaktivieren von CUDA-Erweiterungen
BUILD_CUDA_EXT=0 pip install auto-gptq
 
# Unterstützung des LLaMa-Modells
pip install auto-gptq[llama]

AutoGPTQ in Aktion: Quantisierung und Inferenz

Die Kernfunktionalität von AutoGPTQ besteht darin, die Quantisierung großer Sprachmodelle zu ermöglichen. Der Prozess ist einfach und kann mit nur wenigen Zeilen Code ausgeführt werden. Im Folgenden finden Sie ein Beispiel, bei dem ein vortrainiertes Modell quantisiert und dann für die Inferenz verwendet wird:

from transformers import AutoTokenizer
from auto_gptq import AutoGPTQForCausalLM, BaseQuantizeConfig
import logging
 
# Protokollierung einrichten
logging.basicConfig(format="%(asctime)s %(levelname)s [%(name)s] %(message)s", level=logging.INFO, datefmt="%Y-%m-%d %H:%M:%S")
 
# Vortrainierte und quantisierte Modellverzeichnisse definieren
pretrained_model_dir = "facebook/opt-125m"
quantized_model_dir = "opt-125m-4bit"
 
# Tokenizer und Beispiele einrichten
tokenizer = AutoTokenizer.from_pretrained(pretrained_model_dir, use_fast=True)
examples = [tokenizer("auto-gptq ist eine benutzerfreundliche Modell-Quantisierungsbibliothek mit benutzerfreundlichen APIs, basierend auf dem GPTQ-Algorithmus.")]
 
# Quantisierungskonfiguration einrichten
quantize_config = BaseQuantizeConfig(bits=4, group_size=128, desc_act=False)
 
# Modell laden, quantisieren und speichern
model = AutoGPTQForCausalLM.from_pretrained(pretrained_model_dir, quantize_config)
model.quantize(examples)
model.save_quantized(quantized_model_dir)

Anpassung von Modellen

AutoGPTQ ermöglicht es Benutzern auch, seine Funktionen zur Unterstützung benutzerdefinierter Modelle zu erweitern. Es handelt sich um einen einfachen Prozess, der dem Benutzer mehr Kontrolle über seine Machine-Learning-Aufgaben gibt. Diese anpassungsfähige Natur unterscheidet AutoGPTQ von anderen Quantisierungspaketen und macht es flexibler und anpassungsfähiger an verschiedene Anwendungsfälle.

Diese Anpassung kann an einem Beispiel gesehen werden, in dem auto_gptq zur Unterstützung von OPT-Modellen erweitert wird.

# AutoGPTQ zur Unterstützung von OPT-Modell erweitern (Code basierend auf Ihren individuellen Bedürfnissen bereitstellen)

Evaluierung auf abhängigen Aufgaben

AutoGPTQ unterstützt die Bewertung der Leistung des Modells auf bestimmten abhängigen Aufgaben vor und nach der Quantisierung. Dadurch wird sichergestellt, dass der Quantisierungsprozess die Leistung des Modells auf den ihm zugewiesenen Aufgaben nicht negativ beeinflusst. Sie können beispielsweise ein Modell wie EleutherAI/gpt-j-6b mit dem Datensatz cardiffnlp/tweet_sentiment_multilingual auf einer Sequenzklassifikationsaufgabe bewerten:

Um dies weiter zu veranschaulichen, führen wir ein einfaches Evaluierungsbeispiel mit dem Modell EleutherAI/gpt-j-6b und dem Datensatz cardiffnlp/tweet_sentiment_multilingual durch. In diesem Fall bewerten wir die Leistung des quantisierten Modells in einer Sequenzklassifikationsaufgabe, genauer gesagt der Sentiment-Analyse.

from transformers import pipeline, AutoTokenizer
from auto_gptq import AutoGPTQForSequenceClassification
from datasets import load_dataset
 
# Definiere Verzeichnisse für vorab trainierte und quantisierte Modelle
pretrained_model_dir = "EleutherAI/gpt-j-6b"
quantized_model_dir = "gpt-j-6b-4bit"
 
# Lade und quantisiere das Modell
model = AutoGPTQForSequenceClassification.from_pretrained(pretrained_model_dir)
model.quantize()
model.save_quantized(quantized_model_dir)
 
# Lade den Tokenizer und die Sentiment-Analyse-Pipeline
tokenizer = AutoTokenizer.from_pretrained(quantized_model_dir)
sentiment_analysis = pipeline("sentiment-analysis", model=model, tokenizer=tokenizer)
 
# Lade den Datensatz
dataset = load_dataset("cardiffnlp/tweet_sentiment_multilingual", split="test")
 
# Evaluiere das Modell auf dem Testdatensatz
correct, total = 0, 0
for example in dataset:
    prediction = sentiment_analysis(example["text"])[0]
    if prediction["label"].lower() == example["label"].lower():
        correct += 1
    total += 1
 
# Gib die Genauigkeit des Modells auf dem Testdatensatz aus
print(f"Genauigkeit: {correct / total:.2f}")

Der obige Code zeigt die Quantisierung, Speicherung und anschließende Auswertung des quantisierten Modells. Dadurch können Sie die Leistung des Modells und wie sich der Quantisierungsprozess auf das Ergebnis der Sequenzklassifizierungsaufgabe auswirkt, bewerten.

FAQ

1. Kann AutoGPTQ nur GPT-basierte Modelle verarbeiten?

Obwohl AutoGPTQ ursprünglich für GPT-basierte Modelle entwickelt wurde, haben die Entwickler seine Funktionalitäten erweitert, um eine breitere Palette von Transformer-Modellen zu unterstützen. Diese Vielseitigkeit basiert auf dem modularen Design der Bibliothek, das es ermöglicht, sie für andere Modelle anzupassen.

2. Wie kann ich AutoGPTQ für meinen spezifischen Anwendungsfall anpassen?

AutoGPTQ ermöglicht Anpassungen, indem es seine Klassen und Methoden erweitert, um spezifische Anforderungen zu unterstützen. Sie können benutzerdefinierte Klassen erstellen, die von den von AutoGPTQ bereitgestellten Basisklassen abgeleitet sind, und die erforderlichen Methoden überschreiben.

3. Beeinflusst die Quantisierung die Leistung meines Modells?

Die Quantisierung geht mit einem Trade-off zwischen Modellleistung und Modellgröße bzw. Rechenleistung einher. AutoGPTQ zielt jedoch darauf ab, diese Auswirkungen zu minimieren. Es bietet Optionen, um Ihr Modell vor und nach der Quantisierung auf Aufgaben auf niedriger Ebene zu evaluieren und sicherzustellen, dass die Leistungseinbußen für Ihren Anwendungsfall akzeptabel sind.

Fazit

Zusammenfassend bietet AutoGPTQ eine effektive und effiziente Möglichkeit, Transformer-Modelle zu quantisieren, während die Leistungsstandards für bestimmte Aufgaben beibehalten werden. Die benutzerfreundliche API und die Anpassungsfähigkeit machen es zu einem vielseitigen Werkzeug für Machine Learning-Experten, die ihre Modelle optimieren möchten. Egal, ob Sie die Speicheranforderungen Ihres Modells reduzieren oder die Inferenzgeschwindigkeit verbessern möchten, AutoGPTQ kann ein wesentlicher Bestandteil Ihres Werkzeugsatzes sein.