image

Acesse bootcamps ilimitados e +650 cursos

50
%OFF
Article image
Fernando Araujo
Fernando Araujo09/05/2023 01:13
Compartilhe

Mojo é 35 MIL vezes mais rápido do que Python!

    Olá, devs!

    Hoje eu fui surpreendido com notícias e artigos técnicos sobre o lançamento de uma nova linguagem de programação, chamada Mojo. É uma linguagem que foi criada visando o desenvolvimento de soluções para Inteligência Artificial (IA).

    Como eu estou estudando aqui na DIO para aprender sobre Ciência de Dados, Machine Learning e IA, fui buscar mais informações sobre ela.

    Eu confesso que fiquei surpreso logo de cara com a informação da empresa que a criou (Modular), dizendo que Mojo junta a facilidade do Python com o desempenho da linguagem C. Hoje cedo, já publiquei um artigo aqui com os detalhes básicos da linguagem.

    Ainda impressionado com este primeiro contato com a linguagem, eu fui em busca de mais informações sobre este desempenho absurdo sobre o Python e é disso que este novo artigo vai tratar.

    O que você vai ler aqui:

    1.   Introdução

    2.   Resumo sobre a Linguagem Mojo

    3.   Teste de desempenho da linguagem x Python

    4.   O Algoritmo de Mandelbrot

    5.   Conclusão

    6.   Fontes de Consulta

    7.   Outros artigos semelhantes

    1 – Introdução

    Hoje eu publiquei um artigo sobre a linguagem Mojo. Assim que eu li notícias e matérias sobre ela na Internet, fiquei surpreso por uma nova linguagem unir a facilidade do Python com o desempenho do C.

    Resolvi escrever um artigo sobre alguns detalhes iniciais dessa nova linguagem. A linguagem Mojo foi criada visando o desenvolvimento de soluções de Inteligência Artificial (IA).

    Ainda impressionado com este primeiro contato com a linguagem, eu fui em busca de mais informações sobre esse desempenho absurdo sobre o Python,

    Este novo artigo vai tratar do teste de desempenho que comparou a velocidade da linguagem Mojo com a da linguagem Python, para a execução de um mesmo algoritmo.

    Eu vou detalhar os passos do algoritmo usado para esse teste comparativo entre as duas linguagens e vou apresentar as alterações que foram feitas no código em Mojo que permitiram acelerar a execução do código para alcançar estes dados tão discrepantes da diferença de desempenho entre Mojo e Python.

    2 – Resumo sobre a linguagem Mojo

    Atualmente, projetos grandes de IA utilizam Python para a parte de acesso a dados e para a visualização, enquanto o requisito da velocidade é obtido por rotinas escritas em C, C++ ou outra linguagem de alto desempenho, chamadas dentro do código escrito em Python.

    A linguagem Mojo foi criada pela empresa Modular, cujo cofundador Chris Lattner foi o criador do Swift e da infraestrutura de compilação LLVM, escrita em C++.

    Inicialmente, a empresa estava tentando unificar a infraestrutura global de ML/AI (”Machine Learning/Artificial Intelligence”), mas a programação da stack inteira iria ficar muito complicada. Eles estavam precisando codificar muita coisa de MLIR (“Multi-Level Intermediate Representation”) na mão, portanto decidiram criar uma nova linguagem para isso.

    A linguagem Mojo foi criada com o objetivo de ser tão fácil de aprender como Python, e de ter seus principais pacotes relacionados à manipulação de dados, além de ter o desempenho de linguagens de baixo nível, como C.

    Então, basicamente, eles criaram uma linguagem que é um superset de Python, mas com a velocidade do C, juntando o melhor dos dois mundos.

    Algumas das características principais do Mojo são:

    •   Mojo é um superconjunto de Python;

    •   Possui forte checagem de tipos;

    •   Oferece um verificador de propriedade e empréstimo de memória;

    •   Proporciona ajuste automático integrado;

    •   Usa todo o poder da MLIR;

    •   Oferece paralalelismo;

    •   A extensão do arquivo-fonte é .mojo (mas pode ser também só o emoticon do fogo. Sim! A extensão pode ser um emoticon!).

    3.  Teste de desempenho da linguagem x Python

    A empresa criadora do Mojo presenta uma tabela comparando o desempenho da execução de um mesmo algoritmo codificado em Python e em outras linguagens, inclusive Mojo (ver a tabela abaixo):

    image

    Mojo teve um desempenho de 35000 vezes o de Python para resolver o mesmo problema!!

    Você sabe o que é um desempenho de 35 mil vezes maior?

    Imagine que um programa em Mojo leve 1 segundo para ser executado. Isso quer dizer que o mesmo programa, codificado em Python levaria 35.000 segundos.

    Isso dá aproximadamente 583 minutos, ou 9,7 horas, ou ainda 9:43h para ser executado em Python!

    Isso é simplesmente... ridículo!!!!!

    Se você notou aí na tabela, a velocidade da implementação com Scalar C++ foi de apenas 7 vezes mais lenta do que com Mojo. Eu não sei se Scalar C++ é uma variante da linguagem C++ com funcionalidades para paralelismo, ou uma funcionalidade que permite representação de estruturas de forma paralela, mas vou procurar depois.

    No momento, eu estou mais interessado em saber dessa diferença abismal entre Mojo e Python.

    O desempenho de Mojo não é 3,5 vezes maior, nem 345 vezes, nem 350 vezes. É de 35 mil vezes maior!

    Na página da empresa Modular, é informado que o algoritmo implementado foi o de Mandelbrot. E que algoritmo é esse?

    4 – Algoritmo de Mandelbrot

    A figura a seguir, na página da empresa Modular, que apresenta o quadro comparativo acima, mostra o algoritmo usado na implementação do teste.

    image

    Mas o que é esse tal de algoritmo Mandelbrot?

    Bem, Mandelbrot foi um matemático que ficou famoso por seu trabalho com os fractais geométricos. Os fractais são muito usados na Computação Gráfica para representar e visualizar fenômenos naturais como árvores, solo, relevo, água, nuvens, fumaça, fogo, etc.

    Basicamente, um fractal é uma estrutura geométrica que pode ser recursivamente subdividida da mesma forma, indefinidamente, apresentando cada vez mais detalhes em cada subdivisão, que não apareciam anteriormente. Ver a figura abaixo:

    image

    O algoritmo de Mandelbrot, ou conjunto de Mandelbrot (”Mandelbrot set”) é um dos mais famosos fractais, e ele é fácil de ser desenhado.

    Basicamente, em resumo, retirando todo o matematiquês da definição, o conjunto de Mandelbrot é definido como um conjunto de números complexos para o qual uma sequência de números complexos permanece limitada pelo seu valor absoluto (não me forcem a colocar aqui a equação matemática dele!)

    A visualização deste conjunto é um fractal, que pode ser visto na figura abaixo:

    image

    O algoritmo usado na comparação do desempenho da linguagem Mojo usa um código em Mojo, muito eficiente, juntamente com o forte em Python, que é sua GUI e todo seu ecossistema de bibliotecas e ferramentas.

    Os passos que foram realizados:

    1.   São importados utilitários e definida a estrutura Matriz;

    2.   É introduzido um tipo complexo para ser usado na implementação;

    3.   É codificado o algoritmo de Mandelbrot, calculando-se o valor de uma função complexa iterativa para cada pixel (ver figura), até que ele escape do círculo complexo de raio 2, contando-se quantas iterações ocorreram;

    4.   Plotando o número de iterações para escapar com algum palete de cores dá o conjunto canônico de Mandelbrot. A visualização foi feita chamando diretamente, dentro do código Mojo, a função matplotlib, do Python. Essa é a implementação básica, ingênua;

    5.   Para acelerar a velocidade, duas coisas podem ser feitas no código: interromper o loop da iteração antecipadamente ao garantir que um pixel já escapou e aproveitar o acesso do Mojo ao hardware por meio da vetorização do loop, computando vários pixels simultaneamente. Isso é feito por meio do gerador de alta ordem: ”vetorize”;

    6.   O algoritmo, que já está bem mais eficiente, ainda pode ser melhorado por meio da paralelização das linhas, usando a função de alta ordem: ”paralelize”;

    A figura a seguir mostra o resultado final da visualização do conjunto de Mandelbrot. Esta imagem também é a mesma que foi gerada nos passos anteriores, só que o tempo de geração de cada uma vai sendo reduzido a cada alteração.

    image

    O site dos criadores apresenta os códigos-fonte em Mojo usados para a codificação do algoritmo.[4]

    5 - Conclusão

    Hoje, eu fiquei sabendo de uma nova linguagem de programação (Mojo) que juntava a facilidade do Python (bem como todo o seu ecossistema de bibliotecas) com a velocidade da linguagem C, criada para aplicações em soluções de IA.

    Na mesmo hora, já publiquei um artigo aqui com suas características básicas e exemplos de código.

    Como eu estou fazendo cursos aqui na DIO sobre Python, Ciências de Dados, Machine Learning e IA, fiquei muito interessado na linguagem e, principalmente, no absurdo desempenho dela em relação ao Python para executar o mesmo algoritmo, de 35 MIL vezes mais.

    Assim, eu fui pesquisar mais sobre este algoritmo para descobrir de onde vem este desempenho todo.

    Este artigo mostrou um breve resumo da linguagem Mojo, apresentada em mais detalhes no meu artigo anterior e focou no algoritmo de Mandelbrot, usado na implementação do teste comparativo.

    Este algoritmo é baseado em fractais e pode ser implementado em Mojo, com a visualização feita pela conhecida função matplotlib do Python.

    Foram listados os passos do algoritmo, incluindo os melhoramentos feitos no código em Mojo para acelerar o processo de execução, que incluem vetorização e paralelismo, aproveitando o acesso do Mojo ao hardware, não presentes na linguagem Python.

    A linguagem Mojo ainda está no seu início, mas como o plano da empresa criadora é torná-la um superset completo de Python, só o tempo dirá se ela vai substituir a linguagem Python nas aplicações de IA ou se vai ser usada apenas para alguns casos específicos, o que também depende da sua aceitação pela comunidade de Python e de IA.

    Estamos de olho!!!

    Obrigado por ler até aqui.

    6 – Fontes de consulta

     As fontes que eu usei para escrever este artigo foram:

    [1] codingame.com, Mandelbrot set. Disponível em: <https://www.codingame.com/playgrounds/2358/how-to-plot-the-mandelbrot-set/mandelbrot-set>. Acesso em: 08/05/2023.

    [2] Wikipedia, Fractal. Disponível em: <https://en.m.wikipedia.org/wiki/Fractal>. Acesso em: 08/05/2023.

    [3] modular.com, Mojo: A new programming language for all AI developers. Disponível em: <https://en.m.wikipedia.org/wiki/Fractal>. Acesso em: 08/05/2023.

    [4] Modular.com, Mandelbrot in Mojo with Python plots. Disponível em: <https://docs.modular.com/mojo/notebooks/Mandelbrot.html>. Acesso em: 08/05/2023.

    7 – Outros artigos semelhantes

       A seguir, listo o artigo que publiquei hoje, mais cedo, com as características básicas da linguagem Mojo, com exemplos de código.

    Mojo – detalhes sobre a nova linguagem para IA

    https://web.dio.me/articles/mojo-detalhes-sobre-a-nova-linguagem-para-ia?back=%2Farticles&page=1&order=oldest

    Escrito por: Fernando Araujo

    Compartilhe
    Comentários (10)
    Fernando Araujo
    Fernando Araujo - 09/05/2023 11:02

    Opa, André., tudo bem? Primeiramente, obrigado por ter lido meu artigo.


    Em segundo lugar, eu nem sabia o que era o termo HyperTrain, mas descobri no Google que é um recurso que algumas plataformas (como o Twitch) oferecem aos seus membros para promover seus canais por meio de likes e inscrições dos usuários do canal.


    Eu não escrevo artigos pensando nisso, nem em likes, nem upvotes, nem visualizações nem comentários.

    Eu escolho os temas do meu interesse e publico quando acho que será do interesse dos usuários da DIO.

    No caso específico deste artigo sobre a linguagem Mojo, eu a descobri ontem de manhã e fiquei muito interessado em saber mais sobre uma nova linguagem de alto nível que era considerada mais fácil do que o Python e mais rápida do que C. Achei o tema tão interessante que logo escrevi um primeiro artigo com suas características principais.

    À noite, já em casa, pesquisei mais sobre o algoritmo implementado na comparação de desempenho de Python e de Mojo e publiquei outro artigo sobre isso.


    O meu artigo não teve o propósito de analisar nem julgar os dados do teste informado pela empresa criadora da linguagem, mas apenas de RELATAR e DESCREVER o que está mostrado no site deles. Inclusive, eu sempre escrevo artigos citando as fontes de consulta, não é nada da minha cabeça.


    Lá estão até os códigos em Mojo usados na implementação. O site não fala das condições em que foram realizados os testes, mas deixa claro que o desempenho (tempo de execução) mede o tempo de processamento do algoritmo de Mandelbrot (Mandelbrot set) E visualização do resultado (o fractal).


    Não estou criando nenhum Hype Train, com apenas 2 artigos separados por horas um do outro e sobre um assunto do meu interesse. Portanto, não preciso ter cautela com meus artigos, pois não estou criando Hype Trains!!


    Eu considero que Hype Trains estão fazendo alguns usuários da plataforma que escreverm dezenas de artigos sobre assuntos diferentes, um atrás do outro, com minutos de diferença, em busca de pontos para alumas promoções da DIO, como as premiações dos Codecamps.


    Gostaria de saber quais seriam as outras observações que você diz ter, mas não disse. Elas podem me ajudar a melhorar o conteúdo dos meus artigos.

    Quanto à linguagem Julia, estou aprendendo agora, depois de aprender R.

    Fernando Araujo
    Fernando Araujo - 11/05/2023 11:41

    Obrigado, pessoal!

    André: a minha preocupação é que eu possa ter passado a impressão de que apenas aproveitei o momento da divulgação de uma nova linguagem para ganhar "likes", o que não é o caso, foi mesmo a minha surpresa com o desempenho e facilidades superiores informados para a linguagem. Não lhe fiz uma crítica. Quanto aos fractais, sou fascinado com todos os algoritmos de Computação gráfica!

    Tiago e Luiz: a linguagem promete! vamos acompanhar!!!

    Vinicius: o compilador deles ainda não está disponível para o público, Eles liberaram apenas a inscrição para uma lista de interessados em usá-lo. Eu fiz o cadastro, mas até agora não recebi nenhum acesso!

    VS

    Vinicius Scorza - 11/05/2023 09:33

    Bastante interessante!!


    Fui atrás de mais informações após ler seu artigo, pelo jeito ainda não tem um compilador fora do playground deles, que ainda está num momento de acesso lento... pelo jeito não é restrito, mas eles vão liberando aos poucos.

    Realmente é uma linguagem que está em pleno desenvolvimento, provavelmente ainda existem muitas bibliotecas que eles precisam implementar para se tornar esse "superset" de Python, mas o que li da documentação, essa implementação das structs por ser menos "dinâmica" do que classes, essa permição de usar tipagem forte, não sei, ainda sou um iniciante nesse mundo, mas achei muito bom, vamos ver.


    Luiz Café
    Luiz Café - 09/05/2023 15:46

    Mais um ótimo artigo Fernando. Mojo promete ser uma linguagem que vai dar o que falar nos próximos meses, ainda mais na área de tecnologia em que tudo pode mudar muito rápido. O que ela promete é muito promissor e seu artigo é um convite a reflexão e estar sempre se atualizando para não ficar para trás.

    Tiago Pimentel
    Tiago Pimentel - 09/05/2023 15:06

    A Mojo promete mesmo. Com o tempo ela ainda evoluirá mais e trará bastante inovação! Bom mantê-la no radar.

    André Bezerra
    André Bezerra - 09/05/2023 12:15

    ARAUJO,

    HYPERTRAIN pode ser atrelado ao indivíduo, em relação ansiedade sem devido cuidado. Seus textos são bons e nem ligo de serem grandes (leitura fluída).

    Você é daqui da terra, oxe, precisamos se VALORIZAR e é o que fiz... alertando sobre muito marketing e pouca descrição técnica por parte dos divulgadores (empresa).

    > Fiz uma pesquisa científica durante a graduação com um matemático Chileno com Fractais... O exemplo fez recordar boas discussões sobre otimização e matemática pura.

    Fernando Araujo
    Fernando Araujo - 09/05/2023 11:08

    Olá, Wanderson e Cleiton,


    Obrigado por terem lido meu artigo.

    A idea é apresentar essa nova linguagem, que já começou pregando facilidade maior do que o Python e velocidade maior do que C.

    Não é pouca coisa!!

    Por isso, despertou muito o meu interesse. Mas, como vocês disseram, vamo ver como ela se comporta em plaicações de ML e IA e qual será a sua aceitação, pela comunidade, em relação a uma linguagem extremamente consoilidada com Python.


    Cleiton Santos
    Cleiton Santos - 09/05/2023 10:16

    Parabéns pelo artigo! Não conhecia essa linguagem, parece ser bem poderosa mesmo. Mas só o tempo dirá se ela realmente vai vingar.

    Wanderson Ciambroni
    Wanderson Ciambroni - 09/05/2023 09:38

    Achei interessante isso. Como você disse, só o tempo dirá se ela vai ou não substituir o Python. Vou dar uma olhada no site deles para entender melhor sobre a linguagem: https://www.modular.com/mojo

    André Bezerra
    André Bezerra - 09/05/2023 03:17

    Cuidado com o HyperTrain de linguagens novas...

    ARAUJO,

    O que foi testado no TÓPICO 3 para ser obtido tal performance ?

    Como foi as condições de realização ?

    Tem mais observações.... mas, seria bom ter cautela.

    Já ouviu sobre JULIA ?