Übersetzer |. Zhu Xianzhong
Rezensent |. Ink
Deep Learning beeinflusst unser Leben jeden Tag auf verschiedene Weise. Ob Siri, Alexa, Echtzeit-Übersetzungs-Apps auf Ihrem Telefon, die auf Sprachbefehlen des Benutzers basieren, oder die Computer-Vision-Technologie, die intelligente Traktoren, Lagerroboter und selbstfahrende Autos antreibt – jeden Monat scheint es neue Fortschritte zu geben. Fast alle dieser Deep-Learning-Anwendungen sind in diesen drei Frameworks geschrieben: TensorFlow, PyTorch oder JAX.
Welche Deep-Learning-Frameworks sollten Sie also verwenden? In diesem Artikel führen wir einen allgemeinen Vergleich von TensorFlow, PyTorch und JAX durch. Unser Ziel ist es, Ihnen eine Vorstellung davon zu geben, welche Arten von Apps ihre Stärken ausspielen, wobei wir natürlich Faktoren wie Community-Unterstützung und Benutzerfreundlichkeit berücksichtigen.
„Niemand wurde jemals gefeuert, weil er IBM gekauft hat“ war in den 1970er und 1980er Jahren ein Slogan in der Computerwelt. Zu Beginn dieses Jahrhunderts galt das Gleiche auch für Deep Learning mit TensorFlow. Aber wie wir alle wissen, war IBM zu Beginn der 1990er Jahre „in den Hintergrund gedrängt worden“. Ist TensorFlow also heute, sieben Jahre nach seiner ersten Veröffentlichung im Jahr 2015 und im kommenden neuen Jahrzehnt noch wettbewerbsfähig?
Natürlich. TensorFlow stand nicht immer still. Erstens erstellt TensorFlow 1.x statische Diagramme auf nicht-pythonische Weise, aber in TensorFlow 2.x können Sie Modelle auch im Eager-Modus erstellen, um Vorgänge sofort auszuwerten, wodurch es sich eher wie PyTorch anfühlt. Auf der hohen Ebene stellt TensorFlow Keras zur Erleichterung der Entwicklung bereit; auf der unteren Ebene stellt es den XLA-Compiler (Accelerated Linear Algebra, beschleunigte lineare Algebra) zur Verfügung, der die Geschwindigkeit erhöht. XLA spielt eine magische Rolle bei der Verbesserung der GPU-Leistung. Es ist die wichtigste Methode zur Nutzung der Leistung der TPU (Tensor Processing Units) von Google und bietet eine beispiellose Leistung für das Training großer Modelle.
Zweitens hat TensorFlow über die Jahre danach gestrebt, in allem so gut wie möglich zu sein. Möchten Sie beispielsweise Modelle auf einer ausgereiften Plattform klar definiert und wiederholbar bereitstellen? TensorFlow ist einsatzbereit. Möchten Sie die Modellbereitstellung ins Web, auf Computer mit geringem Stromverbrauch wie Smartphones oder auf ressourcenbeschränkte Geräte wie das Internet der Dinge verlagern? Zu diesem Zeitpunkt sind sowohl TensorFlow.js als auch TensorFlow Lite sehr ausgereift.
Angesichts der Tatsache, dass Google TensorFlow immer noch zu 100 % für die Ausführung seiner Produktionsbereitstellungen verwendet, können Sie natürlich sicher sein, dass TensorFlow in der Lage sein wird, die Skalierungsanforderungen der Benutzer zu erfüllen.
Allerdings gibt es in den jüngsten Projekten tatsächlich einige Faktoren, die nicht ignoriert werden können. Kurz gesagt, das Upgrade eines Projekts von TensorFlow 1.x auf TensorFlow 2.x ist tatsächlich sehr grausam. Einige Unternehmen entscheiden sich einfach dafür, den Code auf das PyTorch-Framework zu portieren, da sie den Aufwand berücksichtigen, der erforderlich ist, um den Code so zu aktualisieren, dass er in der neuen Version ordnungsgemäß funktioniert. Darüber hinaus hat TensorFlow auch im Bereich der wissenschaftlichen Forschung an Dynamik verloren, wo vor einigen Jahren begonnen wurde, die von PyTorch bereitgestellte Flexibilität zu bevorzugen, was zu einem kontinuierlichen Rückgang der Verwendung von TensorFlow in Forschungsarbeiten geführt hat.
Außerdem spielte der „Keras-Vorfall“ keine Rolle. Keras wurde vor zwei Jahren ein integrierter Bestandteil der TensorFlow-Distribution, wurde aber kürzlich wieder in eine separate Bibliothek mit einem eigenen Release-Plan zurückgezogen. Natürlich wird der Ausschluss von Keras keine Auswirkungen auf das tägliche Leben der Entwickler haben, aber eine solch dramatische Änderung in einer kleinen aktualisierten Version des Frameworks weckt bei Programmierern kein Vertrauen in die Verwendung des TensorFlow-Frameworks.
Dennoch ist TensorFlow in der Tat ein zuverlässiges Framework. Es verfügt über ein umfangreiches Deep-Learning-Ökosystem und Benutzer können auf TensorFlow Anwendungen und Modelle jeder Größe erstellen. Wenn wir das tun, wird es viele gute Unternehmen geben, mit denen wir zusammenarbeiten können. Doch heute ist TensorFlow möglicherweise nicht die erste Wahl.
PyTorch ist kein „Emporkömmling“ mehr, der TensorFlow folgt, sondern ist heute eine wichtige Kraft im Deep Learning, vielleicht hauptsächlich für die Forschung, aber zunehmend für Produktionsanwendungen. Da der Eager-Modus zum Standardansatz für die Entwicklung in TensorFlow und PyTorch wird, scheint der eher pythonische Ansatz von PyTorchs Autograd den Krieg gegen statische Diagramme zu gewinnen.
Im Gegensatz zu TensorFlow gab es beim Kerncode von PyTorch keine größeren Ausfälle, seit die Variablen-API in Version 0.4 veraltet war. Früher erforderten Variablen automatisch generierte Tensoren, aber jetzt ist alles ein Tensor. Das heißt aber nicht, dass es nicht überall Fehler gibt. Wenn Sie beispielsweise PyTorch zum Trainieren über mehrere GPUs hinweg verwendet haben, sind Ihnen möglicherweise Unterschiede zwischen DataParallel und dem neueren DistributedDataParaller aufgefallen. Sie sollten immer DistributedDataParallel verwenden, aber es spricht eigentlich nichts gegen die Verwendung von DataParaller.
Während PyTorch in Bezug auf XLA/TPU-Unterstützung immer hinter TensorFlow und JAX zurückgeblieben ist, hat sich die Situation ab 2022 stark verbessert. PyTorch unterstützt jetzt den Zugriff auf virtuelle TPU-Maschinen, Unterstützung für ältere TPU-Knoten und Unterstützung für die einfache Befehlszeilenbereitstellung von Code, der auf CPU, GPU oder TPU ausgeführt wird, ohne dass Codeänderungen erforderlich sind. Wenn Sie sich nicht mit einem Teil des Standardcodes befassen möchten, den Sie bei PyTorch häufig schreiben müssen, können Sie auf höherstufige Erweiterungen wie Pytorche Lightning zurückgreifen, mit denen Sie sich auf die eigentliche Arbeit konzentrieren können, anstatt Trainingsschleifen neu zu schreiben. Andererseits wird an PyTorch Mobile zwar weitergearbeitet, es ist jedoch weitaus weniger ausgereift als TensorFlow Lite.
Auf der Produktionsseite kann PyTorch jetzt in Framework-unabhängige Plattformen wie Kubeflow integriert werden, und das TorchServe-Projekt verwaltet Bereitstellungsdetails wie Skalierung, Metriken und Batch-Inferenz – alles verfügbar in einem kleinen Paket, das von PyTorch-Entwicklern selbst verwaltet wird. Vorteile von MLOps. Unterstützt PyTorch andererseits die Skalierung? Kein Problem! Meta führt PyTorch seit Jahren in der Produktion aus; jeder, der Ihnen sagt, dass PyTorch große Arbeitslasten nicht bewältigen kann, lügt. Dennoch gibt es Situationen, in denen PyTorch möglicherweise nicht so benutzerfreundlich ist wie JAX, insbesondere wenn es um sehr intensives Training geht, das eine große Anzahl von GPUs oder TPUs erfordert.
Schließlich gibt es noch ein heikles Thema, das die Leute nicht erwähnen wollen – die Popularität von PyTorch in den letzten Jahren ist fast untrennbar mit dem Erfolg der Transformers-Bibliothek von Hugging Face verbunden. Ja, Transformers unterstützt jetzt auch TensorFlow und JAX, aber es war ursprünglich ein PyTorch-Projekt und ist immer noch eng in das Framework integriert. Mit dem Aufstieg der Transformer-Architektur, der Flexibilität von PyTorch für die Forschung und der Möglichkeit, so viele neue Modelle innerhalb von Tagen oder Stunden nach der Veröffentlichung über das Model Center von Hugging Face einzuführen, ist es leicht zu erkennen, warum PyTorch in diesen Bereichen so beliebt ist.
Wenn Sie nicht an TensorFlow interessiert sind, bietet Google möglicherweise andere Dienste für Sie an. JAX ist ein Deep-Learning-Framework, das von Google entwickelt, gepflegt und verwendet wird, aber kein offizielles Google-Produkt ist. Wenn Sie jedoch die Veröffentlichungen und Produktveröffentlichungen von Google/DeepMind im letzten Jahr oder so aufmerksam verfolgen, werden Sie feststellen, dass ein Großteil der Google-Forschung auf JAX verlagert wurde. Obwohl JAX also kein „offizielles“ Google-Produkt ist, wird es von Google-Forschern genutzt, um neue Maßstäbe zu setzen.
Was genau ist JAX? Eine einfache Möglichkeit, über JAX nachzudenken, ist: Stellen Sie sich eine GPU/TPU-beschleunigte Version von NumPy vor, die Python-Funktionen mit „einem Zauberstab“ auf magische Weise vektorisieren und die Berechnung von Ableitungen all dieser Funktionen übernehmen kann. Schließlich bietet es eine Just-in-Time-Komponente (JIT: Just-In-Time) zum Abrufen von Code und deren Optimierung für den XLA-Compiler (Accelerated Linear Algebra), wodurch die Leistung von TensorFlow und PyTorch erheblich verbessert wird. Einige Codes werden derzeit vier- bis fünfmal schneller ausgeführt, indem sie einfach in JAX ohne echte Optimierungsarbeit erneut implementiert werden.
Wenn man bedenkt, dass JAX auf der NumPy-Ebene arbeitet, wird JAX-Code auf einer viel niedrigeren Ebene geschrieben als TensorFlow/Keras (oder sogar PyTorch). Glücklicherweise gibt es rund um JAX ein kleines, aber wachsendes Ökosystem mit einigen Erweiterungen. Möchten Sie die Bibliothek für neuronale Netze nutzen? Sicher. Darunter sind Flax von Google und Haiku von DeepMind (ebenfalls Google). Darüber hinaus steht Optax für alle Ihre Optimierungsanforderungen zur Verfügung, PIX steht für die Bildverarbeitung zur Verfügung und vieles mehr. Sobald Sie etwas wie Flax verwenden, wird der Aufbau neuronaler Netze relativ einfach zu meistern. Beachten Sie, dass es immer noch einige beunruhigende Probleme gibt. Erfahrene Leute sprechen beispielsweise oft darüber, dass JAX Zufallszahlen anders verarbeitet als viele andere Frameworks.
Sollten Sie also alles auf JAX umstellen und die Vorteile dieser Spitzentechnologie nutzen? Diese Frage ist von Person zu Person unterschiedlich. Dieser Ansatz wird empfohlen, wenn Sie sich mit großen Modellen befassen, deren Training viele Ressourcen erfordert. Wenn Sie außerdem an JAX für deterministisches Training und andere Projekte interessiert sind, die Tausende von TPU-Pods erfordern, ist es einen Versuch wert.
Also, was ist das Fazit? Welches Deep-Learning-Framework sollten Sie verwenden? Leider gibt es keine einheitliche Antwort auf diese Frage. Alles hängt von der Art des Problems ab, an dem Sie arbeiten, von der Größenordnung, in der Sie das Modell einsetzen möchten, und sogar von der Computerplattform, mit der Sie es zu tun haben.
Wenn Sie jedoch im Bereich Text und Bilder arbeiten und kleine bis mittlere Forschung betreiben, um diese Modelle in der Produktion einzusetzen, dann ist PyTorch derzeit wahrscheinlich die beste Wahl. Der aktuellen Version nach zu urteilen, trifft es genau das Richtige für diese Art von Anwendungsbereich.
Wenn Sie die volle Leistung eines Geräts mit geringer Rechenleistung benötigen, wird die Verwendung von TensorFlow und dem äußerst robusten TensorFlow Lite-Paket empfohlen. Wenn Sie schließlich Trainingsmodelle mit Dutzenden, Hunderten von Milliarden oder mehr Parametern betrachten und diese hauptsächlich zu Forschungszwecken trainieren, ist es möglicherweise an der Zeit, JAX auszuprobieren.
Originallink: https://www.infoworld.com/article/3670114/tensorflow-pytorch-and-jax-choosing-a-deep-learning-framework.html
Zhu Xianzhong, 51CTO-Community-Redakteur, 51CTO-Expertenblogger, Dozent, Computerlehrer an einer Universität in Weifang und ein Veteran in der freiberuflichen Programmierbranche.
Das obige ist der detaillierte Inhalt vonTensorFlow, PyTorch und JAX: Welches Deep-Learning-Framework ist besser für Sie?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!