llama.cpp RPC 局域网分布式推理验证

一、RPC 分布式推理的核心原理

llama.cpp 的 RPC 模式基于一个非常朴素的想法:大模型是一层一层叠起来的,不同层可以在不同机器上算。

Transformer 模型的每一层计算相对独立——上一层算完把结果传给下一层。这就给了分布式推理一个天然的切分点。

llama.cpp 的做法是把模型按层数切成 N 段,主节点负责输入输出层以及结果聚合,Worker 节点各自负责中间若干层。

客户端                     主节点                    Worker 集群
  │                         │                         │
  │  HTTP POST              │                         │
  │  /v1/chat/completions   │                         │
  ├────────────────────────▶│                         │
  │                         │ 加载完整模型到内存        │
  │                         │ 检测所有 RPC Worker      │
  │                         │                         │
  │                         │  Layer 0-5 (输入层)      │
  │                         │  ┌─────────────────┐    │
  │                         │  │  本地 GPU/CPU    │    │
  │                         │  └─────────────────┘    │
  │                         │                         │
  │                         │  Layer 6-17   gRPC ────▶│ Worker 1 (i5-4460)
  │                         │  Layer 18-29  gRPC ────▶│ Worker 2 (如果有)
  │                         │  Layer 30-35  gRPC ────▶│ Worker 3 (如果有)
  │                         │                         │
  │                         │  Layer 36-40 (输出层)    │
  │                         │  ┌─────────────────┐    │
  │                         │  │  结果聚合         │    │
  │                         │  └─────────────────┘    │
  │                         │                         │
  │  JSON Response          │                         │
  ◀─────────────────────────┤                         │

这个架构有几个非常精妙的设计:

第一,Worker 不需要模型文件。 主节点加载完整的 GGUF 模型后,会自动把对应层的权重通过 RPC 发送给 Worker。Worker 收到数据就开始算,算完把中间结果传回来。这意味着 Worker 节点可以是一台”裸机”——什么都不用装,启动 rpc-server.exe 就行。

第二,完全兼容 OpenAI API。 llama-server 暴露的就是标准 /v1/chat/completions 端点。任何兼容 OpenAI SDK 的应用(ChatBox、Open WebUI、自己写的脚本)都能无缝接入,完全不需要感知后面是个分布式集群。

第三,开箱即用,零依赖。 llama.cpp 官方预编译包里 llama-server.exe(主节点)和 rpc-server.exe(Worker)都在一起。下载、解压、运行——三步搞定。

二、为什么 RPC 比你想的更高效

很多人会直觉认为”把计算拆到两台机器,网络传输的开销会把加速吃掉”。实际上,llama.cpp 的 RPC 协议在这方面设计得很聪明:

传输的不是完整激活值。 在 Transformer 推理中,每一层的输出是一个 [batch, seq_len, hidden_dim] 的张量。对于 14B 模型,hidden_dim 约 5120。在 ctx=2048 时,一个层的输出大约只有几 MB。千兆局域网传输几 MB 数据只要几十毫秒——而计算这几 MB 数据在 CPU 上需要几百毫秒。传输时间远小于计算时间。

通信模式是”请求-响应”,不是持续流。 每个 Worker 收到一层数据 → 算完 → 传回结果 → 等待下一层。这避免了复杂的流控和背压问题。

这与 GPU 集群的 NVLink/NCCL 全互联不同——后者处理的是数百 GB/s 的梯度同步,而 RPC 模式下传输量小得多,所以千兆以太网完全够用。


   转载规则


《llama.cpp RPC 局域网分布式推理验证》 吴杭沉 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
LLM 推理系列(一):讲清 FP64、FP32、TF32、BF16、FP16、FP8、INT8、INT4、NVFP4 LLM 推理系列(一):讲清 FP64、FP32、TF32、BF16、FP16、FP8、INT8、INT4、NVFP4
看 AI 芯片、GPU、模型训练和推理时,经常会看到这些词:FP64、FP32、TF32、BF16、FP16、FP8、INT8、INT4、NVFP4 它们本质上都在回答一个问题:计算机到底用多少 bit 来表示一个数字,以及这个数字怎么被表
2026-01-16
下一篇 
llama.cpp 源码解析(二):GGUF 格式与模型加载——从磁盘文件到内存张量 llama.cpp 源码解析(二):GGUF 格式与模型加载——从磁盘文件到内存张量
这是 llama.cpp 源码系列的第二篇。上一篇我们拆解了推理引擎 GGML,理解了张量、Arena、延迟执行、Galloc、KV Cache、线程模型的完整骨架。 但还有一个问题没回答:模型文件本身是怎么设计的? 从磁盘上的一个文件,到
2026-01-06
  目录