TinkerLab
跳转可下载配置
01 // HOMELABApple Silicon Mac流式 API阅读与复现约 14 分钟

多台 Mac 雷电 5 RDMA 分布式大模型集群实战:rdma_ctl 解锁、MLX JACCL (--backend jaccl) 对决 exo 与 llama.cpp RPC 及 Mac Studio M5 Ultra (512GB · 1.2 TB/s) 推算

随着 macOS 26.2+ 开放原生雷电 5 RDMA(通过恢复模式 `rdma_ctl enable` 激活 `rdma_en*` 设备)以及 MLX 引入 JACCL 通信后端(`mlx.launch --backend jaccl`),多台 Mac 之间的通信延迟从传统雷电网桥 TCP 的 ~180 µs 骤降至 ~3 µs,首次让跨多台 Mac 的张量并行(Tensor Parallelism)实现真正的带宽叠加加速!本文实测对比 2× M5 Max (256GB) 与 2× M3 Ultra 集群下 MLX JACCL、`exo` 与 `llama.cpp` `rpc-server` 的吞吐差异,拆解 4 节点 6 线全互联拓扑铁律,并按规格推算 Mac Studio M5 Ultra(512GB · 1.2 TB/s)。

[核心实测结论 / TL;DR]在 Tinker AI 实测工坊针对「多台 Mac 雷电 5 RDMA 分布式大模型集群实战:rdma_ctl 解锁、MLX JACCL (--backend jaccl) 对决 exo 与 llama.cpp RPC 及 Mac Studio M5 Ultra (512GB · 1.2 TB/s) 推算」的复现测试中(实测环境:实测平台:2× MacBook Pro M5 Max(单机 128GB · 614 GB/s,组网 256GB)与 2× Mac Studio M3 Ultra(单机 256GB · 819 GB/s,组网 512GB),使用 1 米认证雷电 5(80 Gbps)线缆直连 | 规格推算对照:Mac Studio M5 Ultra(512GB · 约 1,200 GB/s),软件版本:MLX 0.25+ & mlx-lm 0.24+ (`mlx.distributed` with `--backend jaccl` & `MLX_METAL_FAST_SYNCH=1`) / exo 0.4+ (Thunderbolt RDMA / Ring discovery mode) & llama.cpp b4920+ (`rpc-server` / `ggml-rpc`) / Models: Qwen3-235B-A22B-4bit (MLX ~132 GB) & DeepSeek-R1-671B-4bit (MLX ~378 GB),验证日期:2026-11-09):随着 macOS 26.2+ 开放原生雷电 5 RDMA(通过恢复模式 `rdma_ctl enable` 激活 `rdma_en*` 设备)以及 MLX 引入 JACCL 通信后端(`mlx.launch --backend jaccl`),多台 Mac 之间的通信延迟从传统雷电网桥 TCP 的 ~180 µs 骤降至 ~3 µs,首次让跨多台 Mac 的张量并行(Tensor Parallelism)实现真正的带宽叠加加速!本文实测对比 2× M5 Max (256GB) 与 2× M3 Ultra 集群下 MLX JACCL、`exo` 与 `llama.cpp` `rpc-server` 的吞吐差异,拆解 4 节点 6 线全互联拓扑铁律,并按规格推算 Mac Studio M5 Ultra(512GB · 1.2 TB/s)。 离线边界为「100% 物理直连雷电 5 RDMA 离线局域集群」(所有分布式集合通信(`all_sum`、`all_gather`)均通过点对点雷电 5 RDMA 通道(`rdma_en*`)完成,无需经过路由器或公网。),关键限制包括:开启雷电 RDMA(`rdma_ctl enable`)**必须在每台 Mac 的开机恢复模式(Recovery Mode)终端中执行**,且硬件端严格要求支持 **Thunderbolt 5** 的机型(M4 Pro/Max、M3 Ultra、M5 Pro/Max/Ultra)配合 macOS 26.2+。旧款雷电 3/4 机型仅支持走 TCP 协议的雷电网桥(`--backend ring`)。
REPRODUCIBILITY MANIFEST // 实测环境与边界清单
最后实测验证日期:2026-11-09
实测硬件与操作系统 (Tested Hardware & OS)

实测平台:2× MacBook Pro M5 Max(单机 128GB · 614 GB/s,组网 256GB)与 2× Mac Studio M3 Ultra(单机 256GB · 819 GB/s,组网 512GB),使用 1 米认证雷电 5(80 Gbps)线缆直连 | 规格推算对照:Mac Studio M5 Ultra(512GB · 约 1,200 GB/s)

锁定软件与模型版本 (Pinned Stack Versions)
MLX 0.25+ & mlx-lm 0.24+ (`mlx.distributed` with `--backend jaccl` & `MLX_METAL_FAST_SYNCH=1`)exo 0.4+ (Thunderbolt RDMA / Ring discovery mode) & llama.cpp b4920+ (`rpc-server` / `ggml-rpc`)Models: Qwen3-235B-A22B-4bit (MLX ~132 GB) & DeepSeek-R1-671B-4bit (MLX ~378 GB)
离线与外部连接核查 (Offline & Network Boundary)
100% 物理直连雷电 5 RDMA 离线局域集群

所有分布式集合通信(`all_sum`、`all_gather`)均通过点对点雷电 5 RDMA 通道(`rdma_en*`)完成,无需经过路由器或公网。

已知限制与失败案例 (Known Limits)
  • 开启雷电 RDMA(`rdma_ctl enable`)**必须在每台 Mac 的开机恢复模式(Recovery Mode)终端中执行**,且硬件端严格要求支持 **Thunderbolt 5** 的机型(M4 Pro/Max、M3 Ultra、M5 Pro/Max/Ultra)配合 macOS 26.2+。旧款雷电 3/4 机型仅支持走 TCP 协议的雷电网桥(`--backend ring`)。
  • **JACCL 严禁菊花链串接:** `mlx.launch --backend jaccl` 要求节点间必须采用**点对点全互联拓扑(Full Mesh)**,即 $N$ 台 Mac 需要 $N(N-1)/2$ 根雷电 5 线缆(2 台需 1 根,3 台需 3 根,**4 台必须插满 6 根雷电 5 线**)。串联菊花链会导致 RDMA 队列对创建失败。
  • 表 1 中 **Mac Studio M5 Ultra (512GB · 约 1,200 GB/s)** 一行为基于双芯 M5 Max UltraFusion 规格的**理论推算值(`[规格推算]`)**,其余双机 M5 Max 与 M3 Ultra 数据均为实测。
遇到环境异常?打开排障诊断树 →

1. 为什么雷电 5 RDMA (~3 µs) 能解锁张量并行提速,而传统雷电 TCP 网桥却越并越慢?

在 macOS 26.2 之前,用雷电线连接两台 Mac 只能走虚拟的「雷电网桥(Thunderbolt Bridge)」TCP/IP 协议栈,单次通信往返延迟高达 `150–220 µs`。而在大模型**张量并行(Tensor Parallelism, TP)**下,每生成 1 个 Token,每一层 Transformer 都必须做 2 次跨机 `all_reduce` 同步(以 61 层的 DeepSeek-R1 为例,单 Token 需跨机同步 122 次)——如果走 TCP 网桥,光是网络等待就要白白耗掉 **`22 毫秒/token`**,导致双机并联比单机还要慢!因此,传统的 `llama.cpp rpc-server` 与 TCP 模式下的 `exo` 只能退而求其次采用**流水线并行(Pipeline Parallelism, PP)**:即第 1 台 Mac 算前半截层、算完传给第 2 台 Mac 算后半截。这虽然能把内存容量拼起来(比如 `2 × 128GB = 256GB`),但**同一时刻只有一台 Mac 的内存带宽在干活,生成速度完全不会提升**。而 macOS 26.2+ 原生引入的 **Thunderbolt 5 RDMA** 彻底绕过了内核 TCP 协议栈,配合 MLX 内置的 **`jaccl` 后端**,直接通过 `rdma_en*` 设备执行零拷贝 RDMA 原语,将跨机延迟压到惊人的 **`~3 µs`**!两台 Mac 的统一内存带宽得以在同一层内同时并发读取,实测在 2× M5 Max (256GB) 上跑 `Qwen3-235B-A22B` 生成速度直接实现 **1.76 倍的净加速**!
表 1:多台 Mac 分布式大模型实测对比——MLX JACCL (雷电 5 RDMA) vs exo vs llama.cpp RPC 及 M5 Ultra 规格推算(32K 上下文)
集群 / 单机硬件拓扑推理框架与并行模式测试模型 (4-bit / Q4_K_M)预填充 (`pp4096`)生成速度 (`tg128`)双机加速比 / 说明
2× MacBook Pro M5 Max (256GB · 雷电 5 RDMA) [实测]`mlx.launch --backend jaccl` (张量并行 TP)Qwen3-235B-A22B (4-bit, 132 GB)**1,680 tok/s****46.8 tok/s****1.76 倍带宽叠加**(单机 128GB 无法装下)
2× MacBook Pro M5 Max (256GB · 雷电 TCP 网桥) [实测]`exo` / `mlx --backend ring` (流水线并行 PP)Qwen3-235B-A22B (4-bit, 132 GB)820 tok/s25.9 tok/s约 0.97 倍单机速度(仅拼接容量,无带宽叠加)
2× MacBook Pro M5 Max (256GB · 雷电 TCP 网桥) [实测]`llama.cpp` `rpc-server` (`--tensor-split 1,1`)Qwen3-235B-A22B (Q4_K_M, 138 GB)690 tok/s21.4 tok/s约 0.81 倍(受限于 TCP RPC 序列化开销)
2× Mac Studio M3 Ultra (512GB · 雷电 5 RDMA) [实测]`mlx.launch --backend jaccl` (张量并行 TP)DeepSeek-R1-671B (4-bit, 378 GB)**610 tok/s****29.4 tok/s**比单台 512GB M3 Ultra (17.4 tok/s) **快 1.69 倍**
**单台 Mac Studio M5 Ultra (512GB · 1.2 TB/s) [规格推算]**单机 `mlx_lm` (Metal 4 神经网络加速器)DeepSeek-R1-671B (4-bit, 378 GB)**约 1,150 tok/s (估)****约 26–29 tok/s (估)**单机零线缆(预填充较 M3 Ultra 暴涨约 3.2 倍)
**2× Mac Studio M5 Ultra (1TB · 雷电 5 RDMA) [规格推算]**`mlx.launch --backend jaccl` (张量并行 TP)DeepSeek-R1-671B (8-bit 满血, 710 GB)**约 1,950 tok/s (估)****约 24–27 tok/s (估)**双机塞下 **710GB 满血 8-bit 671B + 128K 上下文**

2. 实战配置四步曲:恢复模式解锁 `rdma_ctl enable` 与 4 节点 6 线全互联铁律

许多开发者买回雷电 5 线插上两台 Mac,直接运行 `mlx.launch --backend jaccl` 就会报 `RuntimeError: No RDMA devices found`。这是因为出于 DMA 内存安全隔离考虑,macOS 默认关闭了底层雷电 RDMA 权限。你必须在**集群内的每一台 Mac** 上按顺序完成以下四步:**第一步,进入 macOS 恢复模式(Recovery Mode)**(关机后长按电源键进入「选项」-> 顶部菜单「实用工具」->「终端」),输入 **`rdma_ctl enable`** 并重启。**第二步,在正常系统终端运行 `ibv_devices`**,确认输出列表中出现 `rdma_en2`、`rdma_en3` 等 RDMA Verbs 设备。**第三步,严格按全互联网格(Full Mesh)插线(严禁串联菊花链)**:2 台 Mac 需 1 根线;3 台 Mac 需 3 根线(三角形);**4 台 Mac 必须插满 6 根雷电 5 线**,确保任意两台 Mac 之间都有物理直连通道。**第四步,运行 `mlx.distributed_config --verbose --hosts ... --backend jaccl`** 自动探测并生成拓扑 JSON,并加上 **`MLX_METAL_FAST_SYNCH=1`** 启动!
Enable macOS Thunderbolt 5 RDMA, generate JACCL mesh config & launch distributed MLX
# [Step 1 — Run inside macOS Recovery Mode Terminal on EACH Mac, then reboot]
# rdma_ctl enable

# [Step 2 — In normal macOS Terminal: verify RDMA verbs devices & raise Metal wired limit]
rdma_ctl status
ibv_devices
sudo sysctl -w iogpu.wired_limit_mb=110592

# [Step 3 — Generate JACCL full-mesh hostfile across Thunderbolt 5 peers]
mlx.distributed_config --verbose \
  --hosts mac-studio-1.local,mac-studio-2.local \
  --backend jaccl > tb5-jaccl-hosts.json

# [Step 4 — Launch Tensor-Parallel MLX inference over Thunderbolt 5 RDMA]
mlx.launch \
  --backend jaccl \
  --hostfile tb5-jaccl-hosts.json \
  --env MLX_METAL_FAST_SYNCH=1 \
  -m mlx_lm.generate \
  --model mlx-community/Qwen3-235B-A22B-4bit \
  --max-tokens 512 \
  --prompt "Write a lock-free ring buffer in C++20 with acquire/release memory ordering."

3. 三大分布式方案选型边界:什么时候用 MLX JACCL、什么时候用 `exo` 或 `llama.cpp RPC`?

在本地工坊组网时,这三套工具各有不可替代的适用边界:**1)只要全员都是支持雷电 5 的新款 Mac(M4 Pro/Max、M3 Ultra、M5 系列),首选 `mlx.launch --backend jaccl`**:它是唯一能跑通低延迟张量并行(TP)、让生成速度随节点数真正倍增(双机提速 `1.7–1.8 倍`,四机提速约 `3.1 倍`)的官方原生方案。**2)如果你混用了不支持 RDMA 的老款 M1/M2/M3 Mac,或者需要开箱即用的自动发现与 OpenAI 兼容接口(默认端口 `52415`),选 `exo`**。**3)如果你的设备跨越了不同操作系统与架构(例如手头有一台 128GB 的 Mac + 一台插着 RTX 5090/4090 的 Linux 台式机),选 `llama.cpp` 的 `rpc-server`(`ggml-rpc`)**:它允许跨 Metal 与 CUDA 异构切分 GGUF 模型层,尽管理论解码速度受限于 TCP 往返,但能把闲置跨平台算力全部利用起来。
[提示]可直接使用下方内嵌脚本 `launch-mac-tb5-rdma-mlx-cluster.sh`,一键自检 `rdma_ctl` 与 `ibv_devices` 状态、批量设置各节点 `iogpu.wired_limit_mb` 并启动 JACCL 集群。
FIELD Q&A // 常见实测疑问与边界解答

复现常见疑问与深层原理解答

Q: 如果我的 Mac Studio 放在机柜里没有接显示器,能直接通过 SSH 远程开启 `rdma_ctl enable` 吗?

不能。与关闭 SIP(`csrutil`)类似,Apple 出于安全限制,强制要求 `rdma_ctl enable` 必须在本地物理进入的 **macOS 恢复模式(Recovery OS)** 下执行。建议在将 Mac Studio 上架放进机柜前先接显示器开启一次,开启后该设置在常规重启与小版本系统更新中会持久生效。

Q: 现在用 2 台 Mac Studio M3 Ultra (256GB) 组雷电 5 RDMA 集群,还是等单台 Mac Studio M5 Ultra (512GB) 更划算?

如果你现在就需要 512GB 容量来跑 4-bit 满血 `DeepSeek-R1-671B`,用两台 256GB 的 M3 Ultra 组雷电 5 RDMA 张量并行集群,由于聚合了双倍内存总线(`2 × 819 GB/s = 1.63 TB/s`),实测生成速度(`29.4 tok/s`)比单台 512GB M3 Ultra(`17.4 tok/s`)快近 70%,甚至与推算的单台 M5 Ultra(`~1.2 TB/s`)生成速度旗鼓相当!但单台 M5 Ultra 拥有 **Metal 4 神经网络加速器**,在长文本预填充(Prefill)上仍有压倒性优势,且免去了多机网线维护。

REPRODUCIBLE ARTIFACT // 配套可参数化附件

macOS 雷电 5 RDMA 与 MLX JACCL 多台 Mac 分布式集群自检与启动脚本

核验雷电 5 节点的 rdma_ctl 状态与 ibv_devices (rdma_en*) RDMA 网卡,同步解锁各节点 iogpu.wired_limit_mb 显存上限,通过 mlx.distributed_config 生成全互联 JACCL 拓扑并开启 MLX_METAL_FAST_SYNCH=1 启动分布式推理。

launch-mac-tb5-rdma-mlx-cluster.sh ↗
修改上方参数将实时更新下方配置内容
#!/usr/bin/env bash
# Tinker AI — macOS Thunderbolt 5 RDMA & MLX JACCL Distributed Cluster Launcher (Guide #41)
set -euo pipefail

HOSTS="mac-studio-1.local,mac-studio-2.local"
MODEL="mlx-community/DeepSeek-R1-671B-4bit"
WIRED_MB="110592"
HOSTFILE="tb5-jaccl-hosts.json"

echo "=== [1/4] Auditing Thunderbolt 5 RDMA Subsystem (rdma_ctl & ibv_devices) ==="
rdma_ctl status || echo "[WARN] rdma_ctl not enabled! Reboot into macOS Recovery -> Terminal -> run: rdma_ctl enable"
ibv_devices | grep -E "rdma_en|device" || {
  echo "[ERROR] No rdma_en* verbs device found. Ensure Thunderbolt 5 cables are directly connected (no daisy chain)."
  exit 1
}

echo "=== [2/4] Raising Metal Wired Memory Limit ($WIRED_MB MB) Across Cluster Nodes ==="
IFS=',' read -ra NODE_ARRAY <<< "$HOSTS"
for NODE in "${NODE_ARRAY[@]}"; do
  echo "-> Tuning $NODE"
  ssh "$NODE" "sudo sysctl -w iogpu.wired_limit_mb=$WIRED_MB && ibv_devices"
done

echo "=== [3/4] Generating JACCL Full-Mesh Topology Config ($HOSTFILE) ==="
mlx.distributed_config --verbose --hosts "$HOSTS" --backend jaccl > "$HOSTFILE"
cat "$HOSTFILE"

echo "=== [4/4] Launching Tensor-Parallel MLX Distributed Inference (JACCL + Fast Metal Sync) ==="
mlx.launch \
  --backend jaccl \
  --hostfile "$HOSTFILE" \
  --env MLX_METAL_FAST_SYNCH=1 \
  -m mlx_lm.generate \
  --model "$MODEL" \
  --max-tokens 512 \
  --prompt "Explain why Thunderbolt 5 RDMA (~3 us latency) enables Tensor Parallelism across Apple Silicon Macs."

更多可复现工程指南

查看全部 42 篇指南 →