So optimieren Sie ein 8B-Neuronales Netz auf einem Laptop mit einer 4-GB-GPU
Jeder, der schon einmal versucht hat, ein LLM selbst zu fine-tunen, kennt dieses Ritual: Man richtet die Umgebung ein, kämpft mit CUDA-Versionen, optimiert die Batch-Größe, fängt endlose CUDA out of memory-Fehler ab und landet am Ende dabei, einen H100 in der Cloud zu mieten, nur um ein paar Epochen auf einem kleinen Datensatz zu trainieren. Irgendwann nimmt das Konfigurieren von Skripten und das Herumhantieren mit Servern mehr Zeit in Anspruch als die Datenvorbereitung und die Analyse der Ergebnisse.
Kürzlich bin ich auf das Soup-Repository von Alpamis Makazhan gestoßen. Der Autor hat sich ein ehrgeiziges Ziel gesetzt: die gesamte Tuning-Pipeline auf einen einzigen Konsolenbefehl und eine einfache YAML-Datei zu reduzieren. Das Interessanteste am Projekt ist die Fähigkeit, ein Llama-3.1-Modell mit 8 Milliarden Parametern auf einem mobilen RTX 3050 mit nur 4 GB Videospeicher zu fine-tunen.
Das klingt nach einem Marketing-Trick, aber unter der Haube steckt einige interessante Technik und ein offenes Preprint mit Benchmarks. Lassen Sie uns aufschlüsseln, wie es funktioniert und wie es in der Praxis abschneidet.
Was Soup kann
Im Wesentlichen ist Soup ein CLI-Wrapper um einen beliebten ML-Stack (PyTorch, Transformers, PEFT, TRL). Die Hauptidee besteht darin, die Routinearbeit zu übernehmen: Erkennung verfügbarer Hardware, Quantisierung, Auto-Tuning der Batch-Größe und Formatierung von Datensätzen.
Das Tool deckt den vollständigen Modell-Workflow ab:
- Initialisiert Vorlagen für verschiedene Aufgaben (Chat, Code, Tool-Calling, Klassifikation);
- Erkennt automatisch Datenformate (Alpaca, ShareGPT, ChatML) aus JSONL, Parquet oder CSV;
- Führt Training mit SFT, DPO, ORPO, SimPO oder KTO-Methoden durch;
- Testet das Ergebnis auf Regressionen und führt LoRA-Adapter in Modellgewichte zusammen;
- Exportiert das Modell ins GGUF-Format für die Ausführung in Ollama oder llama.cpp.
Für die grundlegende Verwendung benötigen Sie nicht einmal PyTorch: Eine leichtgewichtige CLI-Version wird in ein paar Sekunden installiert und hilft bei der Dateninspektion. Und wenn Sie das Training selbst benötigen, wird der vollständige Stack hinzugezogen.
# Установка пакета с зависимостями для обучения
pip install "soup-cli[train]"
# Создание конфига через мастер или из готового шаблона
soup init --template chat
# Запуск процесса
soup train
Wie ein 8B-Modell in 4 GB Videospeicher passt
Normalerweise benötigt ein Modell mit 8 Milliarden Parametern selbst in quantisierter 4-Bit-Form (NF4) etwa 5-6 GB VRAM, nur um es in den Speicher zu laden. Wenn Sie Kontext, Aktivierungen und LoRA-Adapter hinzufügen, wird eine Karte mit 4 GB unweigerlich einen Out-of-Memory-Fehler werfen.
Der Autor von Soup verwendete eine Layer-Streaming-Technik.
Das Basismodell wird nicht vollständig im Videospeicher gehalten. Es wird im RAM des Computers gespeichert (oder sogar direkt von einer schnellen NVMe-Festplatte gelesen) und Schicht für Schicht an die GPU übergeben. Nur die trainierbaren LoRA-Adapter und die aktuelle Decoder-Schicht werden dauerhaft im VRAM gehalten.
In Tests auf einem Laptop-RTX 3050 mit 4 GB VRAM zeigte das Llama-3.1-8B-Instruct-Modell mit NF4-Quantisierung eine Spitzen-Speicherauslastung von nur 3,32 GB bei einer Geschwindigkeit von etwa 119 Tokens pro Sekunde. Die Berechnungen erzeugen bit-identische Ergebnisse zum konventionellen residenten Training.
Layer-Streaming wird buchstäblich mit einer einzigen Zeile im Config soup.yaml aktiviert:
base: meta-llama/Llama-3.1-8B-Instruct
task: sft
data:
train: ./data/train.jsonl
format: alpaca
training:
stream_layers: true # стриминг слоев из RAM
quantization: 4bit # NF4 квантование
batch_size: 4
stream_source: auto # RAM или NVMe
lora:
r: 64
alpha: 16
output: ./output
In Versionen 0.72+ wurde Layer-Streaming nicht nur auf klassisches SFT, sondern auch auf Alignment-Methoden wie DPO und ORPO erweitert. Bei DPO benötigen Sie das Basismodell zum Vergleich, was normalerweise den Speicherverbrauch verdoppelt. Hier verwendet das Tool dasselbe Streaming-Layer mit deaktiviertem Adapter, ohne eine Duplikation im Speicher zu erstellen.
Qualitätsprüfungen und Schutz vor versteckten Fehlern
Ein häufiges Fine-Tuning-Problem: Das Modell scheint gelernt zu haben, auf Ihre spezifischen Fragen zu antworten, hat aber völlig vergessen, wie man Funktionen aufruft, oder begann, defektes JSON auszugeben.
Soup verfügt über ein integriertes Verifizierungstool soup ship. Dies ist ein interner Quality Gate mit einer Reihe von Tests (Arithmetik, JSON-Schema-Einhaltung, Tool-Calling, Sicherheit), der sowohl das Original- als auch das fine-getunte Modell ausführt.
soup ship --base ./base --adapter ./my-lora --task-eval my_task.jsonl
Der Befehl gibt ein spezifisches Urteil zurück: SHIP oder DON'T SHIP. Wenn der Adapter beispielsweise die Antworten auf der Zielaufgabe verbessert, aber die Tool-Call-Syntax gebrochen hat, beendet das Tool den Vorgang mit einem Nicht-Null-Code und zeigt, wo die Regression aufgetreten ist.
Export und Verwendung
Sobald der Adapter trainiert und verifiziert ist, können Sie ihn sofort im gewünschten Format verpacken:
# Проверить ответы в интерактивном режиме
soup chat --model ./output
# Влить LoRA в базовые веса
soup merge --adapter ./output
# Сконвертировать в GGUF для Ollama
soup export --model ./output --format gguf --quant q4_k_m
# Или поднять локальный API-сервер с OpenAI-совместимыми ручками
soup serve --model ./output
Wenn Sie das Training auf einem Remote-Rechner oder in Isolation ohne manuelle Treiberinstallation durchführen müssen, verfügt das Projekt über ein fertiges Docker-Image auf GitHub Packages (GHCR).
Wem dieses Projekt nützen wird
Soup richtet sich an Entwickler, die einen schnellen Experimentierzyklus benötigen, ohne sich in die Tiefen des verteilten Trainings vertiefen zu müssen.
Das Projekt ist definitiv einen Versuch wert, wenn Sie:
- Mit kleinen Modellen (Qwen 2.5, Llama 3.1, Gemma) auf einem Heim-PC oder Laptop experimentieren möchten.
- Eine fertige Pipeline suchen: vom Rohdatensatz bis zu einer GGUF-Datei für die lokale Verwendung.
- Es leid sind, dieselben Skripte basierend auf HuggingFace TRL für typische SFT-Aufgaben zu schreiben.
Einschränkungen: Python 3.10–3.12 ist strikt erforderlich (PyTorch-Builds für 3.13 sind derzeit instabil). Vollständiges Pre-Training von Grund auf auf riesigen Clustern über Soup wird nicht empfohlen – verwenden Sie dafür direkt Megatron oder DeepSpeed. Aber für angewandtes Fine-Tuning und Prototyping auf Consumer-GPUs ist dies ein praktisches und durchdachtes Tool.
Ähnliche Projekte