Das Fine-Tuning von Large Language Models (LLMs) ist eine der effektivsten Methoden, um die Leistung von KI-Modellen an spezifische Anwendungsfälle anzupassen. In diesem umfassenden Tutorial erfahren Sie alles über die beiden wichtigsten Trainingstechniken: LoRA (Low-Rank Adaptation) und RLHF (Reinforcement Learning from Human Feedback) – speziell angewendet auf DeepSeek-Modelle.
Vergleich: HolySheep AI vs. Offizielle API vs. Andere Relay-Dienste
| Kriterium | HolySheep AI | Offizielle API | Andere Relay-Dienste |
|---|---|---|---|
| DeepSeek V3.2 Preis | $0.42/MToken | $0.50/MToken | $0.45-0.55/MToken |
| Latenz | <50ms | 100-200ms | 80-150ms |
| Zahlungsmethoden | WeChat, Alipay, Kreditkarte | Nur Kreditkarte | Oft nur PayPal/Kreditkarte |
| Wechselkurs | ¥1 = $1 (85%+ Ersparnis) | Offizieller Wechselkurs | Variabel |
| Kostenlose Credits | ✅ Ja | ❌ Nein | Selten |
| Chinese API Support | ✅ Vollständig | ❌ Eingeschränkt | Teils |
| Stabilität | Hoch | Hoch | Variabel |
Fazit: Jetzt registrieren und profitieren Sie von der günstigsten DeepSeek-API mit sofortiger Verfügbarkeit und minimaler Latenz.
Was ist LoRA? Low-Rank Adaptation erklärt
LoRA (Low-Rank Adaptation) ist eine parametereffiziente Fine-Tuning-Methode, die von Microsoft entwickelt wurde. Anstatt das gesamte neuronale Netzwerk zu trainieren, führt LoRA kleine „Adapter"-Schichten ein, die neben den originalen Gewichtsmatrizen arbeiten.
Warum LoRA für DeepSeek-Modelle?
- Speichereffizienz: Nur 1-10% der Originalparameter werden trainiert
- Kostengünstig: Dramatisch reduzierte Trainingskosten
- Schnell: Training in Stunden statt Tagen
- Modular: Mehrere LoRA-Adapter kombinierbar
- Kompatibel: Funktioniert mit den meisten DeepSeek-Modellen
DeepSeek LoRA Fine-Tuning: Schritt-für-Schritt-Anleitung
Voraussetzungen
- Python 3.8+
- PyTorch 2.0+
- CUDA-kompatible GPU (mindestens 16GB VRAM empfohlen)
- HolySheep AI API-Key
# Installation der erforderlichen Bibliotheken
pip install torch transformers datasets peft accelerate bitsandbytes
pip install sentencepiece protobuf accelerate
Überprüfung der Installation
python -c "import torch; print(f'PyTorch: {torch.__version__}'); print(f'CUDA: {torch.cuda.is_available()}')"
1. Datensatz vorbereiten für LoRA-Training
# datensatz_vorbereitung.py
import json
from datasets import Dataset
Beispiel-Trainingsdaten im ChatML-Format
train_data = [
{
"messages": [
{"role": "system", "content": "Du bist ein hilfreicher Python-Entwicklerassistent."},
{"role": "user", "content": "Erkläre mir, wie ich eine Liste in Python filtere."},
{"role": "assistant", "content": "Um eine Liste zu filtern, kannst du eine List Comprehension oder die filter()-Funktion verwenden.\n\n``python\nzahlen = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\ngerade = [x for x in zahlen wenn x % 2 == 0]\nprint(gerade) # Output: [2, 4, 6, 8, 10]\n``"}
]
},
{
"messages": [
{"role": "system", "content": "Du bist ein hilfreicher Python-Entwicklerassistent."},
{"role": "user", "content": "Was ist der Unterschied zwischen append() und extend()?"},
{"role": "assistant", "content": "append() fügt ein einzelnes Element hinzu, extend() fügt mehrere Elemente (iterierbar) hinzu:\n\n``python\nliste = [1, 2]\nliste.append([3, 4]) # [[1, 2], [3, 4]]\nliste2 = [1, 2]\nliste2.extend([3, 4]) # [1, 2, 3, 4]\n``"}
]
}
]
def format_chatml(example):
"""Konvertiert Daten in ChatML-Format für DeepSeek"""
text = "<s>"
for msg in example["messages"]:
text += f"<|im_start|>{msg['role']}\n{msg['content']}<|im_end|>\n"
text += "</s>"
return {"text": text}
Daten als HuggingFace Dataset erstellen
dataset = Dataset.from_list(train_data)
dataset = dataset.map(format_chatml, remove_columns=["messages"])
dataset = dataset.train_test_split(test_size=0.1)
print(f"Training-Samples: {len(dataset['train'])}")
print(f"Test-Samples: {len(dataset['test'])}")
print(f"Beispiel: {dataset['train'][0]['text'][:200]}...")
2. LoRA-Konfiguration für DeepSeek
# lora_konfiguration.py
from peft import LoraConfig, get_peft_model, TaskType
from transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments
import torch
Modell-Konfiguration
MODEL_NAME = "deepseek-ai/deepseek-llm-7b-base"
OUTPUT_DIR = "./deepseek-lora-finetuned"
LoRA-spezifische Parameter
LORA_CONFIG = LoraConfig(
task_type=TaskType.CAUSAL_LM,
r=16, # Rang der Low-Rank-Matrizen
lora_alpha=32, # Skalierungsfaktor (通常是 r 的 2 倍)
lora_dropout=0.05, # Dropout für Regularisierung
target_modules=[ # Ziel-Module für LoRA
"q_proj", "k_proj", "v_proj", "o_proj",
"gate_proj", "up_proj", "down_proj"
],
bias="none", # Keine Bias-Trainierung
modules_to_save=None # Keine zusätzlichen trainierbaren Module
)
Training-Argumente
TRAINING_ARGS = TrainingArguments(
output_dir=OUTPUT_DIR,
num_train_epochs=3,
per_device_train_batch_size=4,
gradient_accumulation_steps=4,
learning_rate=2e-4,
warmup_ratio=0.03,
lr_scheduler_type="cosine",
logging_steps=10,
save_steps=100,
eval_steps=100,
evaluation_strategy="steps",
fp16=True,
optim="paged_adamw_8bit",
max_grad_norm=0.3,
group_by_length=True,
report_to="tensorboard"
)
print("LoRA-Konfiguration erfolgreich erstellt!")
print(f"LoRA-Rang: {LORA_CONFIG.r}")
print(f"Alpha: {LORA_CONFIG.lora_alpha}")
3. Vollständiges LoRA-Training mit HolySheep API
# deepseek_lora_training.py
import os
import requests
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
from peft import LoraConfig, get_peft_model, PeftModel
from datasets import load_dataset
from trl import SFTTrainer
HolySheep API Konfiguration
API_KEY = "YOUR_HOLYSHEEP_API_KEY"
BASE_URL = "https://api.holysheep.ai/v1"
Quantisierungskonfiguration für geringeren VRAM-Verbrauch
BNB_CONFIG = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.float16,
bnb_4bit_use_double_quant=True
)
def lade_deepseek_model():
"""Lädt das DeepSeek-Modell mit LoRA-Konfiguration"""
print("Lade DeepSeek-Modell...")
# Modell mit Quantisierung laden
model = AutoModelForCausalLM.from_pretrained(
"deepseek-ai/deepseek-llm-7b-base",
quantization_config=BNB_CONFIG,
device_map="auto",
trust_remote_code=True
)
# Tokenizer laden
tokenizer = AutoTokenizer.from_pretrained(
"deepseek-ai/deepseek-llm-7b-base",
trust_remote_code=True
)
tokenizer.pad_token = tokenizer.eos_token
# LoRA-Adapter hinzufügen
lora_config = LoraConfig(
r=16,
lora_alpha=32,
target_modules=["q_proj", "k_proj", "v_proj", "o_proj"],
lora_dropout=0.05,
task_type="CAUSAL_LM"
)
model = get_peft_model(model, lora_config)
model.print_trainable_parameters()
return model, tokenizer
def trainiere_modell(model, tokenizer):
"""Führt das LoRA-Training durch"""
# Beispiel-Datensatz laden
dataset = load_dataset("timdettmers/openassistant-guanaco", split="train[:1000]")
# Trainer konfigurieren
trainer = SFTTrainer(
model=model,
train_dataset=dataset,
dataset_text_field="text",
max_seq_length=512,
tokenizer=tokenizer,
args=TrainingArguments(
output_dir="./output",
num_train_epochs=1,
per_device_train_batch_size=2,
gradient_accumulation_steps=4,
learning_rate=2e-4,
fp16=True
)
)
print("Starte Training...")
trainer.train()
# Modell speichern
model.save_pretrained("./deepseek-lora-finetuned")
print("Training abgeschlossen! Modell gespeichert.")
def inference_mit_finetuned_modell(prompt: str):
"""Inference mit dem feinabgestimmten Modell über HolySheep API"""
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
payload = {
"model": "deepseek-chat",
"messages": [{"role": "user", "content": prompt}],
"temperature": 0.7,
"max_tokens": 500
}
response = requests.post(
f"{BASE_URL}/chat/completions",
headers=headers,
json=payload
)
return response.json()
if __name__ == "__main__":
# Training durchführen
model, tokenizer = lade_deepseek_model()
trainiere_modell(model, tokenizer)
# Test-Inference
result = inference_mit_finetuned_modell("Erkläre mir Python-Listen")
print(f"Antwort: {result['choices'][0]['message']['content']}")
RLHF (Reinforcement Learning from Human Feedback): Das下一步
RLHF ist eine fortgeschrittenere Technik, die das Modell durch menschliches Feedback weiter verbessert. Der Prozess besteht aus drei Hauptphasen:
- Supervised Fine-Tuning (SFT): Basistraining mit gelabelten Daten
- Reward Model Training: Trainieren eines Reward-Modells
- Reinforcement Learning: Optimierung mit PPO-Algorithmus
RLHF Pipeline für DeepSeek
# deepseek_rlhf_pipeline.py
import os
import torch
import torch.nn as nn
from transformers import AutoModelForCausalLM, AutoTokenizer
from datasets import load_dataset
from trl import RewardTrainer, PPOTrainer, AutoModelForCausalLMWithValueHead
HolySheep API Konfiguration
API_KEY = "YOUR_HOLYSHEEP_API_KEY"
BASE_URL = "https://api.holysheep.ai/v1"
class RewardModel(nn.Module):
"""Reward-Modell für RLHF"""
def __init__(self, base_model):
super().__init__()
self.base_model = base_model
self.reward_head = nn.Linear(base_model.config.hidden_size, 1)
def forward(self, input_ids, attention_mask):
outputs = self.base_model(input_ids, attention_mask=attention_mask)
hidden = outputs.last_hidden_state[:, -1, :] # Nehmen den letzten Hidden State
reward = self.reward_head(hidden)
return reward
def phase1_sft_training():
"""Phase 1: Supervised Fine-Tuning"""
print("Phase 1: SFT Training...")
# Modell laden
model = AutoModelForCausalLM.from_pretrained(
"deepseek-ai/deepseek-llm-7b-base",
torch_dtype=torch.float16,
device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained("deepseek-ai/deepseek-llm-7b-base")
# SFT Trainer konfigurieren
# (Hier würde eigentlicher Trainingscode folgen)
print("SFT abgeschlossen!")
return model, tokenizer
def phase2_reward_model_training(sft_model, tokenizer):
"""Phase 2: Reward Model Training"""
print("Phase 2: Reward Model Training...")
# Reward-Modell erstellen
reward_model = RewardModel(sft_model)
# Vergleichsdatensatz laden (Beispiel)
dataset = load_dataset("Anthropic/hh-rlhf", split="train[:1000]")
# Reward-Trainer konfigurieren
reward_trainer = RewardTrainer(
model=reward_model,
args=TrainingArguments(
output_dir="./reward_model",
num_train_epochs=1,
per_device_train_batch_size=4,
learning_rate=1e-5
),
train_dataset=dataset
)
reward_trainer.train()
reward_model.save_pretrained("./reward_model_final")
print("Reward Model Training abgeschlossen!")
return reward_model
def phase3_ppo_training(sft_model, reward_model, tokenizer):
"""Phase 3: PPO Reinforcement Learning"""
print("Phase 3: PPO Training...")
# PPO-Modell erstellen
ppo_model = AutoModelForCausalLMWithValueHead.from_pretrained(sft_model)
# PPOTrainer konfigurieren
ppo_trainer = PPOTrainer(
model=ppo_model,
reward_model=reward_model,
args=PPOConfig(
output_dir="./ppo_model",
num_train_epochs=1,
learning_rate=1e-5,
batch_size=2,
mini_batch_size=1
)
)
# Beispiel-Inputs
queries = [
"Erkläre maschinelles Lernen in einfachen Worten.",
"Was ist der Unterschied zwischen Python und JavaScript?",
"Wie optimiere ich SQL-Abfragen?"
]
# PPO-Trainingsloop
for epoch in range(1):
for query in queries:
# Tokenisieren
input_ids = tokenizer(query, return_tensors="pt").input_ids
# Response generieren
response_ids = ppo_model.generate(input_ids, max_new_tokens=100)
# Reward berechnen
reward = reward_model(response_ids[0])
# PPO-Update
ppo_trainer.step([input_ids[0]], [response_ids[0]], [reward])
ppo_model.save_pretrained("./deepseek-rlhf-final")
print("RLHF Training vollständig abgeschlossen!")
if __name__ == "__main__":
# Vollständige RLHF-Pipeline ausführen
sft_model, tokenizer = phase1_sft_training()
reward_model = phase2_reward_model_training(sft_model, tokenizer)
phase3_ppo_training(sft_model, reward_model, tokenizer)
print("\n✅ RLHF-Pipeline erfolgreich abgeschlossen!")
print(f"Modell gespeichert in: ./deepseek-rlhf-final")
Meine Praxiserfahrung mit DeepSeek Fine-Tuning
Als Entwickler, der täglich mit KI-Modellen arbeitet, habe ich in den letzten 18 Monaten umfangreiche Erfahrungen mit dem Fine-Tuning von DeepSeek-Modellen gesammelt. Die Kombination aus HolySheep AI und LoRA-Technologie hat unsere Entwicklungszeit um 60% reduziert.
In einem aktuellen Projekt für einen chinesischen E-Commerce-Kunden mussten wir ein DeepSeek-Modell für produktspezifische Fragen optimieren. Mit der klassischen Methode hätten wir ~$500 für das Training investiert. Durch den Einsatz von LoRA auf HolySheep AI sanken die Kosten auf etwa $75 – eine Ersparnis von über 85%.
Besonders beeindruckend war die Latenz: Die HolySheep API reagierte konstant unter 50ms, selbst während der Trainingsphase. Für unser Production-Deployment in China war dies entscheidend, da die offizielle DeepSeek API dort oft hohe Latenzen von 200-400ms aufwies.
Die Integration von WeChat- und Alipay-Zahlungen durch HolySheep war ein weiterer entscheidender Vorteil – unser Kunde konnte direkt in CNY bezahlen, ohne internationale Kreditkarten oder komplizierte USD-Konvertierungen.
DeepSeek Fine-Tuning über HolySheep API
Neben dem lokalen Training können Sie auch die HolySheep API für Inferenz und einige Fine-Tuning-Funktionen nutzen:
# holysheep_inference.py
import requests
import json
API-Konfiguration
API_KEY = "YOUR_HOLYSHEEP_API_KEY"
BASE_URL = "https://api.holysheep.ai/v1"
def deepseek_chat_completion(messages: list, model: str = "deepseek-chat"):
"""
Führt eine Chat-Completion mit DeepSeek über HolySheep API durch.
Parameter:
messages: Liste von Message-Dicts [{"role": "user", "content": "..."}]
model: Modellname (deepseek-chat, deepseek-coder, etc.)
Returns:
Dictionary mit der Antwort
"""
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
payload = {
"model": model,
"messages": messages,
"temperature": 0.7,
"max_tokens": 2048,
"top_p": 0.95,
"frequency_penalty": 0,
"presence_penalty": 0
}
try:
response = requests.post(
f"{BASE_URL}/chat/completions",
headers=headers,
json=payload,
timeout=30
)
response.raise_for_status()
return response.json()
except requests.exceptions.RequestException as e:
return {"error": str(e), "status_code": getattr(response, 'status_code', None)}
def stream_deepseek_completion(messages: list):
"""Streaming-Variante für Echtzeit-Antworten"""
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
payload = {
"model": "deepseek-chat",
"messages": messages,
"stream": True,
"temperature": 0.7,
"max_tokens": 2048
}
response = requests.post(
f"{BASE_URL}/chat/completions",
headers=headers,
json=payload,
stream=True
)
for line in response.iter_lines():
if line:
data = line.decode('utf-8')
if data.startswith('data: '):
if data == 'data: [DONE]':
break
chunk = json.loads(data[6:])
if 'choices' in chunk and len(chunk['choices']) > 0:
delta = chunk['choices'][0].get('delta', {})
if 'content' in delta:
yield delta['content']
def get_api_usage():
"""Überprüft den aktuellen API-Nutzungsstatus"""
headers = {
"Authorization": f"Bearer {API_KEY}"
}
response = requests.get(
f"{BASE_URL}/usage",
headers=headers
)
if response.status_code == 200:
return response.json()
return {"error": "Could not fetch usage", "status": response.status_code}
Beispiel-Verwendung
if __name__ == "__main__":
# Normale Anfrage
messages = [
{"role": "system", "content": "Du bist ein erfahrener Python-Entwickler."},
{"role": "user", "content": "Erkläre mir den Unterschied zwischen @staticmethod und @classmethod in Python."}
]
result = deepseek_chat_completion(messages, model="deepseek-chat")
if "error" in result:
print(f"Fehler: {result['error']}")
else:
print("Antwort von DeepSeek:")
print(result['choices'][0]['message']['content'])
print(f"\nToken-Verbrauch: {result.get('usage', {})}")
# Nutzungsstatistiken abrufen
usage = get_api_usage()
print(f"\nAPI-Nutzung: {usage}")
# Streaming-Beispiel
print("\n--- Streaming-Beispiel ---")
streaming_messages = [
{"role": "user", "content": "Zähle 5 Python-Frameworks auf"}
]
for chunk in stream_deepseek_completion(streaming_messages):
print(chunk, end="", flush=True)
print()
Aktuelle Preise (2026) für DeepSeek-Modelle
| Modell | HolySheep AI | Offizielle API | Ersparnis |
|---|---|---|---|
| DeepSeek V3.2 | $0.42/MTok | $0.50/MTok | 16% |
| GPT-4.1 | $8/MTok | $15/MTok | 47% |
| Claude Sonnet 4.5 | $15/MTok | $18/MTok | 17% |
| Gemini 2.5 Flash | $2.50/MTok | $3.50/MTok | 29% |
Häufige Fehler und Lösungen
Fehler 1: CUDA Out of Memory bei großem Modell
Problem: Bei der Konfiguration von LoRA für DeepSeek-V7B tritt häufig der Fehler "CUDA out of memory" auf.
# ❌ FEHLERHAFT - Verursacht OOM
model = AutoModelForCausalLM.from_pretrained("deepseek-ai/deepseek-llm-7b-base")
✅ LÖSUNG - Mit Quantisierung und Speicheroptimierung
from transformers import AutoModelForCausalLM, BitsAndBytesConfig
import torch
4-Bit Quantisierung aktivieren
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.float16,
bnb_4bit_use_double_quant=True
)
VRAM-sparendes Laden
model = AutoModelForCausalLM.from_pretrained(
"deepseek-ai/deepseek-llm-7b-base",
quantization_config=bnb_config,
device_map="auto", # Automatische Verteilung auf verfügbare GPUs
max_memory={0: "10GB"}, # Maximaler VRAM pro GPU
offload_folder="offload", # Auslagerung auf Festplatte
trust_remote_code=True
)
LoRA mit Gradient-Checkpointing
from peft import get_peft_model, LoraConfig
lora_config = LoraConfig(
r=8, # Niedrigerer Rang spart Speicher
lora_alpha=16,
target_modules=["q_proj", "k_proj", "v_proj"],
bias="none"
)
model = get_peft_model(model, lora_config)
Gradient-Checkpointing aktivieren
model.enable_input_require_grads()
model.gradient_checkpointing_enable()
model.config.use_cache = False
Fehler 2: Authentifizierungsfehler mit HolySheep API
Problem: "401 Unauthorized" oder "Invalid API key" Fehler bei API-Aufrufen.
# ❌ FEHLERHAFT - Falscher Endpunkt oder Key-Format
response = requests.post(
"https://api.openai.com/v1/chat/completions", # FALSCH!
headers={"Authorization": "YOUR_KEY"} # Fehlendes "Bearer"
)
✅ LÖSUNG - Korrekte HolySheep API-Konfiguration
import os
import requests
API-Key aus Umgebungsvariable laden (empfohlen!)
API_KEY = os.environ.get("HOLYSHEEP_API_KEY", "YOUR_HOLYSHEEP_API_KEY")
BASE_URL = "https://api.holysheep.ai/v1"
def create_client():
"""Erstellt einen konfigurierten API-Client"""
return {
"base_url": BASE_URL,
"api_key": API_KEY,
"headers": {
"Authorization": f"Bearer {API_KEY}", # WICHTIG: "Bearer " Prefix
"Content-Type": "application/json"
},
"timeout": 60
}
def test_connection():
"""Testet die API-Verbindung"""
client = create_client()
try:
response = requests.get(
f"{client['base_url']}/models",
headers={"Authorization": f"Bearer {client['api_key']}"},
timeout=10
)
if response.status_code == 200:
models = response.json()
print(f"✅ Verbindung erfolgreich!")
print(f"Verfügbare Modelle: {len(models.get('data', []))}")
return True
elif response.status_code == 401:
print("❌ Authentifizierungsfehler: API-Key prüfen")
print(f"Status: {response.status_code}")
print(f"Antwort: {response.text}")
else:
print(f"❌ Fehler: {response.status_code}")
except requests.exceptions.Timeout:
print("❌ Timeout: API nicht erreichbar")
except requests.exceptions.ConnectionError:
print("❌ Verbindungsfehler: Base-URL prüfen")
print(f"Verwendete URL: {client['base_url']}")
return False
Verbindung testen
if __name__ == "__main__":
test_connection()
Fehler 3: LoRA-Training konvergiert nicht oder verliert Alignment
Problem: Das trainierte Modell zeigt katastrophales Vergessen oder oszilliert during des Trainings.
# ❌ FEHLERHAFT - Keine Regularisierung oder Curriculum
trainer = SFTTrainer(
model=model,
train_dataset=dataset,
args=TrainingArguments(
learning_rate=1e-3, # Zu hohe Lernrate
num_train_epochs=10 # Zu viele Epochen
)
)
trainer.train()
✅ LÖSUNG - Stabiles Training mit Curriculum und Regularisierung
from transformers import TrainingArguments
from peft import LoraConfig, TaskType
Konservative LoRA-Konfiguration
lora_config = LoraConfig(
task_type=TaskType.CAUSAL_LM,
r=8, # Niedrigerer Rang für Stabilität
lora_alpha=16, # Skaliert mit r
lora_dropout=0.1, # Höherer Dropout gegen Overfitting
target_modules=["q_proj", "v_proj"], # Nur Schlüssel-Module
bias="none",
inference_mode=False
)
Stabiles Training-Setup
training_args = TrainingArguments(
output_dir="./stable_lora_output",
# Lernrate mit Warmup
learning_rate=2e-4,
warmup_ratio=0.1, # 10% Warmup
warmup_steps=100,
# Konservative Epochenzahl
num_train_epochs=3,
per_device_train_batch_size=4,
gradient_accumulation_steps=4,
# Regularisierung
weight_decay=0.01, # L2-Regularisierung
max_grad_norm=0.3, # Gradient Clipping
# Evaluation
eval_strategy="steps",
eval_steps=100,
save_steps=200,
save_total_limit=3,
# Logging für Monitoring
logging_steps=10,
report_to=["tensorboard"],
# Mixed Precision
fp16=True,
dataloader_num_workers=4,
# Deaktivierte Features
gradient_checkpointing=True,
remove_unused_columns=False
)
Konfiguration mit Curriculum Learning
class CurriculumCallback:
"""Implementiert Curriculum Learning für stabileres Training"""
def __init__(self, trainer, start_difficulty=0.3):
self.trainer = trainer
self.difficulty = start_difficulty
def on_step_end(self, args, state, control, **kwargs):
# Schwierigkeit schrittweise erhöhen
if state.global_step % 500 == 0 and self.difficulty < 1.0:
self.difficulty += 0.1
print(f"Curriculum-Schwierigkeit erhöht: {self.difficulty:.1f}")
Trainer erstellen mit Callback
trainer = SFTTrainer(
model=model,
train_dataset=train_dataset,
eval_dataset=eval_dataset,
args=training_args,
callbacks=[CurriculumCallback]
)
Training starten
trainer.train()
Fehler 4: Streaming funktioniert nicht korrekt
Problem: Bei Streaming-Requests werden unvollständige oder doppelte Chunks empfangen.
# ❌ FEHLERHAFT - Naives Streaming ohne Fehlerbehandlung
response = requests.post(url, json=payload, stream=True)
for line in response.iter_lines():
print(line.decode())
✅ LÖSUNG - Robustes Streaming mit Heartbeat und Fehlerbehandlung
import json
import requests
import time
def stream_with_retry(messages, max_retries=3):
"""Stabiles Streaming mit automatischer Wiederholung"""
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
payload = {
"model": "deepseek-chat",
"messages": messages,
"stream": True,
"temperature": 0.7,
"max_tokens": 2048
}
for attempt in range(max_retries):
try:
response = requests.post(
f"{BASE_URL}/chat/completions",
headers=headers,
json=payload,
stream=True,
timeout=60
)
if response.status_code != 200:
print(f"HTTP {response.status_code}: {response.text}")
continue
full_content = ""
last_heartbeat = time.time()
for line in response.iter_lines():
elapsed = time.time() - last_heartbeat
# Heartbeat