Warum Python und PyTorch?
Die Website ist mit Vue gebaut. Das eigentliche Modell programmieren wir in Python, weil PyTorch mit Zahlenfeldern rechnen, Ableitungen automatisch bestimmen und Rechenchips wie Grafikkarten nutzen kann. PyTorch übernimmt Multiplikationen und Differentiation (das Berechnen von Ableitungen), aber nicht unsere Architektur, den Tokenizer oder die Datenentscheidungen. Du baust die Modellklassen selbst, statt ein fertiges Modell mit from_pretrained zu laden.
Du musst Python nicht perfekt beherrschen. Listen, Dictionaries, Funktionen, Klassen und Schleifen reichen für den Einstieg. Eine eigene Modellklasse erbt von nn.Module. Gewichte, die du als Attribute (nn.Parameter) oder als Untermodule (z. B. nn.Linear) anlegst, registriert das Modul automatisch. model.parameters() liefert anschließend alle registrierten Parameter, also normalerweise die trainierbaren Zahlen. Eine lokale Variable, die nur ein Tensor ist, wird nicht automatisch ein Parameter: Dafür gibt es nn.Parameter.
Umgebung einrichten
Installiere Python 3.11 oder 3.12. Verwende eine virtuelle Umgebung, damit dieses Projekt nicht die Pakete anderer Projekte verändert. Lade das Projektpaket über den Download im Lehrbuch herunter und entpacke es.
# macOS / Linux
cd tokenwerk-project
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -r requirements.txtIn PowerShell lautet die Aktivierung anders:
py -3.12 -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
python -m pip install -r requirements.txtWenn PowerShell die Aktivierung blockiert, kannst du den Interpreter direkt aufrufen: .\.venv\Scripts\python.exe -m pip install -r requirements.txt. Du musst keine systemweite Richtlinie ändern, nur um dieses Projekt zu starten.
Für eine NVIDIA-GPU brauchst du eine passend zu deinem System gebaute PyTorch-Version; unter Windows installiert pip install torch eine reine CPU-Version. Benutze dafür den offiziellen Installationsselektor. Die simple Installation in requirements.txt ist keine Zusage für jede CUDA-Konfiguration. Prüfe nach der Installation:
import torch
print(torch.__version__)
print('CUDA:', torch.cuda.is_available())
print('MPS:', torch.backends.mps.is_available())
x = torch.tensor([1., 2., 3.], requires_grad=True)
(x.square().sum()).backward()
print(x.grad) # tensor([2., 4., 6.])Dein Mac als Lernmaschine
Auf einem Apple-Silicon-Mac stellt PyTorch mit mps einen Beschleuniger bereit. CPU ist für kleine Tests oft der einfachere und sogar schnellere Ausgangspunkt: Auf einem Apple-Silicon-Mac brauchten 200 Trainingsschritte unseres kleinen Modells auf der CPU 1,3 Sekunden, mit mps 4,1 Sekunden – bei identischem Loss. MPS lohnt sich erst bei größeren Modellen und Batches. Apples eigenes Framework MLX ist eine Alternative zu PyTorch; dieses Buch und das Projekt verwenden PyTorch, auf dem Mac also cpu oder mps. Ein Mac mit 16 GB gemeinsamem Arbeitsspeicher ist für den didaktischen Weg geeignet; der gesamte Speicher steht aber nicht dem Modell zur Verfügung. Betriebssystem, Programme, Gewichte, Gradienten, Optimizer und Zwischenwerte teilen ihn sich. Beginne mit der Micro-Konfiguration, nicht mit Milliarden Parametern.
def device_name():
if torch.cuda.is_available():
return 'cuda'
if torch.backends.mps.is_available():
return 'mps'
return 'cpu'Eine Operation auf einem Beschleuniger ist nicht automatisch schneller. Kleine Matrixmultiplikationen können durch Übertragung und Startkosten begrenzt werden. Ein fairer Zeitvergleich braucht Aufwärmen und Synchronisation; ein einzelner unvorbereiteter Zeitstempel misst sonst womöglich nur das Einreihen einer Operation.
Optionaler Funktionstest des vollständigen Projekts
python tests.py
python prepare.py --demo --out runs/demo --vocab-size 320
python train.py --data runs/demo --out runs/micro --steps 100 --device cpu
python sample.py --checkpoint runs/micro/last.pt --prompt "Die Katze" --tokens 60Die folgenden Fachbegriffe gehören zu späteren Kapiteln. Du musst die vollständige Pipeline jetzt noch nicht verstehen oder ausführen; dies ist ein optionaler Installationstest.
tests.py prüft unter anderem Tokenizer-Roundtrips, Tensorformen, Kausalität, endlichen Loss und die SFT-Maske. Die 100 Schritte sind ein kurzer Funktionstest. Erwartest du danach gute Texte, verwechselst du eine laufende Pipeline mit einem fertig trainierten Modell.
Orientierung für später: die Projektdateien
| Datei | Aufgabe |
|---|---|
tokenizer.py |
Byte-BPE lernen, speichern, laden und anwenden |
model.py |
Klassischer und moderner Decoder |
prepare.py |
Dokumente trennen und Tokenfolgen erzeugen |
train.py |
Pretraining, Validierung und Checkpoints |
sft.py |
Antwortbeispiele mit Maskierung trainieren |
sample.py |
Text oder Antwort autoregressiv erzeugen |
tests.py |
Kleine, gezielte Funktionsprüfungen |
Ein Checkpoint enthält nicht nur Gewichte. Für eine Fortsetzung brauchst du auch Architekturkonfiguration, Optimizer-Zustand, Schrittzahl und möglichst Zufallszustände. Der Tokenizer ist Teil der Identität eines Modells: Ein anderer Tokenizer mit denselben IDs kann denselben Gewichten völlig andere Bedeutungen zuweisen. Deshalb speichert das Projekt die Tokenizer-Daten auch im Checkpoint.
Kleine Schritte statt langer blinder Läufe
Für jetzt genügen die Installation und der Ableitungstest. Ein Zahlenfeld heißt in PyTorch Tensor; square() quadriert seine Werte, sum() addiert sie und backward() berechnet die Ableitungen. Aus [1,2,3] werden die Quadrate [1,4,9], ihre Summe 14 und die Ableitungen [2,4,6]. Das nächste Kapitel erklärt solche Zahlenfelder und ihre Formen ausführlich.
Sobald du die späteren Modellkapitel bearbeitet hast: Führe zuerst die Tests aus. Dann prüfe eine kleine Gruppe von Beispielen (einen Batch), einen Forward-Pass und einen Backward-Pass. Danach trainiere auf wenigen Beispielen so lange, bis das Modell sie überanpassen kann. Erst wenn das klappt, erhöhe die Datenmenge. Ein Fehler im Target-Shift wird durch mehr Rechenzeit nicht repariert. Er wird nur teurer.