Muundaji wa LLVM Hutengeneza Lugha Mpya ya Kuprogramu ya Mojo

Chris Lattner, mwanzilishi na mbunifu mkuu wa LLVM na muundaji wa lugha ya programu ya Swift, na Tim Davis, mkuu wa zamani wa miradi ya Google AI kama vile Tensorflow na JAX, alianzisha lugha mpya ya programu, Mojo, ambayo inachanganya urahisi wa kutumia kwa maendeleo ya utafiti na. protoksi za haraka zenye uwezo wa kuunda bidhaa zenye utendaji wa juu. Ya kwanza hupatikana kupitia utumiaji wa sintaksia inayofahamika ya lugha ya chatu, na ya pili kupitia uwezo wa kukusanya katika msimbo wa mashine, mifumo salama ya kumbukumbu, na utumiaji wa zana za kuongeza kasi ya maunzi.

Mradi huu unalenga katika utumiaji wa maendeleo katika uwanja wa kujifunza kwa mashine, lakini unawasilishwa kama lugha ya kusudi la jumla ambayo huongeza uwezo wa Python na zana za utayarishaji wa mifumo na inafaa kwa anuwai ya kazi. Kwa mfano, lugha inatumika kwa maeneo kama vile kompyuta yenye utendakazi wa hali ya juu, usindikaji wa data na mabadiliko. Kipengele cha kuvutia cha Mojo ni uwezo wa kubainisha herufi ya emoji "πŸ”₯" kama kiendelezi cha faili za msimbo (kwa mfano, "helloworld.πŸ”₯"), pamoja na kiendelezi cha maandishi ".mojo".

Hivi sasa, lugha iko katika hatua ya maendeleo makubwa na ni kiolesura cha mtandaoni pekee kinachotolewa kwa ajili ya majaribio. Makusanyiko tofauti ya uendeshaji kwenye mifumo ya ndani yanaahidiwa kuchapishwa baadaye, baada ya kupokea maoni juu ya uendeshaji wa mazingira ya maingiliano ya wavuti. Nambari ya chanzo ya mkusanyaji, JIT na maendeleo mengine yanayohusiana na mradi imepangwa kufunguliwa baada ya usanifu wa ndani kukamilika (mfano wa kuunda mfano wa kufanya kazi nyuma ya milango iliyofungwa ni kukumbusha hatua ya awali ya maendeleo ya LLVM, Clang na Mwepesi). Kwa kuwa sintaksia ya Mojo inategemea lugha ya Python, na mfumo wa aina uko karibu na C/C++, katika siku zijazo wanapanga kutengeneza zana za kurahisisha tafsiri ya miradi iliyopo iliyoandikwa kwa C/C++ na Python hadi Mojo, na vile vile kuendeleza miradi ya mseto inayochanganya msimbo wa Python na Mojo.

Mradi umeundwa kuhusisha rasilimali za maunzi zinazopatikana za mifumo tofauti katika kufanya mahesabu. Kwa mfano, GPU, vichapuzi maalum vya kujifunza kwa mashine, na vekta za maelekezo ya kichakataji (SIMD) vinaweza kutumika kuendesha programu za Mojo na kusawazisha hesabu. Sababu zilizotolewa za kuunda kitengo tofauti cha lugha ya Python badala ya kujiunga na kazi iliyopo ya uboreshaji wa CPython ni pamoja na kuzingatia ujumuishaji, ujumuishaji wa uwezo wa upangaji wa mfumo, na utumiaji wa usanifu tofauti wa ndani ambao unaruhusu nambari kufanya kazi kwenye GPU na anuwai. vichapuzi vya vifaa. Walakini, watengenezaji wa Mojo wanakusudia kubaki sambamba na CPython iwezekanavyo.

Mojo inaweza kutumika katika hali ya ukalimani kwa kutumia JIT, na kwa mkusanyiko katika faili zinazoweza kutekelezeka (AOT, kabla ya wakati). Mkusanyaji ameunda teknolojia za kisasa za uboreshaji wa kiotomatiki, caching na mkusanyiko uliosambazwa. Maandishi asilia katika lugha ya Mojo hubadilishwa kuwa msimbo wa kati wa kiwango cha chini MLIR (Uwakilishi wa Kati wa Ngazi nyingi), iliyotengenezwa na mradi wa LLVM na kutoa uwezo wa ziada wa kuboresha uchakataji wa grafu ya mtiririko wa data. Mkusanyaji hukuruhusu kutumia viambajengo mbalimbali vinavyotumia MLIR kutengeneza msimbo wa mashine.

Kutumia mitambo ya ziada ya maunzi ili kuharakisha mahesabu huwezesha kufikia utendakazi ambao ni bora kuliko programu za C/C++ wakati wa kukokotoa kwa kina. Kwa mfano, wakati wa kujaribu programu ya kutengeneza seti ya Mandelbrot, programu iliyokusanywa katika lugha ya Mojo wakati inatekelezwa katika wingu la AWS (r7iz.metal-16xl) ilibadilika kuwa mara 6 kuliko utekelezaji katika C++ (sekunde 0.03 dhidi ya . 0.20 sek.), na pia mara elfu 35 kwa kasi zaidi kuliko programu ya Chatu unapotumia CPython ya kawaida 3.10.9 (sekunde 0.03 dhidi ya sekunde 1027) na mara 1500 haraka unapotumia PYPY (sekunde 0.03 dhidi ya 46.1 sek.) .

Wakati wa kutathmini utendakazi katika uwanja wa kutatua matatizo ya kujifunza kwa mashine, Injini ya AI ya stack Modular Inference, iliyoandikwa kwa lugha ya Mojo, ikilinganishwa na suluhisho kulingana na maktaba ya TensorFlow, ilikuwa haraka mara 3 wakati wa kuchakata modeli ya lugha kwenye mfumo na kichakataji cha Intel, kasi mara 6.4 wakati wa kuchakata utekelezaji wa muundo wa kizazi cha pendekezo na kasi mara 2.1 wakati wa kufanya kazi na miundo ya kuchakata maelezo ya kuona. Wakati wa kutumia wasindikaji wa AMD, faida wakati wa kutumia Mojo ilikuwa mara 3.2, 5 na 2.2, na wakati wa kutumia wasindikaji wa ARM - mara 5.3, 7.5 na 1.7, kwa mtiririko huo. Suluhisho la msingi la PyTorch lilibaki nyuma ya Mojo kwa mara 1.4, 1.1 na 1.5 kwenye Intel CPUs, mara 2.1, 1.2 na 1.5 kwenye CPU za AMD na mara 4, 4.3 na 1.3 kwenye CPU za ARM.

Muundaji wa LLVM Hutengeneza Lugha Mpya ya Kuprogramu ya Mojo

Lugha hii inaauni uchapaji tuli na vipengele vya kiwango cha chini vya usalama wa kumbukumbu vinavyofanana na Rust, kama vile ufuatiliaji wa muda wa marejeleo na kikagua kukopa. Mbali na vifaa vya kufanya kazi kwa usalama na viashiria, lugha pia hutoa vipengele vya kazi ya kiwango cha chini, kwa mfano, ufikiaji wa moja kwa moja wa kumbukumbu katika hali isiyo salama kwa kutumia aina ya Pointer, kupiga simu kwa maagizo ya SIMD mahususi, au kufikia viendelezi vya maunzi kama vile TensorCores na AMX. .

Muundaji wa LLVM Hutengeneza Lugha Mpya ya Kuprogramu ya Mojo

Ili kurahisisha utenganisho wa msimbo wa Python wa kawaida na ulioboreshwa kwa vitendakazi vilivyo na ufafanuzi wa aina wazi kwa anuwai zote, inapendekezwa kutumia neno kuu tofauti "fn" badala ya "def". Vile vile kwa madarasa, ikiwa unahitaji kuweka data kwenye kumbukumbu wakati wa mkusanyiko (kama katika C), unaweza kutumia aina ya "muundo" badala ya "darasa". Pia inawezekana kuagiza moduli tu katika lugha za C/C++, kwa mfano, kuagiza kazi ya cos kutoka kwa maktaba ya hesabu, unaweza kutaja "kutoka "math.h" import cos".

Chanzo: opennet.ru

Kuongeza maoni