在 Mac 上把 Qwen3.8-27B 接入 DeepSeek Harness,现在可以先装两个 App:oMLX 提供本地模型服务,Harness 负责对话、文件操作和命令执行。先让模型能回答,再验证工具调用,最后才调 MTP。
这次在 M2 Max/64GB 上重做后,我发现一个比“跑到多少 tokens/s”更有用的结论:MTP 对代码生成明显有效,对中文长文却未必更快。 同一台机器、同一份权重,代码样本从约 19.7 提高到 34.1 tokens/s,中文样本则略慢。因此,这篇教程不再把“50+ tokens/s”当成所有 Mac 都能复现的承诺。
2026-11-08 更新说明:本文主线改为 oMLX 官方 App+Harness 桌面端,补充国内镜像与官方站代理两条模型下载路径,更新当前 profile 配置位置,并用本次带条件的实测替换旧版泛化跑分。原视频入口保留供参考,操作步骤以本次更新正文为准。
一、先明确版本、模型和硬件
本文采用的版本
| 组件 | 本文基准 | 怎么理解 |
|---|---|---|
| oMLX | 0.7.3 稳定版 App | 官方 0.7.4.dev1 仍为开发版,首次部署优先稳定版 |
| DeepSeek Harness | 0.2.2-rc.1 | 当前候选版本,仍处于预览阶段;后续界面与配置可能变化 |
| 可选本地模型 | Jundot/Qwen3.8-27B-oQ4e-mtp | 社区维护的 MLX 量化部署版,不是 GGUF |
| Harness CLI 的 Node.js | ≥24.9.0 | 仅命令行安装需要,不能继续照抄旧文的 Node 18 门槛 |
oMLX 和 Harness 分工不同。oMLX 加载权重、管理缓存并提供 API;Harness 把模型回答转换为工具调用、文件修改和任务执行。安装 Harness 不会自动下载 Qwen,安装 oMLX 也不等于已经完成 Agent 接入。
这个本地模型是 Harness 云端模型之外的可选后端。已有默认模型可以保留,先在新会话中选择本地 Qwen 测试,不必覆盖原来的云端提供商。
什么机器适合起步
本文面向 Apple Silicon Mac,oMLX App 路径要求 macOS 15 或更新版本。模型四个权重分片合计约 17.52GB(十进制),运行时还需要 KV Cache、临时张量和系统内存。
| 统一内存 | 建议起点 |
|---|---|
| 24GB | 余量紧,先以 4K~8K 上下文、1K~2K 输出、单并发尝试,不承诺无 Swap |
| 32GB/36GB | 从 8K 上下文、2K 输出、单并发开始 |
| 64GB 及以上 | 可从 32K 上下文、4K 输出、单并发开始,再按任务逐步增加 |
这些是保守配置起点,不是所有机型都已实测的性能档位。Max/Ultra 的内存带宽与 GPU 不同;同为 64GB,并不代表解码速度相同。
建议先预留至少 50GB SSD 空间,开启 SSD 缓存后另算缓存预算。SSD 缓存有助于复用前缀和会话状态,但不能把它理解成“24GB 内存可以无代价运行任意长上下文”。
二、优先安装官方 App,先跑通本地聊天
1. 安装 oMLX 稳定版
打开 oMLX 0.7.3 官方发布页,按系统选择:
| 系统 | 安装包 |
|---|---|
| macOS 15 Sequoia | oMLX-0.7.3-macos15-sequoia.dmg |
| macOS 26/27 | oMLX-0.7.3-macos26-27.dmg |
将 App 拖入“应用程序”后启动。首次设置建议:
- 模型目录选用户主目录下的
omlx-models,即~/omlx-models。 - 端口先用
8000,同机客户端使用127.0.0.1。 - 创建并保存自己的 API 密钥,稍后 Harness 要填写同一份密钥。
如果以前启动过源码版或 Homebrew 服务,先确认 8000 端口由哪一个实例占用,使用一种方式管理服务。App 路径不需要再执行旧文的一键装配脚本,也不需要叠加源码版 LaunchAgent。
2. 下载并识别模型
在模型管理界面搜索完整仓库名:
Jundot/Qwen3.8-27B-oQ4e-mtp
这里的 Jundot/... 是权重仓库名。如果在 OpenClaw 中看到 omlx/Qwen3.8-27B-oQ4e-mtp,前面的 omlx 是已经配置的提供商 ID,不是 Hugging Face 下载仓库;不要把整串直接填进下载命令。
也可以通过下一节的任一路径下载到:
~/omlx-models/Qwen3.8-27B-oQ4e-mtp/
下载完整仓库,保留权重、索引、分词器、聊天模板和预处理配置。目录中应有四个 model-0000N-of-00004.safetensors 文件,以及 config.json、model.safetensors.index.json、tokenizer.json、tokenizer_config.json、preprocessor_config.json 等文件。不要只复制四个大文件。
本文下载示例固定到核对过的 revision 7dd276b77fcb27c982ebd8d8a434539345713fea。如果以后改用上游新版,应重新记录 revision 和校验值。
另有 Uncensored oQ4e FP16-MTP 教程。它使用的是另一份社区模型,不能只改文件夹名字就视为同一权重,也不能混用跑分。
3. 先用基础设置完成一轮回复
64GB 机器可先设置 32K 上下文、4K 最大输出、单并发、balanced 内存守卫,关闭额外热缓存与 Lightning MTP。希望直接获得答案时,关闭 Thinking。
打开 oMLX 内置聊天,选择目标模型,输入:
请只回复 OK。
收到非空回复后,再接 Harness。模型出现在列表中只能说明发现了文件,还不能证明模型加载和推理已经通过。
三、两条可选模型下载路径
先试更适合自己网络的路径,不把“镜像”直接等同于“更快”。 下列命令都下载同一仓库、同一 revision,输出目录也相同,下载后回到 oMLX 重新扫描目录即可。
如果没有 hf,可按 Hugging Face 官方 CLI 安装说明安装独立工具,不必改动 oMLX App 自带的 Python:
curl -LsSf https://hf.co/cli/install.sh | bash -s -- --exclude-skill
hf --help
若当前终端尚未识别新命令,按安装器提示设置 PATH 或新开终端。已有 hf 的读者直接使用下面的下载命令。
路径 A:HF-Mirror 国内镜像+普通 HTTP
HF-Mirror 是第三方镜像。先尝试这条路径;这里的“普通 HTTP”指关闭 Xet 后的常规下载,链接仍使用 HTTPS。关闭 Xet 是为了避开部分网络下的 xet-read-token 报错、重试或长时间不落盘,并不保证镜像总比官方站快。
HF_ENDPOINT=https://hf-mirror.com \
HF_HUB_DISABLE_XET=1 \
HF_HUB_DOWNLOAD_TIMEOUT=60 \
hf download Jundot/Qwen3.8-27B-oQ4e-mtp \
--revision 7dd276b77fcb27c982ebd8d8a434539345713fea \
--local-dir "$HOME/omlx-models/Qwen3.8-27B-oQ4e-mtp" \
--max-workers 2
镜像元数据能访问,不代表所有大权重都已在国内缓存;重定向后的文件服务器也可能需要境外网络。如果配置文件很快、大权重却一直不增长,改试路径 B。
路径 B:Hugging Face 官方站+本机代理+普通 HTTP
适合已有可用本地代理、但镜像下载断流的情况。下面的 7897 是示例 HTTP/混合代理端口,请替换成运行下载命令的这台 Mac 上实际可用的代理端口。
HTTP_PROXY=http://127.0.0.1:7897 \
HTTPS_PROXY=http://127.0.0.1:7897 \
HF_ENDPOINT=https://huggingface.co \
HF_HUB_DISABLE_XET=1 \
HF_HUB_DOWNLOAD_TIMEOUT=60 \
hf download Jundot/Qwen3.8-27B-oQ4e-mtp \
--revision 7dd276b77fcb27c982ebd8d8a434539345713fea \
--local-dir "$HOME/omlx-models/Qwen3.8-27B-oQ4e-mtp" \
--max-workers 2
这些变量只作用于本次命令。代理装在另一台机器时,127.0.0.1 不会自动指向那台机器;需要另行确认可访问的代理地址。
本次 M2 Max 主机最终通过路径 B 完成下载,某次 20 秒采样约为 11.5MB/s。这是该网络当时的读数,不能当成下载速度保证。重新执行相同命令时保留原目录和 .cache/huggingface,工具可以复用已完成且未变化的文件;部分文件的续传行为取决于 CLI 版本。
截至本次更新,同名 ModelScope 仓库查询返回 404,尚未找到核实为相同权重的魔搭下载入口。阿里 PyPI 源加速的是 Python 包安装,不能代替模型权重源。
下载完成后校验四个权重
以下 SHA-256 对应上面固定的 revision。先进入模型目录,再执行校验;四项均输出 OK 才表示这四个权重匹配。
cd "$HOME/omlx-models/Qwen3.8-27B-oQ4e-mtp"
shasum -a 256 -c <<'EOF'
f0b6d33db6657b78146013bed8bde22f2d44efd83bdc6618d637f58f50d297a9 model-00001-of-00004.safetensors
ab145c19b5a994acf1adbe4c5c880d851cf819533372548c6729f5150d10663e model-00002-of-00004.safetensors
f41e00cec46da215e1bf9bfcff3dc49fdeb5d8b502be01f4f5aa08610737d612 model-00003-of-00004.safetensors
5aa3513ef3064574e4b5812d729f5ec9988887fc85c8820f983107bc7f63c4f5 model-00004-of-00004.safetensors
EOF
其他配置文件仍须完整保留。若另一台 Mac 已有这份已校验目录,同局域网或移动 SSD 复制整个目录,也能避免重复下载;跨 Tailscale 传输不一定比外网下载更快。
四、验证带鉴权的 oMLX API
同机接口地址为 http://127.0.0.1:8000/v1。在 oMLX 中确认密钥后,用自己的值替换示例:
export OMLX_API_KEY='替换为你在oMLX设置的API密钥'
curl -fsS --connect-timeout 5 --max-time 30 \
http://127.0.0.1:8000/v1/models \
-H "Authorization: Bearer ${OMLX_API_KEY}"
从响应中确认模型 ID 为 Qwen3.8-27B-oQ4e-mtp;设置了别名时,以实际 API 返回值为准。再验证一次聊天:
curl -fsS --connect-timeout 5 --max-time 180 \
http://127.0.0.1:8000/v1/chat/completions \
-H "Authorization: Bearer ${OMLX_API_KEY}" \
-H 'Content-Type: application/json' \
--data '{
"model": "Qwen3.8-27B-oQ4e-mtp",
"messages": [{"role": "user", "content": "请只回复 OK。"}],
"temperature": 0,
"max_tokens": 32,
"stream": false,
"chat_template_kwargs": {"enable_thinking": false}
}'
检查 choices[0].message.content 是否有内容。不带密钥返回 401 是正常鉴权表现;不要再使用旧文中的 local-token 占位值来连接已经启用真实密钥的服务。
五、在 Harness 桌面版添加可选本地模型
从 DeepSeek Harness 官方网站下载 macOS Apple 芯片版本,安装后打开“设置 → 模型 → 自定义模型 API”。桌面版用户不需要为了这一步另外全局安装 Node.js 或 dsh CLI。
| 字段 | 填写内容 |
|---|---|
| Provider ID | omlx-local |
| 显示名称 | oMLX 本地 Qwen 27B |
| API 地址 | http://127.0.0.1:8000/v1 |
| API 协议 | OpenAI Chat Completions |
| API 密钥 | oMLX 中设置的真实密钥 |
| 模型 ID | Qwen3.8-27B-oQ4e-mtp |
| 上下文窗口 | 32768 |
| 最大输出 | 4096 |
| 输入类型 | 先选择文本,图像通道验证通过后再添加 image |
协议不要选成 OpenAI Responses。这里对接的是 /v1/chat/completions,地址填到 /v1 即可,不要重复拼上完整聊天路径。
保存后新建会话,在模型选择器中选“oMLX 本地 Qwen 27B”。如果你希望保留原来的 DeepSeek 默认模型,只在当前新会话选择本地提供商即可。
本地模型先不声明可选的 High/Max 等推理档位,关闭思考由 oMLX 的模型设置控制。出现 UNSUPPORTED_REASONING_EFFORT 时,先清除客户端为该模型指定的 effort;即使值写成 off,也可能因模型没有声明该档位而被拒绝。
新版配置文件在哪里
0.2.2-rc.1 使用按 profile 保存的 cordis.patch.yml。在 Harness 设置右上角点击“打开配置文件”最稳妥;默认目录为:
~/.dsh/profiles/desktop/cordis.patch.yml
~/.dsh/profiles/web/cordis.patch.yml
~/.dsh/profiles/headless/cordis.patch.yml
三者分别对应桌面版、Web 和 headless,不应假设某个 profile 的模型配置会自动成为另外两个的配置。旧文中直接覆盖 ~/.dsh/settings.yaml 的方式不再作为新版本的主路径。
界面保存的密钥由凭据存储管理,配置保留密钥引用。遇到后端请求格式不兼容,可在现有 omlx-local 提供商下合并以下 compat,保留原来的地址、模型和密钥引用,不要覆盖整个配置文件:
compat:
supportsDeveloperRole: false
supportsReasoningEffort: false
maxTokensField: max_tokens
本次接入使用了这组兼容设置。当前配置格式与凭据优先级以 Harness 官方提供商文档为准。
六、验收工具调用,不只看模型能否聊天
这项测试需要 Harness 所在电脑有可执行的 python3。给 Harness 新建一个独立测试工作区,再发送:
只在当前工作区操作,不访问网络,也不读取其它目录。
创建 test_prime.py,用埃拉托色尼筛法计算 1000 以内的质数。
使用终端工具执行 python3 test_prime.py,报告质数个数与总和。
如出现工具授权,核对命令和工作目录后再允许。最后至少确认三件事:文件确实创建了、执行轨迹中确实运行了 Python、终端输出与最终汇报一致。
这次同一模型服务的 Harness headless 测试完成了 write 和 bash 调用,独立重新运行脚本后得到:
质数个数: 168
质数总和: 76127
这说明这一轮文件写入和命令执行通过,不代表所有编程任务、插件或长时间无人值守都已验收。本文的桌面界面接入步骤已按当前官方文档核对;不把 headless 测试冒充桌面版完整 GUI 验收。
七、MTP 怎么开,哪些任务值得开
仓库名字带 mtp,只表示权重包含相关能力。服务端还要显式开启 Lightning MTP,才能实际使用。 在 oMLX 的目标模型设置中开启 Lightning MTP,选择自适应模式,保存后按界面提示重新加载模型,并从日志确认 MTP 路径确实激活。
首次比较时只改变 MTP 开关,保持模型 revision、提示词、输出长度、温度、Thinking、并发和缓存设置一致。自适应深度先用当前版本默认值,不照抄其它模型的固定深度;本次安装版本对这款 Qwen 的自适应深度上限最低接受值为 4。
如果通过配置或管理 API 操作,0.7.3 相关字段是 mtp_enabled、mtp_adaptive_max_depth、mtp_fixed_depth。不要沿用旧示例中的 mtp_num_draft_tokens。这些是 oMLX 模型设置,不是添加到 Harness 聊天请求中的参数;先通过 App 调整更容易核对。
本次 M2 Max/64GB 实测
测试日期为 2026-11-07,主机是 M2 Max、30 核 GPU、64GB 统一内存,macOS 27.2,oMLX 0.7.3,使用本文固定 revision。单并发、温度 0、关闭 Thinking;每种模式和任务先预热 64 tokens,再测两轮,每轮输出 384 tokens。表中是服务端报告的解码速度均值,不是包含整个 Agent 工具流程的端到端速度。
| 任务 | MTP 关闭 | 自适应 MTP | 速度变化 | 自适应草稿接受率 |
|---|---|---|---|---|
| 中文长文样本 | 19.75 tokens/s | 18.86 tokens/s | 约慢 4.5% | 56.55% |
| Python 代码样本 | 19.70 tokens/s | 34.05 tokens/s | 约快 73% | 93.49% |
代码样本的草稿较容易被接受,推测生成收益覆盖了验证开销;中文样本接受率较低,还出现暂停 MTP 后重新探测的日志,因此未获得加速。这是两类短提示词的小样本结果,不足以代表全部中文和代码任务。
四轮正式代码样本输出相同;中文样本在两种模式之间、以及自适应模式的重复运行之间出现措辞差异。这里只比较速度,没有完成全面质量评测。八个正式请求没有报错,测试期间 Swap 为 0,另一个简单工具调用样本返回了 17 + 25 = 42;这些结果不等于长上下文、多并发和长期运行都已通过。
因此,混合用途先保持 MTP 关闭;以代码为主时,再为该模型开启自适应 MTP,用自己的任务复测。32K 是这次设置的上下文上限,并不表示已经用满 32K 提示词压测。
降低温度会不会更快
温度主要改变采样分布,不能当作直接的加速开关。本次两组测试已经都是温度 0,代码和中文仍有不同结果。更低温度有时有利于草稿接受,但收益取决于模型和任务,不保证降低温度就提高解码速度,也不保证输出更短。
日常优化顺序是:限制不必要的输出长度、关闭不需要的 Thinking、控制上下文和并发,再比较 MTP。不要同时修改一串参数后,把所有变化都归因于 MTP。
八、进阶:需要 CLI 时再安装 dsh
桌面版已经能完成上述流程,不必重复安装 CLI。需要终端或 Web 入口时,先准备 Node.js 24.9.0 或更新版本,再按 Harness 官方项目说明安装本文版本:
node --version
npm install -g @deepseek-ai/[email protected]
dsh --version
dsh web
在打开的 Web 界面为 web profile 单独添加本地提供商。遇到 npm 全局目录权限问题,先修正用户级 Node.js 安装,不直接给安装命令加 sudo。已有桌面版和 oMLX App 时,也不要再运行旧教程的一键安装脚本覆盖现有环境。
headless 同样需要自己的模型配置与可读取的凭据,不能假设它自动复用桌面登录状态。本次 headless 验证曾单独配置该 profile;读者只想使用桌面端时,可以跳过这一部分。
九、常见问题与远程访问
| 现象 | 优先检查 |
|---|---|
| oMLX 找不到模型 | 模型目录是否指向父目录,仓库文件是否完整,是否重新扫描 |
| 8000 端口无法启动 | 是否另有 App、Homebrew 或源码实例占用,同一端口只留一个服务实例 |
| 请求返回 401 | Harness 是否填写了 oMLX 当前真实密钥,是否误用占位值 |
Harness 提示 UNSUPPORTED_REASONING_EFFORT |
清除该模型未声明的推理档位,核对提供商兼容设置 |
| 普通聊天可用,Agent 首次响应很慢 | 工具定义和系统提示词更长,预填充耗时不能用短聊天解码速度推算;比较冷、热缓存分别记录 |
| 客户端接受过长任务,服务端报上下文错误 | 显式填写模型上下文与输出上限,不能依赖客户端较大的缺省值 |
| 开 MTP 后反而更慢 | 查看草稿接受率,用相同任务关闭 MTP 重测 |
| 浏览器打开根地址不正常 | 分别检查 /admin 管理入口及带密钥的 /v1/models;根路径的表现不能单独证明推理 API 是否可用 |
另一台电脑如何连接
同一台 Mac 上,Harness 使用 http://127.0.0.1:8000/v1。另一台电脑上的 127.0.0.1 指向它自己,必须改成模型主机可达的局域网或 Tailscale 地址。
如果确实需要直连,在 oMLX 服务设置里把监听地址从 127.0.0.1 改为 0.0.0.0,保持 API 密钥开启,重启服务,并限制防火墙允许的访问范围。0.0.0.0 表示监听所有 IPv4 接口,不是客户端应填写的网址。这会允许其它网络接口上的访问,应根据实际网络配置开放范围。
客户端格式为:
http://模型主机的可达地址:8000/v1
先验证端口和带鉴权的 /v1/models,再添加到 Harness。返回 502 时,先区分代理生成的错误与服务端错误;绕过代理后的连接仍超时,要继续检查主机是否在线、端口监听、防火墙与 Tailscale 数据通路。控制台显示设备在线,不代表两台设备之间的数据传输已经可达。
远程模型服务只负责推理;Harness 的文件和终端工具通常仍在运行 Harness 的那台电脑上执行,不能把“模型在远程”理解为“所有文件操作都在远程”。
本地推理的成本与联网边界
走这条本地 Qwen 接口时,不产生云端模型的按 token 调用费,但仍有硬件、电力、存储和维护成本。Harness 的联网搜索、插件、下载,以及手动切换的云端模型可能访问网络;模型本地运行不能推出整个应用始终离线,也不能保证所有插件的数据都不出本机。
官方资料与下载入口
- oMLX 0.7.3 稳定版与安装包
- DeepSeek Harness 官方桌面版下载
- Harness 0.2.2-rc.1 发布说明
- Harness 当前版本提供商与 profile 配置文档
- Jundot 模型原始仓库
- 同一模型的 HF-Mirror 入口
- Hugging Face 下载 CLI 文档
玩客笔记开发者与算力工具箱
按实际需要了解 IPRoyal 代理服务和阿里云产品。这些是推广链接,购买前请自行核对当前价格、条款与适用范围;它们不是运行本地模型的必需条件。
🚀 显存与部署调优补充说明:
1. 显存实测:Qwen 3.8 27B (oQ4e-mtp) 稳态常驻显存仅约 15.8GB。对于 24GB/32GB 统一内存的 Mac Mini (M2/M4 Pro) 或 MacBook Pro,同样可以预留足够系统显存流畅运行。
2. MTP 推测加速:请确认已拉取最新编译的 oMLX 引擎,开启推测解码参数后实测出字速度可稳定跑在 50+ Tokens/s。
3. 纯物理离线:部署成功后可直接拔掉网线测试,企业私有源码与个人工作流零外泄风险。遇到部署报错欢迎留言交流!