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):
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.
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:
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:
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.
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