>_ DevTrendsnl

Taal

Home

Talen

Secties

Frontend Backend Mobiel DevOps AI / ML GameDev Blockchain Embedded Beveiliging
Mojo

Hoe Modular de Mojo-taal en MAX-engine verenigt in één repository

Iedereen die heeft geprobeerd de inferentie van zware neurale netwerken in productie te optimaliseren kent deze pijn. Eerst schrijven data scientists een prototype in Python en PyTorch, alles werkt prachtig en duidelijk. Dan raakt de code aan performance-bottlenecks, en in productie beginnen ze kritische delen te herschrijven in C++, CUDA of Triton. Dit creëert de klassieke kloof tussen het gemak van high-level code en hardware.

Het Modular-team, geleid door Chris Lattner (creator van LLVM, Clang en Swift), streefde ernaar dit probleem fundamenteel op te lossen. In hun repository modular/modular hebben ze de open componenten van hun platform samengebracht: de Mojo-programmeertaal en het MAX-computational framework.

Laten we uitzoeken wat er in deze repository zit en hoe het in de praktijk kan worden toegepast.

Wat er in de Monorepository zit

Lange tijd ontwikkelde het project zich deels gesloten, maar nu geven de auteurs geleidelijk meer broncode vrij. De Modular-monorepository bevat verschillende onderling verbonden lagen:

  • Mojo-compiler broncode (directory KGEN) en de taal standard library (mojo/stdlib).
  • Een set geoptimaliseerde computationele kernels max/kernels voor het versnellen van matrixoperaties op GPU en CPU.
  • Een inference server max/python/max/serve die out-of-the-box compatible is met de OpenAI API.
  • Model pipelines max/python/max/pipelines voor het bouwen van computationele grafieken.

Interessant is de verdeling van contributierechten. Pull requests van de community worden graag geaccepteerd in de Mojo standard library, MAX kernels en architectuur pipelines. De compiler broncode zelf blijft echter onder direct beheer van het Modular-team, hoewel hun code open is om te bestuderen.

De Mojo-taal Zonder Magie

Mojo is bedacht als een directe evolutie van Python's ideeën, maar met C-niveau performance en strikte typecontrole. De syntaxis ziet er bekend uit voor elke Python-ontwikkelaar, terwijl de taal compileert via MLIR en LLVM direct naar machinecode.

In code kun je Python's dynamische typing combineren met rigide structuren, handmatig geheugenbeheer en SIMD vectorinstructies.

Zo ziet een eenvoudige functie voor het optellen van twee vectoren eruit in Mojo:

from algorithm import vectorize
from sys.info import simdwidthof

fn add_vectors[type: DType, size: Int](
    a: DTypePointer[type],
    b: DTypePointer[type],
    result: DTypePointer[type]
):
    alias width = simdwidthof[type]()

    @parameter
    fn vector_add[simd_width: Int](idx: Int):
        let val_a = a.load[width=simd_width](idx)
        let val_b = b.load[width=simd_width](idx)
        result.store[width=simd_width](idx, val_a + val_b)

    vectorize[vector_add, width](size)

Merk de fn op in plaats van def. Dit keyword maakt strikte statische typing en variabele lifetime checking mogelijk tijdens compilatie, bijna zoals in Rust. Tegelijkertijd kun je binnen één project vrijstandaard Python-bibliotheken zoals NumPy of SciPy importeren als maximale snelheid nog niet kritisch is voor een bepaalde module.

Het MAX Framework en Modellen Uitvoeren

De taal zelf is weinig nuttig zonder een runtime-omgeving. Voor het werken met neurale netwerken ontwikkelt Modular MAX (Modular Accelerated Execution). Dit is een engine die kant-en-klare computationele grafieken neemt, de plaatsing van tensor-geheugen optimaliseert en ze uitvoert op beschikbare hardware.

Een van de meest nuttige utilities in de repository is de kant-en-klare inference server. Deze draait een HTTP-endpoint dat de OpenAI /v1/chat/completions interface volledig repliceert. Dit betekent dat je vLLM of TGI kunt vervangen zonder clientcode in je services te herschrijven.

Onder de motorkap gebruikt MAX aangepaste Mojo-kernels voor attention- en matrixvermenigvuldigingsberekeningen. Omdat kernels in Mojo zijn geschreven in plaats van pure CUDA-assembly, is het voor ontwikkelaars gemakkelijker om architecturen aan te passen voor nieuwe chips en gespecialiseerde accelerators.

Waar je in de Praktijk tegenaan zult Lopen

Hoewel er veel buzz is rond het project, is het belangrijk om de huidige staat nuchter te beoordelen.

Licentiëring is hybride. De meeste open source code in de repository wordt gedistribueerd onder de Apache License v2.0 met LLVM-uitzonderingen. Het gebruik van MAX binary builds valt echter onder een aparte Modular Community License. Als je van plan bent de oplossing in een gesloten commerciële omgeving te deployen, moet je de juridische voorwaarden op hun website zorgvuldig lezen.

Het tweede punt betreft volwassenheid. Het ecosysteem van third-party libraries in pure Mojo is nog in vorming. Ja, Python interop werkt soepel, maar bij het aanroepen van Python-code verlies je het snelheidsvoordeel en keer je terug naar CPython runtime overhead.

Voor Wie het Project de Moeite Waard is om te Volgen

Als je grote taalmodellen deployt en tegen inferentie-latentie-bottlenecks aanloopt, verdient de combinatie van MAX en kant-en-klare pipelines zeker om getest te worden op je benchmarks. De inference server deployt snel en biedt een goed startpunt voor benchmarks.

Voor low-level engineers en aangepaste CUDA-kernelauteurs biedt het project de mogelijkheid om snelle code te schrijven zonder uitgebreide template-boilerplate in C++. De instapdrempel voor het schrijven van SIMD-optimalisaties in Mojo is merkbaar lager dan in traditionele tools.

Het Modular-team opent methodisch componenten van hun platform. Je kunt de compilerstructuur verkennen, met de standard library experimenteren en een lokale inference server draaien direct vanuit de repository. Het lijkt erop dat de combinatie van Python en C++ eindelijk een tastbare concurrent heeft op het gebied van ML-infrastructuur.

Gerelateerde projecten