Exo 分布式推理:4 台 Mac 跑出 31.9 t/s 的 235B 集群
【免费下载链接】exoRun frontier AI locally.项目地址: https://gitcode.com/GitHub_Trending/exo8/exo
200B+ 参数的模型塞不进单台机器,GPU 集群的采购成本又太高。Exo 做的事很简单:把局域网里的 Mac 通过雷电接口连成一个分布式推理集群,RDMA over Thunderbolt 让加机器真的能变快,而不是只解决装不下的问题。
它到底能做什么
🔍 自动发现局域网里的机器
每台跑着 exo 的机器会自动互相发现、自动组网,不需要填 IP 或改配置。实测启动后 dashboard 直接列出同网段节点,连--no-worker参数都能让一台只有网线的机器充当纯协调节点(只做网络与编排、不跑推理)。
🔌 用雷电 5 把 4 台 Mac 连成一个推理节点
这是 exo 分布式推理最有辨识度的部分:RDMA over Thunderbolt 5,官方口径是设备间延迟降低 99%。代价是门槛不低:macOS 26.2 及以上、TB5 线缆、节点间要全连接(4 台就是 6 根线),且所有机器系统版本必须逐字符一致。
🧩 跨设备切分模型不用手动配
Exo 基于实时拓扑视图自己决定模型怎么切,链路的延迟和带宽都会进决策。底层是流水线并行或张量并行(MLX distributed 实现),你只需要在 dashboard 里点一下,或者调/instance/previews看它给出的所有合法放置方案再 POST 创建。
🔁 现有 OpenAI / Ollama 客户端改 base URL 就能接
/v1/chat/completions、/v1/messages、/v1/responses和 Ollama 接口全部兼容,流式输出、取消(断连或调/v1/cancel/{command_id})都有。团队里已有的工具链不用重写,换个地址就能打到 Mac 集群上。
从零到跑通
四步,按顺序来:
git clone https://gitcode.com/GitHub_Trending/exo8/exo cd exo/dashboard && npm install && npm run build uv run exo curl http://localhost:52415/state克隆前需要装好uv、node和 Rust nightly(构建 Rust 绑定用)。第三步启动后,浏览器打开http://localhost:52415,应能看到设备列表;第四步拉/state,返回的 JSON 里有节点拓扑和实例状态,说明分布式推理集群已就位。不想从源码跑的,macOS 上直接brew install --cask exo装官方应用,它会引导你装系统网络配置。
性能实测
以下是 Jeff Geerling 在 4 × M3 Ultra Mac Studio(512GB)上的实测,仓库 README 收录的官方数据:
| 模型 | 硬件配置 | Exo(RDMA) | 对比基线(llama.cpp TCP) | 提升 |
|---|---|---|---|---|
| Qwen3-235B A22B | 1 / 2 / 4 节点 | 20.4 / 26.2 / 31.9 t/s | 20.4 / 17.2 / 15.2 t/s | 4 节点 +56% |
| DeepSeek V3.1 671B | 1 / 2 / 4 节点 | 21.1 / 27.8 / 32.5 t/s | 14.8 / 16.0 / 14.6 t/s | 4 节点 +123% |
| Kimi K2 Thinking 1T | 2 / 4 节点 | 21.6 / 28.3 t/s | 18.5 / 16.4 t/s | 4 节点 +73% |
跑完这三组数据,最值得看的是趋势方向:llama.cpp 走 TCP 时节点越多反而越慢(17.2 → 15.2 t/s),Exo 走 RDMA 则是单调上涨。README 给的张量并行加速比是 2 机 1.8 倍、4 机 3.2 倍,和 235B 这组(20.4 → 31.9)基本对得上。前提是 TB5 全网直连、OS 版本一致、RDMA 已启用——缺一条就退回普通 TCP 路径,多机扩展会明显变差,别指望线性加速。
进阶配置与调优
- RDMA 开关:不开则上面所有加速比不成立。关机进恢复模式,终端执行
rdma_ctl enable,重启即生效。调完 exo 会自动接管;注意 Mac Studio 以太网口旁那个 TB5 口不可用。 - 模型目录
EXO_MODELS_DIRS/EXO_MODELS_READ_ONLY_DIRS:默认下模型只落在本机~/.local/share/exo/models,大模型集群里磁盘总是不够。EXO_MODELS_READ_ONLY_DIRS=/mnt/nfs/models uv run exo EXO_MODELS_DIRS=/Volumes/ExternalSSD uv run exo只读目录指向 NFS 共享盘,各节点免重复下载;写目录可配多个,按顺序选第一个空间够的。
- 集群命名空间
EXO_LIBP2P_NAMESPACE:同一网络里跑多套 exo 时会互相发现、误组网。EXO_LIBP2P_NAMESPACE=prod-cluster uv run exo给每个集群一个命名空间,启动日志会打印当前值,方便排查"为什么我的节点连进了别人的集群"。
生产环境落地
监控与可观测性
每节点都暴露 API。GET /state拉取拓扑、节点与实例全貌,是写监控脚本的起点;/events给内部事件流用于排障,/bench/chat/completions额外返回prompt_tps、generation_tps、峰值内存和分相功耗,完整端点清单见 docs/api.md 与 src/exo/master/api.py。
故障与容错
推理跑在独立 Runner 进程里,由 supervisor 看门——Runner 挂掉只影响对应实例,不会拖垮节点上的其他服务。Master 无中心,节点掉线后选举(src/exo/shared/election.py,默认 3 秒超时)会选出新主节点继续服务。
扩展与限制
基准默认节点数上限是 4,更大集群未验证;RDMA 要求 TB5 全连接且 OS 版本逐字符一致;Linux 目前是 CPU 推理,GPU 支持还在开发中,这条路没通之前生产部署基本锁死在 Apple Silicon。
适合谁、不适合谁
值得试
- 手上已有 3~4 台带 TB5 的 Mac(M3 Ultra / M4 Max 系列),想本地跑 200B+ 参数模型
- 现有 OpenAI / Ollama 客户端不想大改,想把后端切到本地 Mac 集群
- 需要把模型权重放共享存储、多节点复用同一份下载
先别上
- 依赖 CUDA GPU 集群:Linux 侧目前还是 CPU 推理,这条路没通之前别选它
- 模型小于 30B:单台机器就装得下,多机的部署和运维成本不划算
如果你正好有几台 Mac Studio 吃灰,按上面四步走,一个下午就能把 235B 跑起来。
【免费下载链接】exoRun frontier AI locally.项目地址: https://gitcode.com/GitHub_Trending/exo8/exo
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考