4台Mac跑671B大模型:exo 分布式AI集群本地推理指南
【免费下载链接】exoRun frontier AI locally.项目地址: https://gitcode.com/GitHub_Trending/exo8/exo
exo 是一个本地大模型分布式推理框架:在多台 Apple Silicon 或 Linux 机器上各跑一条命令,设备就会自动发现彼此、组成集群,把单机装不下的大模型切开并行运行。Mac 用户也可以直接brew install --cask exo装菜单栏应用,省去源码构建。
一句话看懂它
- 组网零配置:每台机器装好就上线,自动互相发现并展示实时拓扑,不用手动填地址
- 跑更大的模型:把模型分片到多台设备的内存里,总容量决定你能跑多大的本地大模型
- 加机器真的会更快:张量并行官方数据是 2 台最高 1.8 倍、4 台最高 3.2 倍
- 换机器不换代价:OpenAI、Claude、Ollama 等 API 格式全兼容,现有客户端改个 base_url 就能用
最短路径跑通
第 1 步:拉代码并构建仪表盘
git clone https://gitcode.com/GitHub_Trending/exo8/exo cd exo/dashboard && npm install && npm run build会看到:构建完成,产物生成在dashboard/build,这是后面网页控制界面的来源(macOS 源码运行还需 Xcode、uv、node、rust nightly,按 README 准备即可)。
第 2 步:在第一台机器上启动
cd exo uv run exo会看到:本机集群服务和仪表盘启动在http://localhost:52415,页面里出现当前这台节点。
第 3 步:在第二台机器上执行同样两条命令
uv run exo会看到:两台设备自动发现并组网成功,仪表盘拓扑图和聊天界面里都能同时看到两个节点,点 LAUNCH INSTANCE 就能分配第一个模型实例。
按设备组合选玩法
旧设备凑算力(异构集群)
新旧配置差异大的机器可以直接混编,调度器会按各设备的内存和链路带宽决定每个模型分片放哪台。内存有限但网络好的机器还能只当"协调员",不参与推理:
uv run exo --no-worker分片决策逻辑在 placement.py,它对每条设备链路实时评估延迟与带宽后再给出放置方案。
多台机器分摊大模型(RDMA 高速直连)
4 台 512GB 的 M3 Ultra Mac Studio 通过 Thunderbolt 5 全互联,把 DeepSeek v3.1 671B(8-bit,约 671GB,远超单台容量)切开后跑起来。开启 RDMA 需要 macOS 26.2+:关机后长按电源 10 秒进恢复模式,在终端执行rdma_ctl enable,重启后 exo 会自动接管。
断网环境跑本地推理
模型放在外置硬盘或共享存储里,关掉联网即可完全离线:
EXO_OFFLINE=true EXO_MODELS_DIRS=/Volumes/SSD/exo-models uv run exo多集群共用一个局域网时,再用EXO_LIBP2P_NAMESPACE=名字给各自集群划分隔离空间,避免误连。
实测表现
结论:只要内存加得够、链路够快,前沿规模模型可以在消费级 Mac 集群上本地推理,且加机器有实测加速。以下数据来自 Jeff Geerling 的公开测试(4 × M3 Ultra Mac Studio,张量并行 + RDMA over Thunderbolt 5):
- 集群总内存:4 × 512GB = 2TB
- 成功运行的模型:DeepSeek v3.1 671B(8-bit)、Qwen3-235B(8-bit)、Kimi K2 Thinking(4-bit)
- 扩展速度:张量并行下 2 台最高 1.8x、4 台最高 3.2x(官方 README 口径)
- 设备间通信延迟:RDMA over TB5 相比普通网络降低约 99%
常见坑速查
现象:两台机器在同一局域网,但始终发现不了彼此原因:不在同一子网、防火墙拦了局域网流量,或两边的EXO_LIBP2P_NAMESPACE不一致解法:确认同子网、放行本地网络权限,统一命名空间后重启 exo,必要时看~/.cache/exo/exo_log/下的日志
现象:RDMA 没生效或直连不稳定原因:两边 macOS 版本必须精确一致(含 beta 版本号),线缆非 TB5 规格,或在 Mac Studio 上用了紧邻以太网口的那个 TB5 口解法:对齐系统版本、换正规 TB5 线缆、避开以太网口旁边的端口
现象:Linux 节点推理速度远低于预期原因:exo 在 Linux 上目前只跑 CPU,没有 GPU 加速解法:推理负载交给 Apple Silicon 机器,Linux 机用--no-worker只做协调
接入现有工具链
exo 对外同时提供 OpenAI Chat Completions、Claude Messages、OpenAI Responses 和 Ollama 四套 API 端点,意味着 LangChain、OpenWebUI 这类现成工具改个base_url就能指向你的集群;自定义 HuggingFace 模型也能通过/models/add端点加载,完整端点清单见 docs/api.md。最小可用示例:
import openai client = openai.OpenAI(base_url="http://localhost:52415/v1", api_key="not-needed") r = client.chat.completions.create( model="mlx-community/Llama-3.2-1B-Instruct-4bit", messages=[{"role": "user", "content": "你好"}], )到这里集群已经能服务真实流量了。建议的下一步:
- 先用 1B 小模型在两台设备上跑通,观察仪表盘里的自动并行方案
- 调
/instance/previews预览不同放置策略,再决定用流水线还是张量并行 - 有 TB5 的机器按上文开启 RDMA,用
bench/exo_bench.py量化加机器前后的吞吐差异
【免费下载链接】exoRun frontier AI locally.项目地址: https://gitcode.com/GitHub_Trending/exo8/exo
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考