MLX : un framework de machine learning adapté aux puces Apple

Anthony Nelzin-Santos |

Si vous vous êtes déjà intéressé au machine learning, vous avez certainement croisé la bibliothèque NumPy de manipulation des tableaux et matrices, une brique fondamentale de l’édifice scientifique du langage de programmation Python. Apple présente MLX, un nouveau framework suivant NumPy « de très près », à ceci près qu’il prend en compte les particularités de l’architecture Apple Silicon pour augmenter sensiblement ses performances.

Image Apple.

Conçu « par des chercheurs en machine learning pour les chercheurs en machine learning », MLX marche dans les pas de JAX, le framework de manipulation de fonctions numériques créé par Google pour suivre la structure et les habitudes de NumPy. Les ingénieurs de la firme de Cupertino se sont aussi inspiré de la bibliothèque de machine learning PyTorch, originellement développée par Meta AI et utilisée par la plupart des systèmes de deep learning, ainsi que du système de calcul parallélisé ArrayFire.

MLX possède l’énorme avantage d’être capable de réaliser des opérations sur le processeur et le circuit graphique sans dupliquer les données, en tirant pleinement parti de la mémoire unifiée. À l’exception d’une poignée de transformations et de l’évaluation paresseuse, qui permet d’éviter de réaliser un calcul dont les résultats ne seraient finalement pas nécessaires, il sera immédiatement familier aux utilisateurs de NumPy.

Autrement dit, MLX permettra de tirer toute la substantifique moelle des puces Apple sans pour autant réinventer la roue. Apple propose une API en Python, très proche de NumPy et donc adressée à la communauté des chercheurs, mais aussi une API en C++, qu’elle utilise probablement elle-même. MLX est distribué sous licence MIT avec quelques exemples d’utilisation : l’entrainement d’un grand modèle de langage, la génération de texte avec LLaMA et d’images avec Stable Diffusion, ou encore la reconnaissance de la voix avec Whisper.

iOS 18, Siri, iWork : Apple se prépare à ajouter de l

iOS 18, Siri, iWork : Apple se prépare à ajouter de l'IA dans tout son écosystème

Apple expérimente une nouvelle technologie de génération d

Apple expérimente une nouvelle technologie de génération d'images et de vidéos

avatar BeePotato | 

Chouette, un nouveau jouet !

avatar marc_os | 

C++ avant Swift... 😄

avatar Ensearque | 

@marc_os

Exactement ce que je me suis dit. Cette approche va juste rendre encore plus incontournable Python pour le ML/DL, alors qu’une possibilité de tout faire en Swift serait une vraie valeur ajoutée.

avatar YosraF | 

@Ensearque

C’est quoi l’intérêt ? Tous les data scientist travaillent en Python. Tous les papiers sont fait en Python. Ça a pris du temps à ce que PyTorch soit vraiment généralisé. Avant y’avait Keras, tensorflow, PyTorch. Et il fallait toujours trouver une version compatible. Quand on a besoin de perf c’est toujours possible après comme Yolo Darknet.
Sinon pour revenir au sujet, c’est bon signe pour la suite Keynote 2024, préparez vous à des grandes choses de la part. L’ai sera présente partout.

avatar Ensearque | 

@YosraF

Merci, je suis chercheur en labo et j’utilise au quotidien TF et Keras.

Pour en revenir à mon commentaire, mon commentaire portait sur la possibilité de créer des pipelines end-to-end avec Swift au lieu de passer par des API/framework externes.

avatar YosraF | 

@Ensearque

Ok cool. Je suis pas en labo mais côté R&D startup. Si apple developpe le framework en python et c++ y’a bien des raisons. Y’a pleins de SDK iOS qui tournent également en C++, performances & portabilité.

L’avenir de l’AI c’est l’open source. Donc soit Apple arrive à pousser Swift, et c’est pas gagné sachant que tous les autres frameworks ne l’utiliseront pas, soit Apple optimise les traitements de sa puce comme elle l’a fait et comme elle l’a fait il y a quelques mois.

avatar Ensearque | 

@YosraF

Pour le côté open source je doute vraiment qu’Apple puisse apporter une grande contribution tant que la compil Swift soit réservé macOS.
J’ai tenté une fois d’entraîner un modèle en local sur puce M1 mais j’avoue que je n’ai pas compris mobiliser les ressources matérielles de manière optimale là où avec nVidia cela est assez commun voir automatique.

avatar joneskind | 

@Ensearque

“Pour le côté open source je doute vraiment qu’Apple puisse apporter une grande contribution tant que la compil Swift soit réservé macOS”

Swift n’est pas réservé à macOS.

Swift et son compiler sont open source depuis toujours et disponibles pour Windows et Linux. On peut également l’utiliser comme langage server.

Swift.org a d’ailleurs publié un article il y a quelques semaines au sujet du futur du développement Swift sur Windows et Linux.

avatar marc_os | 

@ Ensearque

> ... avec Swift au lieu de passer par des API/framework externes

Euh... je dirais en fait que le langage n'a rien à voir avec l' « externalité » des frameworks.
Un framework externe ou pas à une app donnée peut être écrit en Swift, C++ ou tout autre langage.
C'est "juste plus pratique" si les frameworks utilisés ont été écris avec le même langage que celui du code qui doit les utiliser.

Aveu : Ma remarque initiale était "motivée" par le fait que je déteste Swift, langage que je trouve inutile et même contre-productif dans un environnement de langages basés essentiellement sur la famille du C et directement compatibles, comme C++ ou Obj-C.
Avec Swift, moult contorsions sont nécessaires pour causer avec ces langages.

De plus, par expérience j'ai constaté que le code bas niveau écrit en Swift est moins performant que celui de nos anciennes versions en C / Obj-C. Quoiqu'en disent les aficionados de Swift, dont mes collègues.

Enfin, je suppose que quand le code de MLX sera suffisamment mûr, alors Apple proposera une version en Swift comme pour le reste de ses API.
Je trouve juste significatif qu'Apple propose d'abord une API en C++ avant Swift.
Last but not least, C++ n'étant de plus lié à aucune plateforme, c'est aussi une bonne raison de proposer d'abord du C++.

avatar Ensearque | 

@marc_os

Merci pour votre commentaire. J’avoue ne faire que de la recherche, et que le déploiement/compil d’app sont des tâches que je fais rarement. Dans ma naïveté, je me disais qu’utiliser un seul et même framework dans le même langage rendrait la tâche (qui est déjà fastidieuse) de déployer des modèles plus simple.

avatar clive-guilde | 

Moi je fais de la recherche en R avec Keras et TensorFlow avec l'appui de CUDA. C'est grave docteur ?
Si plus séreiseument non tous les papiers ne sont pas en python tout dépend le domaine. pour ma part en médical les deux mondes existes avec python si on traite des images et R si on fait des analyses de données grosso modo.
Après c'est sur que R est moins représenté et utilise des passerelle pour se relié à Python (et utiliser Keras et tensorflow).
Choose your poison comme dit l'autre mais rien de grave.
Je pense par contre qu'il est important sinon intéressant de s'intéresser au deux languages. Et dans un sous domaine médical, les gens ne jurent que part Matlab (sous américain car gère à la fois les forces de R et de Python en rajoutant des interfaces graphiques qui plus est par contre c'est payant - mais pas cher en académique).
Voilà pour ma modeste contribution d'apprentit datascientist académique dans le monde médical.

avatar YosraF | 

@clive-guilde

Je ne te contredit pas et tu as raison. Le R est surtout utilisé en data science. Alors que j’ai surtout travaillé sur du computer vision, pour ça que j’avais parlé de yolo darknet. Et pour avoir bosser avec des inge computer vision « classique »ils travaillaient tous sur matlab. Un autre monde mais l’outil avec lequel ils étaient à l’aise 😊

avatar kiddsoso | 

@Ensearque

Depuis cette année, il y a une interoperabilité complète entre le C++ et le Swift.

Swift va (ou a commencé je ne sais plus) être développé en … Swift au lieu du C++

Donc c’est faisable en Swift

avatar laclouis5 | 

@Ensearque

Je ne pense pas que tout faire en Swift soit très pertinent, pour les déjà raisons évoquées (communauté Python, disponibilité des modèles, etc.).

Il y a eu une tentative de framework de ML en Swift : Swift for Tensorflow (S4TF), projet qui a d’ailleurs permis de developer plein d’outils sympas : PythonKit pour l’interop Swift-Python, la différentiation automatique dans le language, etc. Le projet est aujourd’hui au point mort, malgré une tentative de revival récente.

J’ai pu tester ce framework pour des applications en Deep Learning et l’expérience utilisateur n’était pas au rendez-vous malheureusement. L’une des raisons qui a mon sens explique ce problème vient du typage fort et de l’aspect très statique de Swift par rapport à Python. Cela génère beaucoup de frictions et le code est trop verbeux.

Ce qui a fait la popularité de PyTorch et Python est la syntaxe extrêmement concise et la grande flexibilité du framework permettant de développer très rapidement des prototypes.

Peut être que cette situation sera amenée à changer avec les récentes évolutions de Swift, et notamment le système de Macro, même si je doute que Swift devienne le language de ML de demain.

avatar BeePotato | 

@ Ensearque : « Exactement ce que je me suis dit. Cette approche va juste rendre encore plus incontournable Python pour le ML/DL, alors qu’une possibilité de tout faire en Swift serait une vraie valeur ajoutée. »

Il est probable qu’une bonne partie des membres du groupe qui a écrit ce framework chez Apple ne soient même pas au courant de l’existence de Swift. 🙂
Je caricature un peu, mais tout de même pas tant que ça. Ils sont dans leur monde de la recherche sur le DL, et comme tu le sais fort bien, ça signifie faire du Python tous les jours.
Et comme tous ceux qui développent des toolkits Python performants, ils le font en C++ avec juste une fine couche de Python par dessus pour rendre le truc (un peu) moins horrible à utiliser au quotidien. 🤣

Mais ce n’est pas bien gênant : MacOS est plein de bibliothèques qui ne sont pas du tout écrites en Swift et qu’on utilise tout de même fort bien depuis des programmes en Swift, n’en déplaise à marc_os.
Il aurait certes été agréable qu’il y ait une API Swift fournie directement par Apple pour ce truc, afin de « jolifier » un peu la chose par rapport à la version C++ tout en évitant d’avoir à choisir entre 4 ou 5 versions écrites par des tiers pour faire ça. Mais ça n’est tout de même pas un point bloquant pour l’usage de cette bibliothèque depuis Swift. Et qui sait, peut-être que cette API Swift sera proposée dans un second temps (nan, je rêve, là 😁).

avatar tupui | 

@BeePotato

C++, et sans oublié du C, Cython, Pythran, Fortran et maintenant Rust 😅 c’est un peu le bazar en ce moment mais on travail a simplifie tout ça… C’est une vrai force de Python de pouvoir faire tout ça plus ou moins facilement mais ça amène tout un tas de problèmes comme la gestion des compilateurs (ex Windows + Fortran: une abomination)

avatar joneskind | 

Vu le prix des cartes ADA de Nvidia je verrai bien Apple proposer une carte d’extension dédiée au Machine Learning (est-ce qu’on pourrait arrêter de parler d’Intelligence Artificielle deux minutes SVP ? Ça n’existe pas l’intelligence artificielle)

Elle pourrait justifier à elle toute seule prix du Mac Pro, et ça ferait super chier Nvidia.

avatar fleeBubl | 

@joneskind

« Multi-appareils : les opérations peuvent être exécutées sur n'importe lequel des périphériques pris en charge (actuellement, le CPU et le GPU). »

https://github.com/ml-explore/mlx

Il y a vraisemblablement de l’intégration à venir … sans évoquer de calcul distribué.

avatar joneskind | 

@fleeBubl

Oh ! Bien vu !

avatar smog | 

Un peu au bord du contenu de l'article, mais quelqu'un pourrait-il me conseiller des ressources (en ligne ou livres "papier" intéressants pour comprendre et pratiquer ce qu'on appelle le "Machine Learning" ?
C'est pour ma culture personnelle et pour en faire part (un peu) à mes étudiants.
Merci à vous !

avatar tupui | 

@smog

Va sur le site de la librairie scikit-learn, ils ont de bons tutoriels. SciPy aussi mais c’est plus “bas niveau” ( ex statistiques pures, un language un peu différent).

avatar BeePotato | 

@ smog :
Une bonne ressource, pas sur le machine learning en général (bien que, de mémoire, ça parle un peu des diverses techniques dans la première partie) mais plus spécifiquement sur le deep learning, est la formation FIDLE du CNRS. Elle est sous forme d’une série de vidéos sur YouTube, accompagnée d’exercices qu’on peut faire dans un environnement facile à installer.

https://www.youtube.com/@CNRS-FIDLE

avatar smog | 

Merci beaucoup tupui et BeePotato !
Abonné à la chaine YT, en plus c'est "mon" université d'origine ! Je commence de suite !

avatar marc_os | 

Comparison of the Usability of Apple M1 Processors for Various Machine Learning Tasks
https://pubmed.ncbi.nlm.nih.gov/36298358/

Un article très intéressant qui parle entre autres de l'utilisation du framework Create ML d'Apple. Et si on regarde bien la doc dev d'Apple, on voit qu'ils proposent pas mal d'API et d'outils autour du Machine Learning et des technos associées dont Core ML.

CONNEXION UTILISATEUR