- MLX es un framework de arreglos para investigadores de aprendizaje automático sobre Apple Silicon, con una experiencia de uso similar a NumPy y PyTorch
- Se está trabajando en agregar un backend de CUDA a MLX
- El objetivo principal es ofrecer soporte para memoria unificada (unified memory) y un aprovechamiento más amplio del hardware de NVIDIA
- Por ahora solo funcionan los ejemplos del tutorial, y la compilación y las pruebas se confirmaron en Ubuntu 22.04 + CUDA 11.6
- Mientras se corrigen los problemas iniciales de rendimiento y los cuellos de botella, continúan de forma iterativa las tareas de optimización y refactorización
- El backend de CUDA de MLX se está desarrollando con el respaldo de Apple, y su objetivo es ofrecer una experiencia consistente al desarrollar en Mac y desplegar en entornos de cómputo de gran escala mediante memoria unificada y soporte para hardware de NVIDIA
Introducción al framework MLX
- MLX es un framework de arreglos para aprendizaje automático desarrollado por el equipo de investigación de machine learning de Apple
- Fue creado para que ingenieros e investigadores puedan experimentar de forma efectiva y validar ideas rápidamente
- Su rasgo distintivo ha sido el soporte para Apple Silicon, pero ahora busca ampliar su alcance para funcionar también en entornos con GPU de NVIDIA mediante la incorporación de un backend de CUDA
Características principales
- API familiar: la API de Python es similar a NumPy, y los paquetes de nivel superior
mlx.nn y mlx.optimizers ofrecen una interfaz parecida a PyTorch
- También ofrece APIs de C++, C y Swift, manteniendo una experiencia de uso consistente con la API de Python
- Transformaciones de funciones componibles: incluye funciones como autodiferenciación, vectorización automática y optimización de grafos de cómputo
- Cálculo diferido: varias operaciones se agrupan y el resultado se calcula solo cuando realmente se necesita, lo que permite un uso más eficiente de los recursos
- Generación de grafos dinámicos: aunque cambie la shape de los datos de entrada, se ejecuta de inmediato sin compilaciones lentas, lo que facilita el desarrollo y la depuración
- Modelo de memoria unificada y multidispositivo:
- Antes solo soportaba CPU y GPU de Apple, pero con el backend de CUDA ahora busca dar soporte también a entornos con GPU de NVIDIA
- Al adoptar una arquitectura de memoria unificada, es posible operar sobre el mismo objeto en todos los dispositivos compatibles sin copiar memoria
- Diseño simple y extensible: permite a los investigadores extender y mejorar el framework con facilidad
Diferencias frente a otros frameworks e inspiración
- Toma inspiración de diseño de NumPy, PyTorch, Jax y ArrayFire, entre otros
- En particular, pone énfasis en el modelo de memoria unificada, una interfaz simple y un entorno de ejecución inmediata/depuración
Ejemplos representativos y áreas de uso
- El repositorio MLX Examples contiene diversos códigos de práctica
- Entrenamiento de modelos de lenguaje Transformer
- Generación de texto a gran escala basada en LLaMA y fine-tuning con LoRA
- Generación de imágenes con Stable Diffusion
- Casos de implementación de modelos recientes, como reconocimiento de voz basado en OpenAI Whisper
El significado de MLX y el soporte para CUDA
- MLX, que era un framework centrado en Apple Silicon, está ampliando su potencial de uso general en entornos con GPU de NVIDIA mediante la adopción de un backend de CUDA
- Con soporte actualizado para CUDA, se perfila como un framework adecuado tanto para investigación de punta como para uso industrial en hardware de Apple y NVIDIA
3 comentarios
si tan solo hicieran posible usar únicamente GPUs de NVIDIA en macOS... je, je.
Es una buena noticia jaja. ¡Ojalá agreguen compatibilidad con CUDA pronto para que también se pueda entrenar a alta velocidad en Mac!
Opiniones en Hacker News
Guía de instalación
Presentación de zcbenz
Ver el punto correspondiente en el readme del repositorio: GitHub de MLX
Creo que sería interesante extenderlo a todos los APU con UMA, sin importar el fabricante, pero me pregunto si en las GPU discretas el enfoque tendría que ser diferente
Leyendo los comentarios del PR, parece que CUDA también soporta directamente la API de UMA y maneja las copias de forma transparente cuando hace falta
Esto me hace preguntarme si Apple está apoyando el proyecto por detrás sin hacerlo oficial. Incluso hubo rumores de que el equipo se iba a mover.
O sea, significa que el código de MLX puede compilarse y ejecutarse en hardware x86 + GeForce, no al revés.
Lo probé directamente y solo la versión para Python 3.12 está publicada en PyPI
Página de MLX-CUDA en PYPI
Últimamente también están saliendo reseñas en YouTube diciendo que DGX Spark ofrece peor relación precio-rendimiento que Strix Halo. El punto débil es que ROCm todavía está verde, aunque parece que mejorará pronto. Si CUDA funcionara perfectamente en equipos Apple, sería una opción para pensar seriamente, por más barato y bueno que sea Strix