TensorFlow, warum war Python die gewählte Sprache?

143

Ich habe vor kurzem angefangen, Deep Learning und andere ML-Techniken zu studieren, und ich habe angefangen, nach Frameworks zu suchen, die den Prozess des Aufbaus und Trainings eines Netzes vereinfachen. Dann habe ich festgestellt, dass TensorFlow, der wenig Erfahrung auf diesem Gebiet hat, für mich Geschwindigkeit ist Ein wichtiger Faktor, um ein großes ML-System noch besser zu machen, wenn Sie mit Deep Learning arbeiten. Warum wurde Python von Google für TensorFlow ausgewählt? Wäre es nicht besser, es über eine Sprache zu schaffen, die kompiliert und nicht interpretiert werden kann?

Was sind die Vorteile der Verwendung von Python gegenüber einer Sprache wie C ++ für maschinelles Lernen?

Ollegn
quelle
2
Kleiner Trottel: Zusammenstellung und Interpretation sind keine Gegensätze. Zusätzlich kann jede Programmiersprache mit einem Compiler oder mit einem Interpreter oder beidem implementiert werden. Es gibt eine schöne Antwort auf die Unterscheidung über Software Engineering.
8bittree

Antworten:

240

Das Wichtigste an TensorFlow ist, dass der Kern größtenteils nicht in Python geschrieben ist : Er ist in einer Kombination aus hochoptimiertem C ++ und CUDA (Nvidias Sprache für die Programmierung von GPUs) geschrieben. Vieles davon geschieht wiederum durch die Verwendung von Eigen (eine hochleistungsfähige numerische C ++ - und CUDA-Bibliothek) und NVidias cuDNN (eine sehr optimierte DNN-Bibliothek für NVidia-GPUs für Funktionen wie Faltungen ).

Das Modell für TensorFlow ist, dass der Programmierer "eine Sprache" (höchstwahrscheinlich Python!) Verwendet, um das Modell auszudrücken. Dieses Modell, das in den TensorFlow-Konstrukten geschrieben wurde, wie z.

h1 = tf.nn.relu(tf.matmul(l1, W1) + b1)
h2 = ...

wird nicht ausgeführt, wenn Python ausgeführt wird. Stattdessen wird tatsächlich ein Datenflussdiagramm erstellt , das besagt, dass bestimmte Eingaben vorgenommen, bestimmte Operationen angewendet, die Ergebnisse als Eingaben für andere Operationen bereitgestellt werden sollen usw. Dieses Modell wird von schnellem C ++ - Code ausgeführt, und die zwischen den Operationen liegenden Daten werden größtenteils nie wieder in den Python-Code kopiert .

Dann "steuert" der Programmierer die Ausführung dieses Modells durch Ziehen an Knoten - zum Trainieren, normalerweise in Python, und zum Servieren, manchmal in Python und manchmal in rohem C ++:

sess.run(eval_results)

Dieser eine Python- (oder C ++ - Funktionsaufruf) verwendet entweder einen In-Process-Aufruf von C ++ oder einen RPC, damit die verteilte Version den C ++ TensorFlow-Server aufruft, um ihn zur Ausführung aufzufordern, und kopiert dann die Ergebnisse zurück.

Nachdem dies gesagt ist, lassen Sie uns die Frage umformulieren: Warum hat TensorFlow Python als erste gut unterstützte Sprache ausgewählt, um das Training von Modellen auszudrücken und zu steuern?

Die Antwort darauf ist einfach: Python ist wahrscheinlich die komfortabelste Sprache für eine Vielzahl von Datenwissenschaftlern und Experten für maschinelles Lernen. Sie ist auch so einfach zu integrieren und hat die Kontrolle über ein C ++ - Backend, ist aber sowohl innen als auch außen allgemein verbreitet von Google und Open Source. Angesichts der Tatsache, dass mit dem Grundmodell von TensorFlow die Leistung von Python nicht so wichtig ist, war dies eine natürliche Anpassung. Es ist auch ein großes Plus, dass NumPy es einfach macht, die Vorverarbeitung in Python durchzuführen - auch mit hoher Leistung -, bevor es TensorFlow für die wirklich CPU-schweren Dinge zugeführt wird.

Es ist auch sehr komplex, das Modell auszudrücken, das bei der Ausführung nicht verwendet wird - Forminferenz (z. B. wenn Sie Matmul (A, B) ausführen, wie ist die Form der resultierenden Daten?) Und automatische Gradientenberechnung . Es hat sich als schön herausgestellt, diese in Python ausdrücken zu können, obwohl ich denke, dass sie langfristig wahrscheinlich in das C ++ - Backend wechseln werden, um das Hinzufügen anderer Sprachen zu vereinfachen.

(Die Hoffnung besteht natürlich darin, in Zukunft andere Sprachen beim Erstellen und Ausdrücken von Modellen zu unterstützen. Es ist bereits recht einfach, Inferenzen mit mehreren anderen Sprachen auszuführen. C ++ funktioniert jetzt, jemand von Facebook hat Go- Bindungen beigesteuert , die wir gerade überprüfen , etc.)

dga
quelle
1
Wie definieren Sie "Inferenz" It's already quite straightforward to run inference using several other languagesals Prolog-Programmierer? Es passt einfach nicht zu mir. es scheint wie ein Wort fehl am Platz.
Guy Coder
1
Laufen nur den Vorwärtsdurchlauf des Modells. Anwenden auf Daten vs. Training.
dga
In Bezug auf die Forminferenz. Ich konvertiere einige neuronale Netze in eine statisch typisierte Sprache, nur um sie zu lernen, und die Enten-Eingabe in Ptyhon erleichtert definitiv das Schreiben dieses Teils des Codes. Auf der Filp-Seite macht es das Schreiben von Python-Code ohne die Typen viel schwieriger, wenn Sie Ptyhon lernen, die Typen direkt vor dem Ausführen zu finden. Ich sehe viel mehr Laufzeitfehler mit Ptyhon als mit der anderen Sprache, die F # ist. Es könnte erwähnenswert sein, dass Duck die Antwort eingibt.
Guy Coder
2
Obwohl das stimmt, denke ich, dass Pythons Eingabe ein indirekter Grund war. Von den in Google häufig verwendeten Sprachen --- quora.com/… --- ist Python die beste Übereinstimmung für den durchschnittlichen Ph.D. Die einzige andere echte Wahl wäre C ++ gewesen (ich kenne nicht viele Leute, die Lua verwenden, die Sprache, die Torch verwendet), und C ++ ist ziemlich weit von der Komfortzone der ML-Toolbox entfernt. Viele ML-Leute haben einen Matlab-Hintergrund, wobei Numpy immer beliebter wird. Das Tippen von Enten liegt wahrscheinlich der Popularität zugrunde, aber das geht über meinen Rahmen hinaus.
dga
Danke, schöne Zusammenfassung. Guy Coder --- Bezüglich des Sinns für "Inferenz" im Spiel siehe den Wikipedia-Artikel über statistische Inferenz . Es ist eine induktive Inferenz im Gegensatz zu dem von Prolog durchgeführten deduktiven Typ.
Bob Carpenter
35

TF ist nicht in Python geschrieben. Es ist in C ++ geschrieben (und verwendet leistungsstarke numerische Bibliotheken und CUDA- Code). Sie können dies überprüfen, indem Sie sich den Github ansehen . Also der Kern nicht in Python geschrieben ist , sondern TF bieten eine Schnittstelle zu vielen anderen Sprachen ( Python, C ++, Java, Go )

Geben Sie hier die Bildbeschreibung ein

Wenn Sie aus einer Welt der Datenanalyse stammen, können Sie sich das wie Numpy vorstellen (nicht in Python geschrieben, bietet aber eine Schnittstelle zu Python) oder wenn Sie ein Webentwickler sind - denken Sie an eine Datenbank (PostgreSQL, MySQL, die kann von Java, Python, PHP aus aufgerufen werden)


Python-Frontend (die Sprache, in der Leute Modelle in TF schreiben) ist aus vielen Gründen am beliebtesten . Meiner Meinung nach ist der Hauptgrund historisch: Die Mehrheit der ML-Benutzer verwendet es bereits (eine andere beliebte Wahl ist R). Wenn Sie also keine Schnittstelle zu Python bereitstellen, ist Ihre Bibliothek höchstwahrscheinlich zur Dunkelheit verurteilt.


In Python geschrieben zu sein bedeutet jedoch nicht, dass Ihr Modell in Python ausgeführt wird. Im Gegenteil, wenn Sie Ihr Modell richtig geschrieben haben, wird Python während der Auswertung des TF-Diagramms niemals ausgeführt (mit Ausnahme von tf.py_func () , das zum Debuggen vorhanden ist und im realen Modell genau deshalb vermieden werden sollte, weil es am ausgeführt wird Pythons Seite).

Dies unterscheidet sich beispielsweise von numpy. Wenn Sie dies beispielsweise tun np.linalg.eig(np.matmul(A, np.transpose(A))(was ist eig(AA')), berechnet die Operation die Transponierung in einer schnellen Sprache (C ++ oder fortran), gibt sie an Python zurück, nimmt sie zusammen mit A aus Python und berechnet eine Multiplikation in einer schnellen Sprache und gibt sie an zurück Python, berechnen Sie dann die Eigenwerte und geben Sie sie an Python zurück. Trotzdem werden teure Operationen wie matmul und eig effizient berechnet. Sie verlieren dennoch Zeit, wenn Sie die Ergebnisse auf Python zurück verschieben und erzwingen. TF macht das nicht , sobald Sie den Graphen definiert haben, fließen Ihre Tensoren nicht in Python, sondern in C ++ / CUDA / etwas anderem.

Salvador Dali
quelle
In diesem Zusammenhang könnte mein Blog-Beitrag von Interesse sein: blog.ephorie.de/why-r-for-data-science-and-not-python
vonjd
4

Mit Python können Sie Erweiterungsmodule mit C und C ++ erstellen, die mit nativem Code verbunden sind und dennoch die Vorteile von Python nutzen.

TensorFlow verwendet zwar Python, enthält aber auch große Mengen an C ++ .

Dies ermöglicht eine einfachere Schnittstelle zum Experimentieren mit weniger menschlichem Aufwand mit Python und erhöht die Leistung durch Programmieren der wichtigsten Teile in C ++.

Alyssa Haroldsen
quelle
0

Das neueste Verhältnis, das Sie hier überprüfen können, zeigt, dass in TensorFlow C ++ ~ 50% des Codes und in Python ~ 40% des Codes benötigt werden.

Sowohl C ++ als auch Python sind die offiziellen Sprachen bei Google. Kein Wunder, warum dies so ist. Wenn ich eine schnelle Regression bereitstellen müsste, wenn C ++ und Python vorhanden sind ...

C ++ befindet sich in der Computeralgebra, und Python wird für alles andere verwendet, einschließlich für das Testen. Wenn man weiß, wie allgegenwärtig das Testen heute ist, ist es kein Wunder, warum Python-Code so viel zu TF beiträgt.

Prosti
quelle