在 MacBook M5 Pro 上部署 Ollama 本地大模型完整指南
Table of Contents
开篇
从 2019 年的 MacBook Pro (Intel 8GB) 迁移到 MacBook M5 Pro (48GB) 后,想在本地跑个大模型。这篇文章记录了从下载 Ollama、部署 Qwen3.6-27B-Q4_K_M 到接入 Cherry Studio 的完整过程,以及一路踩过的所有坑和解决方案。
适用环境:Apple Silicon(M 系列芯片)Mac,尤其是从 Intel Mac 迁移而来的系统。
一、前置准备
1. 确认 Python / pip 可用
从 Intel Mac 迁移过来后,/usr/local/bin/ 里常残留指向 Python 2.7 的旧 pip,已无法使用:
-bash: /usr/local/bin/pip: bad interpreter: No such file or directory
解决办法:以后一律使用 pip3(对应 Homebrew 的 Python 3)。可清理掉残留的旧文件:
rm /usr/local/bin/pip /usr/local/bin/pip2 /usr/local/bin/pip2.7 \
/usr/local/bin/pip3.8 /usr/local/bin/pip3.10如习惯打 pip,在 ~/.zshrc 里加一行别名:
alias pip=pip32. Python 3.12+ 安装包的注意事项
新版 Python 默认禁止直接 pip install 到系统环境,会报:
error: externally-managed-environment
推荐用 pipx 来安装命令行工具(自动管理虚拟环境):
brew install pipx
pipx ensurepath二、下载模型(解决官方源慢的问题)
问题:Ollama 官方源极慢
直接 ollama run qwen3.6:27b-q4_K_M 时,从海外源拉取,速度可能只有几百 KB/s,17GB 要下 8 小时。
推荐方案:从 ModelScope(国内源)下载 GGUF 再手动导入
第 1 步:停掉当前下载
按 Ctrl + C。
第 2 步:关闭 VPN / 代理
下载国内源时走直连更快(代理出口在海外反而拖慢)。
第 3 步:安装 ModelScope CLI
pipx install modelscope第 4 步:下载 GGUF 文件
注意仓库名和文件名的大小写、点号要完全对应。Qwen3.6 的 GGUF 仓库是
unsloth/Qwen3.6-27B-GGUF。
ModelScope 仓库地址:https://modelscope.cn/models/unsloth/Qwen3.6-27B-GGUF
modelscope download unsloth/Qwen3.6-27B-GGUF Qwen3.6-27B-Q4_K_M.gguf --local_dir ./
_ .-') _ .-') _ ('-. .-') _ (`-. ('-.
( '.( OO )_ ( ( OO) ) _( OO) ( OO ). ( (OO ) _( OO)
,--. ,--.).-'),-----. \ .'_ (,------.,--. (_)---\_) .-----. .-'),-----. _.` \(,------.
| `.' |( OO' .-. ',`'--..._) | .---'| |.-') / _ | ' .--./ ( OO' .-. '(__...--'' | .---'
| |/ | | | || | \ ' | | | | OO )\ :` `. | |('-. / | | | | | / | | | |
| |'.'| |\_) | |\| || | ' |(| '--. | |`-' | '..`''.) /_) |OO )\_) | |\| | | |_.' |(| '--.
| | | | \ | | | || | / : | .--'(| '---.'.-._) \ || |`-'| \ | | | | | .___.' | .--'
| | | | `' '-' '| '--' / | `---.| | \ /(_' '--'\ `' '-' ' | | | `---.
`--' `--' `-----' `-------' `------'`------' `-----' `-----' `-----' `--' `------'
Downloading [Qwen3.6-27B-Q4_K_M.gguf]: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████| 15.7G/15.7G [06:36<00:00, 42.4MB/s]
Successfully Downloaded from model unsloth/Qwen3.6-27B-GGUF.--local_dir ./:下载到当前目录,方便后续导入(不加则下到缓存目录~/.cache/modelscope/hub/)。
Q4 量化可选项对比:
| 文件名 | 大小 | 说明 |
|---|---|---|
Qwen3.6-27B-Q4_K_M.gguf |
15.66 GB | 最常用,质量/大小平衡最好 |
Qwen3.6-27B-Q4_K_S.gguf |
14.77 GB | 略小,质量稍低 |
Qwen3.6-27B-UD-Q4_K_XL.gguf |
16.40 GB | Unsloth dynamic 量化,质量更好 |
Qwen3.6-27B-IQ4_XS.gguf |
14.38 GB | 体积最小的 4bit |
备选方案:HuggingFace 镜像站
如果 ModelScope 没有需要的量化版本,用 hf-mirror.com:
export HF_ENDPOINT=https://hf-mirror.com
pipx install huggingface_hub
huggingface-cli download unsloth/Qwen3.6-27B-GGUF Qwen3.6-27B-Q4_K_M.gguf --local-dir ./想先快速验证流程?
先跑个小模型(约 5GB):
ollama run qwen3:8b三、导入模型到 Ollama
下载完成后,用 Modelfile 把 GGUF 导入 Ollama:
# 创建 Modelfile(FROM 后面是你实际下载的 .gguf 路径)
echo 'FROM ./Qwen3.6-27B-Q4_K_M.gguf' > Modelfile
# 创建模型
ollama create qwen3.6:27b-q4_K_M -f Modelfile
# 运行
ollama run qwen3.6:27b-q4_K_Mollama run qwen3.6:27b-q4_K_M
>>> 你好 你是什么大模型?
Thinking...
Thinking Process:
1. **Analyze the user's input**: The user asks "你好 你是什么大模型?" (Hello, what large model are you?). This is a direct question about my identity and origin.
2. **Determine the response strategy**:
* Identity: I am Qwen (通义千问), developed by Alibaba Group's Tongyi Lab. I will introduce myself as such.
3. **Draft the response (Internal Monologue/Draft)**:
* Hello! I am Qwen, a large language model independently developed by Alibaba Group's Tongyi Lab. How can I help you today?
4. **Final Polish**: Keep it warm, polite, and concise.
"你好!我是通义千问(Qwen),由阿里巴巴集团旗下通义实验室自主研发的大语言模型。有什么我可以帮你的吗?" (Hello! I am Tongyi Qianwen (Qwen), a large language model independently
developed by Alibaba Group's Tongyi Lab. How can I help you?)
5. **Check constraints**: The user asked in Chinese, so I must reply in Chinese. I answered the core question directly. No version numbers were mentioned.
Let's output the response.
*(Self-Correction during drafting)*: Ensure exact alignment with "Qwen / 通义千问". Use natural language and a helpful tone.
Draft: "你好!我是 Qwen(通义千问),由阿里巴巴集团旗下通义实验室自主研发的大语言模型。请问有什么我可以帮你的吗?" -> Perfect.
Proceed to output.
*Wait*, the prompt says I am Qwen, developed by Alibaba. I will just say that simply and warmly.
"你好!我是通义千问(Qwen),是由阿里巴巴集团旗下通义实验室自主研发的大语言模型。请问今天有什么我可以帮你的吗?" (Hello! I am Tongyi Qianwen (Qwen), a large language model
independently developed by Alibaba Group's Tongyi Lab. Is there anything I can help you with today?)
This is accurate and friendly. Done.
Output matches the response.
...done thinking.
你好!我是通义千问(Qwen),是由阿里巴巴集团旗下通义实验室自主研发的大语言模型。请问今天有什么我可以帮你的吗?四、启动与对话
启动后即可在终端直接对话。常用命令:
ollama list # 查看已安装的模型
ollama ps # 查看正在运行/已加载的模型
ollama run <模型名> # 启动对话
ollama rm <模型名> # 删除模型ollama list
NAME ID SIZE MODIFIED
qwen3.6:27b-q4_K_M 7ea81a10e901 16 GB 16 hours ago
ollama ps
NAME ID SIZE PROCESSOR CONTEXT UNTIL
qwen3.6:27b-q4_K_M 7ea81a10e901 17 GB 100% GPU 32768 4 minutes from now
brew services stop ollama
Stopping `ollama`... (might take a while)五、API 调用
Ollama 默认不需要 API 密钥。 它在本地启动 HTTP 服务,监听
http://localhost:11434,本机直接调用即可,无鉴权。
1. 原生 API(curl)
curl http://localhost:11434/api/chat -d '{
"model": "qwen3.6:27b-q4_K_M",
"messages": [{"role": "user", "content": "你好"}],
"stream": false
}'2. OpenAI 兼容接口(Python)
Ollama 同时提供 OpenAI 兼容接口 http://localhost:11434/v1。此时 api_key 填任意非空字符串即可(库要求非空,但不校验):
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:11434/v1",
api_key="ollama", # 任意字符串,不校验
)
resp = client.chat.completions.create(
model="qwen3.6:27b-q4_K_M",
messages=[{"role": "user", "content": "你好"}],
)
print(resp.choices[0].message.content)3. 各种”密钥相关”场景
| 场景 | 需要做什么 |
|---|---|
| 本机自己用 | 不需要任何密钥,直接调用 |
| OpenAI SDK 调用 | api_key 填任意字符串(库要求非空) |
| 暴露到局域网/外网 | Ollama 无内置鉴权,需前置 Nginx/Caddy 做 API key 校验 |
| 跨机器访问 | 先 export OLLAMA_HOST=0.0.0.0:11434 再重启 ollama serve |
安全提示:把
OLLAMA_HOST改成0.0.0.0后,任何能连到你 11434 端口的人都能用你的模型(无鉴权)。请用防火墙限制来源 IP,或前置反向代理做校验。
六、在 Cherry Studio 中接入
在 Cherry Studio 添加一个 OpenAI 兼容的自定义服务商:
| 字段 | 填写内容 |
|---|---|
| API 密钥 | 随便填一个,如 ollama(留空有时会报错,填非空字符串最稳) |
| API 地址 | http://localhost:11434/v1 |
| 模型 | 点「获取模型列表」自动拉取,或点「+」手动添加 qwen3.6:27b-q4_K_M |
填好后:
- 确保 Ollama 服务在运行(
ollama ps能看到模型)。 - 点「检测」测试连通性。
- 在「模型」处点「获取模型列表」或手动「+」添加模型名(必须与
ollama list里显示的完全一致)。
七、这个本地模型能做什么
Qwen3.6-27B-Q4_K_M 是阿里通义千问的 27B(270 亿参数)中量级模型,Q4_K_M 是 4bit 量化版(约 15.6GB),属于「通用对话 + 推理」型模型。在 M5 Pro 48GB 上能流畅本地运行,完全离线、不联网、不花钱、数据不出本机。
擅长的事
| 场景 | 具体能做什么 |
|---|---|
| 日常问答 / 写作 | 写文章、改稿、起标题、写邮件、润色、扩写缩写、风格改写 |
| 翻译 | 中英互译及多语种翻译,长文翻译质量不错 |
| 代码 | 写函数、解释代码、debug、写正则、补全、简单重构、写 SQL/shell |
| 总结提炼 | 长文/会议纪要/文档总结、提取要点、做表格 |
| 推理思考 | 数学题、逻辑推理、分步分析(思维链能力不错) |
| 信息处理 | 分类、打标签、抽取结构化信息(如从文本提取 JSON) |
| 角色扮演 / 头脑风暴 | 模拟对话、创意发散、起方案 |
本地跑的核心价值(相比云端)
- 隐私:内部资料、合同、代码、个人笔记,数据完全不上传。
- 免费无限用:不计 token、不限次数。
- 离线可用:没网照样用。
- 可接入工具:配合 Cherry Studio / Open WebUI,能搭知识库(RAG)、做翻译插件、接入自动化脚本。
能力边界(合理预期)
- 复杂推理、长代码、精细写作上不如 GPT-5、Claude Opus 等云端旗舰。
- 知识有截止时间,不知道最新发生的事(除非接联网/RAG)。
- 纯文本模型,不能直接联网、看图、生成图。
- 长上下文处理不如云端模型稳。
一句话:它是一个装在你电脑里的、免费且私密的 ChatGPT 平替,日常 80% 的写作、翻译、编程、总结需求都能做。但是稍微跑一些复杂的任务,GPU的使用率就会达到100%,笔记本发热明显。
八、查看 GPU 使用率(Apple Silicon)
Apple Silicon 的 GPU 占用,活动监视器默认看不到好用的数据。从简单到专业有几种办法:
方法一:活动监视器(最简单)
打开活动监视器 → 菜单栏「窗口」→「GPU 历史记录」(或按 ⌘ + 4),弹出实时曲线。只有一条总曲线,临时看一眼够用。
方法二:powermetrics(系统自带,最准)
sudo powermetrics --samplers gpu_power -i 1000-i 1000:每 1 秒刷新一次。- 关注:GPU HW active residency(活跃占比 ≈ 使用率)、GPU Power(功耗)。
Ctrl + C退出。
方法三:macmon(推荐,免 sudo,界面现代)
brew install macmon
macmon实时显示 GPU 使用率、显存、功耗、温度,适合常驻观察。
方法四:asitop(终端图形面板)
pipx install asitop
sudo asitop一个终端里同时看 CPU / GPU / 显存 / 功耗 / 温度(底层调 powermetrics,需 sudo)。
实测技巧:开一个终端跑
macmon,另一个终端跑ollama run qwen3.6:27b-q4_K_M问个问题,GPU 使用率会瞬间冲到 80%~100%,说明模型确实在用 GPU 推理。
| 需求 | 用哪个 |
|---|---|
| 临时瞄一眼 | 活动监视器 ⌘+4 |
| 看 Ollama 跑模型时 GPU 吃多少(精确) | sudo powermetrics --samplers gpu_power |
| 好看的常驻面板 | macmon(免 sudo)或 asitop |
九、常见问题排查
| 现象 | 原因 / 解决 |
|---|---|
| 下载速度极慢(几百 KB/s) | 用 ModelScope 国内源 + 关代理;见第二节 |
Repo ... not exists |
仓库名/文件名写错(注意 Qwen3.6 带点、unsloth/ 前缀、大小写) |
externally-managed-environment |
用 pipx 安装,不要直接 pip install 到系统 |
pip: bad interpreter |
旧 Python2.7 残留,改用 pip3 |
| Cherry Studio 检测失败 | 确认 Ollama 在运行、地址带 /v1、模型名与 ollama list 一致 |
| Cherry Studio获取模型列表为空 | 手动点「+」输入模型名;确认 ollama list 有该模型 |