Logo
Sarah Hoffmann
9 Std vor
Der Code läuft beim Testen auf der CPU einwandfrei. Sobald das Modell auf die GPU soll, bricht alles mit einer langen Fehlermeldung ab.

PyTorch meldet einen Laufzeitfehler, sobald ein Tensor und das Modell auf verschiedenen Geräten liegen. Meist nennt die Meldung beide Geräte, etwa CPU und CUDA, und zeigt damit die Ursache direkt an.

Ein Gerät (Device) ist in PyTorch der Recheneinheit zugewiesener Speicher. Die CPU rechnet im Arbeitsspeicher des Rechners, eine GPU nutzt ihren eigenen Grafikspeicher, und MPS ist PyTorchs Schnittstelle zur GPU von Apple Silicon. Ein Tensor, also ein mehrdimensionales Zahlenfeld, existiert immer genau in einem dieser Speicher. Eine CUDA-GPU kann nicht auf den CPU-Arbeitsspeicher zugreifen und umgekehrt; auch bei MPS mit gemeinsamem Speicher zählt für PyTorch, auf welchem Gerät ein Tensor liegt. Deshalb müssen Modellparameter und Daten zwingend auf demselben Gerät liegen, bevor gerechnet werden kann.

Ein DataLoader, also PyTorchs Baustein zum Bereitstellen von Trainingsdaten, erzeugt seine Tensoren standardmäßig auf der CPU. Liegt das Modell auf der GPU, folgt der Fehler. In PyTorch verschiebt tensor.to("cuda") einen einzelnen Tensor, model.to("cuda") dagegen alle Parameter des Modells auf einmal. Beide Schritte sind nötig.

So prüft man es: tensor.device am Tensor und next(model.parameters()).device am Modell ausgeben. Stimmen beide Ausgaben überein, ist die Ursache beseitigt.

Beim Verschieben entsteht eine Kopie, kein Umbenennen. Deshalb schreibt man in PyTorch üblicherweise tensor = tensor.to("cuda"), damit der Name auf die GPU-Kopie zeigt.

Der Fehler liegt fast nie am Modell, sondern daran, wo die Zahlen gespeichert sind. Gleiche Geräte zuerst, Rechnen danach.

📌 Device · tensor.to · Laufzeitfehler

📚 KI von Grund auf · Tag 5 von 30
#PyTorch #machinelearning #deeplearning
Sarah Hoffmann
12 Std vor
Die meisten kopieren einen PyTorch-Trainingsloop als ganzen Block. Dabei besteht jeder Trainingsschritt aus nur vier Phasen, die immer in derselben Reihenfolge ablaufen.

Wer die Reihenfolge kennt, kann jeden Trainingsloop lesen und jede Zeile einer Phase zuordnen. Das Muster ist in PyTorch überall gleich, vom kleinsten Beispiel bis zum großen Modell.

🧠 Der Vorwärtslauf (Forward Pass) führt die Eingabetensoren durch alle Schichten des Modells und liefert eine Vorhersage, etwa die prognostizierte Klasse für ein Bild. Tensoren und Modell müssen dabei auf demselben Gerät liegen, also CPU, CUDA oder MPS auf Apple Silicon. Gemischte Geräte führen zu Laufzeitfehlern, bevor überhaupt gerechnet wird.

📊 Eine Verlustfunktion (Loss) misst, wie weit die Vorhersagen vom richtigen Ergebnis entfernt sind. Danach ruft der Code optimizer.zero_grad() auf. PyTorch summiert die Gradienten, also die Ableitungen des Verlusts nach den Parametern, standardmäßig auf; ohne zero_grad() vermischen sich die Gradienten mehrerer Schritte. Wer den Aufruf weglässt, sieht scheinbar Lernen, aber das Training wird unzuverlässig.

🔍 loss.backward() berechnet kein Update, sondern schreibt per Autograd in das Feld grad jedes Parameters, wie stark dieser zum Verlust beigetragen hat. Autograd zeichnet beim Vorwärtslauf auf, welche Tensoren voneinander abhängen, und leitet daraus rückwärts die Ableitungen her. optimizer.step() liest dann die Gradienten und verschiebt die Gewichte ein kleines Stück entgegen der Gradientenrichtung.

Der Trainingsschritt ist kein magischer Automat, sondern die feste Reihenfolge Vorwärtslauf, Verlust, Gradienten, Update. Ein Batch ist die Teilmenge der Daten, nach der die Parameter aktualisiert werden; eine Epoche ist der vollständige Durchlauf durch alle Trainingsdaten.

📌 Forward Pass · zero_grad · backward und step

📚 KI von Grund auf · Tag 5 von 30
#PyTorch #machinelearning #deeplearning
Sarah Hoffmann
2 Tage vor
Wie findet ein System die richtige Textstelle, ohne Wörter zu verstehen? Dabei rechnet es nur mit Zahlen und Winkeln.

Vektor und Embedding werden oft verwechselt, weil beide Zahlenvektoren sind. Der Unterschied liegt darin, was die Zahlen bedeuten: bloße Position oder geprüfte Richtung.

Ein Vektor ist eine geordnete Liste von Zahlen, etwa drei Werte für einen Punkt im Raum. Für sich genommen sagt er nichts über Bedeutung aus. In PyTorch ist ein solcher Vektor ein Tensor (ein mehrdimensionales Zahlenfeld) mit einer Dimension.

Ein Embedding dagegen ist ein Vektor, der die Bedeutung eines Wortes als Zahlenpunkt darstellt. Es entsteht, indem ein Modell auf großen Textmengen trainiert wird und Wörtern mit ähnlichen Kontexten ähnliche Vektoren gibt. „Hund“ und „Katze“ liegen nahe beieinander, weil beide neben Haustier, fressen, spazieren auftauchen.

Wie nah zwei Embeddings sind, misst die Kosinus-Ähnlichkeit: der Winkel zwischen zwei Vektoren, unabhängig von ihrer Länge. Der Wert 1,0 heißt gleiche Richtung, 0,0 senkrechte Vektoren ohne gemeinsame Bedeutung, −1,0 entgegengesetzte Richtung. „Hund“ und „Katze“ zeigen fast in dieselbe Richtung; „Hund“ und „Rechnung“ (Kontexte: bezahlen, Betrag, Mahnung) zeigen in deutlich andere Richtungen.

Die Kosinus-Ähnlichkeit ist das Maß, das den Abstand dieser Bedeutungen in eine einzige Zahl übersetzt.

Faustregel: Sobald nach inhaltlicher Nähe gefragt ist – etwa bei einer Suche –, nutzt man Embeddings plus Kosinus-Ähnlichkeit statt einfachem Zahlenvergleich. Genau so findet ein RAG-System passende Stellen: Die Anfrage wird zum Vektor, und per Kosinus-Ähnlichkeit wandern die treffendsten Texte als Kontext zum Sprachmodell.

Der Vektor ist also der Behälter, das Embedding die Bedeutung darin – und der Kosinus sagt, wie nah zwei Bedeutungen einander kommen.

📌 Vektor · Embedding · Kosinus-Ähnlichkeit

📚 KI von Grund auf · Tag 4 von 30
#Embeddings #rag #machinelearning

Nichts gefunden!

Entschuldigung, aber für Ihre Suchanfrage {{search_query}} konnten wir in unserer Datenbank nichts finden. Bitte versuchen Sie es erneut, indem Sie andere Suchbegriffe eingeben.