Zum Inhalt springen

Fine-Tuning

Passen Sie Modelle mit Ihren eigenen Daten unter Verwendung von Techniken wie LoRA und DPO mit RLHF an. Die Fine-Tuning API ist kompatibel mit der OpenAI Fine-Tuning-Schnittstelle.

Was Sie lernen werden:

  • Wie Sie Trainingsdatensätze hochladen und validieren
  • Wie Sie Fine-Tuning-Aufträge erstellen und verwalten
  • Wie Sie den Trainingsfortschritt mit MLflow überwachen

Die Fine-Tuning API umfasst zwei Komponenten:

  • Upload-API — Trainingsdaten hochladen
  • Fine-Tuning-Server — Fine-Tuning-Aufträge erstellen und verwalten

Unterstützte Modelle: Mistral-Nemo-Instruct-2407, Llama-3.1-70B-Instruct

Unterstützte Dateiformate: PDF, TXT, DOCX, CSV, JSON, JSONL, ZIP

Fine-Tuning Workflow

Zwei Wege für Trainingsdaten:

  1. Dokumentdateien — Laden Sie eine ZIP-Datei mit PDFs, TXT-, DOCX-, CSV- oder JSON-Dateien hoch. Diese werden in Abschnitte unterteilt und zur Erstellung eines synthetischen RAG-Datensatzes (Kontext + Frage + Antwort) verwendet.
  2. Vorformatiertes JSONL — Laden Sie einen Datensatz im OpenAI-Format direkt als JSONL hoch. Verwenden Sie den Validierungsendpunkt, um die Formatierung zu überprüfen.
import os
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("OPENAI_API_KEY"),
base_url=os.getenv("OPENAI_BASE_URL"),
)
file_path = "/path/to/your_dataset.jsonl"
uploaded = client.files.create(
file=open(file_path, "rb"),
purpose="fine-tune",
)
print(uploaded.id) # e.g., "file-abc123"
files = client.files.list(purpose="fine-tune")
for f in files.data:
print(f"ID: {f.id}, Filename: {f.filename}, Created: {f.created_at}")
client.files.delete("file-abc123")

Stellen Sie sicher, dass Ihr JSONL das korrekte Format hat, bevor Sie das Fine-Tuning starten:

import httpx
url = f"{os.getenv('OPENAI_BASE_URL')}/files/validate/{file_id}"
headers = {"Content-Type": "application/json", "api-key": os.getenv("OPENAI_API_KEY")}
with httpx.Client() as http_client:
response = http_client.get(url, headers=headers)
print(response.json())
[
{
"messages": [
{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."},
{"role": "user", "content": "What's the capital of France?"},
{"role": "assistant", "content": "Paris", "weight": 0},
{"role": "user", "content": "Can you be more sarcastic?"},
{"role": "assistant", "content": "Paris, as if everyone doesn't know that already.", "weight": 1}
]
}
]
job = client.fine_tuning.jobs.create(
training_file="file-abc123",
model="Llama-3.3-70B-Instruct",
hyperparameters={"n_epochs": 2},
)
print(f"Job ID: {job.id}, Status: {job.status}")
jobs = client.fine_tuning.jobs.list(limit=10)
for job in jobs.data:
print(f"ID: {job.id}, Model: {job.model}, Status: {job.status}")
events = client.fine_tuning.jobs.list_events(
fine_tuning_job_id="ftjob-abc123",
limit=10,
)
for event in events.data:
print(f"[{event.created_at}] {event.level}: {event.message}")
client.fine_tuning.jobs.cancel("ftjob-abc123")

Fine-tuned-Modelle werden mit Standard-Benchmarks evaluiert:

  • MMLU — Wissen in MINT, Geisteswissenschaften, Sozialwissenschaften
  • HellaSwag — Alltagsverständnis und logisches Schlussfolgern
  • ARC Challenge — Naturwissenschaftliches Denken und Logik
  • GPQA — Expertenfragen in Biologie, Physik, Chemie

Testet die Fähigkeit des Modells, relevante Informationen in großen Kontexten mit Ablenkungen zu finden.

Überwachen Sie Training und Benchmarking unter: MLflow Dashboard

Jeder Fine-Tuning-Auftrag erstellt ein MLflow-Experiment mit:

  1. Trainingsmetriken — Verlustkurven, Trainingsfortschritt
  2. Benchmark-Ergebnisse — LM Evaluation Harness und Needle in a Haystack Ergebnisse