开源项目
ml-explore/mlx avatar
ml-explore/mlx

MLX:为 Apple 芯片设计的数组框架,统一内存是它的胜负手

MLX:Apple 芯片的阵列框架。可组合函数转换:MLX 支持用于自动微分、自动向量化和计算图优化的可组合函数转换。

28,429 个 Star2,255 个 ForkC++MIT

秒懂

它是什么?
MLX 是苹果机器学习研究团队发布的数组框架,面向 Apple 芯片,提供 NumPy 式 API 与可组合的函数变换。它的统一内存模型与 PyTorch、JAX 等框架有本质区别,本文基于仓库与文档内容分析其机制、适用场景与局限。
适合谁用?
MLX 适合在 Apple 芯片上做研究原型开发的机器学习研究者,尤其是那些希望快速迭代新想法、又不想被 CUDA 生态绑定的团队。它不适合需要部署到 NVIDIA GPU 或通用 Linux 服务器集群的生产环境,因为 Linux 后端目前只有 CPU 版,CUDA 支持虽已出现但仍属新通道。
能商用吗?
可以。MIT 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
还在维护吗?
在维护。仓库在最近一天内有新的提交。
用什么语言写的?
主要是 C++(依据 GitHub 的语言统计)。

以上回答依据项目的 GitHub 数据(最近同步于 2026年9月15日)和我们的分析,不构成法律意见。

开源项目深度解析

为什么需要 MLX:Apple 芯片上的数组计算空白

机器学习研究者过去在 Apple 芯片上训练模型,通常依赖 PyTorch 或 TensorFlow,但这些框架的 GPU 加速在 macOS 上始终是二等公民。Metal 后端要么缺失,要么性能远逊于 NVIDIA 平台。MLX 的出现填补了这个空白。它由苹果机器学习研究团队开发,定位是面向 Apple 芯片的数组框架,Python API 风格接近 NumPy,而 mlx.nn 和 mlx.optimizers 则模仿 PyTorch。换句话说,它试图让研究者在自己手里的 MacBook 上就能完成从原型到训练的全过程,而不用把工作流迁移到远程 Linux 服务器。

统一内存:MLX 与 PyTorch、JAX 的分水岭

MLX 最核心的设计差异是统一内存模型。文档明确说明,数组在 MLX 中存放在共享内存里,操作可以在 CPU 或 GPU 上执行,但不需要在设备之间传输数据。这与其他框架形成鲜明对比。PyTorch 中,张量在 CPU 和 GPU 上各自有独立内存,转移数据需要显式调用 .to() 或 .cuda()。JAX 虽然也强调设备无关,但它的 XLA 编译器会在后台插入数据传输。MLX 的做法是让所有设备共享同一块物理内存,所以从 CPU 跳到 GPU 只是调度问题,不是拷贝问题。这带来的直接好处是,研究者写代码时不需要关心数据在哪个设备上,代码更简洁,调试也更直观。但代价是,你失去了对显存使用的精细控制,大模型的内存占用可能比预期更高,因为共享内存的分配策略与专用显存不同。

惰性计算与动态图:延迟物化,但图是动态的

MLX 采用惰性计算,数组不会立即物化,只有当你真正需要结果时才会触发计算。这听起来像 JAX 的 JIT 编译,但 MLX 的动态图构建方式与 JAX 完全不同。JAX 依赖函数式变换和静态图,一旦编译,函数形状改变就会触发重新编译,这在某些场景下会拖慢迭代。MLX 的文档强调,它的计算图是动态构建的,改变函数参数的形状不会导致慢速编译。这意味着你可以像写普通 Python 一样写模型,随时改变输入大小,调试时可以用 print 直接查看中间数组的值,而不需要像在 JAX 中那样担心重新编译的开销。这是一个对研究者友好的设计,但也是性能上的权衡。动态图通常比静态图更难做全局优化,MLX 的图优化能力可能不如 JAX 的 XLA 那样激进。

可组合的函数变换:自动微分、向量化和图优化

MLX 支持可组合的函数变换,包括自动微分、自动向量化和计算图优化。这意味着你可以把 grad 和 vmap 这样的变换叠加在同一个函数上,而不用修改函数本身。这一点直接借鉴了 JAX 的设计哲学。在 JAX 中,grad 和 jit 可以任意组合,MLX 也承诺类似的组合性。对于研究者来说,这意味着你可以先写一个简单的标量函数,然后用 vmap 自动向量化,再用 grad 求梯度,最后用图优化提升执行效率。这种变换的代码风格与 PyTorch 的 autograd 不同,后者需要你显式管理损失函数和优化器的交互。MLX 的变换更像函数式编程,你定义纯函数,然后通过变换来扩展它的能力。但需要注意,文档没有详细说明这些变换在动态图上的实现细节,因此组合变换的性能开销在复杂模型中是否可控,需要实际验证。

安装与启动:pip 一条命令,但平台限制明确

安装 MLX 非常简单。在 macOS 上,直接运行 pip install mlx 即可。如果是 Linux,则有两种选择:pip install mlx[cuda] 安装 CUDA 后端,pip install mlx[cpu] 安装纯 CPU 版本。这个安装方式说明 MLX 已经不再局限于 Apple 芯片,Linux 上的 CUDA 支持已经出现,但需要注意,仓库的主语言是 C++,Python 只是前端接口。如果你需要从源码构建 C++ 或 Python API,文档提供了详细说明,但这不是普通用户的首选路径。快速入门指南在文档站上,但仓库 README 没有给出具体的代码示例,所以实际使用前,你需要跳转去阅读 quick start 页面。安装的便利性是一个加分项,但平台限制依然明显:macOS 是主要目标,Linux 的 CUDA 支持是后加的,其性能是否与原生 PyTorch 相当,文档没有给出任何基准数据。

生态与示例:从 LLaMA 到 Whisper,但深度有限

MLX 有一个独立的示例仓库 mlx-examples,里面包含 Transformer 语言模型训练、LLaMA 文本生成、LoRA 微调、Stable Diffusion 图像生成和 OpenAI Whisper 语音识别。这些示例覆盖了当前机器学习的主要应用场景,说明 MLX 已经具备跑通主流模型的能力。但这并不等于生态成熟。PyTorch 有数以万计的预训练模型和第三方库,MLX 目前只有官方示例,社区贡献的模型和工具还很少。如果你要使用某个特定的模型架构,很可能需要自己用 mlx.nn 从零实现,或者等待社区移植。对于研究者来说,这意味着你可以用 MLX 做研究原型,但如果你的目标是快速复现某个最新论文,MLX 的可用资源可能不够。

维护与许可证:MIT 许可,但版本迭代快

MLX 采用 MIT 许可证,这是一个宽松的许可证,允许商用、修改和再分发,只要保留版权声明。仓库的最近发布记录显示,v0.32.2 在 2026 年 8 月 25 日发布,距离上一个版本 v0.32.1 仅一周,而 v0.32.0 则在七月初。这种高频发布说明项目处于活跃开发状态,但同时也意味着 API 可能不稳定。对于采用者来说,你需要关注每个版本的变更日志,因为小版本之间的行为变化可能影响你的代码。此外,MLX 的开发由苹果机器学习研究团队主导,贡献者列表在 ACKNOWLEDGMENTS.md 中,但文档没有提供长期支持承诺。如果你在生产环境使用,需要自己承担升级和兼容性维护的成本。

编辑结论

MLX 适合在 Apple 芯片上做研究原型开发的机器学习研究者,尤其是那些希望快速迭代新想法、又不想被 CUDA 生态绑定的团队。它不适合需要部署到 NVIDIA GPU 或通用 Linux 服务器集群的生产环境,因为 Linux 后端目前只有 CPU 版,CUDA 支持虽已出现但仍属新通道。在采用前,应先验证你的核心模型能否用 mlx.nn 和 mlx.optimizers 重写,并检查依赖的第三方算子是否已在 MLX 中实现。此外,统一内存模型意味着你无法像在 PyTorch 中那样手动控制显存,因此需要测试大模型是否会在内存压力下崩溃。最后,确认你的 macOS 版本和 Python 环境满足 pip 安装要求,如果要从源码构建 C++ 接口,则需准备完整的编译工具链。MLX 的价值在于它把数组计算与 Apple 硬件的内存架构深度耦合,这不是一个可以随意迁移到其他平台的框架,它的边界就是 Apple 芯片本身。

官方来源

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
社区笔记

社区笔记