235B 模型塞不进一台 Mac:exo 分布式推理的多机切分方案
【免费下载链接】exoRun frontier AI locally.项目地址: https://gitcode.com/GitHub_Trending/exo8/exo
exo 是一个本地 AI 集群项目:在每台 Mac 上装好它,设备会在局域网内自动发现彼此,把单机装不下的模型切到所有节点上跑推理,并对外提供 OpenAI、Claude、Ollama 兼容的 API。这篇文章讲清它的发现与切分机制,以及怎么真正跑起来。
为什么一台机器不够
本地推理的瓶颈通常不是算力,而是内存。Qwen3-235B 8-bit 权重大于 200GB,DeepSeek v3.1 671B 更是超过 600GB,一台 512GB 的 Mac Studio 也装不下,MacBook Pro 就更别提了。常规替代方案是租云端 GPU 或者换小模型,前者贵,后者妥协。exo 的定位是把同一个模型切到多台 Apple Silicon 设备上,每台机器负责一部分权重,机器越多能跑的模型越大——官方集群用 4 台 Mac Studio 同时跑起了 DeepSeek v3.1 671B 和 Kimi K2 Thinking,下面这张就是其中的基准测试画面。
自动发现与模型切分是怎么运作的 ⚡
同网段的节点启动后自动互相发现,并选举出一个 master 节点,由它维护一张拓扑图:设备是节点,连接是边,边可以是局域网 socket 或 Thunderbolt 5 上的 RDMA(远程直接内存访问,绕过网络栈直接读写对端内存)。加载模型时,它先筛出总内存足够的节点环,再按每台机器的可用内存占比分配层数——相当于把一条长流水线按每个人的工作量切段,大内存机器分更多层。TB5 组网下还能切换张量并行,一层被多台机器并行计算,2 台设备约 1.8 倍加速,不只是内存叠加。切分逻辑的核心在 src/exo/master/placement.py。
3 条命令起一个集群
前置依赖是 uv 和 node(后者用来构建 dashboard):
git clone https://gitcode.com/GitHub_Trending/exo8/exo cd exo/dashboard && npm install && npm run build && cd .. uv run exodashboard 和 API 会在http://localhost:52415/起来。在第二台 Mac 上跑同样的命令,同局域网下自动加入集群,不需要任何配置。macOS 26.2+ 也可以直接brew install --cask exo装菜单栏应用;从源码跑则还要装 Rust nightly 和 macmon 的指定 fork,README 里写了完整步骤。模型首次使用会下载到~/.exo/models(macOS)或~/.local/share/exo/models(Linux),想放到外置盘或 NFS 上,用环境变量EXO_MODELS_DIRS指定有空间的目录。
dashboard 本身分聊天、下载、traces 几个页面,节点变化时 master 会重新选举,期间 API 会短暂无响应,看到偶发超时先确认是不是有节点刚掉线。
用着会踩的坑 ⚠️
如果你发现节点没被识别,先检查两台机器是否同一局域网、52413(发现)和 52414(通信)端口有没有被防火墙挡掉;同一网络里跑多个 exo 集群时,改启动参数--namespace隔离,不同 namespace 的节点互不连接。
RDMA over Thunderbolt 5 是可选特性:需要 macOS 26.2+,进恢复模式执行rdma_ctl enable,集群内所有节点要用 TB5 线缆两两直连(全互联),各设备系统版本必须完全一致,beta 号都得相同;Mac Studio 上不能用以太网口旁边那个 TB5 口。条件凑不齐就先用普通局域网,跑得起来,只是没有 99% 延迟降低。
实例创建是异步的:POST /instance之后服务端只回“命令已接收”,要等/instance/await返回 ready 再发推理请求,否则会拿到超时。排障时日志在~/.cache/exo/exo_log/,先看那里再看网络。
它适合谁 / 不适合谁
有两台以上 Apple Silicon 设备、想把大参数开源模型跑在本地的人,这个方案的价值很直接:兼容 4 种 API 格式,现有 OpenAI、Claude、Ollama 客户端把 base URL 指到localhost:52415就能用,已有脚本不用改。只有一台机器的人,分布式推理没有意义,单机场景下它等价于一个本地推理框架;想搭高并发线上服务也不合适,它是少数并发流下的本地工具,不是生产 serving 平台。Linux 端目前只跑 CPU,GPU 支持还在开发,集群全是 Linux 机器的话先降低预期。
下一步可以翻 docs/api.md 的端点清单,用/instance/previews在加载前预览一个模型会被切到哪几台机器;再去仓库 issues 里看看社区正在调的切分参数,真实硬件组合的答案大多在那里。
【免费下载链接】exoRun frontier AI locally.项目地址: https://gitcode.com/GitHub_Trending/exo8/exo
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考