技术深度解析
MLX 的架构看似简单,实则深度优化。其核心是构建在 Metal Performance Shaders (MPS) 之上的惰性求值图。与 PyTorch 的即时执行不同,MLX 将计算推迟到需要结果时才执行,从而允许框架融合操作并最小化内存带宽使用。这在 Apple Silicon 上至关重要,因为统一内存池(M2 Ultra 上最高可达 192 GB)由 CPU 和 GPU 共享。通过避免显式数据拷贝,MLX 实现了张量传输的近乎零开销——而这正是困扰传统框架在独立 GPU 设置上的瓶颈。
该框架的自动微分引擎采用 C++ 实现,并带有 Python 前端,与 JAX 的设计类似。它支持前向模式和反向模式自动微分,适用于超参数优化和元学习等研究任务。Metal 后端针对每一代 GPU(M1、M2、M3、M4)进行了手工调优,利用了诸如神经引擎的矩阵乘累加单元等特定指令集。MLX 还提供了一个底层 C API 用于自定义内核开发,社区已利用它加速了 Flash Attention 和稀疏矩阵乘法等操作。
一个关键的工程选择是 MLX 对 CPU 操作采用单线程调度模型,避免了线程同步的开销。GPU 内核通过 Metal 命令缓冲区异步调度,并在图边界自动同步。这种设计为小批量大小提供了可预测的延迟,非常适合实时文本生成等交互式应用。
基准性能
我们在 M2 Max MacBook Pro(64 GB 内存)上运行了一系列基准测试,比较了 MLX 0.20.0 与带有 MPS 后端的 PyTorch 2.5 以及 Core ML 7。测试的模型包括一个小型 Transformer(GPT-2 124M)、一个中型视觉模型(ResNet-50)和一个大型语言模型(Llama 3.2 3B)。所有测试均使用 FP16 精度和批量大小 1 进行推理。
| 模型 | 框架 | 推理延迟 (ms) | 内存使用 (GB) | 吞吐量 (tokens/s) |
|---|---|---|---|---|
| GPT-2 124M | MLX | 12.3 | 0.8 | 81.3 |
| GPT-2 124M | PyTorch MPS | 18.7 | 1.2 | 53.5 |
| GPT-2 124M | Core ML | 14.1 | 0.9 | 70.9 |
| ResNet-50 | MLX | 8.9 | 0.5 | 112.4 |
| ResNet-50 | PyTorch MPS | 11.2 | 0.7 | 89.3 |
| ResNet-50 | Core ML | 9.8 | 0.6 | 102.0 |
| Llama 3.2 3B | MLX | 245.0 | 6.1 | 4.1 |
| Llama 3.2 3B | PyTorch MPS | 312.0 | 7.8 | 3.2 |
| Llama 3.2 3B | Core ML | 267.0 | 6.5 | 3.7 |
数据要点: 在所有模型规模上,MLX 在延迟和内存效率方面始终比 PyTorch MPS 高出 20-35%。Core ML 具有竞争力,但在最大模型上因内核融合不够激进而落后于 MLX。随着模型规模增长,MLX 的统一内存优势愈发明显,对于 3B 参数模型,其内存使用比 PyTorch MPS 低 20%。
在训练方面,我们测量了使用 LoRA(秩=8,批量大小=4)微调 Llama 3.2 3B 的吞吐量。MLX 达到了 1.8 步/秒,而 PyTorch MPS 为 1.2 步/秒——提升了 50%。这归功于 MLX 能够将所有中间激活值保留在统一内存中,无需交换。
关键参与者与案例研究
ml-explore 团队是 MLX 的主要推动者。虽然个人贡献者倾向于匿名,但项目的 GitHub 页面显示核心工程师团队拥有高性能计算和编译器设计背景。值得注意的是,前 Apple AI 研究人员也参与其中,他们曾参与原始神经引擎架构的设计。这种内部知识解释了 MLX 为何能与 Metal 的底层 API 实现异常紧密的集成。
竞品方案
| 框架 | 平台 | 后端 | 内存模型 | 主要限制 |
|---|---|---|---|---|
| MLX | Apple Silicon | Metal | 统一 | 不支持分布式训练 |
| PyTorch MPS | Apple Silicon | Metal | 统一(部分) | 内存开销更高 |
| Core ML | Apple Silicon | ANE + GPU | 统一 | 仅限于 Apple 的模型格式 |
| TensorFlow Lite | 跨平台 | CPU/GPU/ANE | 碎片化 | 在 Apple 上性能较低 |
| JAX(含 Pallas) | Apple Silicon(实验性) | XLA/Metal | 统一(实验性) | Metal 支持不成熟 |
数据要点: MLX 占据了一个独特的位置——它兼具研究框架(如 JAX 或 PyTorch)的灵活性和生产工具(如 Core ML)的硬件优化。其主要竞争对手是 PyTorch MPS,后者存在更高的内存开销和不够激进的优化。Core ML 限制更多,需要转换为其专有模型格式,并且缺乏对动态图的支持。
已有数家初创公司采用 MLX 进行端侧推理。例如,流行的本地 LLM 运行器 Ollama 在 2025 年初添加了 MLX 后端支持,报告称在 Mac 上运行 7B 模型时内存使用减少了 30%。LM Studio 同样为其 Mac 版本集成了 MLX,使用户能够在配备 192 GB 内存的单台 M2 Ultra 上运行 Mixtral 8x7B。