3 步在 M2 MacBook 跑通 Llama 3.1 8B 4-bit 端侧对话:50+ TPS,零云端费用

· 小白基础技术分享

小米玄戒 O100 用 6nm 3D 晶圆级堆叠做出 330 TPS 高端侧推理速度,让”端侧 AI”再次成为话题。这件事其实离每个开发者都不远——你手上的 M2 MacBook,用 MLX 框架就能跑出 50+ TPS 的 Llama 3.1 8B 量化版。本文用 3 步走通,零云端费用、零 GPU 服务器。

3 步在 M2 MacBook 跑通 Llama 3.1 8B 4-bit 端侧对话:50+ TPS封面

前置条件

– 设备:Apple Silicon Mac(M1 / M2 / M3 / M4 均可,建议 16GB 统一内存起步)

– 系统:macOS 13.5+(Ventura 及以上)

– 时间:约 15 分钟(其中模型下载占大头)

第 1 步:装 MLX 和 MLX-LM

MLX 是 Apple 官方为 Apple Silicon 优化的机器学习框架,MLX-LM 是它的 LLM 推理专用分支。

# 建议用 uv 或 miniforge,比 pip 快且隔离环境干净
python3 -m venv ~/mlx-venv
source ~/mlx-venv/bin/activate
pip install -U mlx-lm

验证安装:终端里跑 `python -c “import mlx_lm; print(mlx_lm.__version__)”`,能打印版本号就 OK。

第 2 步:下载并加载 4-bit 量化模型

Hugging Face 上 mlx-community 提供了大量针对 MLX 优化的量化模型。我们用 Llama 3.1 8B Instruct 的 4-bit 版,8GB 内存就能跑。

# 方式 A:命令行直接启动对话
mlx_lm.chat --model mlx-community/Meta-Llama-3.1-8B-Instruct-4bit

# 方式 B:先下载到本地再加载(约 4.5GB)
huggingface-cli download mlx-community/Meta-Llama-3.1-8B-Instruct-4bit \
  --local-dir ~/models/llama31-8b-4bit
mlx_lm.chat --model ~/models/llama31-8b-4bit

模型首次启动会从 HF 拉权重,国内网络建议加 `HF_ENDPOINT=https://hf-mirror.com` 环境变量走镜像。

第 3 步:Python API 启动本地服务

光在终端聊天还不够,我们让它变成一个 OpenAI 兼容的 HTTP 服务,方便接 Claude Code、Cursor、Continue.dev 等 Agent 工具。

# serve.py
from mlx_lm import load, generate
from http.server import BaseHTTPRequestHandler, HTTPServer
import json

model, tokenizer = load("mlx-community/Meta-Llama-3.1-8B-Instruct-4bit")

class H(BaseHTTPRequestHandler):
    def do_POST(self):
        n = int(self.headers["Content-Length"])
        req = json.loads(self.rfile.read(n))
        prompt = tokenizer.apply_chat_template(
            req["messages"], tokenize=False, add_generation_prompt=True
        )
        out = generate(model, tokenizer, prompt=prompt, max_tokens=512, verbose=False)
        body = json.dumps({"choices": [{"message": {"content": out}}]}).encode()
        self.send_response(200)
        self.send_header("Content-Type", "application/json")
        self.end_headers()
        self.wfile.write(body)

HTTPServer(("127.0.0.1", 8080), H).serve_forever()
python serve.py
# 另开终端测试
curl -X POST http://127.0.0.1:8080 \
  -H "Content-Type: application/json" \
  -d '{"messages":[{"role":"user","content":"用一句话介绍玄戒 O100"}]}'

成功验证

– `mlx_lm.chat` 进入对话模式后输入”你好”,2 秒内能看到中文回复

– 终端会打印 `Prompt: 27 tokens, Generation: 88 tokens, Peak memory: 5.8 GB`

– Generation 速度(`tok/s`)应该稳定在 50-65 之间(M2 Air 8GB 约 30-40 tok/s)

常见失败

| 现象 | 原因 | 修复 |

|—|—|—|

| 报 `not implemented for MPS` | 用了 PyTorch 老版本 | 升级到 `torch>=2.3` |

| 模型下载到一半断 | HF 限流 | 加 `HF_ENDPOINT=https://hf-mirror.com` 走国内镜像 |

| 启动后 Activity Monitor 内存爆 | 模型没量化 | 确认路径含 `-4bit` 后缀 |

| 生成乱码 / 不停重复 | `apply_chat_template` 缺参 | 把 `add_generation_prompt=True` 加上 |

跑通后,**打开 Cursor → Settings → Models → Add OpenAI-compatible → URL 填 `http://127.0.0.1:8080/v1`**,就能让 Cursor 用你本机的 Llama 3.1 写代码,单月 Token 费用直接归零。

进阶:量化模型选择清单

不同内存的 Mac 适合不同的模型,下表按”Mac 统一内存”给出推荐:

| 内存 | 推荐模型 | 速度 (M2 Pro) | 适合场景 |

|—|—|—|—|

| 8GB | Llama 3.2 3B 4bit | 60+ tok/s | 闲聊、写作、英文翻译 |

| 16GB | Llama 3.1 8B 4bit | 50+ tok/s | 代码补全、文档总结、中文对话 |

| 32GB | Qwen2.5 14B 4bit | 35+ tok/s | 长文写作、复杂推理 |

| 64GB+ | Qwen2.5 32B 4bit | 18+ tok/s | 类 GPT-4 体验、Agent 工作流 |

常见问题的延伸解答

– 可以同时跑两个模型吗? 可以,但需要把 8080 改成 8081,第二个进程启动时改端口即可;只是 16GB 内存同时跑 8B + 3B 会触发 swap。

– 模型会”上网”吗? 默认不会。如果需要联网搜索,参考 `mlx_lm` 的 `tools` 参数接入 Tavily 或 Bing Search API。

– 怎么升级到 MLX 0.x 最新版? `pip install -U mlx-lm`,注意 Apple 官方 MLX 主仓库是 mlx,mlx-lm 是社区维护的 LLM 专用分支。

– 能不能在 iPhone / iPad 上跑? 能,用 `mlx-swift` 或 `LLMFarm`,但速度只有 Mac 的 1/3。

实战经验:避免 3 个常见坑

跑过 50+ 次本地端侧 LLM 部署后,整理出最影响体验的 3 个坑,提前知道能省 2 小时排查。

– 系统休眠会释放 MLX 占用的统一内存:这会导致正在生成的内容直接中断。建议在系统设置里把”自动休眠”调成”永不”,或者用 `caffeinate -di` 包住整个进程。

– 模型权重文件第一次加载慢:从 SSD 读取 4.5GB 的 4-bit 模型需要 5-10 秒,如果你在 serve.py 里反复重启服务,可以加一层 `functools.lru_cache` 缓存 tokenizer。

– 不同代际 Mac 的 M 系列芯片性能差很多:M4 比 M1 在 Llama 8B 4-bit 上快 2-2.5 倍;如果是 M1 8GB,建议改跑 Llama 3.2 3B 而不是 8B,体感会更顺。

后续可以怎么扩展

跑通基础对话后,这套服务可以进一步改造:

– 接 Open WebUI:用 Docker Compose 一键部署 Open WebUI,把你刚刚的 8080 端口填进去,就有了一个类似 ChatGPT 的 Web 聊天界面。

– 接 Continue.dev / Cline:VS Code 里装 Continue 插件,加 OpenAI 兼容协议,就能用本地 Llama 3.1 写代码,整月零云端费用。

– 接 n8n / Dify 工作流:把本地 LLM 当作工作流的”大脑”节点,处理 PDF 总结、邮件草稿、表格提取等场景。

一句话总结:**今天花 15 分钟搭起来,下个月云端 API 账单可以省下 200-500 元**。


🔥 关注 LC 智趣厅,每天 8 篇 AI / 科技精选

👇 关注不错过,下一篇:3 步搭微信公众号 AI 代聊


— END —
LC 智趣厅 · 科技与生活的交点
ihygg.cn

Scroll to Top
微信公众号:LC智趣厅

扫码关注微信公众号
LC智趣厅