7 điểm bởi GN⁺ 2025-07-15 | 3 bình luận | Chia sẻ qua WhatsApp
  • 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

  • MLXframework 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

 
gosarinamu 2025-07-16

Chỉ cần cho phép dùng GPU NVIDIA trên macOS là được rồi mà... ha ha.

 
yangeok 2025-07-16

Nghe hay đấy haha, mong sớm hỗ trợ CUDA để có thể huấn luyện tốc độ cao trên Mac nữa~!

 
GN⁺ 2025-07-15
Ý kiến Hacker News
  • Muốn xác nhận xem mình hiểu đúng không: 1, các chương trình được xây dựng bằng MLX có thể chạy trên chip hỗ trợ CUDA. Nhưng 2, chương trình CUDA thì không thể chạy trên Apple Silicon. Mình muốn hỏi có đúng là lý do 2 không làm được là vì sẽ vi phạm bản quyền, đặc biệt là hàng rào gia nhập nổi tiếng của Nvidia, hay không
    • 1 là đúng. Điều này cho phép lập trình viên phát triển trên thiết bị Apple cấu hình tương đối thấp hơn của mình, bao gồm cả UMA, rồi triển khai mã hoàn chỉnh lên các hệ thống Nvidia cấu hình tương đối cao hơn. Điều này hữu ích vì nhiều lý do
    • 2 không phải là vi phạm bản quyền. Việc tái hiện thực API là có thể
    • Với 2 thì có lẽ điều đó thực sự không đúng. HIP của AMD cũng đã từ bỏ OpenCL vào khoảng 2017~2018 và làm cùng việc như vậy
    • Tôi muốn phương án 3. Sẽ thật tuyệt nếu có thể kết nối GPU NVIDIA với Apple Silicon để dùng CUDA. Tôi đang tưởng tượng việc dùng cùng lúc Apple Silicon, bộ nhớ hợp nhất, GPU và CUDA với PyTorch, JAX hoặc TensorFlow, nhưng tôi vẫn chưa thực sự trải nghiệm MLX đúng nghĩa
    • Lý do 2 không làm được chủ yếu là vì khó hơn rất nhiều
  • Nếu bạn nghĩ rằng "Ủa, nền tảng Apple đâu có hỗ trợ CUDA chính thức?" thì cũng cần lưu ý rằng bộ bản vá này còn hỗ trợ cả "nền tảng Linux với CUDA 12 và SM 7.0 (Volta) trở lên"
    Hướng dẫn cài đặt
  • Dự án này do zcbenz, người nổi tiếng là tác giả của Electron và nhiều thứ khác, dẫn dắt
    Giới thiệu về zcbenz
  • Một trong những đặc điểm chính của MLX là dùng kiến trúc bộ nhớ hợp nhất (UMA), nên có thắc mắc là việc này hoạt động như thế nào
    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
    • Theo kinh nghiệm của tôi, do thiếu tính năng prefetch nên có vấn đề nghẽn bộ nhớ rất nặng vì phải chờ sao chép. Nếu toàn bộ tập dữ liệu vừa trong VRAM và prefetch thủ công thì ổn, nhưng trong ứng dụng của tôi là huấn luyện ML, mức suy giảm hiệu năng quá lớn nên tôi đã chuyển hẳn sang tự xử lý tải dạng streaming
  • Hơi lạc đề một chút, nhưng có vẻ khá nhiều người làm MLX không chính thức thuộc Apple. Ví dụ, xem Twitter của prince_canuma
    Đ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
  • Trong phần mô tả PR có ghi là "ongoing effort" để "thêm backend CUDA"
    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
  • Như câu nói "viết và thử mã trên Mac rồi triển khai lên siêu máy tính sẽ là một trải nghiệm phát triển tốt", nên giờ có thắc mắc là liệu MLX đã dùng được trên Linux chưa
    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
  • Không biết điều này có bị ảnh hưởng bởi Strix Halo hay không. Tôi dư ngân sách máy làm việc nên đã mua EVO-X2, và nó ngang hoặc hơn các máy znver5 EPYC tầm trung. Nó vượt xa phần lớn instance EC2 hay GCE, thậm chí cả về NVMe. Giá phần cứng này là 1800
    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
    • Strix Halo chính là AMD Ryzen AI Max+ 395. Nó có trong Framework Desktop và nhiều mini PC khác. Chip này có băng thông bộ nhớ 200GB/s, rất tốt với nền tảng x86 thông thường, nhưng vẫn kém rất xa GPU Nvidia, ví dụ 5090 là 1792GB/s, hay Apple M3 Ultra là 800GB/s. Hiệu năng trên giá thành rất tốt, nhưng với các tác vụ ngốn bộ nhớ như LLM, tôi cảm thấy nó mới chỉ vừa chạm ngưỡng tối thiểu chấp nhận được
    • Nhìn vào mô tả PR thì có thể thấy rõ mục tiêu là huấn luyện trên các cụm máy cloud
    • Người ta đã nói suốt 10 năm rằng năng lực tính toán mạng nơ-ron của GPU AMD sắp trở thành đối thủ cạnh tranh với Nvidia, nhưng đến giờ vẫn chưa thành hiện thực
    • Tôi tò mò không biết so với Mac mini M4 thì thế nào
  • Tôi rất ấn tượng với các model MLX. Có thể mở model cục bộ cho cả nhà dùng mà không phải lo nguy cơ cháy nổ như với máy Nvidia. Tôi hy vọng Apple Silicon sẽ trở thành đối thủ cạnh tranh nghiêm túc với phe chip Nvidia. Cũng tự hỏi liệu hỗ trợ CUDA có phải là một chiến lược kiểu embrace, extend, extinguish (EEE) hay không
  • Apple có kế hoạch trong tương lai xây dựng các trung tâm dữ liệu dựa trên chip dòng M để dùng cho phát triển ứng dụng, kiểm thử và lưu trữ các dịch vụ bên ngoài