Modelltrainingsleitfaden 4: SFT-Trainingsleitfaden
Im Wesentlichen besteht SFT (Supervised Fine-Tuning) darin, das Modell auf „Instruktionsausrichtung“ auszurichten, d. h. ihm beizubringen, in welchem Format und Ton es antworten soll, wenn ein Benutzer eine bestimmte Frage stellt.
Wird gerendert...
Nach dem Erlernen von PT (inkrementelles Vortraining) ist **SFT (überwachtes Feintuning)** der wichtigste Schritt in der Praxis. Im Wesentlichen handelt es sich um **"Instruktionsausrichtung"**, d.h. das Modell lernt: Wie soll es antworten, wenn ein Benutzer so fragt, in welchem Format und in welchem Ton?
## Kernvorbereitung für SFT
### 1. Welche Daten sollen vorbereitet werden?
SFT benötigt **QA-Frage-Antwort-Paare** (oder Instruction-Daten).
**Format:** In der Regel `JSONL`.
**Inhaltsstruktur:**
- `instruction`: Die Anweisung/Frage des Benutzers (z.B.: "Ich bin heute sehr traurig").
- `input`: Optionale Hintergrundinformationen (z.B.: "Der Benutzer ist gerade arbeitslos").
- `output`: Die Standardantwort des Modells (z.B.: "Ich umarme dich, ich weiß, wie sich das gerade anfühlt...").
**Datenmenge:** Begleitende Anwendungen benötigen in der Regel **500 - 5.000** hochwertige, mehrrundige Dialogdaten, die mit einer bestimmten Persönlichkeit übereinstimmen.
### 2. Welche Software und Frameworks werden benötigt?
**Hardware:** Grafikkarte mit mehr als 24 GB Speicher (z.B. 3090/4090/A100).
**System:** Linux (Ubuntu 20.04+) ist am effektivsten, unter Windows ist WSL2 erforderlich.
**Kern-Frameworks:**
- `PyTorch`: Deep-Learning-Basis.
- `Transformers`: Von HuggingFace, Kernbibliothek zum Laden und Trainieren von Modellen.
- `PEFT`: Bibliothek für leichtgewichtiges Feintuning wie LoRA.
- `DeepSpeed`: Verarbeitung von Multi-GPU-Parallelität und Speicheroptimierung.
## Betriebsschritte für zwei Lösungen
### 1. LLaMA-Factory
Dies ist derzeit die am meisten empfohlene **praktische Lösung**, die Flexibilität und Benutzerfreundlichkeit ausbalanciert.
1. **Datenregistrierung:** Platzieren Sie Ihre `sft_data.json` im Ordner `data/`. Ändern Sie `data/dataset_info.json` und fügen Sie Ihre Datensatzbeschreibung hinzu.
2. **Training starten (Befehlszeilenmodus):** Schreiben Sie eine `sft.yaml`-Konfigurationsdatei:
```YAML
stage: sft # Auf SFT-Phase setzen
model_name_or_path: qwen/Qwen2.5-7B
preprocessing_num_workers: 8
finetuning_type: lora # LoRA zur Effizienzsteigerung verwenden
template: qwen # Wichtig! Muss mit dem Basismode übereinstimmen
dataset: my_sft_data # Ihr registrierter Datensatzname
output_dir: ./sft_output # Speicherort der Modellgewichte
per_device_train_batch_size: 4
gradient_accumulation_steps: 4
learning_rate: 5e-5 # SFT-Lernrate ist in der Regel höher als PT
num_train_epochs: 3.0
plot_loss: true # Loss-Kurvendiagramm generieren
```
3. **Befehl ausführen:**
```Bash
llamafactory-cli train sft.yaml
```
4. **Modell zusammenführen:** Das Training ergibt LoRA-Gewichte. Führen Sie `llamafactory-cli export` mit der Konfigurationsdatei aus, um sie mit dem ursprünglichen Modell zusammenzuführen.
### 2. Code selbst schreiben
Dies ist die anspruchsvollste Methode, basierend auf dem `SFTTrainer` der `Transformers`-Bibliothek.
1. **Modell und Tokenizer laden:**
```Python
from trl import SFTTrainer
from transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments
from peft import LoraConfig
model_id = "qwen/Qwen2.5-7B"
tokenizer = AutoTokenizer.from_pretrained(model_id)
tokenizer.pad_token = tokenizer.eos_token # Füllzeichen setzen
```
2. **LoRA-Parameter konfigurieren:**
```Python
peft_config = LoraConfig(
r=16,
lora_alpha=32,
target_modules="all-linear",
task_type="CAUSAL_LM"
)
```
3. **Trainer definieren:**
```Python
args = TrainingArguments(
output_dir="./my_sft_model",
per_device_train_batch_size=4,
max_steps=1000,
learning_rate=5e-5,
fp16=True # Halbe Präzision aktivieren, um Speicher zu sparen
)
trainer = SFTTrainer(
model=model_id,
args=args,
train_dataset=my_dataset, # Vorher verarbeitetes Dataset-Objekt
dataset_text_field="text", # Feld im Dataset angeben
peft_config=peft_config,
max_seq_length=1024,
)
```
4. **Training starten:**
```Python
trainer.train()
trainer.save_model()
```
## Zusammenfassung und Empfehlungen
- **Wenn Sie Effizienz suchen:** Verwenden Sie direkt **LLaMA-Factory**. Es hilft Ihnen bei der Behandlung des Problems der Dialogvorlagen (Chat Templates). *Hinweis: Wenn die Dialogvorlage (z.B. `<|im_start|>`-Tags) während des SFT-Trainings falsch ist, wird das Modell direkt dumm.*
- **Wenn Sie nur eine CPU haben oder keinen Code schreiben möchten:** Wählen Sie **阿里百炼 (Ali Bai Lian)**.
- **Wenn Sie eine Arbeit schreiben oder akademische Forschung betreiben:** Schreiben Sie den Code selbst (Lösung 3), damit Sie die Loss-Funktion nach Belieben ändern können.Kommentar
Melde dich an, um Kommentare anzuzeigen und zu veröffentlichen
Zur Anmeldung