Ang tagalikha ng LLVM ay bumuo ng bagong programming language na Mojo

Chris Lattner, tagapagtatag at punong arkitekto ng LLVM at tagalikha ng Swift programming language, at Tim Davis, dating pinuno ng mga proyekto ng Google AI tulad ng Tensorflow at JAX, ay nagpakilala ng bagong programming language, Mojo, na pinagsasama ang kadalian ng paggamit para sa pagbuo ng pananaliksik at mabilis na prototyping na may potensyal na bumuo ng mga produktong pangwakas na mahusay ang pagganap. Ang una ay nakakamit sa pamamagitan ng paggamit ng pamilyar na syntax ng wikang Python, at ang pangalawa sa pamamagitan ng kakayahang mag-compile sa machine code, memory-safe na mekanismo, at paggamit ng hardware acceleration tools.

Ang proyekto ay nakatuon sa paggamit para sa pagpapaunlad sa larangan ng machine learning, ngunit ipinakita bilang isang pangkalahatang layunin na wika na nagpapalawak ng mga kakayahan ng Python gamit ang mga tool sa programming ng system at angkop para sa malawak na hanay ng mga gawain. Halimbawa, ang wika ay naaangkop sa mga lugar tulad ng high-performance computing, data processing at transformation. Ang isang kawili-wiling feature ng Mojo ay ang kakayahang tukuyin ang emoji character na "πŸ”₯" bilang extension para sa mga code file (halimbawa, "helloworld.πŸ”₯"), bilang karagdagan sa text extension na ".mojo".

Sa kasalukuyan, ang wika ay nasa yugto ng masinsinang pag-unlad at tanging ang online na interface ang inaalok para sa pagsubok. Ang mga hiwalay na asembliya para sa pagpapatakbo sa mga lokal na sistema ay ipinangako na mai-publish sa ibang pagkakataon, pagkatapos makatanggap ng feedback sa pagpapatakbo ng interactive na kapaligiran sa web. Ang source code para sa compiler, JIT at iba pang mga pag-unlad na nauugnay sa proyekto ay binalak na buksan pagkatapos makumpleto ang panloob na arkitektura (ang modelo para sa pagbuo ng isang gumaganang prototype sa likod ng mga saradong pinto ay nakapagpapaalaala sa paunang yugto ng pag-unlad ng LLVM, Clang at matulin). Dahil ang Mojo syntax ay nakabatay sa wikang Python, at ang uri ng sistema ay malapit sa C/C++, sa hinaharap ay nagpaplano silang bumuo ng mga tool upang pasimplehin ang pagsasalin ng mga kasalukuyang proyektong nakasulat sa C/C++ at Python sa Mojo, gayundin ang upang bumuo ng mga hybrid na proyekto na pinagsasama ang Python code at Mojo.

Ang proyekto ay idinisenyo upang isama ang mga magagamit na mapagkukunan ng hardware ng magkakaibang mga sistema sa pagsasagawa ng mga kalkulasyon. Halimbawa, maaaring gamitin ang mga GPU, dalubhasang machine learning accelerators, at processor instruction vectors (SIMD) para magpatakbo ng mga Mojo application at i-parallelize ang mga pag-compute. Ang mga dahilan na ibinigay para sa pagbuo ng isang hiwalay na subset ng wikang Python sa halip na sumali sa umiiral na gawain sa pag-optimize ng CPython ay kinabibilangan ng pagtutok sa compilation, pagsasama ng mga kakayahan ng system programming, at ang paggamit ng isang pangunahing naiibang panloob na arkitektura na nagpapahintulot sa code na tumakbo sa mga GPU at iba't ibang mga accelerator ng hardware. Gayunpaman, nilalayon ng mga developer ng Mojo na manatiling tugma sa CPython hangga't maaari.

Maaaring gamitin ang Mojo sa mode ng interpretasyon gamit ang JIT, at para sa pagsasama-sama sa mga executable na file (AOT, maagang-panahon). Ang compiler ay may built-in na mga modernong teknolohiya para sa awtomatikong pag-optimize, pag-cache at distributed compilation. Ang mga source text sa wikang Mojo ay kino-convert sa mababang antas na intermediate code na MLIR (Multi-Level Intermediate Representation), na binuo ng proyekto ng LLVM at nagbibigay ng mga karagdagang kakayahan para sa pag-optimize ng pagproseso ng data flow graph. Pinapayagan ka ng compiler na gumamit ng iba't ibang mga backend na sumusuporta sa MLIR upang makabuo ng machine code.

Ang paggamit ng mga karagdagang mekanismo ng hardware upang pabilisin ang mga kalkulasyon ay ginagawang posible upang makamit ang pagganap na higit na mataas sa mga C/C++ na application sa panahon ng masinsinang pagkalkula. Halimbawa, kapag sinusubukan ang isang application para sa pagbuo ng set ng Mandelbrot, ang isang pinagsama-samang application sa wikang Mojo kapag na-execute sa AWS cloud (r7iz.metal-16xl) ay naging 6 na beses na mas mabilis kaysa sa pagpapatupad sa C++ (0.03 sec. vs. . 0.20 sec.), at 35 libong beses din na mas mabilis kaysa sa isang Python application kapag gumagamit ng karaniwang CPython 3.10.9 (0.03 sec. vs. 1027 sec.) at 1500 beses na mas mabilis kapag gumagamit ng PYPY (0.03 sec. vs. 46.1 sec.) .

Kapag tinatasa ang pagganap sa larangan ng paglutas ng mga problema sa pag-aaral ng makina, ang AI ​​stack Modular Inference Engine, na nakasulat sa wikang Mojo, kumpara sa isang solusyon batay sa library ng TensorFlow, ay 3 beses na mas mabilis kapag nagpoproseso ng modelo ng wika sa isang system na may isang Intel processor, 6.4 beses na mas mabilis kapag nagpoproseso ng pagpapatupad ng modelo ng pagbuo ng rekomendasyon at 2.1 beses na mas mabilis kapag nagtatrabaho sa mga modelo para sa pagproseso ng visual na impormasyon. Kapag gumagamit ng mga processor ng AMD, ang mga nadagdag kapag gumagamit ng Mojo ay 3.2, 5 at 2.2 beses, at kapag gumagamit ng mga processor ng ARM - 5.3, 7.5 at 1.7 beses, ayon sa pagkakabanggit. Ang PyTorch-based na solusyon ay nahuli sa Mojo ng 1.4, 1.1 at 1.5 beses sa Intel CPU, 2.1, 1.2 at 1.5 beses sa AMD CPU at 4, 4.3 at 1.3 beses sa ARM CPU.

Ang tagalikha ng LLVM ay bumuo ng bagong programming language na Mojo

Sinusuportahan ng wika ang static na pagta-type at mababang antas ng memory-safe na mga feature na nakapagpapaalaala sa Rust, gaya ng reference na panghabambuhay na pagsubaybay at borrow checker. Bilang karagdagan sa mga pasilidad para sa ligtas na trabaho na may mga pointer, ang wika ay nagbibigay din ng mga tampok para sa mababang antas ng trabaho, halimbawa, direktang pag-access sa memorya sa hindi ligtas na mode gamit ang uri ng Pointer, pagtawag sa mga indibidwal na tagubilin sa SIMD, o pag-access ng mga extension ng hardware tulad ng TensorCores at AMX .

Ang tagalikha ng LLVM ay bumuo ng bagong programming language na Mojo

Upang pasimplehin ang paghihiwalay ng classic at optimized na Python code para sa mga function na may tahasang uri ng mga kahulugan para sa lahat ng mga variable, iminungkahi na gumamit ng hiwalay na keyword na "fn" sa halip na "def". Katulad nito para sa mga klase, kung kailangan mong i-static na mag-pack ng data sa memorya sa panahon ng compilation (tulad ng sa C), maaari mong gamitin ang uri ng "struct" sa halip na "class". Posible rin na mag-import lang ng mga module sa mga C/C++ na wika, halimbawa, para i-import ang cos function mula sa math library, maaari mong tukuyin ang "mula sa "math.h" import cos".

Pinagmulan: opennet.ru

Magdagdag ng komento