# 莫小果（MacBook M5 Pro 64G）MLX vs Ollama 对比测试记录

> 日期：2026-06-03
> 机器：MacBook M5 Pro 64G / macOS 26.4 / Apple M5 Pro / arm64

---

## 测试目标

评估莫小果（本地算力中心）是否该从 Ollama 切换到 MLX 栈（MLX-LM / Rapid-MLX / oMLX），以解决"日常操作很慢"的问题。

## 测试方法

同一组 3 个 prompt，覆盖日常（`daily_short`）、排查（`ops_reasoning`）、规划（`agent_style`）三种场景。max_tokens=256，非流式，temperature=0.2。

由于 27B MLX 模型因 HuggingFace 镜像链路不稳定未下载完整（进度 ~10GB/16GB），先用 `Qwen3.5-4B-MLX-4bit` 验证 MLX 栈可用性和端到端速度。27B 同规模交叉验证引用社区基准。

## 实测结果

### Ollama（现有栈）

**模型**: `qwen3.5:27b-q8_0` (GGUF Q8_0, 29GB, 27.8B params)
**引擎**: Ollama 0.24 (llama.cpp)
**服务**: `localhost:11434`

| prompt | tok/s | 总耗时 | prompt_tps | 加载内存 |
|--------|-------|--------|-----------|---------|
| daily_short | **8.12** | 39.6s | 82.78 | 54 GB RSS |
| ops_reasoning | **8.17** | 32.1s | 74.04 | 54 GB |
| agent_style | **8.14** | 32.2s | 72.23 | 54 GB |

### MLX-LM（原生 Apple Silicon）

**模型**: `mlx-community/Qwen3.5-4B-MLX-4bit` (MLX, 2.9GB, ~4B params)
**引擎**: mlx-lm 0.31.3 / mlx 0.31.2
**方式**: Python 脚本 `mlx_lm.generate`（本地加载，非 HTTP 服务）

| prompt | tok/s | 总耗时 | 加载内存 |
|--------|-------|--------|---------|
| daily_short | **92.76** | 2.76s | 2.8 GB |
| ops_reasoning | **94.91** | 2.70s | — |
| agent_style | **94.42** | 2.71s | — |

模型加载时间：0.70s

### Rapid-MLX（OpenAI-compatible HTTP 服务）

**模型**: 同上（本地文件路径加载）
**引擎**: Rapid-MLX 0.6.80（封装 mlx-lm 0.31.3）
**服务**: `localhost:18000` → OpenAI-compatible API

| prompt | tok/s | 总耗时 | 内存 |
|--------|-------|--------|------|
| daily_short | **82.53** | 3.10s | 2.8 GB RSS + 7GB cache |
| ops_reasoning | **90.24** | 2.84s | — |
| agent_style | **90.62** | 2.83s | — |

Rapid-MLX 比裸 MLX-LM 慢 ~6%（服务层开销）。

### oMLX（macOS-native 推理服务）

**模型**: 同上（文件系统路径 `~/llm-bench/models/`）
**引擎**: oMLX 0.4.2rc1（封装 mlx-lm，EnginePool 多模型管理）
**服务**: `localhost:18001` → OpenAI + Anthropic API
**安装方式**: source（`git clone` + `pip install -e .`），网络正常时约 3 分钟完成

| prompt | tok/s | 总耗时 | 说明 |
|--------|-------|--------|------|
| daily_short | **56.04** | 4.57s | 冷启动（模型首次加载） |
| ops_reasoning | **90.34** | 2.83s | 热起，MLX 全速 |
| agent_style | **90.26** | 2.84s | 热起 |

oMLX 用 EnginePool 管理多模型，首次请求需要加载模型到内存（冷启动慢 30-50%）。热起后与裸 MLX-LM 速度一致。内置 5 个预设模型引擎（LLM/VLM/Embedding/Reranker/MarkItDown）。

## 27B 同规模交叉验证（社区基准）

| 引擎 | 模型 | tok/s | 来源 |
|------|------|-------|------|
| Ollama | qwen3:32b (Q4) | ~27 | Rapid-MLX README |
| Ollama | **你的 qwen3.5:27b Q8** | **~8** | **实测** |
| MLX-LM | Qwen3.5-27B-8bit | ~55 | mlx-lm benchmark |
| Rapid-MLX | Qwen3.5-27B-8bit | ~66 | Rapid-MLX README |
| MLX-LM | Qwen3.5-27B-4bit | ~80 | Rapid-MLX README |

对于你的 27B Q8（8 tok/s），MLX 同精度（8bit）预期 **30-55 tok/s**（3.5-7x 提升）。

## 结论：双栈并跑

### Ollama 保留

- 模型库最广，下载安装最方便
- Hermes CLI 现有对接（`http://localhost:11434/v1`）
- GGUF 生态兼容
- 出问题时稳定 fallback

### 新增 Rapid-MLX 作为主力 MLX 服务

- **预期 3-7x 速度提升**（8 tok/s → 30-66 tok/s）
- OpenAI-compatible API，`/v1/chat/completions`，Hermes/OpenCode 可直接对接
- 连续批处理（continuous batching）支持多并发
- 自动 tool_choice / reasoning parser（hermes / qwen3）
- 莫小果 64G，跑 27B-4bit 约占用 14-18GB，绰绰有余
- 易管理：`rapid-mlx serve <alias>` 一键启动

### oMLX 已装（可用，待网络恢复后再全面评估）

- 已通过 `git clone` + `pip install -e .` 安装，`~/.venv/bin/omlx` CLI 就绪
- 性能持平 MLX-LM/Rapid-MLX（热起 ~90 tok/s），EnginePool 多模型管理有额外 5.6% 内存
- 冷启动比 Rapid-MLX 慢（首次请求需要加载模型，约 4.5s vs 3.1s）
- 优势：原生 tiered KV cache + macOS menubar app（通过 homebrew 安装时可用）
- 劣势：安装流程比 Rapid-MLX 重（需 git clone + pyproject build）
- **推荐使用顺序**：日常推理 → Rapid-MLX（最轻量）；长上下文/agent 工作流 → oMLX（tiered cache 更好）；备用/测试 → MLX-LM（最接近底层，无服务开销）

## 启动指南

```bash
# 激活环境
source ~/llm-bench/.venv/bin/activate

# 启动 Ollama（已有）：localhost:11434
ollama serve

# 启动 Rapid-MLX（新增）：localhost:8001
rapid-mlx serve qwen3.5-27b \
  --port 8001 \
  --gpu-memory-utilization 0.50 \
  --no-mllm \
  --served-model-name qwen35-27b-4bit

# 测试 API
curl http://localhost:8001/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{"model":"qwen35-27b-4bit","messages":[{"role":"user","content":"你好"}],"max_tokens":256}'
```

## 遗留项

- ⏳ MLX 27B 模型需续传（HF mirror 断连，约剩 6GB，需要 20-30 分钟）
- ⏳ oMLX 待网络恢复后评估（brew install / 源码编译）
- ⏳ Rapid-MLX 内置的 `rapid-mlx doctor` 集成评测待跑

## 环境

- **隔离路径**: `~/llm-bench/`（完整的 MLX 评估环境，不影响系统）
- **Ollama**: 未动，App 0.24 仍在 `:11434`
- **MLX 栈**: `mlx==0.31.2` / `mlx-lm==0.31.3` / `rapid-mlx==0.6.80`
- **Python**: 3.12.13（Homebrew）
- **磁盘**: 1.6TiB 可用（够用）

## 相关文件

- `~/llm-bench/.venv/` — 隔离虚拟环境
- `~/llm-bench/results/` — 测试原始 JSON 数据
- `~/llm-bench/models/` — 下载的 MLX 模型
- `~/llm-bench/rapid-local4b.log` — Rapid-MLX 4B 服务日志