- MLX est un framework de tableaux destiné aux chercheurs en machine learning sur Apple Silicon, offrant une ergonomie proche de NumPy et de PyTorch
- Des travaux sont en cours pour ajouter un backend CUDA à MLX
- L’objectif principal est la prise en charge de la mémoire unifiée (unified memory) et une exploitation étendue du matériel NVIDIA
- Pour l’instant, seuls les exemples des tutoriels fonctionnent, et la compilation ainsi que les tests ont été vérifiés dans un environnement Ubuntu 22.04 + CUDA 11.6
- Après une phase initiale de résolution de problèmes de performances et de goulots d’étranglement, les travaux d’optimisation et de refactorisation se poursuivent de manière répétée
- Le backend CUDA de MLX est développé avec le soutien d’Apple, avec pour objectif d’offrir une expérience cohérente entre le développement sur Mac et le déploiement dans de grands environnements de calcul grâce à la mémoire unifiée et à la prise en charge du matériel NVIDIA
Présentation du framework MLX
- MLX est un framework de tableaux pour le machine learning développé par l’équipe de recherche en apprentissage automatique d’Apple
- Il a été conçu pour permettre aux ingénieurs et aux chercheurs d’expérimenter efficacement et de valider rapidement leurs idées
- Sa spécificité est la prise en charge d’Apple Silicon, mais l’ajout d’un backend CUDA vise désormais à étendre ses possibilités d’exécution aux environnements équipés de GPU NVIDIA
Caractéristiques principales
- API familière : l’API Python est proche de NumPy, tandis que les packages de plus haut niveau
mlx.nn et mlx.optimizers proposent une interface similaire à PyTorch
- Des API C++, C et Swift sont également fournies, avec une ergonomie cohérente avec l’API Python
- Transformations de fonctions composables : inclut des fonctions comme la différenciation automatique, la vectorisation automatique et l’optimisation du graphe de calcul
- Évaluation paresseuse : plusieurs opérations peuvent être regroupées et calculées uniquement quand le résultat est réellement nécessaire, pour une utilisation plus efficace des ressources
- Création dynamique de graphes : même si la shape des données d’entrée change, l’exécution reste immédiate sans compilation lente, ce qui facilite le développement et le débogage
- Modèle multi-appareils et de mémoire unifiée :
- Auparavant, seuls le CPU et le GPU Apple étaient pris en charge, mais le backend CUDA vise maintenant la prise en charge des environnements à GPU NVIDIA
- Grâce à une architecture de mémoire unifiée, il devient possible de manipuler le même objet sur tous les appareils pris en charge sans copie mémoire
- Conception concise et extensible : les chercheurs peuvent étendre et améliorer le framework facilement
Différences avec les autres frameworks et inspirations
- Son design s’inspire de NumPy, PyTorch, Jax, ArrayFire, entre autres
- Il met particulièrement en avant le modèle de mémoire unifiée, une interface concise et un environnement d’exécution immédiate/de débogage
Exemples représentatifs et domaines d’utilisation
- Le dépôt MLX Examples contient divers exemples pratiques
- Entraînement de modèles de langage Transformer
- Génération de texte à grande échelle basée sur LLaMA et fine-tuning avec LoRA
- Génération d’images avec Stable Diffusion
- Implémentations de modèles récents, dont la reconnaissance vocale basée sur OpenAI Whisper
Signification de MLX et prise en charge de CUDA
- MLX, qui était un framework centré sur Apple Silicon, étend désormais son potentiel d’usage général dans les environnements à GPU NVIDIA avec l’introduction d’un backend CUDA
- Grâce à la prise en charge récente de CUDA, il pourrait s’imposer comme un framework adapté à la fois à la recherche de pointe et aux usages industriels, sur le matériel Apple comme NVIDIA
3 commentaires
Il suffirait juste de permettre l’utilisation des GPU Nvidia sur macOS… haha.
C’est une bonne nouvelle, haha. J’espère qu’ils ajouteront vite la prise en charge de CUDA pour qu’on puisse aussi faire de l’entraînement à haute vitesse sur Mac~ !
Commentaires sur Hacker News
Guide d’installation
Présentation de zcbenz
Voir la puce correspondante dans le readme du dépôt : MLX GitHub
Je pense que ce serait intéressant de l’étendre à tous les APU UMA, quel que soit le constructeur, mais je me demande si cela ne devrait pas fonctionner différemment avec un GPU discret
En lisant les commentaires de la PR, il semble que CUDA prenne aussi directement en charge une API UMA et gère les copies de manière transparente quand c’est nécessaire
Je me demande si Apple soutient cela en coulisses sans l’afficher officiellement. Il y avait aussi des rumeurs de transfert d’équipe
Autrement dit, cela signifie que le code MLX peut être compilé et exécuté sur du matériel x86 + GeForce, et non l’inverse
J’ai testé moi-même, et seule la version Python 3.12 est publiée sur PyPI
Page PyPI de MLX-CUDA
On voit aussi apparaître récemment des reviews de youtubeurs affirmant que le DGX Spark est moins intéressant en rapport qualité-prix que Strix Halo. L’inconvénient, c’est que ROCm reste encore insuffisant pour l’instant, même si cela semble devoir s’améliorer bientôt. Si CUDA fonctionnait parfaitement sur les appareils Apple, ce serait une option à envisager sérieusement, même si Strix est bon marché et très performant