24 points par xguru 2023-12-07 | 2 commentaires | Partager sur WhatsApp
  • Un framework de tableaux conçu par l’équipe de recherche en machine learning d’Apple, pensé pour exécuter du machine learning de manière efficace et flexible sur Apple Silicon
  • Il fournit une API Python très proche de NumPy, ainsi qu’une API C++ offrant l’ensemble des fonctionnalités
  • Différences avec NumPy
    • Composable function transformations : MLX propose des transformations de fonctions composables pour la différenciation automatique, la vectorisation automatique et l’optimisation du graphe de calcul
    • Lazy Computation : les calculs de MLX sont paresseux. Les tableaux ne sont matérialisés que lorsque c’est nécessaire
    • Multi-appareils : les opérations peuvent être exécutées sur tous les appareils pris en charge (CPU, GPU, ...)
  • Construction dynamique du graphe : le graphe de calcul de MLX est construit dynamiquement. Modifier la forme des arguments d’une fonction ne ralentit pas la compilation, et le débogage reste simple et intuitif
  • Inspiré par des frameworks comme PyTorch, Jax et ArrayFire
    • La différence la plus notable entre ces frameworks et MLX est le modèle de mémoire unifiée
    • Les tableaux MLX sont stockés en mémoire partagée. Les opérations sur les tableaux MLX peuvent être exécutées sur tous les types d’appareils pris en charge sans copie de données
    • Les types d’appareils actuellement pris en charge sont le CPU et le GPU
  • Inclut divers exemples
    • Entraînement d’un modèle de langage Transformer
    • Génération de texte à grande échelle avec LLaMA et fine-tuning avec LoRA
    • Génération d’images avec Stable Diffusion
    • Reconnaissance vocale avec OpenAI's Whisper

2 commentaires

 
mjhong0708 2023-12-07

Construction dynamique du graphe : le graphe de calcul de MLX est construit dynamiquement. Même si l’on modifie la forme des arguments de fonction, la vitesse de compilation ne ralentit pas, et le débogage reste simple et intuitif.

Ça a vraiment l’air très bien. Je manipule souvent des données dynamiques, donc avec jax c’était toujours compliqué...

 
haebom 2023-12-07

Oh, c’est bien, ça. Je vais l’essayer.