LLVM Creator entwickelt neue Mojo-Programmiersprache

Chris Lattner, Gründer und Chefarchitekt von LLVM und Schöpfer der Programmiersprache Swift, und Tim Davis, ehemaliger Leiter von Google-KI-Projekten wie Tensorflow und JAX, stellten mit Mojo eine neue Programmiersprache vor, die Benutzerfreundlichkeit für Forschungsentwicklung und kombiniert Rapid Prototyping mit dem Potenzial, leistungsstarke Endprodukte zu formulieren. Das erste wird durch die Verwendung der vertrauten Syntax der Python-Sprache erreicht, das zweite durch die Fähigkeit zur Kompilierung in Maschinencode, speichersichere Mechanismen und den Einsatz von Hardwarebeschleunigungstools.

Das Projekt konzentriert sich auf den Einsatz für die Entwicklung im Bereich des maschinellen Lernens, wird jedoch als Allzwecksprache präsentiert, die die Fähigkeiten von Python um Systemprogrammiertools erweitert und für ein breites Aufgabenspektrum geeignet ist. Die Sprache ist beispielsweise auf Bereiche wie Hochleistungsrechnen, Datenverarbeitung und -transformation anwendbar. Eine interessante Funktion von Mojo ist die Möglichkeit, zusätzlich zur Texterweiterung „.mojo“ das Emoji-Zeichen „🔥“ als Erweiterung für Codedateien anzugeben (z. B. „helloworld.🔥“).

Derzeit befindet sich die Sprache in der intensiven Entwicklungsphase und es wird nur die Online-Schnittstelle zum Testen angeboten. Es wird versprochen, dass separate Assemblys für die Ausführung auf lokalen Systemen später veröffentlicht werden, nachdem Rückmeldungen zum Betrieb der interaktiven Webumgebung eingegangen sind. Der Quellcode für den Compiler, JIT und andere projektbezogene Entwicklungen soll nach Fertigstellung der internen Architektur geöffnet werden (das Modell für die Entwicklung eines funktionierenden Prototyps hinter verschlossenen Türen erinnert an die Anfangsphase der Entwicklung von LLVM, Clang und Schnell). Da die Mojo-Syntax auf der Python-Sprache basiert und das Typsystem C/C++ ähnelt, planen sie in Zukunft die Entwicklung von Tools, um die Übersetzung bestehender in C/C++ und Python geschriebener Projekte nach Mojo zu vereinfachen Hybridprojekte zu entwickeln, die Python-Code und Mojo kombinieren.

Ziel des Projekts ist es, die verfügbaren Hardware-Ressourcen heterogener Systeme in die Berechnungen einzubeziehen. Beispielsweise können GPUs, spezielle Beschleuniger für maschinelles Lernen und Prozessoranweisungsvektoren (SIMD) verwendet werden, um Mojo-Anwendungen auszuführen und Berechnungen zu parallelisieren. Als Gründe für die Entwicklung einer separaten Teilmenge der Python-Sprache, anstatt sich der bestehenden CPython-Optimierungsarbeit anzuschließen, werden ein Fokus auf die Kompilierung, die Integration von Systemprogrammierfunktionen und die Verwendung einer grundlegend anderen internen Architektur genannt, die die Ausführung von Code auf GPUs und anderen Geräten ermöglicht Hardwarebeschleuniger. Allerdings wollen die Mojo-Entwickler möglichst weitgehend mit CPython kompatibel bleiben.

Mojo kann sowohl im Interpretationsmodus mit JIT als auch zur Kompilierung in ausführbare Dateien (AOT, Ahead-of-Time) verwendet werden. Der Compiler verfügt über integrierte moderne Technologien für automatische Optimierung, Caching und verteilte Kompilierung. Quelltexte in der Mojo-Sprache werden in den Low-Level-Zwischencode MLIR (Multi-Level Intermediate Representation) konvertiert, der vom LLVM-Projekt entwickelt wurde und zusätzliche Möglichkeiten zur Optimierung der Verarbeitung des Datenflussdiagramms bietet. Mit dem Compiler können Sie verschiedene Backends verwenden, die MLIR unterstützen, um Maschinencode zu generieren.

Durch den Einsatz zusätzlicher Hardwaremechanismen zur Beschleunigung von Berechnungen ist es möglich, bei intensiven Berechnungen eine Leistung zu erzielen, die C/C++-Anwendungen überlegen ist. Beim Testen einer Anwendung zum Generieren der Mandelbrot-Menge erwies sich beispielsweise eine kompilierte Anwendung in der Mojo-Sprache bei Ausführung in der AWS-Cloud (r7iz.metal-16xl) als sechsmal schneller als die Implementierung in C++ (6 Sek. vs . 0.03 Sek.) und auch 0.20 Mal schneller als eine Python-Anwendung bei Verwendung von Standard-CPython 35 (3.10.9 Sek. gegenüber 0.03 Sek.) und 1027-mal schneller bei Verwendung von PYPY (1500 Sek. gegenüber 0.03 Sek.) .

Bei der Leistungsbewertung im Bereich der Lösung von Problemen des maschinellen Lernens war die in der Mojo-Sprache geschriebene Modular Inference Engine des KI-Stacks im Vergleich zu einer auf der TensorFlow-Bibliothek basierenden Lösung bei der Verarbeitung eines Sprachmodells auf einem System mit dreimal schneller ein Intel-Prozessor, 3-mal schneller bei der Verarbeitung der Ausführung des Empfehlungsgenerierungsmodells und 6.4-mal schneller bei der Arbeit mit Modellen zur Verarbeitung visueller Informationen. Bei Verwendung von AMD-Prozessoren betrugen die Gewinne bei Verwendung von Mojo das 2.1-, 3.2- und 5-fache und bei Verwendung von ARM-Prozessoren jeweils das 2.2-, 5.3- und 7.5-fache. Die PyTorch-basierte Lösung lag auf Intel-CPUs um das 1.7-, 1.4- und 1.1-fache, auf AMD-CPUs um das 1.5-, 2.1- und 1.2-fache und auf ARM-CPUs um das 1.5-, 4- und 4.3-fache hinter Mojo zurück.

LLVM Creator entwickelt neue Mojo-Programmiersprache

Die Sprache unterstützt statische Typisierung und speichersichere Low-Level-Funktionen, die an Rust erinnern, wie z. B. die Nachverfolgung der Referenzlebensdauer und die Ausleihprüfung. Neben Möglichkeiten zum sicheren Arbeiten mit Zeigern bietet die Sprache auch Funktionen für Low-Level-Arbeiten, beispielsweise den direkten Zugriff auf den Speicher im unsicheren Modus über den Pointer-Typ, den Aufruf einzelner SIMD-Anweisungen oder den Zugriff auf Hardware-Erweiterungen wie TensorCores und AMX .

LLVM Creator entwickelt neue Mojo-Programmiersprache

Um die Trennung von klassischem und optimiertem Python-Code für Funktionen mit expliziten Typdefinitionen für alle Variablen zu vereinfachen, wird vorgeschlagen, anstelle von „def“ ein separates Schlüsselwort „fn“ zu verwenden. Ähnlich verhält es sich mit Klassen: Wenn Sie Daten während der Kompilierung statisch im Speicher packen müssen (wie in C), können Sie den Typ „struct“ anstelle von „class“ verwenden. Es ist auch möglich, einfach Module in C/C++-Sprachen zu importieren. Um beispielsweise die COS-Funktion aus der Mathematikbibliothek zu importieren, können Sie „aus „math.h“ COS importieren“ angeben.

Source: opennet.ru

Kommentar hinzufügen