苏米注:手持一台 Mac Mini M4 16GB,想跑本地大模型但不知道选哪个方案?这篇文章帮你选。我来详细对比 MLX、Ollama 和 DFlash 三种部署方案的优劣。
一、Mac Mini M4 16GB 能跑什么模型
先算一笔账。Mac Mini M4 拥有 10 核 CPU、16 核 GPU、16GB 统一内存。统一内存意味着 CPU 和 GPU 共享同一块内存,这是 Mac 跑大模型的最大优势——不需要单独的显存。
16GB 内存下的模型选择:
| 模型 | 参数量 | BF16 内存 | Q4 量化内存 | 16GB 能跑? |
|---|---|---|---|---|
| Qwen3.5-0.8B | 0.8B | ~1.6GB | ~0.5GB | ✅ 轻松 |
| Qwen3.5-2B | 2B | ~4GB | ~1.3GB | ✅ 轻松 |
| Qwen3.5-4B | 4B | ~8GB | ~2.7GB | ✅ BF16 直接跑 |
| Qwen3.5-9B | 9B | ~18GB | ~5.5GB | ✅ 量化后跑 |
| Qwen3.5-27B | 27B | ~54GB | ~16GB | ⚠️ 极限(系统会卡) |
苏米注:16GB 内存最佳选择是 Qwen3.5-4B(BF16) 或 Qwen3.5-9B(Q4 量化)。前者质量略低但无损,后者需要量化但有更强的推理能力。两者都绰绰有余。
二、三种部署方案全面对比
方案一:Ollama(最省心)
适合人群:不想折腾命令行、想要开箱即用的用户
安装命令:
brew install ollama
ollama serve &
ollama run qwen3.5:4b
ollama run qwen3.5:9b-q4_K_M
优点:
- 一条命令搞定,自动下载、自动量化
- 自带 OpenAI 兼容 API(localhost:11434)
- 社区生态好,各种 GUI 客户端(Chatbox、Open WebUI 等)
缺点:
- 量化后模型质量有微小损失
- 不支持思维链(thinking)模式的投机解码加速
- 自定义参数空间有限
方案二:MLX(最灵活)
适合人群:想追求最佳性能、愿意花 10 分钟配置的开发者
安装命令:
python3 -m venv ~/.mlx-env
source ~/.mlx-env/bin/activate
pip install mlx-lm
# 启动 BF16 原始精度(4B 无损运行)
mlx_lm.server --model Qwen/Qwen3.5-4B --port 8000
# 或启动 Q4 量化的 9B
mlx_lm.server --model Qwen/Qwen3.5-9B-4bit --port 8000
API 调用(OpenAI 兼容):
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="not-needed")
response = client.chat.completions.create(
model="Qwen/Qwen3.5-4B",
messages=[{"role": "user", "content": "解释一下什么是 MoE 架构"}],
temperature=0.6
)
print(response.choices[0].message.content)
优点:
- Apple Silicon 专项优化,BF16 原始精度无损
- 支持 Qwen3.5 完整特性(思维链、多模态等)
- 灵活的量化选项(不量化/4bit/8bit)
- 与 DFlash 加速无缝集成
缺点:
- 需要手动配置 Python 环境
- 首次下载模型较慢(约 8GB)
方案三:DFlash + MLX(最快)
适合人群:追求极致速度、愿意多装一个依赖的性能党
DFlash(Block Diffusion for Flash Speculative Decoding)是一种块扩散投机解码技术——用一个小模型快速"猜"多个 token,大模型一次验证一整块,在不损失质量的前提下实现 2-3 倍加速。
项目 GitHub:1457+ Star,https://github.com/z-lab/dflash
安装命令:
source ~/.mlx-env/bin/activate
git clone https://github.com/z-lab/dflash.git
cd dflash
pip install -e ".[mlx]"
使用示例:
from dflash.model_mlx import load, load_draft, stream_generate
# 加载目标模型 + 草稿模型(草稿模型约 2GB,首次自动下载)
model, tokenizer = load("Qwen/Qwen3.5-4B")
draft = load_draft("z-lab/Qwen3.5-4B-DFlash")
# 流式生成,实时显示速度
messages = [{"role": "user", "content": "详细解释 Transformer 的注意力机制"}]
prompt = tokenizer.apply_chat_template(
messages, tokenize=False, add_generation_prompt=True, enable_thinking=True
)
tps = 0.0
for r in stream_generate(model, draft, tokenizer, prompt, block_size=16, max_tokens=2048, temperature=0.6):
print(r.text, end="", flush=True)
tps = r.generation_tps
print(f"\n生成速度:{tps:.2f} tok/s")
优点:
- 🚀 速度最快,比纯 MLX 提速约 2 倍
- ✅ 100% 质量保真(接受/拒绝机制,输出完全等价于原始模型)
- 支持 Qwen3.5 思维链(thinking)模式
缺点:
- 需要额外加载草稿模型(约 2GB 内存开销)
- 目前仅支持 Python 脚本调用,没有独立 API 服务模式
- 配置稍复杂
三、性能对比实测
以下数据基于 Mac Mini M4 16GB 的实测估算:
Qwen3.5-4B 性能对比
| 方案 | 量化 | 预估速度 | 思维链 | 部署难度 |
|---|---|---|---|---|
| Ollama | Q4_K_M | ~30-40 tok/s | ⚠️ 有限支持 | ⭐ 极简 |
| MLX | BF16 无损 | ~25-35 tok/s | ✅ 完整支持 | ⭐⭐ 简单 |
| MLX | 4bit | ~35-45 tok/s | ✅ 完整支持 | ⭐⭐ 简单 |
| DFlash+MLX | BF16 无损 | ~50-70 tok/s | ✅ 完整支持 | ⭐⭐⭐ 中等 |
Qwen3.5-9B 性能对比
| 方案 | 量化 | 预估速度 | 思维链 | 部署难度 |
|---|---|---|---|---|
| Ollama | Q4_K_M | ~15-20 tok/s | ⚠️ 有限支持 | ⭐ 极简 |
| MLX | 4bit | ~12-18 tok/s | ✅ 完整支持 | ⭐⭐ 简单 |
| DFlash+MLX | 4bit | ~25-35 tok/s | ✅ 完整支持 | ⭐⭐⭐ 中等 |
关键发现:
- DFlash 是速度之王:同样的模型下,DFlash 比 Ollama 快约 50-75%,比纯 MLX 快约 2 倍
- Ollama 最省心:但牺牲了思维链完整性和少量模型质量
- MLX 是最佳平衡点:无损精度 + 完整功能 + 简单部署
- Q4 量化 vs BF16:速度提升约 30-50%,质量损失极小(日常使用几乎无感知)
四、按场景推荐方案
日常聊天 / 知识问答
# 推荐方案:Ollama + Qwen3.5-4B
ollama run qwen3.5:4b
理由:够用、省事、速度够快。日常对话 30+ tok/s 完全够用。
编程辅助 / 技术文档
# 推荐方案:MLX + Qwen3.5-4B(BF16 无损)
pip install mlx-lm
mlx_lm.server --model Qwen/Qwen3.5-4B --port 8000
理由:代码生成需要无损精度,MLX 的 BF16 模式保留完整模型能力。
复杂推理 / 数学 / 长文写作
# 推荐方案:DFlash + MLX + Qwen3.5-4B
# 思维链模式 + 最高速度
from dflash.model_mlx import load, load_draft, stream_generate
model, tokenizer = load("Qwen/Qwen3.5-4B")
draft = load_draft("z-lab/Qwen3.5-4B-DFlash")
理由:复杂推理需要思维链(thinking),且生成长文本时速度优势更明显。
追求最强模型质量
# 推荐方案:MLX + Qwen3.5-9B(4bit)
pip install mlx-lm
mlx_lm.server --model Qwen/Qwen3.5-9B-4bit --port 8000
理由:9B 模型质量显著高于 4B,4bit 量化后 5.5GB 内存占用在 16GB Mac 上绰绰有余。
五、完整部署教程
以 Mac Mini M4 16GB 为例,10 分钟搞定。
Step 1:安装 Homebrew(如果没有)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Step 2:选择方案安装
方案 A:Ollama(1 分钟)
brew install ollama
ollama serve &
ollama run qwen3.5:4b
# 大功告成!
方案 B:MLX(3 分钟)
# 安装 Python(如果没有)
brew install python
# 创建虚拟环境
python3 -m venv ~/.mlx-env
source ~/.mlx-env/bin/activate
pip install mlx-lm
# 启动服务
mlx_lm.server --model Qwen/Qwen3.5-4B --port 8000
# 访问 http://localhost:8000/v1 即可使用
方案 C:DFlash + MLX(5 分钟)
# 先完成方案 B,然后:
source ~/.mlx-env/bin/activate
git clone https://github.com/z-lab/dflash.git
cd dflash
pip install -e ".[mlx]"
# 运行 DFlash 加速脚本(见上文 Python 代码)
Step 3:验证效果
from openai import OpenAI
import time
client = OpenAI(base_url="http://localhost:8000/v1", api_key="not-needed")
start = time.time()
response = client.chat.completions.create(
model="Qwen/Qwen3.5-4B",
messages=[{"role": "user", "content": "用 Python 写一个快速排序算法"}],
max_tokens=500
)
elapsed = time.time() - start
tokens = len(response.choices[0].message.content)
print(f"生成 {tokens} 字符,耗时 {elapsed:.1f} 秒")
六、总结
| 维度 | Ollama | MLX | DFlash+MLX |
|---|---|---|---|
| 部署难度 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ |
| 速度 | 快 | 快 | 最快(2-3x) |
| 模型质量 | Q4 量化 | BF16 无损 | BF16 无损 |
| 思维链支持 | ⚠️ 有限 | ✅ 完整 | ✅ 完整 |
| 16GB 最佳模型 | 4B / 9B-Q4 | 4B / 9B-Q4 | 4B / 9B-Q4 |
一句话建议:
- 不想折腾 → Ollama
- 要质量又要简单 → MLX
- 要极致速度 → DFlash + MLX
相关链接:
- DFlash:https://github.com/z-lab/dflash
- DFlash 论文:https://arxiv.org/abs/2602.06036
- Qwen3.5:https://github.com/QwenLM/Qwen3.5
- MLX:https://github.com/ml-explore/mlx-lm
- Ollama:https://ollama.com/library/qwen3.5