LLVM Creator desenvolupa un nou llenguatge de programació Mojo

Chris Lattner, fundador i arquitecte en cap de LLVM i creador del llenguatge de programació Swift, i Tim Davis, antic cap de projectes d'IA de Google com Tensorflow i JAX, van presentar un nou llenguatge de programació, Mojo, que combina la facilitat d'ús per al desenvolupament de la investigació i prototipat ràpid amb el potencial de formular productes finals d'alt rendiment. El primer s'aconsegueix mitjançant l'ús de la sintaxi familiar del llenguatge Python, i el segon mitjançant la capacitat de compilar en codi màquina, mecanismes segurs per a la memòria i l'ús d'eines d'acceleració de maquinari.

El projecte se centra en l'ús per al desenvolupament en l'àmbit de l'aprenentatge automàtic, però es presenta com un llenguatge de propòsit general que amplia les capacitats de Python amb eines de programació de sistemes i és adequat per a una àmplia gamma de tasques. Per exemple, el llenguatge és aplicable a àrees com la informàtica d'alt rendiment, el processament de dades i la transformació. Una característica interessant de Mojo és la possibilitat d'especificar el caràcter emoji "🔥" com a extensió per als fitxers de codi (per exemple, "helloworld.🔥"), a més de l'extensió de text ".mojo".

Actualment, l'idioma es troba en una fase de desenvolupament intensiu i només s'ofereix la interfície en línia per a la prova. Es prometen muntatges separats per executar-se en sistemes locals que es publicaran més tard, després de rebre comentaris sobre el funcionament de l'entorn web interactiu. Es preveu que el codi font del compilador, JIT i altres desenvolupaments relacionats amb el projecte s'obrin un cop finalitzada l'arquitectura interna (el model per desenvolupar un prototip de treball a porta tancada recorda l'etapa inicial de desenvolupament de LLVM, Clang i Ràpid). Com que la sintaxi Mojo es basa en el llenguatge Python, i el sistema de tipus és proper a C/C++, en el futur tenen previst desenvolupar eines per simplificar la traducció de projectes existents escrits en C/C++ i Python a Mojo, així com per desenvolupar projectes híbrids que combinen codi Python i Mojo.

El projecte està dissenyat per implicar els recursos de maquinari disponibles de sistemes heterogenis en la realització de càlculs. Per exemple, les GPU, els acceleradors especialitzats d'aprenentatge automàtic i els vectors d'instruccions del processador (SIMD) es poden utilitzar per executar aplicacions Mojo i paral·lelitzar càlculs. Les raons donades per desenvolupar un subconjunt separat del llenguatge Python en lloc d'unir-se al treball d'optimització de CPython existent inclouen un enfocament en la compilació, la integració de les capacitats de programació del sistema i l'ús d'una arquitectura interna fonamentalment diferent que permet que el codi s'executi a les GPU i diversos acceleradors de maquinari. Tanmateix, els desenvolupadors de Mojo pretenen seguir sent compatibles amb CPython tant com sigui possible.

Mojo es pot utilitzar tant en mode d'interpretació mitjançant JIT, com per a la compilació en fitxers executables (AOT, abans de temps). El compilador té tecnologies modernes incorporades per a l'optimització automàtica, la memòria cau i la compilació distribuïda. Els textos font en llenguatge Mojo es converteixen en codi intermedi de baix nivell MLIR (Multi-Level Intermediate Representation), desenvolupat pel projecte LLVM i que ofereix capacitats addicionals per optimitzar el processament del gràfic de flux de dades. El compilador us permet utilitzar diversos backends que admeten MLIR per generar codi màquina.

L'ús de mecanismes de maquinari addicionals per accelerar els càlculs permet aconseguir un rendiment superior a les aplicacions C/C++ durant els càlculs intensius. Per exemple, en provar una aplicació per generar el conjunt de Mandelbrot, una aplicació compilada en llenguatge Mojo quan s'executava al núvol AWS (r7iz.metal-16xl) va resultar ser 6 vegades més ràpida que la implementació en C++ (0.03 segons vs. .0.20 segons), i també 35 vegades més ràpid que una aplicació Python quan s'utilitza CPython estàndard 3.10.9 (0.03 seg. vs. 1027 seg.) i 1500 vegades més ràpid quan s'utilitza PYPY (0.03 seg. vs. 46.1 segons) .

Quan es va avaluar el rendiment en l'àmbit de la resolució de problemes d'aprenentatge automàtic, el motor d'inferència modular de la pila d'IA, escrit en llenguatge Mojo, en comparació amb una solució basada en la biblioteca TensorFlow, va ser 3 vegades més ràpid en processar un model de llenguatge en un sistema amb un processador Intel, 6.4 vegades més ràpid quan es processa l'execució del model de generació de recomanacions i 2.1 vegades més ràpid quan es treballa amb models per processar informació visual. Quan s'utilitzaven processadors AMD, els guanys en utilitzar Mojo van ser de 3.2, 5 i 2.2 vegades, i quan s'utilitzen processadors ARM - 5.3, 7.5 i 1.7 vegades, respectivament. La solució basada en PyTorch es va quedar darrere de Mojo en 1.4, 1.1 i 1.5 vegades a les CPU Intel, 2.1, 1.2 i 1.5 vegades a les CPU AMD i 4, 4.3 i 1.3 vegades a les CPU ARM.

LLVM Creator desenvolupa un nou llenguatge de programació Mojo

L'idioma admet la mecanografia estàtica i les funcions de seguretat de memòria de baix nivell que recorden Rust, com ara el seguiment de la vida útil de les referències i el verificador de préstecs. A més de les facilitats per treballar de manera segura amb punters, l'idioma també ofereix funcions per a treballs de baix nivell, per exemple, accés directe a la memòria en mode no segur mitjançant el tipus de punter, trucant a instruccions SIMD individuals o accés a extensions de maquinari com TensorCores i AMX. .

LLVM Creator desenvolupa un nou llenguatge de programació Mojo

Per simplificar la separació del codi Python clàssic i optimitzat per a funcions amb definicions de tipus explícites per a totes les variables, es proposa utilitzar una paraula clau independent "fn" en comptes de "def". De la mateixa manera per a les classes, si necessiteu empaquetar dades estàticament a la memòria durant la compilació (com en C), podeu utilitzar el tipus "struct" en lloc de "class". També és possible importar senzillament mòduls en llenguatges C/C++, per exemple, per importar la funció cos de la biblioteca de matemàtiques, podeu especificar "from "math.h" import cos".

Font: opennet.ru

Afegeix comentari