Mojo por fin es de código abierto... Así que lo probé

BBetter Stack
Computing/Software

Transcript

00:00:00Mojo, el lenguaje de programación, acaba de llegar a la versión 1.0, y el momento es un poco extraño.
00:00:05Se lanzó con un compilador cerrado, siete días después lo hicieron de código abierto,
00:00:09y Qualcomm acababa de comprar la empresa.
00:00:12Pero olvidémonos de todo eso por un segundo.
00:00:14Lo verdaderamente importante de Mojo es código tipo Python sin renunciar a C++ o CUDA para ganar velocidad.
00:00:20Así que veamos si esto realmente cumple.
00:00:27Todo el concepto de Mojo gira en torno a una pregunta.
00:00:30¿Qué tal si pudieras escribir código que se ve y se siente exactamente como Python,
00:00:34pero ejecutar las partes que realmente importan sin abandonar C++ o CUDA?
00:00:39Un único lenguaje legible tanto en la CPU como en la GPU.
00:00:42De eso se trata todo esto.
00:00:43Y ahora que Mojo finalmente ha alcanzado la versión 1.0, quería comprobar cuánto de esto es realmente real.
00:00:49Así que antes de meternos con Qualcomm, código abierto y todo eso, vamos a probarlo.
00:00:53Si te gustan las herramientas de programación para acelerar tu flujo de trabajo, asegúrate de suscribirte.
00:00:57Subimos videos todo el tiempo.
00:00:59Voy a hacer esto en mi máquina, pero no voy a dar un tutorial completo de Mojo aquí.
00:01:03Si nunca lo has visto antes, pues sí, se parece mucho a Python,
00:01:07pero vas a notar algunas diferencias clave.
00:01:10En el lado izquierdo está Python.
00:01:12En el lado derecho está Mojo.
00:01:13Es el mismo bucle, la misma cuadrícula, el mismo límite de iteraciones.
00:01:17No voy a entrar a detallar las matemáticas de esto.
00:01:20Observa los dos bucles while.
00:01:21Están haciendo exactamente lo mismo.
00:01:23Primero vamos a ejecutar Python aquí.
00:01:26Muy bien.
00:01:27Corrió.
00:01:28Se ejecutó.
00:01:28Ahora, el mismo programa compilado con Mojo.
00:01:32De nuevo, vamos a ejecutarlo.
00:01:35Y boom.
00:01:35Listo.
00:01:36Ahora bien, las sumas de comprobación no coincidirán en el último dígito.
00:01:39Difieren por un par de cientos sobre un cuarto de millón.
00:01:43Python primero multiplica y luego suma.
00:01:45La compilación de Mojo puede fusionar eso en una sola instrucción.
00:01:49Unos pocos píxeles toman una iteración adicional.
00:01:51Toma los segundos aquí como el número real.
00:01:54Y esto no es NumPy.
00:01:55No es un modelo.
00:01:56El rendimiento no se limita a que el bucle de la CPU sea más rápido.
00:02:00Puedes empezar en Python porque es fácil.
00:02:03Luego, el camino pasa a C++ o CUDA.
00:02:06Ahora tienes dos archivos y empiezan a desincronizarse.
00:02:09Así que esta es la pregunta que plantea Mojo.
00:02:12¿Puede el archivo que lees ser exactamente el mismo archivo que se ejecuta en la GPU?
00:02:17Esta función es el núcleo (kernel).
00:02:18Cada hilo de la GPU suma un par de números.
00:02:20Eso es todo.
00:02:21No me cambié a Metal, Swift o CUDA.
00:02:24Compílalo.
00:02:26Y ahora tenemos el código funcionando.
00:02:28Así que sí.
00:02:30Mojo puede hacer algo bastante interesante aquí.
00:02:32Y acabo de compilar un núcleo de GPU funcional en una MacBook usando el mismo lenguaje en el que escribía
00:02:38código normal, Python.
00:02:40Tu código de aprendizaje automático empieza en Python porque Python es fácil de usar.
00:02:44Todos lo sabemos.
00:02:45Luego, con el tiempo, el rendimiento empieza a importar.
00:02:48Así que las partes importantes se reescriben en C++ o CUDA.
00:02:52Ahora, estamos manteniendo dos versiones del mismo sistema.
00:02:55Y de nuevo, con el tiempo, eso solo genera confusión.
00:02:58La gracia de Mojo es que el archivo legible y el archivo rápido son exactamente lo mismo.
00:03:03Ahora bien, la persona detrás de todo esto es Chris Lattner.
00:03:06Él construyó LLVM, luego Clang y después Swift.
00:03:10Pero hacer funcionar un núcleo de GPU es una cosa.
00:03:14Llamar al lenguaje 1.0, eso es un poco diferente.
00:03:18Entonces, ¿qué significa realmente 1.0 aquí?
00:03:21No significa que Mojo esté terminado.
00:03:23Significa más o menos estabilidad.
00:03:25Hay promesas de que el código que escribes hoy no se va a romper.
00:03:29De eso trata un lanzamiento importante como este.
00:03:30Pero entonces te encuentras con la primera parte extraña.
00:03:32Mojo llegó a la versión 1.1 antes de que su compilador fuera siquiera de código abierto.
00:03:37La biblioteca estándar ya se había abierto en marzo de 2024.
00:03:40Los núcleos max se abrieron en 2025.
00:03:43Pero el compilador, lo que realmente realiza la compilación, se mantuvo propietario hasta el 18 de agosto de este año.
00:03:50Bajo la licencia Apache 2.0, y eso es importante porque apenas siete días antes, cuando salió Mojo 1.0, seguía cerrado.
00:03:57Y eso responde a una de las mayores críticas que Mojo ha recibido durante tres años seguidos.
00:04:02Solías poder decir: seguro, pero el compilador es cerrado.
00:04:05Ya no podemos decir eso realmente, lo cual suena a que va en la dirección correcta.
00:04:10Tal vez lo esté.
00:04:10Hasta que miras lo que pasó tres semanas antes.
00:04:14La adquisición por parte de Qualcomm se completó el 29 de julio.
00:04:16Mojo 1.0 se lanzó el 11 de agosto.
00:04:19El compilador se abrió el 18 de agosto.
00:04:21Así que el hito de apertura más grande en la historia de Mojo ocurrió en menos de tres semanas después de que Modular dejara de ser una empresa independiente.
00:04:29Y eso crea inmediatamente dos formas completamente diferentes de interpretar esto.
00:04:33La número uno es que Qualcomm compró Modular porque quiere a Mojo en todas partes.
00:04:37Probablemente no.
00:04:37O que Qualcomm compró Modular y, eventualmente, todo esto sea absorbido por una compañía mucho más grande.
00:04:44Qualcomm hace chips.
00:04:45Un lenguaje que compila bien para chips se vuelve mucho más valioso.
00:04:49Podemos usarlo libremente.
00:04:50Así que la jugada del código abierto tiene sentido.
00:04:53Pero si Mojo tiene éxito o no, probablemente no dependerá de Qualcomm.
00:04:57Dependerá de si el lenguaje es lo suficientemente bueno como para justificar el cambio en primer lugar.
00:05:02Pero de nuevo, aquí es donde todo empieza a volverse confuso.
00:05:05Mojo tiene un problema con los benchmarks.
00:05:07Allá por 2023, la gran cifra era que Mojo podía ser 68,000 veces más rápido que Python.
00:05:13Eso es una locura.
00:05:14Todavía hay una publicación activa que afirma que Mojo es un 50% más rápido que Rust en análisis de ADN.
00:05:19Esa prueba de rendimiento fue destrozada.
00:05:21Demostraron que el benchmark no estaba midiendo lo que decía medir.
00:05:25Y todavía verás la cifra de 35,000 veces dando vueltas por ahí.
00:05:29Eso proviene de la multiplicación de matrices.
00:05:31Pero lo que están comparando es, bueno,
00:05:34por un lado, una implementación en Mojo totalmente vectorizada, paralela y optimizada por bloques.
00:05:40Por el otro lado, un triple bucle en Python puro.
00:05:44Sí, un triple bucle.
00:05:45No NumPy, solo un bucle anidado que nadie en la tierra usaría realmente.
00:05:49Así que no me importa mucho lo de ser 35,000 veces más rápido.
00:05:52Yo quería números de esta máquina.
00:05:54Estoy en un M4 Pro comparado con Python puro.
00:05:57Frente a Python puro, 26 veces y media más rápido.
00:06:00Frente a NumPy, por operación, cerca de dos veces más rápido.
00:06:05Ahora bien, obviamente 26 no son 68,000.
00:06:08Pero 26 veces sigue siendo una buena cifra porque NumPy ya está hecho en C por debajo.
00:06:14En ese punto, realmente no estás venciendo a Python.
00:06:16Estás venciendo a C con un mejor comportamiento de la memoria.
00:06:19Y eso es lo frustrante de Mojo.
00:06:21Pero el rendimiento no es en realidad la mayor razón por la que dudaría en usar Mojo hoy.
00:06:25Ya he jugado con él antes.
00:06:27Lo estoy ejecutando aquí hoy.
00:06:28El gran tema es la estabilidad.
00:06:30Ahora bien, ¿qué tan estable es esto?
00:06:32Porque Mojo 1.0 se lanza con 41 advertencias de API inestables, incluyendo int, print y len, funciones nativas principales.
00:06:40Fueron marcadas como inestables dentro de un supuesto lanzamiento de estabilidad.
00:06:45Y el mismo día que Mojo promete que tu código no se romperá, eliminar la palabra clave fn rompió aproximadamente 39 paquetes del ecosistema.
00:06:52Ahora bien, la palabra clave fn, que era fundamental en cómo operaba Mojo, fue completamente eliminada.
00:06:58Sin proceso de transición.
00:06:59Y aunque el compilador ahora es de código abierto, todavía no aceptan contribuciones para él.
00:07:04Así que Mojo 1.0 es estable, supongo.
00:07:07Pero tal vez no tan estable como dicen.
00:07:09Lo que nos lleva a la única pregunta que realmente importa.
00:07:12¿Deberías usar esto?
00:07:13Ahora bien, si escribes núcleos de GPU, CUDA, Triton, ese mundo, creo que Mojo definitivamente vale un día o dos.
00:07:21Un solo lenguaje entre CPU y GPU, y compilé un núcleo de GPU funcional en una laptop.
00:07:27No hay muchas otras cosas que hagan eso.
00:07:29Pero esto todavía tiene mucho margen de crecimiento.
00:07:31Así que yo no le daría prioridad de ninguna manera todavía.
00:07:35Hace tres años, el argumento en contra de Mojo era bastante simple.
00:07:38Nuevo lenguaje genial, pero ¿quién va a usar esto?
00:07:40Era un lenguaje cerrado de una startup que pedía a los desarrolladores apostar todo en él.
00:07:44Hoy en día, el compilador tiene licencia Apache 2.0.
00:07:47El lenguaje es la versión 1.0.
00:07:48Y esa startup ahora forma parte de Qualcomm.
00:07:51Soy Josh de BetterStack.
00:07:53Si disfrutas de los consejos y trucos de programación como este, asegúrate de suscribirte.
00:07:56Nos vemos en otro video.

Key Takeaway

Mojo alcanza la versión 1.0 y libera su compilador como código abierto tras su adquisición por Qualcomm, ofreciendo un rendimiento 26.5 veces superior al de Python puro, aunque enfrenta desafíos de estabilidad y cambios drásticos en la API.

Highlights

  • Mojo alcanza la versión 1.0 y abre el código fuente de su compilador bajo la licencia Apache 2.0 el 18 de agosto.

  • Qualcomm completa la adquisición de la empresa Modular el 29 de julio, semanas antes del lanzamiento de la versión 1.0.

  • El lenguaje ejecuta código 26.5 veces más rápido que Python puro y cerca de dos veces más rápido que NumPy en pruebas con un chip M4 Pro.

  • La eliminación de la palabra clave fn rompe aproximadamente 39 paquetes existentes en el ecosistema durante el lanzamiento.

  • La versión 1.0 incluye 41 advertencias de funciones de API inestables, entre ellas int, print y len.

Timeline

Lanzamiento y capacidad multiplataforma

  • Mojo permite escribir código con la sintaxis de Python y compilar núcleos funcionales para GPU.
  • El lenguaje elimina la necesidad de separar el código de la CPU en Python del código de la GPU en C++ o CUDA.
  • Chris Lattner lidera el desarrollo tras haber creado LLVM, Clang y Swift.

El lenguaje aborda la fragmentación en el desarrollo de aprendizaje automático al unificar la legibilidad de la sintaxis de Python con el rendimiento del hardware especializado. Las pruebas de ejecución muestran un bucle idéntico procesado con una ganancia de velocidad directa frente al intérprete tradicional de Python sin cambiar de lenguaje.

Apertura de código y adquisición por Qualcomm

  • El compilador se libera bajo la licencia Apache 2.0 apenas una semana después del lanzamiento de la versión 1.0.
  • Qualcomm adquiere la empresa Modular el 29 de julio, acelerando la decisión de abrir el código del compilador.
  • La estabilidad en la versión 1.0 garantiza que el código escrito no sufra modificaciones abruptas en el futuro.

El calendario del proyecto genera debate debido a la cercanía entre la compra por parte de Qualcomm y la apertura del compilador. La biblioteca estándar se abrió en marzo de 2024 y los núcleos max en 2025, eliminando la principal crítica sobre el carácter propietario del sistema de compilación.

Rendimiento real y problemas de estabilidad

  • Las pruebas en un procesador M4 Pro muestran un rendimiento 26.5 veces más rápido que Python puro y 2 veces superior a NumPy.
  • Los benchmarks iniciales que afirmaban una velocidad 68,000 veces mayor comparaban código vectorizado optimizado contra bucles triples ineficientes.
  • La eliminación repentina de la palabra clave fn rompe 39 paquetes y la versión 1.0 mantiene 41 advertencias de API inestables.

Las cifras extremas de rendimiento publicadas en el pasado provienen de comparaciones injustas con bucles anidados que no usan NumPy. A pesar de las mejoras reales de velocidad, la inestabilidad de funciones básicas como int, print y len genera fricción para los desarrolladores que buscan adoptar la herramienta.

Community Posts

No posts yet. Be the first to write about this video!

Write about this video