Logo
Sarah Hoffmann
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
9 Std vor

Noch keine Antworten!

Es scheint, dass diese Veröffentlichung noch keine Kommentare enthält. Um auf diese Veröffentlichung von Sarah Hoffmann zu antworten, klicken Sie unten darunter auf