- MLX là một framework mảng dành cho các nhà nghiên cứu học máy trên nền Apple Silicon, mang lại trải nghiệm sử dụng tương tự NumPy và PyTorch
- Hiện đang có quá trình bổ sung backend CUDA cho MLX
- Mục tiêu chính là hỗ trợ bộ nhớ hợp nhất (unified memory) và khai thác rộng rãi phần cứng NVIDIA
- Hiện tại mới chỉ chạy được các ví dụ trong hướng dẫn, và việc build cùng test đã được xác nhận trên môi trường Ubuntu 22.04 + CUDA 11.6
- Trong quá trình cải thiện các vấn đề hiệu năng và điểm nghẽn ban đầu, việc tối ưu hóa và tái cấu trúc vẫn đang được lặp lại liên tục
- Backend CUDA của MLX đang được thực hiện với sự tài trợ của Apple, với mục tiêu mang lại trải nghiệm nhất quán khi phát triển trên Mac và triển khai lên các môi trường tính toán quy mô lớn thông qua hỗ trợ bộ nhớ hợp nhất và phần cứng NVIDIA
Giới thiệu framework MLX
- MLX là framework mảng cho học máy do nhóm nghiên cứu machine learning của Apple phát triển
- Framework này được xây dựng để giúp kỹ sư và nhà nghiên cứu thử nghiệm hiệu quả và nhanh chóng kiểm chứng ý tưởng
- Dù nổi bật với khả năng hỗ trợ Apple Silicon, giờ đây MLX đang muốn mở rộng khả năng hoạt động sang môi trường GPU NVIDIA thông qua việc bổ sung backend CUDA
Các đặc điểm chính
- API quen thuộc: API Python mang phong cách NumPy, còn các gói cấp cao như
mlx.nn, mlx.optimizers cung cấp giao diện tương tự PyTorch
- Đồng thời cũng cung cấp API C++, C, Swift, bảo đảm trải nghiệm sử dụng nhất quán với API Python
- Biến đổi hàm có thể kết hợp: bao gồm các tính năng như vi phân tự động, vector hóa tự động và tối ưu hóa đồ thị tính toán
- Tính toán trì hoãn: nhiều phép toán được gom lại và chỉ tính kết quả khi thực sự cần, giúp sử dụng tài nguyên hiệu quả
- Tạo đồ thị động: ngay cả khi shape của dữ liệu đầu vào thay đổi, vẫn có thể thực thi tức thì mà không cần biên dịch chậm, thuận tiện cho phát triển và gỡ lỗi
- Mô hình đa thiết bị và bộ nhớ hợp nhất:
- Trước đây chỉ hỗ trợ CPU và Apple GPU, nhưng hiện đang thúc đẩy hỗ trợ môi trường NVIDIA GPU với backend CUDA
- Với kiến trúc bộ nhớ hợp nhất, có thể thao tác cùng một đối tượng trên mọi thiết bị được hỗ trợ mà không cần sao chép bộ nhớ
- Thiết kế gọn nhẹ và có thể mở rộng: giúp các nhà nghiên cứu dễ dàng mở rộng và cải tiến framework
Khác biệt với các framework khác và nguồn cảm hứng
- Nhận cảm hứng thiết kế từ NumPy, PyTorch, Jax, ArrayFire
- Điểm nhấn đặc trưng là mô hình bộ nhớ hợp nhất, giao diện gọn nhẹ, cùng môi trường thực thi/gỡ lỗi tức thì
Ví dụ tiêu biểu và lĩnh vực ứng dụng
- Kho MLX Examples có nhiều đoạn mã thực hành đa dạng
- Huấn luyện mô hình ngôn ngữ Transformer
- Sinh văn bản quy mô lớn dựa trên LLaMA và tinh chỉnh bằng LoRA
- Tạo ảnh với Stable Diffusion
- Bao gồm cả các ví dụ triển khai mô hình mới như nhận dạng giọng nói dựa trên OpenAI Whisper
Ý nghĩa của MLX và hỗ trợ CUDA
- MLX vốn là một framework tập trung vào Apple Silicon, nhưng đang mở rộng khả năng được sử dụng phổ quát trong môi trường NVIDIA GPU nhờ việc đưa vào backend CUDA
- Với hỗ trợ CUDA mới, MLX được kỳ vọng sẽ định vị mình như một framework phù hợp cho cả nghiên cứu mới nhất lẫn ứng dụng công nghiệp, trên cả phần cứng của Apple và NVIDIA
3 bình luận
Chỉ cần cho phép dùng GPU NVIDIA trên macOS là được rồi mà... ha ha.
Nghe hay đấy haha, mong sớm hỗ trợ CUDA để có thể huấn luyện tốc độ cao trên Mac nữa~!
Ý kiến Hacker News
Hướng dẫn cài đặt
Giới thiệu về zcbenz
Hãy xem gạch đầu dòng trong readme của repository: MLX GitHub
Tôi nghĩ sẽ rất thú vị nếu mở rộng nó ra mọi APU UMA, bất kể nhà sản xuất nào, nhưng tôi cũng thắc mắc liệu với GPU rời thì cách làm có phải khác đi không
Đọc các bình luận trong PR thì có vẻ CUDA cũng trực tiếp hỗ trợ API UMA và xử lý việc sao chép một cách minh bạch khi cần
Điều này khiến tôi tự hỏi liệu Apple có đang hậu thuẫn phía sau mà không công khai hay không. Cũng từng có tin đồn là cả nhóm sẽ chuyển đi
Nghĩa là mã MLX có thể được build và chạy trên phần cứng x86 + GeForce, chứ không phải chiều ngược lại
Tôi đã tự thử và thấy chỉ có bản Python 3.12 được đưa lên PyPI
Trang PYPI của MLX-CUDA
Gần đây cũng đã có các video review của YouTuber nói rằng DGX Spark kém hiệu quả về giá so với Strix Halo. Điểm yếu là ROCm vẫn còn khá kém, dù có vẻ sẽ sớm tốt hơn. Nếu CUDA chạy hoàn hảo trên thiết bị Apple, thì dù Strix có rẻ và tốt đến đâu, đây vẫn sẽ là một lựa chọn đáng để cân nhắc nghiêm túc