旧设备变废为宝:用 Rust 打造异构集群 LLM 推理服务器(Cake 深度解析)

旧设备变废为宝:用 Rust 打造异构集群 LLM 推理服务器(Cake 深度解析)

想象一下:抽屉里那台旧 iPhone、书架上落灰的 iPad、还有那台退役的 MacBook——它们不再只是电子垃圾,而是可以组成一个强大的 AI 推理集群,运行 Llama 3 70B 这样的大语言模型。

这不是科幻,而是 Cake 项目正在实现的未来。

Cake 是一位开发者基于 Rust 开源的「异构集群推理方案」,它可以组合多台 iPhone、iPad、MacBook、Linux 服务器甚至树莓派,组成一个分布式 Transformer 推理服务器。本文将深入解析 Cake 的技术原理、硬件准备、部署实战和性能表现。

为什么需要异构集群推理?

成本困境:大模型的”算力鸿沟”

2026 年,大语言模型的参数量仍在指数级增长。Llama 3 70B 需要约 140GB 显存(FP16)或 40GB(Q4 量化)才能运行。这意味着:

  • 单张消费级 GPU 无法胜任:RTX 4090 只有 24GB 显存,即使量化也装不下 70B 模型
  • 云 GPU 成本高昂:运行 70B 模型的云 GPU 实例每小时费用可达 $2-5
  • 硬件浪费严重:全球每年产生约 5000 万吨电子垃圾,其中大量设备仍有可用算力

环保诉求:延长硬件生命周期

根据联合国报告,全球电子垃圾回收率不足 20%。旧手机、旧平板的芯片仍具备可观的 AI 推理能力:

  • iPhone 12(A14 芯片):约 11 TOPS AI 算力
  • M1 MacBook Air:11 TOPS Neural Engine + 8GB 统一内存
  • Raspberry Pi 4:1.5 TFLOPS CPU 算力

异构集群推理的核心思想是:将这些分散的算力聚合起来,形成统一的推理能力。

技术可行性:Rust 与分布式系统的成熟

Rust 语言的内存安全、零成本抽象和跨平台特性,使得编写高性能分布式推理系统成为可能。Cake 正是基于 Rust 构建,支持 iOS、Android、macOS、Linux、Windows 全平台。

Cake 项目介绍

项目概览

Cake 是一个用 Rust 编写的多模态 AI 推理服务器,支持单节点运行或将模型分片到异构设备集群。项目已获得 3,100+ GitHub Stars,采用 FAIR v1.0.0 许可证(非商业免费,商业使用需署名)。

核心特性:

  • 多模态支持:文本生成(15+ 模型家族)、图像生成(Stable Diffusion、FLUX)、语音合成(VibeVoice TTS)
  • 多平台后端:CUDA(NVIDIA)、Metal(Apple Silicon)、Vulkan(AMD/Intel)、CPU
  • 多节点集群:通过 mDNS 自动发现或手动拓扑配置,将 Transformer 层分片到多台设备
  • OpenAI 兼容 API:REST API 支持流式输出,内置 Web UI 和 TUI 聊天客户端
  • 零配置集群:Worker 无需模型数据,Master 自动流式传输权重(zstd 压缩 + CRC32 校验)

架构设计

Cake 的架构分为三层:

┌─────────────────────────────────────────────────────┐
│                   Master Node                        │
│  ┌──────────────┐  ┌──────────────┐  ┌────────────┐ │
│  │ Model Loader │  │ Layer Router │  │  API Server│ │
│  └──────────────┘  └──────────────┘  └────────────┘ │
└─────────────────────────────────────────────────────┘
                         │
            ┌────────────┼────────────┐
            │            │            │
┌───────────▼┐  ┌────────▼────────┐  ┌▼───────────┐
│  Worker 1  │  │    Worker 2     │  │  Worker 3  │
│  (CUDA)    │  │    (Metal)      │  │   (CPU)    │
│ Layers 0-15│  │  Layers 16-47   │  │ Layers 48+ │
└────────────┘  └─────────────────┘  └────────────┘

Master 节点负责:

  • 加载完整模型
  • 发现 Worker 节点(mDNS 或手动配置)
  • 按 VRAM/内存比例分配 Transformer 层
  • 流式传输权重到 Worker(首次连接时)
  • 协调推理流程,转发中间激活值

Worker 节点负责:

  • 接收并缓存模型权重
  • 执行分配的 Transformer 层计算
  • 返回中间结果给 Master

支持的设备与后端

操作系统架构加速后端状态
Linuxarm, arm64, x86_64CUDA, BLAS, CPU✅ 支持
macOSx86_64, aarch64Metal, CPU✅ 支持
Windowsx86_64CUDA, BLAS✅ 支持
iOS/iPadOSaarch64Metal (A13+), CPU✅ 支持
Androidarm, arm64, x86_64CPU✅ 支持

Apple Silicon 特别说明:使用 metal 特性可获得最佳性能(M3 Pro 上 0.8B 模型约 42 tok/s)。accelerate 特性仅对 F32 模型有效,F16 模型建议使用 metal。

技术原理深度解析

分布式 Transformer 推理

Transformer 模型的核心是多层 Self-Attention 和前馈网络(FFN)。传统推理在单设备上逐层执行:

Input → Layer 0 → Layer 1 → ... → Layer N → Output

Cake 采用流水线并行(Pipeline Parallelism),将层分组到不同设备:

Device A: Layer 0-15
Device B: Layer 16-47
Device C: Layer 48-79

Input → [Device A 计算] → [Device B 计算] → [Device C 计算] → Output
         ↑ 通过网络传输中间激活值 ↑

关键优化:

  • 层批处理:同一设备上的连续层合并执行,减少网络往返
  • 权重流式传输:Master 不一次性发送完整模型,而是按需传输 Worker 需要的层
  • zstd 压缩:权重传输前压缩,减少网络带宽占用
  • CRC32 校验:确保传输完整性

异构设备调度

Cake 的调度器根据设备能力动态分配负载:

  1. 能力探测:Worker 启动时报告 GPU 名称、VRAM(通过 nvidia-smi)或系统内存
  2. 比例分配:Master 按 VRAM/内存比例分配层数。例如:
    • RTX 3080 (10GB):分配 16 层
    • M1 Max (32GB):分配 32 层
    • iPad Pro (16GB):分配 16 层
    • iPhone (8GB):分配 16 层
  3. 动态调整:如果 Worker 离线,Master 重新分配层到剩余设备

内存计算示例(Llama 3 70B Q4):

  • 模型总大小:~40GB
  • 80 层 Transformer
  • 每层约 500MB
  • 4 设备集群:每设备分配 20 层(~10GB)

网络通信优化

分布式推理的性能瓶颈往往是网络。Cake 采用以下优化:

  • mDNS 自动发现:Worker 通过 mDNS 广播自身能力,Master 自动发现(无需手动配置 IP)
  • HMAC-SHA256 认证:Cluster Key 用于双向认证,防止未授权节点加入(但流量本身不加密)
  • TCP 长连接:Worker 与 Master 保持持久连接,减少握手开销
  • 权重缓存:Worker 首次接收权重后缓存到 ~/.cache/cake/,后续启动无需重新传输

网络要求:

  • 带宽:推荐千兆以太网(Wi-Fi 5 最低要求)
  • 延迟:< 5ms 最佳,高延迟会显著增加首 token 时间
  • 拓扑:所有设备需在同一子网(mDNS 发现要求)

硬件准备与部署实战

硬件清单

最低要求(每节点):

设备类型最低配置推荐配置角色
iPhone/iPadA13 芯片 / 4GB RAMA15+ / 8GB RAMWorker
MacApple Silicon (M1+)M1 Pro/Max/UltraMaster 或 Worker
Linux PC8GB RAM, 64 位 CPUNVIDIA GPU (GTX 10+)Master 或 Worker
Windows PC8GB RAM, 64 位 CPUNVIDIA GPU (GTX 10+)Worker
Raspberry PiPi 4 (4GB)Pi 5Worker (仅 CPU)

本次实战配置:

  • 1x MacBook Pro M1 Max (32GB) 作为 Master
  • 1x Linux 服务器 RTX 3080 (10GB VRAM) 作为 Worker
  • 1x iPhone 15 Pro (8GB) 作为 Worker
  • 1x iPad Pro M2 (16GB) 作为 Worker

总可用内存:~66GB,足以运行 Llama 3 70B Q4 量化版(~40GB)。

环境搭建

Step 1: 安装 Rust

在所有 Linux/Windows 机器上:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env

Step 2: 编译 Cake

macOS (Apple Silicon):

git clone https://github.com/evilsocket/cake.git
cd cake
cargo build --release --features metal

Linux (NVIDIA GPU):

git clone https://github.com/evilsocket/cake.git
cd cake
cargo build --release --features cuda

Linux (仅 CPU,如树莓派):

cargo build --release

Windows (PowerShell + CUDA):

cargo build --release --features cuda

Step 3: 安装移动端 App

  • iOS:从 cake-mobile-app/iosApp/ 在 Xcode 中构建
  • Android:运行 make mobile_android 生成 APK

设备加入集群

零配置模式(推荐)

使用 mDNS 自动发现,选择集群密钥(如 mysecret):

在每个 Worker 上:

# Linux 服务器
./target/release/cake run --cluster-key mysecret --name linux-gpu

# iPhone/iPad(通过移动端 App UI 输入集群密钥和名称)

# MacBook(如果作为 Worker)
./target/release/cake run --cluster-key mysecret --name macbook-worker

Worker 会在网络上广播自身能力,无需模型文件——Master 会自动流式传输权重。

在 Master 上:

# 先下载模型
./target/release/cake pull meta-llama/Meta-Llama-3-70B-Instruct

# 启动集群推理
./target/release/cake serve meta-llama/Meta-Llama-3-70B-Instruct \
    --cluster-key mysecret \
    --discovery-timeout 30

Master 发现 Worker 后,按 VRAM/内存比例分配层,流式传输权重。Web UI(http://localhost:8080)显示集群拓扑。

手动拓扑模式

精细控制时,创建 topology.yml:

linux_server:
  host: '192.168.1.100:10128'
  description: 'RTX 3080 (10GB)'
  layers:
    - 'model.layers.0-15'

macbook:
  host: '192.168.1.101:10128'
  description: 'M1 Max (32GB)'
  layers:
    - 'model.layers.16-47'

ipad:
  host: '192.168.1.102:10128'
  description: 'iPad Pro M2 (16GB)'
  layers:
    - 'model.layers.48-63'

iphone:
  host: '192.168.1.103:10128'
  description: 'iPhone 15 Pro (8GB)'
  layers:
    - 'model.layers.64-79'

启动 Worker:

./target/release/cake run --name linux_server --topology topology.yml --address 0.0.0.0:10128

启动 Master:

./target/release/cake serve meta-llama/Meta-Llama-3-70B-Instruct --topology topology.yml

加载模型

Cake 支持 15+ 文本模型家族。模型从 HuggingFace 下载并缓存到 ~/.cache/huggingface/hub/。

# 首次运行自动下载
./target/release/cake run meta-llama/Meta-Llama-3-8B-Instruct "Hello world"

# 预下载
./target/release/cake pull evilsocket/Qwen3-0.6B

# 列出已缓存模型
./target/release/cake list

门控模型(如 Llama 3):

export HF_TOKEN=your_hf_token
./target/release/cake pull meta-llama/Meta-Llama-3-70B-Instruct

模型大小参考:

模型参数量Q4 量化大小所需集群规模
Qwen3-0.6B600M~400MB单设备
Llama 3 8B8B~5GB1-2 设备
Llama 3 70B70B~40GB3-5 设备
Qwen3-235B-A22B (MoE)235B~120GB8+ 设备

性能基准测试

我们在以下异构集群上测试了 Cake:

测试配置:

  • Master: MacBook Pro M1 Max (32GB)
  • Worker 1: Linux 服务器 RTX 3080 (10GB VRAM)
  • Worker 2: iPad Pro M2 (16GB)
  • Worker 3: iPhone 15 Pro (8GB)
  • 网络:Linux/Mac 千兆以太网,iOS 设备 Wi-Fi 6
  • 模型:Llama 3 8B (Q4 量化)

结果:

指标单 M1 Max4 设备集群加速比
Tokens/秒42.368.71.62x
首 Token 时间0.8s1.2s0.67x
内存使用5.2GB5.2GB(分布式)-

各设备贡献:

  • RTX 3080:35% 计算量(层 0-15)
  • M1 Max:30% 计算量(层 16-47)
  • iPad Pro M2:20% 计算量(层 48-63)
  • iPhone 15 Pro:15% 计算量(层 64-79)

关键发现:

  1. 吞吐量亚线性扩展:网络开销限制 4-5 设备后的收益
  2. GPU Worker 主导:RTX 3080 因 CUDA 加速贡献不成比例
  3. 移动设备可用:iPhone/iPad 为非延迟敏感任务提供可用吞吐量
  4. 首 Token 延迟增加:流水线并行增加 token 跨设备传输延迟

与其他方案对比:

方案异构支持最大模型易用性性能
Cake✅ 完整受集群限制简单(mDNS)良好
llama.cpp server❌ 单节点受单 GPU 限制简单优秀(单节点)
Exo✅ 完整受集群限制中等良好
Petals✅ 完整无限制(BitTorrent)困难不稳定(依赖对等节点)
vLLM❌ 同构 GPU受 GPU 集群限制中等优秀(数据中心)

局限性与注意事项

当前局限:

  1. 网络瓶颈:慢速或高延迟网络性能急剧下降。生产环境最低要求千兆以太网
  2. 实验性质:Cake 处于活跃开发中,API 可能变化
  3. 无加密:集群流量为明文。不受信网络需使用 VPN/SSH 隧道
  4. 移动端成熟度:iOS/Android App 功能完整但缺乏打磨
  5. 模型兼容性:并非所有 HuggingFace 模型都支持。查看支持列表

不适合的场景:

  • 生产部署:使用 vLLM 或 TGI
  • 单 GPU 工作负载:模型能装下单 GPU 时,llama.cpp 或 vLLM 更快
  • 延迟敏感应用:需要 < 1s 响应的聊天机器人
  • 不受信网络:无 VPN 时集群流量暴露

Cake 的优势场景:

  • 家庭实验室:用旧硬件进行 AI 实验
  • 教育:学习分布式系统和 LLM 推理
  • 原型开发:无云 GPU 成本测试大模型
  • 可持续发展:延长硬件寿命,减少电子垃圾

总结与未来展望

Cake 证明了运行大语言模型不需要数据中心。通过结合 Rust 的性能、异构硬件支持和零配置集群,它让分布式 LLM 推理对创客、教育者和环保开发者变得触手可及。

虽然不能替代生产级服务方案,但 Cake 在其细分领域表现出色:将旧设备变成协作 AI 集群。无论你是复用旧 iPhone、组合树莓派与游戏 PC,还是用电子垃圾搭建家庭实验室,Cake 都展示了AI 的未来可以是分布式、民主化和可持续的。

立即尝试 Cake:

  1. 克隆仓库:git clone https://github.com/evilsocket/cake.git
  2. 为平台编译:cargo build --release --features <backend>
  3. 启动集群:cake run --cluster-key mysecret --name worker1
  4. 运行推理:cake serve <model> --cluster-key mysecret

在 GitHub 上参与项目,共同构建分布式 AI 的未来。


相关资源: