- Open Source, das FSDP (Fully Sharded Data Parallel) und QLoRA (Quantization + Low-Rank Adaptation) kombiniert
- Ermöglicht die effiziente Feinabstimmung eines 70B-Sprachmodells mit einem gewöhnlichen Desktop-PC und zwei Standard-Gaming-GPUs
Hintergrund
- Obwohl der Leistungsunterschied zwischen Rechenzentrumshardware und Gaming-GPUs in Desktop-Computern nicht groß ist, ist der Preisunterschied enorm.
- Gaming-GPUs haben wenig Speicher, weshalb das Trainieren großer Sprachmodelle schwierig ist.
- Answer.AI wollte dieses Problem lösen und einen Weg finden, die besten Open-Source-Modelle mit günstigen Gaming-GPUs zu trainieren.
QLoRA: Größere Modelle auf einer einzelnen GPU trainieren
- QLoRA ist eine Kombination aus Quantisierung und LoRA, die die Gewichte des Modells auf 4 Bit reduziert und so den GPU-Speicherverbrauch senkt.
- LoRA umgeht Speicherbeschränkungen, indem nicht das gesamte große Sprachmodell trainiert wird, sondern kleine Adaptermatrizen hinzugefügt und trainiert werden.
- QLoRA ermöglicht das Trainieren eines 65B-Modells auf einer 48GB-Karte, reicht aber immer noch nicht aus, um ein 70B-Modell auf einer 24GB-Gaming-GPU zu trainieren.
FSDP: Das Trainingsvolumen auf mehrere GPUs skalieren
- FSDP (Fully Sharded Data Parallel) verteilt die Modellparameter auf mehrere GPUs, damit sie gleichzeitig genutzt werden können.
- FSDP bringt die Vorteile von DDP (Distributed Data Parallel) auch auf große Modelle, die auf einer einzelnen GPU nicht Platz finden würden.
- Ein nicht quantisiertes 70B-Modell (70 Milliarden Parameter) benötigt zum Beispiel 140GB RAM, da jeder Parameter mit 16 Bit, also 2 Byte, gespeichert wird. Selbst eine NVIDIA-H100-Karte (mit Kosten von etwa $40,000 pro Karte!) reicht dafür nicht aus. 80GB RAM sind nötig.
- Mit FSDP lassen sich jedoch 4 H100-GPUs zu insgesamt 320GB RAM kombinieren. Und man spart $150000.
FSDP und QLoRA kombinieren
- Answer.AI verkleinert das Modell mit QLoRA und verteilt es mit FSDP auf mehrere 24GB-Gaming-Karten, um effizientes Training zu ermöglichen.
- Dadurch lässt sich ein 70B-Modell mit zwei gewöhnlichen Gaming-GPUs trainieren.
- Ende 2023 wurde die Idee diskutiert, FSDP und QLoRA zu kombinieren, anschließend wurden die dafür nötigen Probleme gelöst.
- Dabei kamen verschiedene Techniken und Bibliotheken in Kombination zum Einsatz.
- Quantisierte Parameter werden in demselben Datentyp gespeichert wie der "Computation Type" des Modells.
- Gradient Checkpointing: Statt den vollständigen Gradienten zu speichern, werden Aktivierungen an mehreren "Checkpoints" des gesamten Modells abgelegt und bei Bedarf Vorwärtsberechnungsschritte erneut ausgeführt, um die Gradienten neu zu berechnen.
- CPU Offloading: Gewichte werden, wenn sie nicht verwendet werden, im CPU-RAM statt im GPU-Speicher abgelegt, wodurch der benötigte GPU-Speicher drastisch sinkt.
- Flash Attention 2: berechnet Attention effizient mit speicheroptimierten Cuda-Kernels.
- HQQ (Half-Quadratic Quantization) wurde entdeckt und mit FSDP integriert (50-mal schneller und genauer als GPTQ).
Verwendung von FSDP/QLoRA
- Für FSDP werden zwei oder mehr GPUs benötigt. (Bei Runpod ist ein Dual-3090-System für $0.6 pro Stunde verfügbar.)
- Installiere die neuesten Versionen von Transformers, PEFT, Bitsandbytes (und HQQ, falls du es verwendest), klone anschließend das Repository von Answer.AI und folge der README zur Ausführung.
- Um Alpaca auf 2 Karten mit 24GB zu trainieren:
python train.py --train_type qlora --dataset alpaca --batch_size 8 --gradient_accumulation_steps 2 --output_dir qlora_output --log_to wandb
- Das Ganze ist noch in einer frühen Phase (Alpha/Preview).
- Benchmark-Ergebnisse sollen in den nächsten Wochen ebenfalls veröffentlicht werden.
Meinung von GN⁺
- Dieser Artikel dürfte für Menschen im Bereich KI und Machine Learning sehr interessant sein. Besonders bemerkenswert ist, dass hier ein neuer Weg gezeigt wird, große Sprachmodelle effizient zu trainieren.
- Falls diese Technik erfolgreich breit eingesetzt wird, könnte sie die Kostenhürde in KI-Forschung und -Entwicklung erheblich senken. Das wäre auch eine große Chance für kleinere Labore oder einzelne Entwickler.
- Damit dieser Ansatz tatsächlich breit übernommen wird, sind jedoch Stabilität und Benutzerfreundlichkeit wichtige Faktoren. Da sich das System noch in einem frühen Stadium befindet, muss es durch Tests und Feedback aus der Community verbessert werden.
- Bei der Einführung neuer Technologien sollten immer Kompatibilität mit bestehenden Systemen, Leistung und Kosten berücksichtigt werden. Der Vorteil dieser Technik liegt in der besseren Zugänglichkeit für das Training großer Modelle, doch da sie sich noch in einem frühen Stadium befindet, kann es Nachteile bei Stabilität und Support geben.
1 Kommentare
Hacker-News-Kommentare
Der Artikel ist großartig, aber es ist schade, dass es so viele Gelegenheiten gab, das Wort „nibble“ zu verwenden, und alle verpasst wurden.
Als Nutzer würde mich interessieren, wie lange es dauert, ein 70B-Modell mit einem System zu feinzujustieren, das 4-Bit-Gewichte verwendet, und ich fände eine Tabelle hilfreich, die etwa Modellgröße, Trainingsumfang, Trainingskosten und den zu erwartenden Qualitätsverlust dieser Technik zeigt.
Ich frage mich, ob sich eine (-1,0,1)-Kodierung anwenden lässt. Wenn ein solches Modell erscheint, würde ich gern wissen, ob answer.ai mit derselben Technik ein großes Modell mit zwei kleinen GPUs feinjustieren kann, und ich hätte gern eine Kosten-Nutzen-Analyse.
Solche Forschung ist äußerst nützlich, weil sie Einzelpersonen in die Lage versetzt, auf dem LLM-Markt zu konkurrieren. Das ist großartige Arbeit und passt gut zu den Ideen aus „Zero to One“.
Es wurde nicht erwähnt, dass bei der NeurIPS Efficiency Challenge alle Spitzenplatzierungen QLoRA verwendet haben, was ein gutes Beispiel für die Bedeutung und Nützlichkeit von QLoRA ist.
Das ist der interessanteste und konstruktivste Ansatz, den ich bisher bei „Open-Source“-LLMs gesehen habe. Ich hoffe, dass auch die Wissenschaft dies zum Standard macht.
Ich wünschte, schnelles Training auf Metal wäre früher verfügbar geworden. Derzeit ist der Mac Studio für Inferenz großer Modelle deutlich günstiger und schnell genug, aber Trainingslösungen gibt es fast gar nicht.
Die Qualität und Klarheit des technischen Schreibens ist hervorragend.
Ich frage mich, ob man LLM-(70B)-Gewichte mit meinen eigenen Daten neu trainieren kann.
Für Menschen, die LLMs mit begrenztem Hardware-Budget feinjustieren, ist das ein bahnbrechender Durchbruch.
Ich frage mich, warum DeepSpeed statt FSDP gewählt wurde.
Ich frage mich, ob es Werkzeuge gab, die zur Leistungsoptimierung verwendet wurden, als das Fine-Tuning des Modells möglich wurde.
Ich frage mich, ob Sparsifizierung ausprobiert wurde; ich habe den Eindruck, dass damit Fine-Tuning mit weniger RAM möglich sein könnte.