MLX 是由苹果机器学习研究团队(Apple Machine Learning Research)推出、面向 Apple 芯片(Apple Silicon)设计的机器学习数组计算框架,GitHub Star 数约 2.9 万,采用 MIT 协议,主要编程语言为 C++。MLX 的定位是「由机器学习研究者为机器学习研究者设计」:框架力求用户友好,同时保持训练与部署模型的效率,框架本身的设计理念也刻意保持简洁,官方希望让研究者能够方便地扩展和改进 MLX,从而快速探索新的想法。也就是说,MLX 不是又一个「把别人的框架移植到 Mac」的项目,而是苹果研究团队针对 Apple 芯片重新设计的一套原生机器学习计算栈,目标用户是在 Mac 上做模型训练、推理与研究的开发者。本文基于官方 README 完整整理,从项目定位、核心特性、安装方式、示例生态到引用规范进行全面说明,帮助在 Mac 上做机器学习研究或部署的开发者快速上手。无论你是刚拿到 Apple Silicon Mac 的新手,还是想把现有 NumPy/PyTorch 项目迁移到统一内存架构上,都可以按本文的步骤完成第一次运行,并从 examples 仓库找到对应场景的示例代码。
一、项目官方信息
| 项目 | 信息 |
|---|---|
| GitHub 仓库 | ml-explore/mlx |
| 官方文档 | ml-explore.github.io/mlx |
| 示例仓库 | ml-explore/mlx-examples |
| Star 数 | 约 29,000 |
| 开源协议 | MIT |
| PyPI 包 | mlx |
| 快速上手 | Quickstart 指南 |
| 主要开发者 | Awni Hannun、Jagrit Digani、Angelos Katharopoulos、Ronan Collobert |
二、官方图片
项目 README 以文字介绍为主,顶部配有 CircleCI 持续集成构建徽章,展示了主分支的自动化测试状态;本文封面采用官方仓库图。
三、设计理念与核心特性
MLX 的设计灵感来源于 NumPy、PyTorch、Jax 与 ArrayFire 等成熟框架:它吸收了 NumPy 的数组易用性、PyTorch 的动态图体验、Jax 的函数式变换思路,同时针对 Apple 芯片的硬件特点做了重新设计。与大多数面向数据中心 GPU 设计的框架不同,MLX 从第一天起就把 Apple Silicon 的内存架构作为一等公民,因此它不追求支持所有硬件,而是把「在 Mac 上高效、顺手地做机器学习」这一件事做到极致。MLX 的关键特性包括以下六点:
1. 熟悉的 API。 MLX 提供与 NumPy 高度一致的 Python API,有 NumPy 经验的开发者几乎可以零学习成本上手;同时还提供功能完整的 C++、C 与 Swift API,均与 Python API 保持一致,方便在不同语言环境中调用同一套计算内核。在此之上,mlx.nn 与 mlx.optimizers 等高层包的设计贴近 PyTorch,用来构建更复杂的模型时非常顺手——熟悉 nn.Module 式写法的人可以很快迁移。
2. 可组合的函数变换。 MLX 支持可组合的函数变换,覆盖自动微分、自动向量化与计算图优化。这意味着研究者可以像搭积木一样把多种变换叠加到同一个函数上,例如先对函数做向量化再做自动微分,而不需要为每种变换单独写一套代码,这对研究新的训练方法非常有价值。
3. 延迟计算。 MLX 中的计算是惰性的:数组只有在真正需要的时候才会被物化(materialize),框架可以先把整个计算图规划好再统一执行,从而优化内存占用与调度顺序,避免中间结果过早占用显存。这一点对研究阶段特别友好——你可以先把一连串运算写好,框架在最后输出时才真正分配与执行,中间过程不会产生大量冗余的临时数组。
4. 动态图构建。 计算图在运行时动态构建,改变函数参数的形状不会触发缓慢的编译过程,调试简单直观。这与需要提前编译静态图的框架形成鲜明对比,非常适合研究阶段频繁修改模型结构、反复试错的工作方式;出错时也可以直接用常规的调试手段查看中间数组的值,不需要在编译与运行之间来回切换。
5. 多设备。 算子可以运行在任何受支持的设备上,目前包括 CPU 与 GPU。开发者可以在代码中显式指定某个数组或某段计算跑在 CPU 还是 GPU 上,也可以依赖框架的默认调度策略。
6. 统一内存。 这是 MLX 与其他框架最显著的区别:MLX 采用 Apple 芯片的统一内存模型,数组直接驻留在共享内存中,对 MLX 数组的运算可以在任意受支持的设备类型上执行,无需在 CPU 与 GPU 之间拷贝数据。在传统 GPU 框架中,CPU 内存与 GPU 显存之间的数据拷贝往往是性能瓶颈;而 Apple Silicon 把内存统一起来,MLX 直接利用这一架构特性,从根本上省去了拷贝开销。这也是为什么同样的模型在 Mac 上推理时,内存利用率与响应速度往往超出预期。
除了这六大特性,MLX 在工程上还提供了 Python、C++、C、Swift 四种 API,覆盖了从研究脚本到系统集成、再到苹果生态原生应用的不同调用场景;高层包 mlx.nn 提供常见的神经网络层与模型组件,mlx.optimizers 提供常用优化器,研究者可以像搭积木一样组合这些组件快速实验。
四、环境要求与安装
MLX 已发布在 PyPI,安装方式按操作系统与后端区分:
macOS(Apple Silicon,标准用法):
pip install mlx
Linux 安装 CUDA 后端:
pip install mlx[cuda]
Linux 仅 CPU 包:
pip install mlx[cpu]
也就是说,在 Mac 上用一条 pip install mlx 即可获得完整的 GPU(Metal)加速能力;在 Linux 服务器上则可以根据是否有 NVIDIA 显卡选择 CUDA 后端或纯 CPU 包。对大多数个人用户来说,安装完成后无需额外配置驱动或编译,直接在 Python 中 import mlx 即可开始使用。如需从源码构建 C++ 与 Python API,或了解更多编译选项,请查阅安装文档。
五、使用方法与示例
官方在 mlx-examples 仓库中提供了覆盖主流任务的示例:
- Transformer 语言模型训练,适合学习如何用 MLX 从零搭建并训练一个语言模型;
- 基于 LLaMA 的大规模文本生成,以及使用 LoRA 进行参数高效微调;
- 基于 Stable Diffusion 的图像生成;
- 基于 OpenAI Whisper 的语音识别。
使用时建议先阅读快速开始指南,了解数组创建、设备切换、自动微分的基本写法;然后根据自己的场景从 examples 仓库挑选对应示例起步——做大语言模型就从 LLaMA 示例开始,做图像生成就从 Stable Diffusion 示例开始,做语音就从 Whisper 示例开始。由于 API 设计贴近 NumPy 与 PyTorch,把现有 NumPy/PyTorch 代码迁移到 MLX 通常只需要改动很少的部分;再加上统一内存的优势,在 Mac 笔记本上跑大模型推理往往比传统方案更省资源。
四个示例分别对应了 MLX 的典型用法:transformer_lm 展示如何从零搭建并训练一个小型 Transformer,适合理解 MLX 的训练循环写法;LLaMA 示例展示如何加载并运行已发布的大语言模型权重做文本生成;LoRA 示例展示如何用极低的参数量对大模型做微调,这也是当前个人在 Mac 上定制大模型最常用的方式;Stable Diffusion 示例展示扩散模型的推理;Whisper 示例展示语音识别模型的推理。开发者可以按自己的需求选择一个示例跑通后再按需改造。
对研究者来说,MLX 的价值在于「改起来快」:动态图意味着不需要为每次形状改动重新编译,可组合的函数变换意味着可以快速试验新的微分、向量化或图优化组合,简洁的底层设计则意味着想自己改框架、加自定义算子时门槛较低。对普通开发者来说,MLX 的价值在于「在 Mac 上就能跑」:不需要额外购置独立显卡,笔记本统一内存即可承载中等规模的模型推理与微调。无论你是想在 MacBook 上体验大模型推理、做 LoRA 微调,还是想研究新的训练算子,MLX 都是一个值得尝试的原生选择。
六、参与贡献
贡献者请先阅读贡献指南,了解从源码构建与运行测试的方法见文档。由于 MLX 是一个概念简洁、持续演进的框架,社区贡献既包括核心 C++ 内核改进,也包括 examples 仓库中的新示例、文档完善与多语言 API 的扩展。官方感谢所有贡献者,如果你为 MLX 做出了贡献并希望被鸣谢,可以在 Pull Request 中把自己的名字加入鸣谢列表。
七、引用 MLX
MLX 软件套件最初由 Awni Hannun、Jagrit Digani、Angelos Katharopoulos 与 Ronan Collobert 四人同等贡献开发。这四位都是苹果机器学习研究团队的核心成员,框架从立项起就强调「研究驱动」。如果你的研究中使用了 MLX 并希望引用,可使用以下 BibTeX 条目:
@software{mlx2023,
author = {Awni Hannun and Jagrit Digani and Angelos Katharopoulos and Ronan Collobert},
title = {{MLX}: Efficient and flexible machine learning on Apple silicon},
url = {https://github.com/ml-explore},
version = {0.0},
year = {2023},
}
八、常见问题(FAQ)
Q:MLX 只能在 Mac 上用吗?
A:MLX 最初是为 Apple Silicon 的统一内存架构设计的,macOS 上通过 pip install mlx 直接安装并自动使用 Metal GPU;同时官方也提供了 Linux 的 CUDA 后端(pip install mlx[cuda])与纯 CPU 包(pip install mlx[cpu]),方便在其他平台上开发与测试代码。
Q:MLX 和 PyTorch 是什么关系? A:MLX 是独立的框架,不是 PyTorch 的封装。它的 Python API 贴近 NumPy、高层模块贴近 PyTorch,便于迁移,但底层是为 Apple 芯片统一内存重新设计的;「无需在 CPU/GPU 间拷贝数据」这一设计选择本身就是与传统框架最大的不同。
Q:MLX 能用来做什么? A:从示例覆盖范围看,可以训练 Transformer 语言模型、跑 LLaMA 等大模型的文本生成与 LoRA 微调、用 Stable Diffusion 生成图像、用 Whisper 做语音识别,基本覆盖了当前主流的机器学习任务。
Q:为什么 MLX 强调「统一内存」? A:在传统 GPU 框架中,数据需要在 CPU 内存与 GPU 显存之间来回拷贝,这是常见的性能瓶颈;Apple Silicon 采用统一内存架构,MLX 直接利用这一点,让数组在共享内存中被 CPU/GPU 共同访问,从而省去拷贝开销,这也是 Mac 上跑大模型推理效率高的根本原因。
Q:我熟悉 NumPy,迁移成本高吗?
A:MLX 的 Python API 刻意贴近 NumPy,数组创建、切片、逐元素运算等用法几乎一致;mlx.nn 与 mlx.optimizers 又贴近 PyTorch,所以熟悉这两个生态的开发者迁移成本很低,主要需要适应的是惰性计算与设备切换的写法。
Q:MLX 和 Apple 其他机器学习框架是什么关系? A:MLX 是苹果机器学习研究团队在 GitHub 上开源的独立框架,与 Core ML 等面向部署的苹果官方技术栈互补:MLX 专注于研究阶段的训练与实验,利用 Apple Silicon 硬件本身做计算;开发者可以先在 MLX 中训练和验证模型,再按需转成适合端侧部署的格式。
Q:如何从源码构建 MLX? A:官方文档的安装页面同时说明了 C++ 与 Python API 的源码构建方式,以及运行测试的步骤;想贡献内核或调试框架本身的开发者可以从这里入手。
Q:MLX 适合生产部署还是只适合研究? A:MLX 的定位首先是研究者友好,但由于它在 Apple 芯片上效率出色,已经被广泛用于在 Mac 上做模型推理与微调,包括大模型文本生成、图像生成与语音识别等场景。研究验证过的模型可以直接在同一台机器上部署,不需要在框架之间迁移。
Q:MLX 的 Linux 后端和 macOS 版本有什么区别? A:macOS 版本利用 Apple Silicon 的 Metal 与统一内存做原生加速;Linux 的 CUDA 后端与纯 CPU 包主要面向在服务器上开发、测试或跨平台运行代码的场景,让同一份 MLX 代码既能在 Mac 上开发,也能在 Linux 服务器上跑起来,方便团队协作。
九、跳转链接
- 官方仓库:github.com/ml-explore/mlx
- 官方文档:ml-explore.github.io/mlx
- 示例集合:ml-explore/mlx-examples
- PyPI:pypi.org/project/mlx
- 快速上手:Quickstart
- C 语言 API:ml-explore/mlx-c
- Swift API:ml-explore/mlx-swift