Mac Mini M4:本地 LLM 的非官方王者
本文是英文原文的机器翻译,部分细节可能有所损失,请以英文版本为准。 阅读英文原文
要点速览
如果你在 DFW 的郊区搭建实验室,很快就会明白:功耗和发热是你最大的敌人。我花了好几个月跟一台 3090 的 PC 整机较劲,它的声音像喷气发动机,每次有智能体跑后台任务,我的办公室就变成桑拿房。后来我换成了 64GB 统一内存的 Mac Mini M4 Pro。它很安静,功耗比一盏台灯还低,还能以可用的速度运行 Llama 3-70B 模型。硬件第一次变得“隐形”,这是任何工程实验室的终极目标。
架构
Apple Silicon 的“魔法”不在 CPU 速度,而在统一内存架构(UMA)。在传统 PC 里,CPU 内存和 GPU 内存(VRAM)是分开的。如果你想运行一个 40GB 的模型,就需要一块 1,600 美元的 GPU。在 Mac 上,系统内存就是显存。
| 特性 | 台式机 PC (RTX 4090) | Mac Mini (M4 Pro 64GB) |
|---|---|---|
| 显存容量 | 硬上限 24GB | 最高 64GB(灵活) |
| 内存带宽 | 1,000 GB/s (GDDR6X) | 273 GB/s (统一内存) |
| 功耗 | 450W - 600W | 20W - 50W |
| 噪音 | 风扇噪音大 | 近乎无声 |
| 理想模型大小 | 8B - 34B | 8B - 70B(量化后) |
虽然在纯速度(每秒 token 数)上 PC 胜过 Mac,但在容量与成本之比上 Mac 更胜一筹。不经过大幅剪枝,你根本无法在一块消费级 NVIDIA 显卡上运行 70B 模型。Mac Mini 却能轻松吃下。
搭建
为生产级实验室配置 Mac,需要摆脱“桌面应用”的思维,转向无界面服务的思维。
1. 推理栈
我用 Ollama,因为它对 Apple Metal API 的实现最好。它把张量运算直接交给 M4 芯片上的 GPU 核心。
# Verify Metal acceleration is active in the logs
grep "Metal" ~/.ollama/logs/server.log
# You should see: "Metal device is available" and "offloading layers to GPU"
2. Python 桥接
我的智能体通过本地网络,用 GekroLLMClient 与 Mac Mini 通信,这个客户端我在关于 API 主权的文章里详细介绍过。
import ollama
def run_heavy_inference(prompt):
# This runs on the Mac Mini, called by a Pi or my Workstation
response = ollama.chat(
model='llama3:70b-instruct-q4_K_M',
messages=[{'role': 'user', 'content': prompt}]
)
return response['message']['content']
3. 模型量化的选择
对于 64GB 的 Mac,Q4_K_M 是 Llama 3-70B 的“恰到好处”的量化方案。它能轻松装进内存(给系统和其他智能体留出 20GB),同时保留基础模型 99% 的智能。
取舍
Mac Mini 并不完美。最大的“税”是缺少 CUDA。如果你要做模型训练或微调,和 NVIDIA 整机相比,Mac 只能当镇纸。大多数新的研究代码都是先为 CUDA 编写的,“Metal 支持”往往是几个月后才姗姗来迟的补丁。
说句公道话,我其实从没撞上这堵墙。我在这个实验室里跑的全是推理,而 Metal 上的推理一直表现不错。我提到它,是因为哪天我想在 Apple silicon 上微调什么东西时它就会咬我一口,而不是因为它曾经咬过我。
我还遇到过一个大问题:热积累。在对 1,000 条 Tesla 遥测日志做 4 小时批处理时,Mac Mini 内部的风扇终于转了起来,推理速度从 8 TPS 掉到 5 TPS。即使是 Apple 的能效,在连续数小时 100% 负载下也有极限。最后我 3D 打印了一个带 120mm 风扇的定制支架,让机身底部在长时间推理时保持凉爽。
接下来
我目前在研究用高速 Thunderbolt 桥接来把 Mac Mini 组成集群。如果我能把两台 M4 Pro 的内存合并起来,就能在本地运行 405B 参数的模型。这就是梦想:一个能放进书桌抽屉的、私有的本地“超级智能”。