LLVM Creator razvija nov programski jezik Mojo

Chris Lattner, ustanovitelj in glavni arhitekt LLVM ter ustvarjalec programskega jezika Swift, in Tim Davis, nekdanji vodja Googlovih projektov umetne inteligence, kot sta Tensorflow in JAX, sta predstavila nov programski jezik Mojo, ki združuje enostavnost uporabe za razvoj raziskav in hitro izdelavo prototipov s potencialom oblikovanja visoko zmogljivih končnih izdelkov. Prvo dosežemo z uporabo znane sintakse jezika Python, drugo pa z zmožnostjo prevajanja v strojno kodo, pomnilniško varnimi mehanizmi in uporabo orodij za strojno pospeševanje.

Projekt je osredotočen na uporabo za razvoj na področju strojnega učenja, vendar je predstavljen kot splošnonamenski jezik, ki razširja zmožnosti Pythona z orodji za sistemsko programiranje in je primeren za širok spekter nalog. Jezik je na primer uporaben za področja, kot so visoko zmogljivo računalništvo, obdelava podatkov in preoblikovanje. Zanimiva funkcija Mojo je zmožnost določitve znaka emodžija »🔥« kot pripone za kodne datoteke (na primer »helloworld.🔥«) poleg besedilne pripone ».mojo«.

Trenutno je jezik v fazi intenzivnega razvoja in za testiranje je na voljo le spletni vmesnik. Ločene sklope za delovanje v lokalnih sistemih naj bi objavili kasneje, po prejemu povratnih informacij o delovanju interaktivnega spletnega okolja. Izvorno kodo za prevajalnik, JIT in druge razvojne programe, povezane s projektom, nameravamo odpreti po zaključku notranje arhitekture (model za razvoj delujočega prototipa za zaprtimi vrati spominja na začetno fazo razvoja LLVM, Clang in Swift). Ker sintaksa Mojo temelji na jeziku Python, tipski sistem pa je blizu C/C++, nameravajo v prihodnosti razviti orodja za poenostavitev prevajanja obstoječih projektov, napisanih v C/C++ in Python, v Mojo ter za razvoj hibridnih projektov, ki združujejo kodo Python in Mojo.

Projekt je zasnovan tako, da pri izvajanju izračunov vključi razpoložljive strojne vire heterogenih sistemov. Na primer, grafične procesorje, specializirane pospeševalnike strojnega učenja in vektorje ukazov procesorja (SIMD) je mogoče uporabiti za zagon aplikacij Mojo in vzporedno izračune. Navedeni razlogi za razvoj ločene podmnožice jezika Python, namesto da bi se pridružili obstoječemu optimizacijskemu delu CPython, vključujejo osredotočenost na prevajanje, integracijo zmogljivosti sistemskega programiranja in uporabo bistveno drugačne notranje arhitekture, ki omogoča izvajanje kode na grafičnih procesorjih in različnih strojni pospeševalci. Vendar nameravajo razvijalci Mojo ostati čim bolj združljivi s CPython.

Mojo je mogoče uporabiti tako v načinu tolmačenja z uporabo JIT kot za prevajanje v izvedljive datoteke (AOT, pred časom). Prevajalnik ima vgrajene sodobne tehnologije za samodejno optimizacijo, predpomnjenje in porazdeljeno prevajanje. Izvorna besedila v jeziku Mojo so pretvorjena v nizkonivojsko vmesno kodo MLIR (Multi-Level Intermediate Representation), ki jo je razvil projekt LLVM in zagotavlja dodatne zmogljivosti za optimizacijo obdelave grafa pretoka podatkov. Prevajalnik vam omogoča uporabo različnih ozadij, ki podpirajo MLIR, za ustvarjanje strojne kode.

Uporaba dodatnih mehanizmov strojne opreme za pospešitev izračunov omogoča doseganje zmogljivosti, ki je boljša od aplikacij C/C++ med intenzivnimi izračuni. Na primer, pri testiranju aplikacije za generiranje Mandelbrotove množice se je izkazalo, da je prevedena aplikacija v jeziku Mojo pri izvajanju v oblaku AWS (r7iz.metal-16xl) 6-krat hitrejša od implementacije v C++ (0.03 s proti . 0.20 s) in tudi 35 tisočkrat hitreje od aplikacije Python pri uporabi standardnega CPython 3.10.9 (0.03 s v primerjavi s 1027 s) in 1500-krat hitreje pri uporabi PYPY (0.03 s v primerjavi s 46.1 s) .

Pri ocenjevanju uspešnosti na področju reševanja problemov strojnega učenja je bil AI stack Modular Inference Engine, napisan v jeziku Mojo, v primerjavi z rešitvijo, ki temelji na knjižnici TensorFlow, 3-krat hitrejši pri obdelavi jezikovnega modela na sistemu z Intelov procesor, 6.4-krat hitreje pri obdelavi izvajanja modela za generiranje priporočil in 2.1-krat hitreje pri delu z modeli za obdelavo vizualnih informacij. Pri uporabi procesorjev AMD so bili dobički pri uporabi Mojo 3.2-krat, 5-krat in 2.2-krat, pri uporabi procesorjev ARM pa 5.3-krat, 7.5-krat in 1.7-krat. Rešitev, ki temelji na PyTorchu, je zaostajala za Mojo za 1.4, 1.1 in 1.5-krat na procesorjih Intel, 2.1, 1.2 in 1.5-krat na procesorjih AMD ter 4, 4.3 in 1.3-krat na procesorjih ARM.

LLVM Creator razvija nov programski jezik Mojo

Jezik podpira statično tipkanje in nizkonivojske funkcije, varne pri pomnilniku, ki spominjajo na Rust, kot sta sledenje življenjske dobe reference in preverjanje izposoje. Poleg možnosti za varno delo s kazalci jezik ponuja tudi funkcije za delo na nizki ravni, na primer neposreden dostop do pomnilnika v nevarnem načinu z uporabo vrste kazalca, klicanje posameznih navodil SIMD ali dostop do razširitev strojne opreme, kot sta TensorCores in AMX .

LLVM Creator razvija nov programski jezik Mojo

Za poenostavitev ločevanja klasične in optimizirane kode Python za funkcije z eksplicitnimi definicijami tipa za vse spremenljivke je predlagana uporaba ločene ključne besede »fn« namesto »def«. Podobno za razrede, če morate med prevajanjem statično zapakirati podatke v pomnilnik (kot v C), lahko uporabite tip "struct" namesto "class". Možno je tudi preprosto uvoziti module v jezikih C/C++, na primer, če želite uvoziti funkcijo cos iz matematične knjižnice, lahko podate "from "math.h" import cos".

Vir: opennet.ru

Dodaj komentar