Jetzt Starten

TensorFlow vs. PyTorch: Die beste Wahl für dein ML Projekt(+Vergleichstabelle)

19. September 2023
Manuel

In diesem Beitrag lassen wir die beiden Frameworks für maschinelles Lernen gegeneinander antreten – TensorFlow vs. PyTorch. Wir schauen uns die Unterschiede an und klären für welches du dich entscheiden solltest.

Ein kurzer Einstieg ins Maschinelle Lernen

Maschinelles Lernen (ML) ist der Motor hinter jeder künstlichen Intelligenz. Also immer wenn von der neusten AI-Technologie die Rede ist, werden Methoden aus dem ML eingesetzt.

Kurz gesagt, geht es beim maschninellen Lernen darum einen Algorithmus zu erstellen der intelligente Entscheidungen treffen kann. Aber was ist überhaupt intelligent? Ist ein Bewegungsmelder, der das Licht anschaltet wenn man den Raum betritt auch schon intelligent?

Ja! Nach der Definition von Russel und Norvigs Buch ist das ein “Simple Reflex Agent”. Und damit die einfachste Form einer künstlichen Intelligenz.

Aber darum soll es in diesem Beitrag nicht gehen. Aktuelle AIs wie Google Bard oder Dall-E basieren auf neuronalen Netzen. Um diese selbst zu programmieren gibt es aktuell zwei große Frameworks: PyTorch von Facebook und TensorFlow von Google.

Tensorflow vs. Pytorch: Warum ist die Wahl des Frameworks wichtig?

Bevor wir in die Details gehen, lass uns kurz darüber sprechen, warum die Auswahl des richtigen Frameworks für dein ML Projekt von entscheidender Bedeutung ist. Ein Framework ist eine Art Werkzeugkasten, der es dir ermöglicht, komplexe Modelle und neuronale Netze zu erstellen, zu trainieren und zu evaluieren.

Die Wahl des richtigen Frameworks kann einen großen Einfluss auf die Effizienz deiner Arbeit haben und wie einfach es ist, deine Ideen in die Praxis umzusetzen. Dabei gilt natürlich wie immer, dass dein eigener Stil auch zum Framwork passen muss.

Also schauen wir uns die beiden Kandidaten etwas genauer an bevor wir sie in den Ring schicken:

TensorFlow – Das Google-Flaggschiff

Beginnen wir mit TensorFlow, einem Framework, das von Google entwickelt wurde und seit seiner Einführung im Jahr 2015 zu den beliebtesten Werkzeugen für maschinelles Lernen gehört. TensorFlow wird von vielen großen Unternehmen und Forschungseinrichtungen weltweit eingesetzt und bietet eine breite Palette von Funktionen und Unterstützung.

Ein großer Vorteil von TensorFlow ist seine Skalierbarkeit. Es ermöglicht dir, Modelle auf verschiedenen Plattformen zu trainieren, einschließlich CPUs, GPUs und TPUs (Tensor Processing Units), was besonders wichtig ist, wenn du große Datensätze und Modelle verwendest.

TPUs wurden von Google speziell für ML Anwendungen entwickelt. Damit können große Netzwerke und große Datenmengen verarbeitet werden, allerdings wird diese Hardware nur für Server hergestellt. D.h. für Training und Inference muss man einen speziellen Server (z.B. Google Cloud Computing) verwenden.

Hier ist ein einfaches Beispiel, wie du ein neuronales Netzwerk in TensorFlow erstellen kannst:

import tensorflow as tf 
# Erstelle ein sequentielles Modell 
model = tf.keras.Sequential([ tf.keras.layers.Dense(64, activation='relu', input_shape=(784,)),tf.keras.layers.Dropout(0.2),tf.keras.layers.Dense(10, activation='softmax')]) 
# Kompiliere das Modell 
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) 
# Trainiere das Modell
model.fit(x_train, y_train, epochs=5)

Man sieht direkt schon einen großen Vorteil: Die Syntax ist sehr einfach zu verstehen. Es wird ein sequentielles Model erstellt, mit einem Optimizer kompiliert (obwohl kompilieren hier nicht wirklich der richtige Begriff ist) und zum Schluss trainiert.

Diese einfache Syntax ist vor allem dank Keras so leicht zu verstehen. Der Slogan “Deep Learning for humans” beschreibt das Package sehr gut. TensorFlow enthält alle Funktionen, Metriken, Layers, usw.

D.h. man hat eine riesen Auswahl an Loss Funktionen und Metriken. Cross Entropy, Mean Squared Error, Focal Loss, … All das ist direkt schon dabei. Und auch die Auswahl der Optimizer ist groß und es gibt auch neuere Ansätze wie Lion.

Ein weiterer Pluspunkt von TensorFlow ist TensorBoard, ein leistungsstarkes Tool zur Visualisierung und Überwachung von Trainingsprozessen. Dies ist besonders nützlich, wenn du die Leistung deiner Modelle verbessern möchtest:

Screenshot von der Tensorboard Oberfläche
Tensorboard bietet eine übersichtliche Darstellung aller wichtigen Parameter des Trainings. Das kann in TensorFlow und PyTorch verwendet werden.

Auch wenn TensorBoard ein Teil von TensorFlow ist, kann man es auch mit PyTorch nutzen. Alle relevanten Metriken werden einfach in eine Summary Datei geschrieben und von der Web Oberfläche dargestellt.

TensorFlow im Hintergrund und die Windows Problematik

Im Hintergrund nutzt TensorFlow einen statischen Graph, um die neuronalen Netze zu trainieren. D.h. es muss schon vor dem Trainingsprozess bekannt sein, welche Dimensionen der In- und Output hat. Es werden dann alle Tensoren im Speicher angelegt und beim Training dann die wirklichen Daten zugewiesen.

Deswegen ist TensorFlow auch als “memory hog” bekannt. Schon beim Initialisieren wird meistens der gesamte GPU Speicher unter den Nagel gerissen – auch wenn das Modell vielleicht nur ein paar MB bräuchte. Nutzt man die CPU Version ist das Problem nicht ganz so schlimm.

Und wenn wir schon von GPUs reden: ML mir großen Datenmengen und Modellen macht nur wirklich Sinn auf einer Grafikkarte. Und damit sind wir auch schon beim größten Minuspunkt von TensorFlow: Seit Version 2.10 werden GPUs unter Windows nicht mehr unterstützt.

Oder anders formuliert: TensorFlow ist mit Windows (nativ) unbrauchbar. Der Workaround ist, dass man WSL2 benutzt, also eine virtuelle Maschine die Linux simuliert. Dank VS Code Plugins ist das zwar möglich allerdings ist das in der Praxis oft eher schwierig:

Erfahrungsgemäß funktionieren viele RNN Funktionen nicht, die Ergebnisse sind nicht konsistent im Vergleich zu einem nativen Linux System und die Performance ist tendentiell auch etwas schlechter. Von dem viel größeren Setup Aufwand ganz zu schweigen.

Ich habe schon einige Stunden damit zugebracht, Tensorflow Code in WSL2 zu debuggen, nur um am Ende in irgend einem GitHub Issue zu lesen, dass das wohl aktuell einfach nicht funktioniert.

Wenn du dann auch noch Docker nutzt wird es ggf. noch komplizierter. Denn Docker nutzt auch WSL2 und ich habe es sogar schon mal geschaft, dass ich die komplette WSL Instanz neustarten musste und alle Docker Prozesse damit auch.

Wenn du sowieso ein Linux System hast oder auf einem Linux Server programmierst, ist das natürlich nicht weiter schlimm. Für Windows Nutzer kann es aber schon sehr frustrierend sein.

PyTorch – Die Wahl der Forschenden

Auf der anderen Seite haben wir PyTorch, ein von Facebook entwickeltes Framework, das in der Forschungsgemeinschaft besonders beliebt ist. PyTorch zeichnet sich durch seine Benutzerfreundlichkeit und Flexibilität aus. Wenn du bereits mit dem “Pythonic Way” des Programmierens vertraut bist, wirst du dich in PyTorch schnell zurechtfinden.

Ein großer Vorteil von PyTorch ist der dynamische Graph. Anders als TensorFlow, das statische Berechnungsgraphen verwendet, erlaubt PyTorch das Ändern des Graphen während der Laufzeit. Das macht es besonders geeignet für diejenigen, die neue Ideen schnell testen und Prototypen entwickeln möchten. Hier ist ein einfaches Beispiel für die Erstellung eines neuronalen Netzwerks in PyTorch:

import torch
import torch.nn as nn

# Ein einfaches neuronales Netzwerk erstellen
class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.fc1 = nn.Linear(784, 128)
        self.relu = nn.ReLU()
        self.fc2 = nn.Linear(128, 10)
        self.softmax = nn.Softmax(dim=1)

    def forward(self, x):
        x = self.fc1(x)
        x = self.relu(x)
        x = self.fc2(x)
        x = self.softmax(x)
        return x

model = Net()


# Optimizer erstellen
optimizer = torch.optim.Adam(model.parameters())

# Training Loop einer Epoche
def train(dataloader, model):
   for (X,y) in dataloader:
      yPred = model(X)
      optimizer.zero_grad()
      loss.backward()
      optimizer.step()

# Loop über die Epochen
for epoch in range(100):
   print("Epoche ", epoch)
   train(dataloader,model)

Was wohl am auffälligsten ist: In PyTorch gibt es kein Package wie Keras, d.h. man muss die Training Loop selbst schreiben. Das erfordert zwar mehr Code aber man hat auch mehr Kontrolle über die einzelnen Schritte.

Der Vollständigkeit halber: In TensorFlow ist eine eigene Training Loop auch möglich und sieht dann ähnlich aus wie in PyTorch.

Hier ist aber der dynamische Graph ein Vorteil, denn man kann mit dem Debugger einfach die Training Loop unterbrechen und alle In- und Outputs einzeln analyiseren. Bei TensorFlow werden statische Tensoren genutzt und die Training Loop “kompiliert” d.h. der Debugger kann dies nicht ohne Weiteres unterbrechen.

PyTorch ist auch in der wissenschaftlichen Gemeinschaft weit verbreitet, was bedeutet, dass es eine große Menge an Ressourcen, Tutorials und vorgefertigten Modellen gibt, die dir bei deinem Projekt helfen können.

Das heißt aber auch, dass in dem Grundpaket von PyTorch nicht so viele Loss Funktion, Metriken usw. enhalten sind wie bei TensorFlow. Diese muss man dann aus anderen Repos übernehmen oder selbst schreiben.

Zur GPU Unterstützung gibt es hier eine gute Nachricht: Egal ob Windows, Linux oder Mac; PyTorch unterstützt Grafikkarten in allen Beriebssystemen.

TensorFlow vs. PyTorch: Vergleichstabelle

TensorFlowPyTorch
SyntaxMit dem Keras Modul sehr einfach für den Anfang.
Komplexere Trainings müssen aber mit einer eigenen Training Loop programmiert werden.
Die Training Loops müssen selbst geschrieben werden.
Die Syntax ist aber sehr “Pythonic”, d.h. oft selbsterklärend.
Metriken und Loss FunctionsViele Metriken, Layers und Loss Functions sind schon enthalten.Nicht so viele Loss Functions und Metriken sind enthalten, d.h. man muss ggf. neue Funktionen selbst schreiben.
Data AugmentationEs gibt Funktionen für Data Augmentation, also z.B. Random Flip und Random Brightness von Bildern.Es gibt Funktionen für Data Augmentation, also z.B. Random Flip und Random Brightness von Bildern.
DebuggingDer statische Graph macht das Debuggen eher schwierig da auf die Training Loop mit den Debugger nicht zugegriffen werden kann.
Bei der sog. “eager execution” wird das kompilieren übersprungen und ein Debugging ermöglicht.
Der dynamische Graph ermöglicht ein komplettes Debugging. Man kann jederzeit die Ausführung unterbrechen und alle Variablen analysieren
Performance
(Reference)
Vergleichsweise langsamerer Durchsatz.
Aber auf der speziellen TPU Hardware ggf. schneller.
Schnellerer Durchsatz und bessere Performance.
GPU UnterstützungLinux und Mac.
Windows nur relativ umständlich mit WSL2
Linux, Mac und Windows
VerwendungVor allem in der industriellen Umgebung.Vor allem in wissenschaftlichen Arbeiten aber deutlicher Aufwärtstrend auch in den Produktiv-Umgebungen.
Vergleichstabelle von TensorFlow vs. PyTorch

“Welches Framework ist denn jetzt das richtige für mich?”

Jetzt, da wir die Stärken von TensorFlow und PyTorch beleuchtet haben, ist die Frage: Welches Framework ist das richtige für dich? Die Antwort hängt von verschiedenen Faktoren ab, darunter deine Erfahrung, die Art deines Projekts und deine persönlichen Vorlieben.

  • Wenn du in der Industrie arbeitest: TensorFlow wird oft in Unternehmen eingesetzt und kann eine gute Wahl sein, da es bereits eine breite Akzeptanz und Unterstützung in der Industrie genießt.
  • Wenn du in der Forschung tätig bist: PyTorch könnte die bessere Wahl sein, da es flexibler ist und es einfacher macht, neue Ideen zu testen und Prototypen zu entwickeln.
  • Wenn du ein Anfänger bist: Beide Frameworks haben eine steile Lernkurve, aber viele Anfänger finden PyTorch aufgrund seiner Python-freundlichen Syntax leichter zugänglich.
  • Wenn du mit Windows entwickelst: Hier muss ich leider ganz klar von TensorFlow abraten. Der Aufwand fürs einrichten und die zahlreichen Fehler sind (Stand jetzt) nicht zu rechtfertigen.

Fazit: TensorFlow vs. PyTorch – Was ist die richtige Wahl für dich?

Wir können festhalten, dass sowohl TensorFlow als auch PyTorch leistungsstarke Werkzeuge für maschinelles Lernen sind, die jeweils ihre eigenen Stärken und Schwächen haben. Die Wahl zwischen den beiden hängt von deinen individuellen Bedürfnissen und deinem Hintergrund ab.

Es ist auch wichtig zu beachten, dass es keine endgültige Antwort gibt, welches Framework besser ist. Beide haben in den letzten Jahren erhebliche Fortschritte gemacht und werden kontinuierlich weiterentwickelt.

Am besten ist es, beide auszuprobieren und herauszufinden, mit welchem Framework du dich am wohlsten fühlst. Die gute Nachricht ist, dass die Fähigkeiten, die du in einem Framework erwirbst, oft auf das andere übertragbar sind.

Ich habe schon mehrfach Projekte in beiden Frameworks entwickelt, bzw. zwischenzeitlich gewechselt. Und gäbe es bei TensorFlow nicht diese Windows Problematik wäre das mein persönlicher Favorit, aber so geht das Rennen für mich ganz knapp an PyTorch.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Melde dich jetzt für die Early Access Version von Chronosk an

Jetzt Starten
apartment