Seguridad

Mojo: El lenguaje para programar Inteligencia Artificial que es un superconjunto de Python

Python es el lenguaje predominante para desarrollo de la Inteligencia Artificial. Su gran colección de bibliotecas para una extensa variedad de ámbitos dentro de este campo y su sencillez son motivos más que suficientes para justificar su uso, además de todo el contenido divulgativo que existe en torno a él permite que sea un lenguaje masivamente adoptado. Sin embargo, su rendimiento deja mucho que desear, y es muchísimo más lento que lenguajes como CPor este motivo existen múltiples trucos para lograr una mayor eficiencia a la hora de ejecutar operaciones. 

Figura 1: Mojo – El lenguaje para programar Inteligencia Artificial
que es un superconjunto de Python

La librería Numpy es un ejemplo claro, donde muchas de sus operaciones están implementadas en  Lenguaje C, logrando bastante mejor rendimiento a la hora de hacer cálculos que si no la usáramos. Otro problema en Python es el procesamiento en paralelo, en donde ahora está existiendo hardware moderno para IA con núcleos de alto rendimiento, Python usa generalmente uno solo, aunque existen soluciones estas no son óptimas.

Figura 2: Libros de Python para Pentesters y Hacking con Python
de Daniel Echeverri publicados en 0xWord.

En definitiva, podría decirse que Python es un lenguaje lleno de parches, de trucos, que van permitiendo lograr mejores velocidades de computación, pero que finalmente van haciendo que sea difícil de depurar y menos manejable, sin llegar a exprimir completamente el hardware. La realidad es que para el mundo de la Inteligencia Artificial se usa principalmente Python porque es fácil de usar y no hay alternativa, y se hacen uso de estos trucos para intentar solventar sus problemas. Pero recientemente apareció el Lenguaje Mojo.

El Lenguaje Mojo es un superconjunto de Python, y esto es una gran ventaja, ya que parte de este tan popular y querido lenguaje. El objetivo de este es claro: ser tan fácil de usar como Python, ser tan potente como el Lenguaje C. Ha sido creado por la empresa Modular, cuyo CEO es Chris Lattner, quien empezó a desarrollar el lenguaje Swift allá por el 2010, y apareció públicamente en mayo de este año 2023, donde para su uso era necesario solicitar permiso y únicamente se podía utilizar en navegador web, y desde este mes de septiembre ya es posible utilizarlo en GNU/Linux.


Características de Mojo


La extensión de un programa Mojo puede ser .mojo o el emoji con la llama de fuego. Así que por ejemplo si se tiene un programa hello.mojo, para ejecutarlo se escribiría mojo hello.mojo

Figura 3: Ejecución aplicaciones Mojo

Una de las ventajas clave es la paralelización. Mojo es el lenguaje diseñado para aprovechar al máximo MLIR, otro proyecto de éxito desarrollado por el mismo Chris Lattner con gran éxito, que es el reemplazo a la representación LLVM para esta nueva era de la Inteligencia Artificial, y que permite a los desarrolladores aprovechar al máximo los vectores, hilos y unidades de hardware de la IA.

Otra diferencia esencial con Python es que Mojo se trata de un lenguaje compilado. En Python el comportamiento del programa desarrollado dependerá de la versión exacta que se esté utilizando de este lenguaje y de las librerías usadas, y para solventar este problema se crearon los entornos para instalar aplicaciones Python, existiendo también los contenedores.

Sin embargo, Mojo sigue la misma aproximación que el Lenguaje C, por lo que el despliegue de aplicaciones es increíblemente sencillo, simplemente ofreciendo el programa compilado para descarga directa. Esto significa que Mojo es mucho más que un lenguaje para aplicaciones de IADe hecho, es una versión de Python que nos permite escribir aplicaciones rápidas, pequeñas y fáciles de desplegar que aprovechan todos los núcleos y aceleradores disponibles.
Y como se ha comentado, al ser un superconjunto de 
Python, se puede hacer uso de este y sus librerías.

Hay muchas otras características que puedes leer en el manual. Por destacar algunas, introduce verificación de tipado fuerte, crítico para obtener el mayor rendimiento y comprobar errores; declaración de variables mediante let (inmutables) y var (modificables), lo cual mejora el rendimiento al establecer restricciones en el momento de compilar; se puede hacer uso de tipos struct similares a las existentes en C/C++ y Rust en vez de class existente en Python, que presentan diseños predeterminados durante la compilación que garantizará una mayor eficiencia; y por terminar con otra característica, en vez de utilizar funciones definidas con defMojo ofrece la palabra clave fn, que representa una función con más restricciones, creando así código máquina optimizado.


Rendimiento


Se realizó una comparativa ejecutando el algoritmo Mandelbrot. En Python la ejecución llegó a más de 1000 segundos, mientras que con Mojo apenas 0.03 segundos. En este artículo puedes leer con más detalle cómo se llega a obtener un speedup frente a Python de 68000x, con diferentes técnicas de optimización.

En general, estos resultados prometen, y no hay nada mejor que ejecutarlo tu mismo y lanzar diferentes pruebas para hacerte tu propia idea sobre la mejora que se puede lograr con Mojo .


Conclusiones


Hay muchas esperanzas puestas en este lenguaje, el cual podría convertirse en un futuro próximo en el lenguaje para desarrollar IA, y como hemos visto no solo para este ámbito, sino que para propósitos generales también por todo lo que ofrece. Aquí tienes un vídeo con un repaso breve de Mojo tras su lanzamiento, por Jeremy Howard, referente en IA.



Figura 7: Presentación de Mojo por Jeremy Howard

Veremos si acaba convirtiéndose en lo que promete, y recuerda que puedes probarlo ya mismo en GNU/Linux, que programar Inteligencia Artificial va a sr una de las principales funciones que van a realizar los programadores de ahora en adelante.

Un saludo,

Powered by WPeMatico

Gustavo Genez

Informático de corazón y apasionado por la tecnología. La misión de este blog es llegar a los usuarios y profesionales con información y trucos acerca de la Seguridad Informática.