Je Mojo nejlepší jazyk pro vývoj AI?

Pro strojové učení a umělou inteligenci se Python vždy jevil jako dominantní programovací jazyk s výkonnými knihovnami jako NumPy, TensorFlow a PyTorch. Rychlá kontrola na stránkách GitHub těchto knihoven vám však ukáže, že velká část jejich zdrojového kódu je napsána v C a C++.

Je to proto, že Python je pro AI příliš pomalý. Mojo je nový programovací jazyk, který se pokouší spojit rychlost C/C++ s elegancí Pythonu.

Mojo: Přehled

Mojo je nový programovací jazyk, který je syntakticky podobný Pythonu, ale má rychlost C. Je primárně určen pro umělou inteligenci a vývoj systémů, což jsou oba obory, které vyžadují vysoce výkonný software.

Využívá paradigma SIMD – Single Instruction, Multiple Data, aby využil výhody paralelismu. Je také kompilován just-in-time a je paměťově efektivní.

Mojo však není úplně nový jazyk; je to nadmnožina Pythonu. To znamená, že je to Python plus další funkce. Podobně jako TypeScript rozšiřuje JavaScript. To je dobré, protože pokud již Python znáte, nemělo by být příliš těžké si Mojo vybrat.

Mojo je vyvinut společností Modular, kterou založil Chris Lattner – tvůrce LLVM a programovacího jazyka Swift.

Závěrem lze říci, že Mojo je nový programovací jazyk navržený tak, aby byl syntakticky podobný Pythonu, ale byl stejně rychlý jako C/C++. Je určen k použití při vývoji AI a programování systémů. I když projekt není dokončen, je neuvěřitelně slibný a v další části probereme proč.

Funkce Mojo oproti jiným programovacím jazykům

Mojo se stalo neuvěřitelně populární, i když ještě není veřejně dostupné. Je to proto, že přináší několik významných výhod oproti jiným programovacím jazykům při provádění strojového učení a vytváření softwaru na systémové úrovni. V této části se budeme zabývat těmito výhodami.

#1. Nativní podpora pro AI a úlohy strojového učení

Mojo je určen pro vývoj aplikací umělé inteligence. Díky tomu přichází s funkcemi a moduly ve standardní knihovně pro budování neuronových sítí, provádění počítačového vidění a přípravu dat.

  Nejlepší nástroje DNS pro pomoc správcům sítě

Většina univerzálních jazyků, jako je Python, by k tomu potřebovala další knihovny, ale Mojo to podporuje hned po vybalení.

#2. Zjednodušená syntaxe a abstrakce na vysoké úrovni

K psaní rychlého a efektivního softwaru bychom normálně potřebovali používat jazyky jako C, C++ a Rust. I když jsou tyto jazyky rychlé, je náročnější se s nimi učit a pracovat s nimi. Je to proto, že vás nutí pracovat na nízké úrovni, abyste měli větší kontrolu.

Mojo však stále poskytuje abstrakce vyšší úrovně, jako je Python a jednoduchou syntaxi. To usnadňuje práci s jinými jazyky srovnatelnými ve výkonu.

#3. Integrace s populárními AI frameworky a knihovnami

Jak již bylo zmíněno dříve, Mojo není úplně nový jazyk – je to nadmnožina Pythonu. Díky tomu se dobře integruje se stávajícími knihovnami, jako jsou NumPy a PyTorch. To znamená, že ve výchozím nastavení má Mojo ekosystém stejně velký jako Python.

#4. Efektivní zpracování dat a možnosti manipulace

Mojo je navrženo pro efektivní paralelní manipulaci s více hodnotami. To je nejužitečnější při provádění lineární algebry, na kterou se strojové učení tak silně spoléhá. Mojo je také kompilováno just-in-time, takže bytecode je optimalizován pro rychlost. Díky tomu je práce s daty a strojové učení v Mojo efektivní.

#5. Škálovatelnost a podpora paralelních počítačů

Jak již bylo zmíněno, Mojo je vytvořeno pro podporu paradigmatu Single Instruction – Multiple Data paralelního počítání. To je součástí Mojo a umožňuje rychlejší vybalení. Také překonává knihovny Pythonu, jako je NumPy.

Klíčové prvky Mojo

V této části probereme, jak psát programy v Mojo. Protože Mojo má být nadmnožinou Pythonu, jako je TypeScript nadmnožinou JavaScriptu, veškerý platný kód Pythonu je platným kódem Mojo, ale ne každý kód Mojo je platným kódem Pythonu.

Na Mojo se stále pracuje a některé funkce jazyka Python zatím nejsou podporovány – například třídy. Navíc zatím není k dispozici kompilátor, ale Mojo můžete použít v dětském notebooku. Nejprve však budete potřebovat účet, který si vytvoříte na jejich webu.

V tuto chvíli je těžké poskytnout komplexní návod na jazyk, protože některé funkce ještě nejsou přidány a ne všechny věci jsou v současné době podporovány. Místo toho probereme některé klíčové doplňky, které Mojo přidává k tomu, co Python již má.

  Jak sloučit soubory PDF na Mac

Syntaxe a gramatika

Protože Mojo je nadmnožinou Pythonu, jejich syntaxe je identická. Stejně jako Python se program skládá z příkazů. Tyto příkazy lze seskupit do bloků pod funkcemi, smyčkami nebo podmínkami. Příkazy uvnitř bloku jsou odsazeny. Zde je příklad programu napsaný v Mojo:

def odd_or_even():
     for i in range(1, 101):
        if i % 2 == 0:
            print("Even")
        else:
            print("Odd")

odd_or_even()

To je naprosto totožné s programem Python. Mojo však nabízí další funkce, které uvidíte v následujících částech.

Variabilní prohlášení

S Mojo máte dva další způsoby deklarování proměnných. Můžete použít klíčové slovo let nebo var. Klíčové slovo let deklaruje neměnnou proměnnou. Jakmile je inicializován, nemůžete znovu přiřadit jeho hodnotu něčemu jinému. Na druhou stranu proměnné deklarované pomocí var lze znovu přiřadit, protože jsou proměnlivé.

Hlavní výhodou proměnných deklarovaných pomocí let nebo var je, že podporují specifikátory typu. Následující příklad ukazuje, jak jsou proměnné deklarovány v Mojo.

let pi: Float64 = 3.141
var greeting = "Hello, World"

# This would be impossible
# pi = 6.283

# But this is possible
greeting = "Ola"

print(pi, greeting)

Struktury

Navíc k jinému způsobu deklarování proměnných Mojo podporuje struktury. Jednoduchý způsob, jak zobrazit struktury, je, že jsou jako třídy, ale jsou pevnější. Na rozdíl od tříd nemůžete přidávat/odebírat nebo upravovat metody za běhu a všichni členové musí být deklarováni pomocí klíčových slov var nebo let. Tato pevnější struktura umožňuje Mojo efektivněji spravovat paměť a výkon. Zde je příklad struktury:

struct Person:
    var name: StringLiteral
    var age: Int32
    
    fn __init__(inout self, name: StringLiteral, age: Int32):
        self.name = name
        self.age = age


john = Person("John Doe", 32)
print(john.name, john.age)

Funkce

Z výše uvedené struktury jste si mohli všimnout, že jsme deklarovali metodu __init__ pomocí klíčového slova fn namísto def. Je to proto, že v Mojo můžete deklarovat funkce pomocí fn a def. Funkce deklarovaná pomocí fn je přísnější než její def protějšek.

Konkrétně funkce deklarovaná pomocí fn má ve výchozím nastavení své argumenty neměnné. Kromě toho musíte zadat datový typ argumentů a návratovou hodnotu funkce. Všechny lokální proměnné musí být před použitím deklarovány.

fn say_hello(name: StringLiteral):
    print("Hello,", name)
    
# This would be invalid
# fn say_hello(name):
#     print("Hello,", name)

say_hello("John")

Pokud funkce vyvolá výjimku, musí to být výslovně uvedeno, když je funkce deklarována pomocí klíčového slova raises. Kromě toho Mojo nepoužívá třídu Exception jako Python, místo toho používá třídu Error.

fn will_raise_error() raises:
    raise Error('Some error')
    
will_raise_error()

Přetížení

Mojo také podporuje přetížení operátorů na základě různých datových typů. To podporuje objektově orientovaný princip polymorfismu.

fn add_numbers(a: Int32, b: Int32) -> Int32:
    return a + b

fn add_numbers(a: Int32, b: Int32, c: Int32) -> Int32:
    return a + b + c

let first_total = add_numbers(2, 3)
let second_total = add_numbers(1, 2, 3)

print(first_total, second_total)

Jak se Mojo používá ve vývoji AI

Mojo přichází s knihovnami pro vytváření modelů strojového učení. Patří mezi ně knihovny pro budování neuronových sítí. Kromě toho můžete také provádět úkoly, jako je zpracování přirozeného jazyka a počítačové vidění.

  Jak identifikovat hudbu na vašem iPhonu nebo iPadu

I když samotný jazyk ještě není dokončen a jeho ekosystém prakticky neexistuje, stále můžeme očekávat, že Mojo přinese mnoho funkcí pro provádění úkolů, jako je zpracování dat, tvorba modelů, optimalizace, správa modelů a monitorování.

Je Mojo budoucností vývoje AI?

Je těžké předvídat, jak se technologie pravděpodobně vyvine a bude přijata. Většina předpovědí je chybná, ale to neznamená, že to nemůžeme zkusit. Abychom předpověděli, zda Mojo pravděpodobně nahradí Python, zvažte výhody a nevýhody/omezení Mojo:

Výhody

  • Je velmi rychlý a postavený tak, aby využíval výhody paralelismu, aniž by musel dělat mnoho, což je nezbytné pro strojové učení, protože trénovací modely mohou zabrat spoustu času.
  • Je to nadmnožina Pythonu, proto se snáze učí a má jemnější křivku učení. To snižuje tření pro přijetí.
  • Snižuje šance na získání chyb v produkci, protože chyby, jako jsou chybně zadané názvy proměnných nebo neshody typu, jsou zachyceny během kompilace. Díky tomu je výhodnější.

Nevýhody

  • V současné době je neúplná. Ale samozřejmě tým v Modular pracuje na vydání jazyka a jeho překladače.
  • Jakkoli to zjednodušuje práci výrobců frameworků, nemusí to mít velkou výhodu pro spotřebitele frameworků, protože již používají frameworky pro strojové učení v Pythonu.
  • Zatím nemá velký ekosystém nástrojů a výukových zdrojů. I když můžete používat knihovny Pythonu v Mojo, stále můžete používat knihovny Pythonu v Pythonu. Aby Mojo mělo oproti Pythonu nějakou výhodu, potřebuje knihovny, které přenášejí rychlost Mojo.

Závěrečná slova

Pokud má být současný humbuk něčím, co se dá, Mojo se pravděpodobně stane populárním jazykem AI. Myslím, že jeho rychlost sama o sobě stačí k tomu, aby lidi povzbudila k přepnutí. Jeho jednoduchost je plus. Ale stejně jako TypeScript nenahradil JavaScript úplně, je pravděpodobné, že Mojo nenahradí Python úplně.

Mojo je rozhodně jazyk, který byste měli mít na očích, až nakonec dozraje.

Dále se podívejte na Type vs. Interface v TypeScript.