Huawei gab bekannt, dass seine MindSpore Deep Learning Middleware im Stil von TensorFlow und PyTorch jetzt Open Source ist. Erfahre in diesem Artikel seine wichtigsten Eigenschaften.
Huawei hat gerade angekündigt, dass sein MindSpore-Framework zur Entwicklung von KI-Anwendungen Open Source und auf GiHub und Gitee verfügbar wird. MindSpore ist ein weiteres Deep-Learning-Framework zum Trainieren von neuronalen Netzwerkmodellen, ähnlich wie TensorFlow oder PyTorch, das für den Einsatz von Edge bis Cloud entwickelt wurde und sowohl GPUs als auch natürlich Huawei Ascend-Prozessoren unterstützt.
Als Huawei im vergangenen August die offizielle Markteinführung seines Ascend-Prozessors ankündigte, wurde MindSpore erstmals vorgestellt und erklärte, dass „in einer typischen ResNet-50-basierten Trainingseinheit die Kombination von Ascend 910 und MindSpore etwa doppelt so schnell ist. Beim Training von KI-Modellen im Vergleich zu anderen großen Lernkarten mit TensorFlow Es stimmt, dass in den letzten Jahren viele Frameworks entstanden sind, und vielleicht ist MindSpore nichts anderes als eine Gruppe, die sogar entfernt mit TensorFlow (unterstützt von Google) und PyTorch (unterstützt von Facebook) konkurrieren kann).
Systemarchitektur
Die MindSpore-Website beschreibt, dass die Infrastruktur aus drei Hauptschichten besteht: Frontend-Ausdruck, Grafik-Engine und Backend-Laufzeit. Die folgende Abbildung zeigt ein visuelles Diagramm:
Die erste Ebene von MindSpore bietet eine Python-API für Programmierer. Da Sprachlinguistik in unserer Community de facto Python ist, und ansonsten will MindSpore mit PyTorch und TensorFlow konkurrieren. Mit dieser API können Programmierer Modelle manipulieren (Training, Inferenz usw.) und Daten verarbeiten. Diese erste Ebene beinhaltet auch die Unterstützung der Code-Zwischendarstellung (MindSpore IR), auf der viele Optimierungen basieren, die in Parallelisierung und automatischer Differenzierung (GHLO) durchgeführt werden können.
Unten befindet sich die Graph Engine-Schicht, die die erforderliche Funktionalität zum Erstellen und Ausführen einer automatischen Differenzierung des Ausführungsgraphen bietet. Mit MindSpore entschied man sich für ein anderes automatisches Differenzierungsmodell als PyTorch (das einen dynamischen Ausführungsgraphen erzeugt) oder TensorFlow (obwohl ursprünglich die Option gewählt wurde, einen effizienteren statischen Ausführungsplan zu erstellen, bietet es jetzt auch eine dynamische Ausführungsgraph-Option und ermöglicht eine statische Version des Graphen unter Verwendung des @ tf.function-Dekorators seiner Low-Level-API).
MindSpore hat sich dafür entschieden, den Quellcode in ein Zwischencodeformat (MindSpore IR) zu konvertieren, um die Vorteile der beiden Modelle zu nutzen (weitere Informationen finden Sie im Abschnitt „Automatische Trennung“auf der MindSpore-Website).
Die letzte Schicht besteht aus allen Bibliotheken und Laufzeitumgebungen, die benötigt werden, um die verschiedenen Hardwarearchitekturen zu unterstützen, in denen der Code verarbeitet wird. Höchstwahrscheinlich wird es ein Backend sein, das anderen Frameworks sehr ähnlich ist, vielleicht mit Huawei-Funktionen, wie Bibliotheken wie HCCL (Huawei Collective Communication Library), die NVIDIA NCCL (NVIDIA Collective Communication Library) entsprechen.
Unterstützung der Schulungsvisualisierung
Obwohl es unmöglich war, sie zu installieren und zu verwenden, haben sie laut dem MindSpore-Tutorial MindInsight, um Visualisierungen zu erstellen, die etwas an TensorBoard, TensorFlow erinnern. Schauen Sie sich einige Screenshots an, die sie auf ihrer Website zeigen:
Laut Handbuch verwendet MindSpore derzeit einen Callback-Mechanismus (der an Keras erinnert), um beim Training alle gewünschten Modellparameter und Hyperparameter sowie den Berechnungsplan (in eine Protokolldatei) zu schreiben, wenn das Kompilieren des neuronalen Netzes in Zwischencode ist abgeschlossen.
Parallelität
In ihrem Tutorial sprechen sie über zwei Parallelisierungsmodi (DATA_PARALLEL und AUTO_PARALLEL) und stellen Beispielcode bereit, der ResNet-50 mit einem CIFAR-Dataset für einen Ascend 910-Prozessor trainiert (was ich nicht testen konnte). DATA_PARALLEL bezieht sich auf eine allgemein als Datenparallelität bekannte Strategie, die darin besteht, Trainingsdaten in mehrere Teilmengen zu unterteilen, von denen jede auf derselben Replik des Modells, jedoch in unterschiedlichen Verarbeitungseinheiten ausgeführt wird. Graph Engine-Unterstützung wird für die Code-Parallelisierung und insbesondere für die AUTO_PARALLEL-Parallelität bereitgestellt.
Der Modus AUTO_PARALLEL optimiert automatisch die Parallelisierung, indem er die Datenparallelisierungsstrategie (oben diskutiert) mit der Modellparallelisierungsstrategie kombiniert, bei der das Modell in verschiedene Teile aufgeteilt wird und jeder Teil parallel in verschiedenen Verarbeitungseinheiten ausgeführt wird. Dieser automatische Modus wählt die Parallelisierungsstrategie mit den besten Vorteilen aus, die im Abschnitt Automatic Parallel auf der MindSpore-Website nachgelesen werden kann (obwohl sie nicht beschreiben, wie Schätzungen und Entscheidungen getroffen werden). Wir müssen warten, bis das technische Team Zeit hat, die Dokumentation zu erweitern und mehr Details über die Strategie der automatischen Parallelisierung zu erfahren. Aber es ist klar, dass diese Auto-Parallelisierungsstrategie entscheidend ist, und hier sollten und können sie mit TensorFlow oder PyTorch konkurrieren und mit Huawei-Prozessoren eine deutlich bessere Leistung erzielen.
Geplante Roadmap und wie Sie dazu beitragen können
Es gibt offensichtlich viel zu tun und an dieser Stelle haben sie die Ideen, die sie für das nächste Jahr im Sinn haben, in der auf dieser Seite vorgestellten ausführlichen Roadmap gestrafft, argumentieren jedoch, dass die Prioritäten je nach Benutzer angepasst werden.
Rückkopplung. Im Moment finden wir diese Hauptlinien:
- Unterstützung für weitere Modelle (ausstehende klassische Modelle, GAN, RNN, Transformers, Amplified-Learning-Modelle, probabilistische Programmierung, AutoML usw.).
- Erweitern Sie APIs und Bibliotheken, um die Benutzerfreundlichkeit und das Programmiererlebnis zu verbessern (mehr Operatoren, mehr Optimierer, mehr Verlustfunktionen usw.)
- Umfassende Huawei Ascend-Prozessorunterstützung und Leistungsoptimierung (Kompilierungsoptimierung, Verbesserung der Ressourcenauslastung usw.)
- Entwicklung des Software-Stacks und Ausführung von rechnerischen Graphoptimierungen (Verbesserung der IR-Zwischendarstellung, Hinzufügen zusätzlicher Optimierungsmöglichkeiten usw.).
- Unterstützung für weitere Programmiersprachen (nicht nur Python).
- Verbessertes verteiltes Lernen mit Optimierung der automatischen Planung, Datenverteilung usw.
- Verbessern Sie das MindInsight-Tool, um dem Programmierer das "Debuggen" zu erleichtern und die Hyperparameter-Abstimmung während des Lernprozesses zu verbessern.
- Fortschritte bei der Bereitstellung von Inferenzfunktionen für Geräte in Edge (Sicherheit, Unterstützung für Nicht-Plattform-Modelle über ONNX usw.)
Auf der Community-Seite können Sie sehen, dass MindSpore Partner außerhalb von Huawei und China hat, wie die University of Edinburgh, das Imperial College London, die University of Münster (Deutschland) oder die Paris-Saclay University. Sie sagen, dass sie einem offenen Governance-Modell folgen und die gesamte Community einladen werden, sowohl zum Code als auch zur Dokumentation beizutragen.
Abschluss
Auf den ersten Blick scheint es, als könnten die richtigen Design- und Implementierungsentscheidungen (wie Parallelität und automatische Differenzierung) Raum für Verbesserungen und Optimierungen schaffen, die eine bessere Leistung erzielen als die Frameworks, die sie übertreffen möchten. Aber es liegt noch viel Arbeit vor uns, um PyTorch und TensorFlow zu fangen und vor allem eine Community aufzubauen, nicht nur! Wir alle wissen jedoch bereits, dass mit der Unterstützung eines großen Unternehmens der Branche wie Huawei alles möglich ist, oder es war vor drei Jahren, als die erste Version von PyTorch (Facebook) herauskam, klar, dass es nahe an der Ferse sein könnte von TensorFlow (Google)?