Zum Inhalt springen
_CORE
KI & Agentensysteme Unternehmensinformationssysteme Cloud & Platform Engineering Datenplattform & Integration Sicherheit & Compliance QA, Testing & Observability IoT, Automatisierung & Robotik Mobile & Digitale Produkte Banken & Finanzen Versicherungen Öffentliche Verwaltung Verteidigung & Sicherheit Gesundheitswesen Energie & Versorgung Telko & Medien Industrie & Fertigung Logistik & E-Commerce Retail & Treueprogramme
Referenzen Technologien Blog Know-how Tools
Über uns Zusammenarbeit Karriere
CS EN DE
Lassen Sie uns sprechen

Quantizace modelů — GPTQ, GGUF, AWQ

28. 04. 2024 4 Min. Lesezeit intermediate

Quantisierung ist eine Schluesseltechnik, um grosse Sprachmodelle der breiteren Oeffentlichkeit zugaenglich zu machen. Sie ermoeglicht eine dramatische Reduzierung der Speicheranforderungen von Modellen bei Beibehaltung ihrer Leistung durch Methoden wie GPTQ, GGUF oder AWQ.

Was ist Modell-Quantisierung

Quantisierung ist eine Technik zur Reduzierung der Groesse neuronaler Netze durch Verringerung der Datentypgenauigkeit. Anstelle von Standard-32-Bit-Float-Werten verwenden wir 16-Bit-, 8-Bit- oder sogar 4-Bit-Darstellungen. Das Ergebnis ist eine dramatische Reduzierung der Speicheranforderungen und eine Beschleunigung der Inferenz, oft mit minimalem Qualitaetsverlust.

Fuer Sprachmodelle wie GPT ist Quantisierung entscheidend - ein 70B-Parameter-Modell belegt etwa 140 GB Speicher in FP16. Nach einer 4-Bit-Quantisierung sinkt es auf ~35 GB, was die Ausfuehrung auf Consumer-Hardware ermoeglicht.

GPTQ: Post-Training-Quantisierung mit Kalibrierung

GPTQ (GPT Quantization) ist eine fortgeschrittene Post-Training-Quantisierungsmethode, die auf die Minimierung von Kompressionsfehlern ausgerichtet ist. Sie verwendet einen kleinen Kalibrierungsdatensatz zur Optimierung der Quantisierungsparameter fuer jede Schicht.

GPTQ-Funktionsprinzip

GPTQ loest ein Optimierungsproblem fuer jede Schicht unabhaengig. Fuer die Gewichtsmatrix W sucht es eine quantisierte Version Q(W), die die Frobenius-Norm der Differenz minimiert:

min ||WX - Q(W)X||²_F

Der Algorithmus arbeitet blockweise und nutzt die Hesse-Matrix fuer eine bessere Approximation des Quantisierungsfehlers.

GPTQ-Implementierung

Fuer die Quantisierung mit GPTQ koennen wir die AutoGPTQ-Bibliothek verwenden:

from transformers import AutoModelForCausalLM, AutoTokenizer
from auto_gptq import AutoGPTQForCausalLM, BaseQuantizeConfig

# Load original model
model_name = "microsoft/DialoGPT-medium"
tokenizer = AutoTokenizer.from_pretrained(model_name)

# Quantization configuration
quantize_config = BaseQuantizeConfig(
    bits=4,  # 4-bit quantization
    group_size=128,
    desc_act=False,
)

# Model quantization
model = AutoGPTQForCausalLM.from_pretrained(
    model_name,
    quantize_config=quantize_config,
    device="cuda:0"
)

# Prepare calibration data
calibration_data = [
    "The quick brown fox jumps over the lazy dog.",
    "Machine learning is transforming technology.",
    # more calibration sentences...
]

# Run quantization
model.quantize(calibration_data)

# Save quantized model
model.save_quantized("./quantized_model")

Vor- und Nachteile von GPTQ

Vorteile:

  • Hohe Quantisierungsqualitaet dank Kalibrierung
  • Unterstuetzung verschiedener Bit-Breiten (2, 3, 4, 8 Bit)
  • Optimiert fuer GPU-Inferenz

Nachteile:

  • Langsamer Quantisierungsprozess
  • Erfordert Kalibrierungsdaten
  • Primaer fuer NVIDIA-GPUs

GGUF: Universelles Format fuer CPU-Inferenz

GGUF (GPT-Generated Unified Format) ist ein neues Binaerformat, das vom llama.cpp-Team entwickelt wurde. Es hat aeltere GGML-Formate ersetzt und ist fuer effizientes Laden und CPU-Inferenz optimiert.

GGUF-Formatstruktur

GGUF enthaelt Metadaten, Tensor-Informationen und die Daten selbst in einer Datei. Es unterstuetzt verschiedene Quantisierungsschemata wie Q4_0, Q5_1, Q8_0 usw., wobei die Zahl die Bitanzahl und der Buchstabe die Algorithmusvariante angibt.

# Convert model to GGUF format
python convert.py --outfile model.gguf \
                  --outtype q4_0 \
                  ./original_model/

# Run with llama.cpp
./main -m model.gguf \
       -n 128 \
       -p "Explain quantum computing:" \
       -t 8  # number of threads

Arbeiten mit GGUF in Python

Fuer die Arbeit mit GGUF-Modellen koennen wir den llama-cpp-python-Wrapper verwenden:

from llama_cpp import Llama

# Load GGUF model
llm = Llama(
    model_path="./model.gguf",
    n_ctx=2048,  # context window
    n_threads=8,  # CPU threads
    verbose=False
)

# Text generation
output = llm(
    "Explain the concept of quantization:",
    max_tokens=256,
    temperature=0.7,
    top_p=0.9
)

print(output['choices'][0]['text'])

GGUF-Quantisierungsvarianten

  • Q4_0: 4-Bit-Quantisierung, schnellste, leichter Qualitaetsverlust
  • Q5_1: 5-Bit, bessere Qualitaet als Q4_0
  • Q8_0: 8-Bit, minimaler Qualitaetsverlust
  • Q4_K_M: Mixed Precision, optimales Geschwindigkeits-/Qualitaetsverhaeltnis

AWQ: Activation-aware Weight Quantization

AWQ ist eine relativ neue Methode, die die Bedeutung einzelner Gewichte basierend auf Aktivierungsmustern waehrend der Quantisierung beruecksichtigt. Anstelle einer einheitlichen Quantisierung aller Gewichte schuetzt sie wichtige Kanaele vor Degradation.

Schluesselprinzipien von AWQ

AWQ identifiziert “salient channels” - Kanaele mit hoher Aktivierungsvarianz, die den groessten Einfluss auf die Modellausgabe haben. Diese Kanaele werden entweder mit hoeherer Praezision quantisiert oder verbleiben in der urspruenglichen Praezision.

from awq import AutoAWQForCausalLM
from transformers import AutoTokenizer

model_name = "mistralai/Mistral-7B-v0.1"
quant_path = "mistral-7b-awq"

# Load model and tokenizer
model = AutoAWQForCausalLM.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)

# AWQ quantization
model.quantize(tokenizer, quant_config={
    "zero_point": True,
    "q_group_size": 128,
    "w_bit": 4,
    "version": "GEMM"
})

# Save quantized model
model.save_quantized(quant_path)

# Load and use
quantized_model = AutoAWQForCausalLM.from_quantized(
    quant_path, 
    device="cuda:0"
)

Methodenvergleich

Methode Quantisierungsgeschwindigkeit Qualitaet Idealer Einsatz
GPTQ Langsam Hoch GPU-Inferenz, Produktion
GGUF Schnell Mittel-Hoch CPU-Inferenz, Edge-Geraete
AWQ Mittel Sehr hoch GPU-Inferenz, beste Qualitaet

Praktische Tipps zur Methodenwahl

Bei der Wahl einer Quantisierungsmethode beruecksichtigen Sie folgende Faktoren:

  • Hardware: GGUF fuer CPU, GPTQ/AWQ fuer GPU
  • Latenz: GGUF schnellster Start, AWQ schnellste GPU-Inferenz
  • Speicher: Alle Methoden reduzieren die Speicheranforderungen drastisch
  • Qualitaet: AWQ > GPTQ > GGUF (allgemein)

Fuer Entwickler empfehle ich, mit verschiedenen Bit-Breiten-Kombinationen zu experimentieren. 4-Bit-Quantisierung bietet in der Regel das beste Kompressions-/Qualitaetsverhaeltnis, waehrend 8-Bit nahezu die urspruengliche Leistung bewahrt.

Zusammenfassung

Quantisierung ist eine wesentliche Technik fuer das Deployment grosser Sprachmodelle auf regulaerer Hardware. GPTQ bietet hervorragende Qualitaet fuer GPU-Anwendungen, GGUF ist ideal fuer CPU-Inferenz und Experimente, waehrend AWQ den aktuellen Stand der Technik in der Qualitaetserhaltung repraesentiert. Die Wahl der richtigen Methode haengt von den spezifischen Anwendungsanforderungen, der verfuegbaren Hardware und der Toleranz fuer Geschwindigkeits-/Qualitaetskompromisse ab.

quantizacegptqgguf
Teilen:

CORE SYSTEMS Team

Wir bauen Kernsysteme und KI-Agenten, die den Betrieb am Laufen halten. 15 Jahre Erfahrung mit Enterprise-IT.