>_ DevTrendspt

Idioma

Início

Linguagens

Seções

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embarcados Segurança
Mojo

Como a Modular Une a Linguagem Mojo e o MAX Engine em um Único Repositório

Qualquer pessoa que já tentou otimizar a inferência de redes neurais pesadas em produção conhece essa dor. Primeiro, os cientistas de dados escrevem um protótipo em Python e PyTorch, tudo funciona lindamente e de forma clara. Então o código encontra gargalos de desempenho, e em produção começam a reescrever partes críticas em C++, CUDA ou Triton. Isso cria o clássico abismo entre a conveniência do código de alto nível e o hardware.

A equipe da Modular, liderada por Chris Lattner (criador do LLVM, Clang e Swift), buscou resolver esse problema de forma fundamental. Em seu repositório modular/modular eles reuniram os componentes abertos de sua plataforma: a linguagem de programação Mojo e o framework computacional MAX.

Vamos descobrir o que há dentro desse repositório e como ele pode ser aplicado na prática.

O Que Há Dentro do Monorepositório

Por muito tempo, o projeto se desenvolveu parcialmente de forma fechada, mas agora os autores estão gradualmente liberando mais código-fonte. O monorepositório da Modular contém várias camadas interconectadas:

  • Código-fonte do compilador Mojo (diretório KGEN) e a biblioteca padrão da linguagem (mojo/stdlib).
  • Um conjunto de kernels computacionais otimizados max/kernels para acelerar operações matriciais em GPU e CPU.
  • Um servidor de inferência max/python/max/serve que é compatível com a API da OpenAI prontamente.
  • Pipelines de modelos max/python/max/pipelines para construção de grafos computacionais.

Interessante é a divisão dos direitos de contribuição. Pull requests da comunidade são aceitos de bom grado na biblioteca padrão do Mojo, kernels do MAX e pipelines de arquitetura. No entanto, o código-fonte do compilador em si permanece sob gestão direta da equipe da Modular, embora seu código esteja aberto para estudo.

A Linguagem Mojo Sem Mágica

O Mojo foi concebido como uma evolução direta das ideias do Python, mas com desempenho de nível C e controle de tipos rigoroso. A sintaxe parece familiar para qualquer desenvolvedor Python, enquanto a linguagem é compilada através do MLIR e LLVM diretamente para código de máquina.

No código, você pode combinar tipagem dinâmica do Python com estruturas rígidas, gerenciamento manual de memória e instruções vetoriais SIMD.

Aqui está como fica uma função simples para somar dois vetores em 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)

Note o fn em vez de def. Essa palavra-chave habilita tipagem estática rigorosa e verificação de tempo de vida de variáveis em tempo de compilação, quase como no Rust. Ao mesmo tempo, dentro de um único projeto você pode importar livremente bibliotecas padrão do Python como NumPy ou SciPy se a velocidade máxima ainda não é crítica para um determinado módulo.

O Framework MAX e Execução de Modelos

A linguagem por si só tem pouca utilidade sem um ambiente de execução. Para trabalhar com redes neurais, a Modular desenvolve o MAX (Modular Accelerated Execution). Este é um motor que recebe grafos computacionais prontos, otimiza o posicionamento da memória de tensores e os executa no hardware disponível.

Uma das utilities mais úteis no repositório é o servidor de inferência pronto para uso. Ele cria um endpoint HTTP que replica totalmente a interface da OpenAI /v1/chat/completions. Isso significa que você pode substituí-lo pelo vLLM ou TGI sem reescrever o código do cliente em seus serviços.

Nos bastidores, o MAX usa kernels personalizados em Mojo para cálculos de atenção e multiplicação de matrizes. Como os kernels são escritos em Mojo em vez de assembly CUDA puro, é mais fácil para os desenvolvedores adaptarem arquiteturas para novos chips e aceleradores especializados.

Com O Que Você Vai se Deparar na Prática

Embora haja muito burburinho em torno do projeto, é importante avaliar sobriamente seu estado atual.

O licenciamento é híbrido. A maior parte do código open source no repositório é distribuída sob a Licença Apache v2.0 com exceções do LLVM. No entanto, o uso de builds binários do MAX é regido por uma Licença Comunitária Modular separada. Se você planeja implantar a solução em um ambiente comercial fechado, deve ler cuidadosamente os termos legais em seu site.

O segundo ponto diz respeito à maturidade. O ecossistema de bibliotecas de terceiros em Mojo puro ainda está se formando. Sim, a interoperabilidade com Python funciona perfeitamente, mas ao chamar código Python você perde a vantagem de velocidade, retornando à sobrecarga do tempo de execução do CPython.

Quem Deve Acompanhar o Projeto

Se você está implantando modelos de linguagem grandes e enfrentando gargalos de latência de inferência, a combinação do MAX e pipelines prontos definitivamente merece ser testada em seus benchmarks. O servidor de inferência é implantado rapidamente e fornece um bom ponto de partida para benchmarks.

Para engenheiros de baixo nível e autores de kernels CUDA personalizados, o projeto oferece a capacidade de escrever código rápido sem boilerplate extenso de templates em C++. A barreira de entrada para escrever otimizações SIMD em Mojo é notavelmente menor do que em ferramentas tradicionais.

A equipe da Modular está metodicamente abrindo componentes de sua plataforma. Você pode explorar a estrutura do compilador, mexer na biblioteca padrão e executar um servidor de inferência local diretamente do repositório. Parece que a combinação de Python e C++ finalmente tem um concorrente tangível no campo da infraestrutura de ML.

Projetos relacionados