news 2026/8/31 19:32:23

如何把多台设备拼成一台本地 AI 超算:exo 分布式集群实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何把多台设备拼成一台本地 AI 超算:exo 分布式集群实战指南

如何把多台设备拼成一台本地 AI 超算:exo 分布式集群实战指南

【免费下载链接】exoRun frontier AI locally.项目地址: https://gitcode.com/GitHub_Trending/exo8/exo

想跑一个参数量超过单台机器内存的大模型,与其把量化精度压到失真,不如换个思路:用 exo 把几台设备连成一套分布式 AI 集群,让模型被自动拆到多台机器上并行推理。exo 是一个主打"本地运行前沿 AI"的分布式计算框架,设备启动后自动互相发现,走 Thunderbolt 上的 RDMA 组网,支持张量并行(Tensor Parallelism)与 Pipeline 两种拆法,同时提供 OpenAI、Claude、Ollama 多套兼容 API 🧩

单机装不下大模型时,该找什么工具?

先把 exo 能带来的几个关键数字摆出来,方便你判断它值不值得折腾:

  • 延迟:通过 Thunderbolt 5 上的 RDMA,设备间通信延迟降低 99%;
  • 吞吐:张量并行下,2 台设备最高提速 1.8 倍,4 台设备最高提速 3.2 倍;
  • 拆分:根据设备拓扑的实时视图(各节点资源 + 每条链路的延迟/带宽)自动决定模型怎么切,不用手动规划;
  • 后端:推理基于 Apple 的 MLX,分布式通信走 MLX distributed;
  • 接口:一套服务同时兼容 OpenAI Chat Completions、Claude Messages、OpenAI Responses 和 Ollama API,现有客户端基本不用改配置。

换句话说:内存不够就横向加机器,速度不够就再加机器——加机器这件事本身是变快而不是变慢,这正是 RDMA 带来的区别。

先让一台设备跑起来:装好 exo 并启动集群节点

exo 目前支持 macOS(Apple Silicon)和 Linux。macOS 需要 Tahoe 26.2+ 才能用上 RDMA,并且建议装好 Xcode(提供 Metal ToolChain,编译 MLX 用);Linux 侧目前跑在 CPU 上,GPU 支持还在路上。

准备依赖

两个平台都需要uvnode(构建内置 dashboard,Linux 要求 node 18+)和 Rust nightly(构建 Rust 绑定)。macOS 上一般用 Homebrew 一条命令装齐uv node,另外装一个macmon(Apple Silicon 硬件监控用)。

一条命令启动

依赖就绪后,把仓库拉下来、构建 dashboard、启动节点,就是下面这三行:

git clone https://gitcode.com/GitHub_Trending/exo8/exo cd exo/dashboard && npm install && npm run build && cd .. uv run exo

启动后,这台设备会在http://localhost:52415同时提供 dashboard 和 API,之后所有交互都从这里进入。macOS 用户也可以不碰命令行:官方提供了一个常驻后台的菜单栏 App(要求 macOS Tahoe 26.2+),通过 Homebrew 的exocask 或官网 dmg 安装,首次运行会请求修改系统设置并安装一个网络配置 profile,属于正常行为。

接入多台设备:自动发现如何组网

🔌 第二台、第三台设备上重复上面三步即可,不需要任何手动配对:跑着 exo 的设备会自动发现彼此并加入同一集群。任意一台的 dashboard 都可以作为整个集群的控制台。

打开 dashboard 后,中央就是集群拓扑视图:

图中是 4 台 Mac Studio 组成的集群,每台标注了内存占用(约 172GB/512GB,34%)、CPU 占用、温度(35~38°C)和功耗(13~15W),虚线代表节点间的通信链路。拓扑是实时的,模型加载到哪个节点、占了多少内存,一目了然。

两个实用细节:

  • 同一网络里想跑多个互不干扰的集群,可以设置EXO_LIBP2P_NAMESPACE做命名空间隔离,避免设备误加入别人的集群;
  • 某台机器没有 GPU 资源但网络条件好时,用uv run exo --no-worker以纯协调节点身份加入,只负责组网和调度,不参与推理。

Thunderbolt 5 + RDMA:把集群速度拉满

⚡ RDMA(Remote Direct Memory Access)是 macOS 26.2 新加入的能力,支持它的机型包括 M4 Pro Mac mini、M4 Max Mac Studio / MacBook Pro、M3 Ultra Mac Studio。启用流程只需进一次恢复模式:

  1. 关机后长按电源键 10 秒,直到启动菜单出现;
  2. 选"选项"进入恢复模式,从"实用工具"菜单打开终端;
  3. 输入rdma_ctl enable回车;
  4. 重启,之后 exo 会自动接管剩余配置。

这张图是 4 台 M3 Ultra Mac Studio 跑 Qwen3-235B(8-bit)的实测对比:单节点时 exo 与 llama.cpp(TCP)接近(19.5 对 20.4 t/s);到 2 节点,exo 反超到 26.2 t/s,而 llama.cpp 掉到 17.2;4 节点时 exo 达到 31.9 t/s,llama.cpp 只剩 15.2——普通 TCP 方案加机器反而更慢,RDMA 方案加机器持续变快,这就是前面那组提速数据(1.8x / 3.2x)的来源。

RDMA 有几条硬约束,不满足就退化回普通网络通信:

  • 集群内设备必须两两直连(全互联),不能用交换机中转,线缆必须支持 TB5;
  • Mac Studio 上,以太网口旁边那个 Thunderbolt 5 口不能用
  • 所有设备的 macOS 版本必须完全一致(连 beta 版本号都要一样),否则 RDMA 端口可能互相发现不了;
  • 从源码运行时,用仓库里tmp/set_rdma_network_config.sh脚本关掉 Thunderbolt Bridge 并给各 RDMA 口配好 DHCP。

从 Dashboard 到 API:装载模型开始对话

在 dashboard 上启动实例

打开http://localhost:52415,右侧 INSTANCE 面板点 LAUNCH INSTANCE,然后做四个选择:模型、Sharding(Pipeline 或 Tensor)、Instance Type(MLX Ring 或 MLX RDMA)、最小节点数,点启动即可:

界面左侧是聊天区,中间是集群拓扑(各节点内存、温度、功耗实时刷新),右侧 INSTANCES 面板列出了已加载的模型(图中 4×512GB M3 Ultra Mac Studio 同时跑着 DeepSeek v3.1 8-bit 与 Kimi-K2-Thinking 4-bit)以及 LAUNCH INSTANCE 配置项。加载完成后直接在左侧聊天框提问就行。

用 API 管理实例与请求

不想点界面就走 API。推荐顺序是:先用/instance/previews?model_id=...预览模型的所有合法放置方案(返回每种拆分下各节点占多少内存),挑一个后 POST 到/instance创建;创建是异步的,用/instance/await挂住 SSE 流,收到"type": "ready"再发推理请求。

curl -N -X POST http://localhost:52415/v1/chat/completions \ -H 'Content-Type: application/json' \ -d '{"model": "mlx-community/Llama-3.2-1B-Instruct-4bit", "messages": [{"role": "user", "content": "What is AI?"}], "stream": true}'

用完后curl -X DELETE http://localhost:52415/instance/<id>释放内存。同一套服务还暴露/v1/messages(Claude 格式)、/v1/responses(OpenAI Responses 格式)和/ollama/api/chat(Ollama 格式,可直接接 OpenWebUI 这类客户端);想跑 HuggingFace 上的自有模型,POST/models/add并传model_id即可,完整字段与响应见 API 文档。

避坑指南:新手最容易问的六个问题

💡 按"踩坑频率"从高到低列一下:

  • Linux 为什么慢?当前 Linux 上 exo 跑在 CPU,GPU(CUDA)支持在开发中,Linux 集群目前更适合验证组网和流程,性能预期要放低。
  • 模型文件放哪?默认在~/.exo/models(macOS)或~/.local/share/exo/models(Linux)。想放到高速外置盘,启动时加EXO_MODELS_DIRS=/Volumes/ExternalSSD/exo-models uv run exo;多台机器共享同一份模型可以用EXO_MODELS_READ_ONLY_DIRS指向 NFS 挂载,那里的模型只读不可删。
  • 断网能用吗?可以,EXO_OFFLINE=true只加载本地已有模型,不访问网络。
  • RDMA 组网失败?九成是版本或连接问题:OS 版本不一致、没全互联、用了不支持 TB5 的线、或误用了 Mac Studio 网口旁的那个 TB5 口,逐一排查即可。
  • 自定义模型加载报错?需要trust_remote_code的模型默认会被拒绝,出于安全考虑该开关默认关闭,确认信任该模型的远程代码后再显式打开。
  • 怎么验证拆分方案快不快?仓库自带 bench/exo_bench.py,节点保持uv run exo运行,指定模型、prompt 长度和生成长度,它会输出每种放置下的 prompt tps、generation tps 和峰值内存,帮你选最优拆分而不是靠猜。

六台设备、两根 TB5 线、一条uv run exo——这就是把分散的机器变成一台本地 AI 超算的全部成本。剩下的事情交给自动发现和拓扑感知的并行策略,你只需要盯着 dashboard 上那个越来越满的内存条。

【免费下载链接】exoRun frontier AI locally.项目地址: https://gitcode.com/GitHub_Trending/exo8/exo

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/31 19:32:07

C盘又满了?用磁盘可视化分析找出隐藏大文件,彻底释放空间

C盘红得发紫的那一天&#xff0c;我盯着资源管理器里的剩余空间&#xff0c;发现数字几乎没怎么动。真相往往藏在一个反直觉的点上&#xff1a;你删了那么多缓存&#xff0c;清理了那么多临时文件&#xff0c;但空间没有回来。原因很简单——真正吃掉C盘的&#xff0c;不是垃圾…

作者头像 李华
网站建设 2026/8/31 19:29:59

前端面试八股文学习指南:从基础原理到实战应对

聊到前端面试八股文&#xff0c;大多数人的第一反应是“背题”&#xff0c;第二反应是“背了也没用”。我在这个行业待了十来年&#xff0c;面过别人也被别人面过&#xff0c;对这件事的看法很明确&#xff1a;八股文本身没有原罪&#xff0c;原罪是只用死记硬背的态度去对待它…

作者头像 李华
网站建设 2026/8/31 19:24:35

基于人体关键点检测的实时坐姿分析系统开发实践

简介&#xff1a;这是一套面向Python全栈开发者与计算机视觉初学者的实战项目代码&#xff0c;聚焦坐姿健康监测场景&#xff0c;通过实时姿态识别实现坐姿异常检测与纠正提醒。资源采用前后端分离架构&#xff0c;后端基于Flask/FastAPI提供RESTful接口&#xff0c;集成MediaP…

作者头像 李华
网站建设 2026/8/31 19:20:15

Unity优秀项目盘点:从渲染、物理到工具链的工程拆解

先说明一个前提&#xff1a;这类“优秀 Unity 项目盘点”的内容&#xff0c;问题不在“看热闹”&#xff0c;而在“看完之后能不能拆出东西用到自己项目里”。开发者社区每隔一段时间就会涌现一批高完成度的整活项目&#xff0c;有的赢在视觉表现&#xff0c;有的赢在玩法交互&…

作者头像 李华
网站建设 2026/8/31 19:15:53

6000元AMD 9600X配RTX 5070 2K游戏主机装机方案解析

很多玩家在预算有限时&#xff0c;最容易纠结的一个问题就是&#xff1a;CPU 和显卡到底该保哪边。如果你的答案是“显卡决定游戏上限&#xff0c;平台决定未来几年能升级到什么程度”&#xff0c;那么 AMD 9600X 搭配自备 RTX 5070 这套思路&#xff0c;就是当前 2K 游戏场景下…

作者头像 李华