Mojo est enfin open source... Je l'ai donc testé

BBetter Stack
Computing/Software

Transcript

00:00:00Mojo, le langage de programmation, vient de passer en version 1.0, et le timing est un peu bizarre.
00:00:05Il a été lancé avec un compilateur fermé, et sept jours plus tard, il est devenu open source,
00:00:09et Qualcomm venait tout juste de racheter l'entreprise.
00:00:12Mais oublions tout cela une seconde.
00:00:14Le vrai point fort de Mojo, c'est d'offrir du code semblable à Python sans sacrifier la vitesse du C++ ou de CUDA.
00:00:20Voyons donc si c'est vraiment à la hauteur.
00:00:27Tout l'intérêt de Mojo tient en une question.
00:00:30Et si vous pouviez écrire du code qui ressemble et se lit exactement comme Python,
00:00:34mais en exécutant les parties cruciales sans abandonner le C++ ou CUDA ?
00:00:39Un seul langage lisible à la fois sur CPU et GPU.
00:00:42C'est tout l'enjeu ici.
00:00:43Et maintenant que Mojo est enfin en 1.0, je voulais voir quelle part de tout cela est bien réelle.
00:00:49Alors avant de parler de Qualcomm, d'open source ou autre, passons directement à la pratique.
00:00:53Si vous aimez les outils de code pour accélérer votre flux de travail, n'hésitez pas à vous abonner.
00:00:57Nous publions des vidéos en continu.
00:00:59Je vais faire ça sur ma machine, mais ce ne sera pas un tutoriel complet sur Mojo.
00:01:03Si vous ne l'avez jamais vu, oui, ça ressemble effectivement à Python,
00:01:07mais vous allez voir quelques différences majeures.
00:01:10Sur le côté gauche, c'est du Python.
00:01:12Sur le côté droit, c'est du Mojo.
00:01:13C'est la même boucle, la même grille, la même limite d'itérations.
00:01:17Je ne vais pas entrer dans les détails mathématiques.
00:01:20Regardez les deux boucles while.
00:01:21Elles font exactement la même chose.
00:01:23Nous allons d'abord exécuter Python.
00:01:26Bon, très bien.
00:01:27Ça a tourné.
00:01:28Ça s'est exécuté.
00:01:28Maintenant, voyons le même programme compilé avec Mojo.
00:01:32Encore une fois, exécutons-le.
00:01:35Et boum.
00:01:35Voilà.
00:01:36Les sommes de contrôle ne correspondent pas au dernier chiffre près.
00:01:39Elles diffèrent de quelques centaines sur un quart de million.
00:01:43Python fait une multiplication puis une addition.
00:01:45La compilation Mojo peut fusionner cela en une seule instruction.
00:01:49Quelques pixels demandent une itération supplémentaire.
00:01:51Considérez les secondes ici comme le vrai chiffre.
00:01:54Et ce n'est pas du NumPy.
00:01:55Ce n'est pas un modèle.
00:01:56La performance ne se résume pas à une boucle CPU plus rapide.
00:02:00Vous pouvez commencer par Python parce que c'est simple.
00:02:03Ensuite, on passe au C++ ou à CUDA.
00:02:06Et là, vous vous retrouvez avec deux fichiers qui finissent par diverger.
00:02:09C'est donc toute la question que soulève Mojo.
00:02:12Le fichier que vous lisez peut-il être exactement celui qui s'exécute sur le GPU ?
00:02:17Cette fonction est le noyau.
00:02:18Chaque thread du GPU additionne une paire de nombres.
00:02:20C'est tout.
00:02:21Je n'ai pas eu besoin de passer à Metal, Swift ou CUDA.
00:02:24Compilez-le.
00:02:26Et voilà, notre code tourne.
00:02:28Alors, oui.
00:02:30Mojo permet de faire des choses assez intéressantes.
00:02:32Je viens de compiler un noyau GPU fonctionnel sur un MacBook en utilisant le même langage
00:02:38que pour mon code classique : Python.
00:02:40Votre code de machine learning commence en Python parce que c'est un langage accessible.
00:02:44Nous le savons tous.
00:02:45Puis, par la suite, les performances commencent à compter.
00:02:48Les parties critiques sont alors réécrites en C++ ou CUDA.
00:02:52Et soudain, nous maintenons deux versions du même système.
00:02:55Avec le temps, cela ne fait qu'ajouter de la confusion.
00:02:58La promesse de Mojo, c'est que le fichier lisible et le fichier ultra rapide ne font qu'un.
00:03:03Derrière tout cela se trouve Chris Lattner.
00:03:06Il a créé LLVM, puis Clang, et enfin Swift.
00:03:10Mais faire tourner un noyau GPU, c'est une chose.
00:03:14Qualifier le langage de version 1.0, c'est encore autre chose.
00:03:18Alors, que signifie réellement ce 1.0 ?
00:03:21Pas que Mojo soit achevé.
00:03:23Cela signifie plutôt qu'il y a de la stabilité.
00:03:25C'est la garantie que le code écrit aujourd'hui ne va pas casser.
00:03:29C'est l'essence d'une telle version majeure.
00:03:30Mais c'est là qu'intervient le premier détail étrange.
00:03:32Mojo a atteint la version 1.1 avant même que son compilateur ne devienne open source.
00:03:37La bibliothèque standard était déjà passée en open source en mars 2024.
00:03:40Les noyaux max ont suivi en 2025.
00:03:43Mais le compilateur, l'élément central qui effectue la compilation, est resté propriétaire jusqu'au 18 août de cette année.
00:03:50Sous licence Apache 2.0, ce qui est marquant puisque sept jours plus tôt, lors de la sortie de Mojo 1.0, il était encore fermé.
00:03:57Cela répond directement à l'une des critiques les plus fréquentes faites à Mojo ces trois dernières années.
00:04:02On pouvait toujours objecter : certes, mais le compilateur est fermé.
00:04:05On ne peut plus vraiment dire cela, ce qui semble aller dans la bonne direction.
00:04:10C'est possible.
00:04:10Jusqu'à ce qu'on regarde ce qui s'est passé trois semaines plus tôt.
00:04:14Le rachat par Qualcomm a été finalisé le 29 juillet.
00:04:16Mojo 1.0 est sorti le 11 août.
00:04:19Le compilateur est passé en open source le 18 août.
00:04:21Le plus grand événement d'ouverture de l'histoire de Mojo s'est donc produit moins de trois semaines après que Modular a cessé d'être indépendant.
00:04:29Cela permet d'analyser la situation de deux manières complètement différentes.
00:04:33Premièrement : Qualcomm a acheté Modular parce qu'ils veulent du Mojo partout.
00:04:37Probablement pas.
00:04:37Ou alors, Qualcomm a acheté Modular, et tout cela finira par être absorbé par un groupe beaucoup plus grand.
00:04:44Qualcomm fabrique des puces.
00:04:45Un langage qui compile efficacement pour ces puces devient immédiatement beaucoup plus précieux.
00:04:49Nous pouvons désormais l'utiliser librement.
00:04:50Le virage open source est donc logique.
00:04:53Mais le succès de Mojo ne dépendra probablement pas de Qualcomm.
00:04:57Il dépendra de la capacité du langage à justifier un tel changement de cap.
00:05:02Et c'est précisément là que tout commence à se compliquer.
00:05:05Mojo a un problème avec ses benchmarks.
00:05:07En 2023, on affichait un chiffre fou : Mojo serait 68 000 fois plus rapide que Python.
00:05:13C'est insensé.
00:05:14Il y a aussi un article en ligne affirmant que Mojo surpasse Rust de 50 % sur l'analyse d'ADN.
00:05:19Ce benchmark a été démonté.
00:05:21Il a été prouvé qu'il ne mesurait pas du tout ce qu'il prétendait mesurer.
00:05:25Et pourtant, on voit encore le chiffre de 35 000 fois plus rapide circuler.
00:05:29Cela provient de la multiplication de matrices.
00:05:31Mais ce qu'ils comparent, c'est...
00:05:34d'un côté, une implémentation Mojo entièrement vectorisée, parallélisée et tuilée.
00:05:40De l'autre, une triple boucle en pur Python.
00:05:44Oui, une triple boucle.
00:05:45Pas du NumPy, juste une boucle imbriquée que personne sur Terre n'utiliserait en pratique.
00:05:49Je ne me soucie donc pas vraiment de cette histoire de 35 000 fois plus rapide.
00:05:52Je voulais des chiffres sur ma propre machine.
00:05:54Je suis sur une puce M4 Pro face au Python pur.
00:05:57Face au Python pur, c'est 26 fois et demie plus rapide.
00:06:00Face à NumPy, par opération, c'est environ deux fois plus rapide.
00:06:05Évidemment, 26, ce n'est pas 68 000.
00:06:08Mais 26 fois, c'est déjà un bon score, sachant que NumPy repose déjà sur du C en interne.
00:06:14À ce stade, vous ne battez plus vraiment Python.
00:06:16Vous battez le C grâce à une meilleure gestion de la mémoire.
00:06:19Et c'est bien cela qui est frustrant avec Mojo.
00:06:21Mais les performances ne constituent pas la raison principale pour laquelle j'hésiterais à l'adopter aujourd'hui.
00:06:25J'ai déjà testé le langage.
00:06:27Je l'exécute en ce moment même.
00:06:28La vraie question, c'est la stabilité.
00:06:30À quel point est-ce stable ?
00:06:32Puisque Mojo 1.0 sort avec 41 avertissements d'API instables, incluant des fonctions fondamentales comme int, print et len.
00:06:40Elles ont été qualifiées d'instables au sein d'une version prétendument axée sur la stabilité.
00:06:45Et le jour même où Mojo promet que votre code ne plantera pas, la suppression du mot-clé fn a brisé environ 39 paquets de l'écosystème.
00:06:52Or, le mot-clé fn était central dans le fonctionnement de Mojo, et il a complètement disparu.
00:06:58Adieu le processus FC.
00:06:59Et même si le compilateur est désormais open source, les contributions ne sont pas encore acceptées.
00:07:04Donc Mojo 1.0 est stable, je suppose.
00:07:07Mais peut-être pas autant qu'ils le prétendent.
00:07:09Ce qui nous amène à la seule question qui compte vraiment.
00:07:12Devriez-vous l'utiliser ?
00:07:13Si vous écrivez des noyaux GPU, du CUDA, du Triton ou que vous évoluez dans ce milieu, Mojo mérite largement d'y passer un jour ou deux.
00:07:21Un seul langage pour le CPU et le GPU, et j'ai pu compiler un noyau GPU opérationnel sur un ordinateur portable.
00:07:27Il n'y a pas grand-chose d'autre qui permette de faire cela.
00:07:29Mais le projet a encore une grande marge de progression.
00:07:31Je ne lui donnerais donc pas la priorité absolue pour l'instant.
00:07:35Il y a trois ans, l'argument contre Mojo était assez simple.
00:07:38Sympathique nouveau langage, mais qui va l'utiliser ?
00:07:40C'était un langage fermé issu d'une startup demandant aux développeurs de miser tout leur avenir dessus.
00:07:44Aujourd'hui, le compilateur est sous licence Apache 2.0.
00:07:47Le langage est en version 1.0.
00:07:48Et cette startup fait désormais partie de Qualcomm.
00:07:51Je suis Josh de BetterStack.
00:07:53Si vous aimez ce genre de conseils et astuces de code, abonnez-vous.
00:07:56On se retrouve dans une prochaine vidéo.

Key Takeaway

Mojo atteint la version 1.0 et adopte une licence open source après son rachat par Qualcomm, offrant des performances de calcul élevées compatibles avec Python malgré des instabilités d'API persistantes.

Highlights

  • Mojo est passé en version 1.0 et son compilateur est devenu open source sous licence Apache 2.0.

  • Le langage permet d'exécuter du code similaire à Python tout en offrant des performances comparables au C++ ou à CUDA sur CPU et GPU.

  • Sur une puce M4 Pro, le code Mojo s'exécute 26,5 fois plus rapidement que le Python pur et environ deux fois plus vite que NumPy.

  • Le rachat de Modular par Qualcomm a été finalisé le 29 juillet, précédant de peu l'ouverture du code source du compilateur.

  • La version 1.0 comporte 41 avertissements d'API instables, incluant des fonctions fondamentales comme int, print et len.

Timeline

Présentation de Mojo 1.0 et promesse de performance

  • Mojo combine la syntaxe de Python avec la vitesse d'exécution du C++ et de CUDA.
  • Le langage permet d'écrire un code lisible sur CPU et sur GPU dans un même fichier.
  • Les tests de compilation montrent de légères différences numériques en raison d'optimisations matérielles.

Le langage propose de résoudre la fragmentation du code entre le prototypage en Python et la réécriture en C++ ou CUDA pour la production. L'exécution d'une même boucle en Python et en Mojo illustre un gain de performance direct, bien que les calculs en virgule flottante puissent différer légèrement lors de la fusion d'instructions par le compilateur.

Historique des versions, open source et rachat par Qualcomm

  • Chris Lattner, créateur de LLVM, Clang et Swift, est à l'origine du projet.
  • Le compilateur est passé en open source sous licence Apache 2.0 le 18 août.
  • Le rachat de l'entreprise Modular par Qualcomm a eu lieu le 29 juillet, quelques semaines avant l'ouverture du code.

La version 1.0 apporte une garantie de stabilité pour le code des développeurs. L'ouverture du compilateur répond aux critiques concernant son caractère fermé, tandis que l'acquisition par Qualcomm aligne le développement du langage avec des intérêts matériels sur les puces.

Benchmarks de performance et évaluation de la stabilité

  • Les benchmarks initiaux de 68 000 fois plus rapide reposaient sur des comparaisons avec des boucles en pur Python.
  • Sur une puce M4 Pro, Mojo est 26,5 fois plus rapide que Python pur et deux fois plus rapide que NumPy.
  • La version 1.0 intègre encore 41 avertissements d'API instables et des modifications de syntaxe cassant des paquets.

Les performances réelles mesurées se révèlent plus modestes que les chiffres marketing initiaux mais surpassent le code optimisé de NumPy grâce à une meilleure gestion de la mémoire. Toutefois, la présence de fonctions fondamentales qualifiées d'instables et la suppression de mots-clés essentiels مثل fn montrent que l'écosystème nécessite encore de la maturation.

Community Posts

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

Write about this video