- MLX é um framework de arrays para pesquisadores de aprendizado de máquina com Apple Silicon, oferecendo uma usabilidade semelhante à do NumPy e do PyTorch
- Está em andamento o trabalho para adicionar um backend CUDA ao MLX
- O objetivo principal é oferecer suporte a memória unificada (unified memory) e ampliar o uso em hardware NVIDIA
- No momento, apenas os exemplos dos tutoriais funcionam, e o build e os testes foram verificados em um ambiente Ubuntu 22.04 + CUDA 11.6
- O processo de otimização e refatoração está sendo repetido continuamente à medida que problemas iniciais de desempenho e gargalos são melhorados
- O backend CUDA do MLX está sendo desenvolvido com apoio da Apple, e o objetivo é oferecer uma experiência consistente ao desenvolver no Mac e implantar em grandes ambientes de computação, por meio de memória unificada e suporte a hardware NVIDIA
Introdução ao framework MLX
- MLX é um framework de arrays para aprendizado de máquina desenvolvido pela equipe de pesquisa em machine learning da Apple
- Foi criado para que engenheiros e pesquisadores possam experimentar de forma eficaz e validar ideias rapidamente
- Seu diferencial é o suporte ao Apple Silicon, mas agora, com a adição de um backend CUDA, busca expandir sua possibilidade de funcionamento também em ambientes com GPU da NVIDIA
Principais características
- API familiar: a API em Python é semelhante ao NumPy, e os pacotes de nível superior
mlx.nn e mlx.optimizers oferecem uma interface parecida com a do PyTorch
- APIs em C++, C e Swift também são fornecidas, garantindo usabilidade consistente com a API em Python
- Transformações de função componíveis: inclui recursos como diferenciação automática, vetorização automática e otimização de grafos computacionais
- Avaliação preguiçosa: estrutura que agrupa várias operações e calcula o resultado apenas quando necessário, permitindo uso mais eficiente de recursos
- Criação de grafo dinâmico: mesmo que o shape dos dados de entrada mude, a execução é imediata sem compilação lenta, o que facilita o desenvolvimento e a depuração
- Modelo multi-device e de memória unificada:
- Antes, havia suporte apenas a CPU e GPU da Apple, mas com o backend CUDA está em andamento o suporte a ambientes com GPU da NVIDIA
- Com a adoção de uma arquitetura de memória unificada, é possível operar sobre o mesmo objeto em todos os dispositivos compatíveis sem cópia de memória
- Design simples e extensível: permite que pesquisadores expandam e aprimorem o framework com facilidade
Diferenças em relação a outros frameworks e inspirações
- Recebe influência de design de NumPy, PyTorch, Jax, ArrayFire e outros
- Destaca especialmente o modelo de memória unificada, a interface simples e o ambiente de execução/depuração imediata
Exemplos representativos e áreas de uso
- O repositório MLX Examples contém diversos códigos práticos
- Treinamento de modelos de linguagem Transformer
- Geração de texto em larga escala com base em LLaMA e fine-tuning com LoRA
- Geração de imagens com Stable Diffusion
- Implementações de modelos recentes, como reconhecimento de fala baseado em OpenAI Whisper
O significado do MLX e o suporte a CUDA
- O MLX, que era um framework voltado ao Apple Silicon, está ampliando sua possibilidade de uso geral também em ambientes com GPU da NVIDIA com a introdução do backend CUDA
- Com suporte às versões mais recentes do CUDA, a perspectiva é que ele se consolide como um framework adequado tanto para pesquisa de ponta quanto para uso industrial, em hardware da Apple e da NVIDIA
3 comentários
Era só permitir usar GPUs da NVIDIA no macOS... aff, aff.
Boa notícia, hehe. Espero que adicionem suporte a CUDA logo, para que também seja possível fazer treinamento em alta velocidade no Mac~!
Comentários do Hacker News
Instruções de instalação
Sobre zcbenz
Veja o bullet no readme do repositório: MLX no GitHub
Parece interessante expandir isso para todas as APUs com UMA, independentemente do fabricante, mas fica a dúvida de como isso teria de funcionar de outra forma em GPUs discretas
Lendo os comentários do PR, parece que o CUDA também dá suporte direto à API de UMA e faz as cópias de forma transparente quando necessário
Isso levanta a dúvida se a Apple está apoiando por trás dos panos sem se expor oficialmente. Também houve rumores de que a equipe estaria migrando
Ou seja, isso significa que o código do MLX pode ser compilado e executado em hardware x86 + GeForce, e não o contrário
Testei diretamente e, no PyPI, só está publicada a versão para Python 3.12
Página do MLX-CUDA no PyPI
Ultimamente também estão saindo reviews no YouTube dizendo que o DGX Spark tem pior custo-benefício do que o Strix Halo. A desvantagem é que o ROCm ainda é fraco, embora pareça que isso vá melhorar em breve. Se CUDA funcionasse perfeitamente em dispositivos Apple, seria uma opção a considerar seriamente, por mais barato e bom que o Strix seja