2026年11月11日
cover_master_youtube_v4
2026年11月更新:用 oMLX App 与 DeepSeek Harness 桌面端接入本地 Qwen3.8 27B,提供 HF-Mirror 与官方站代理两条下载路径、权重校验、工具调用验证和 M2 Max 64GB 的 MTP 条件实测。

在 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 的联网搜索、插件、下载,以及手动切换的云端模型可能访问网络;模型本地运行不能推出整个应用始终离线,也不能保证所有插件的数据都不出本机。

官方资料与下载入口


玩客笔记开发者与算力工具箱

按实际需要了解 IPRoyal 代理服务和阿里云产品。这些是推广链接,购买前请自行核对当前价格、条款与适用范围;它们不是运行本地模型的必需条件。

About The Author

1 thought on “【保姆级】Mac Studio 极简部署 DeepSeek Harness + Qwen 3.8 27B (oMLX)”

  1. 🚀 显存与部署调优补充说明:

    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. 纯物理离线:部署成功后可直接拔掉网线测试,企业私有源码与个人工作流零外泄风险。遇到部署报错欢迎留言交流!

Comments are closed.