Loading...

文章背景图

MLX:Apple 芯片机器学习框架部署指南

2026-10-27
0
- 字
- 分钟
|

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 仓库中提供了覆盖主流任务的示例:

使用时建议先阅读快速开始指南,了解数组创建、设备切换、自动微分的基本写法;然后根据自己的场景从 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 服务器上跑起来,方便团队协作。

九、跳转链接

评论交流

文章目录