KoboldCPP 分布式部署实操:用 RPC 把两台机器的显存拼起来跑大 GGUF
【免费下载链接】koboldcppKoboldCpp - Run GGUF AI models locally with a KoboldAI UI. One File. Zero Install.项目地址: https://gitcode.com/gh_mirrors/ko/koboldcpp
GGUF 模型比单卡显存大、CPU 推理速度又不够用,加机器是常见出路。KoboldCPP 的分布式部署靠 ggml 层的 RPC 后端:主节点加载模型并拆分计算图,把一部分层的计算发给计算节点,多台设备的显存在逻辑上拼成一张。下面按组网、环境、部署、调参排错、验证五段给出可照抄的命令。
RPC 组网方式:主节点与计算节点各干什么
两端跑同一份 KoboldCPP,只是角色不同。一端是 host 模式,拉起 RPC 服务,不加载模型,只把 GPU/CPU 暴露出去;另一端是 connect 模式,负责加载 GGUF,构图时把本机放不下的层分给远端设备。远端那部分的权重与 KV cache 首次启动时经网络传一次,之后只传子图中间结果。模型文件本身不需要复制到计算节点。
| 组件 | 职责 | 关键配置 |
|---|---|---|
| 主节点 | 加载 GGUF,提供 UI 与 HTTP API,拆分计算图 | --rpcmode connect --rpctargets <ip:port> |
| 计算节点 | 承载 RPC 服务,暴露设备,执行子图计算 | --rpcmode host --rpchost 0.0.0.0 --rpcport 5551 |
| RPC 通道 | 默认 TCP,最多挂 16 个远端,传权重/KV 与计算指令 | 监听端口默认 5551 |
协议与传输实现在 ggml/src/ggml-rpc/,另有独立服务程序在 tools/rpc/。
多节点环境检查清单:系统、硬件与待准备文件
| 节点 | 系统 | 硬件 | 软件 | 待准备文件 |
|---|---|---|---|---|
| 主节点 | Ubuntu 20.04+ 或其他 Linux | 内存足够放下模型的 CPU(可走 mmap)+ 可选本机 GPU | koboldcpp.py 的 Python 3 运行环境(或源码 make 出的二进制) | GGUF 模型文件 |
| 计算节点 | 与主节点同大版本 | 待暴露的 GPU/CPU,显存 ≥ 分到的层所需 | 与主节点同版本的 KoboldCPP | 无(不需要模型文件) |
两个容易忽略的点:RPC 协议版本与程序版本强绑定,两端版本不一致会直接报错;RPC 编译开关在 Makefile 与 CMake 里默认打开,正常构建不需要额外参数。
部署流程:从拉取代码到联通性验证
准备代码与 GGUF 模型文件
两台节点各拉一份相同 commit,模型只放主节点:
git clone https://gitcode.com/gh_mirrors/ko/koboldcpp cd koboldcpp拉起计算节点的 RPC 服务
计算节点用 host 模式,不加载模型、不提供 API,只暴露设备:
python3 koboldcpp.py --rpcmode host \ --rpchost 0.0.0.0 --rpcport 5551 --rpcdevice 0--rpcdevice接逗号分隔的卡号,省略时自动选非 CPU 设备。用 GUI 的话,在 Network 选项卡把 RPC Mode 切到 host 并填端口。不想跑完整 GUI,也可以用make rpcserver编译独立服务,再执行./rpcserver -H 0.0.0.0 -p 5551 -d 0。
在主节点接入远端设备
python3 koboldcpp.py --rpcmode connect \ --rpctargets 192.168.1.10:5551 --model /models/model-70b-Q4_K_M.gguf--rpctargets用逗号分隔多个ip:port即可接入多台机器。GUI 里在 Network 选项卡把 RPC Mode 切到 connect,填同样格式的端点。
联通性验证
nc -vz 192.168.1.10 5551计算节点一侧ss -tlnp | grep 5551应能看到 LISTEN 状态。
节点间通信参数怎么调,常见故障怎么定位
| 参数 | 建议值 | 作用 |
|---|---|---|
--rpcport | 5551(默认) | RPC 监听端口,必须与主节点端点一致 |
--rpcdevice | 只暴露要用的卡号,如0,1 | 限定远端卡池,避免与同机其他任务冲突 |
GGML_RPC_DEBUG | 1,排障时再开 | 两端输出 RPC 详细日志,定位握手与传输问题 |
网络本身决定速度上限:首次权重与 KV 传输都走网线,1GbE 内网经常成为瓶颈,10GbE 以上体感才明显。
三个典型症状:
- 主节点报 "Remote RPC server crashed or returned malformed response" → 两端 KoboldCPP 版本不一致 → 升级两端到同一版本后重启。
- 接入后速度明显低于单机 → 网络带宽成为瓶颈 → 换更高带宽内网,或改用更高压缩率的量化 GGUF 减小传输量。
- RPC 端口能被外网访问 → RPC 无鉴权机制,上游标注为实验特性 → 只绑定内网并用防火墙限制来源。
如何验证分布式推理真的生效
启动后 host 端日志出现 "Initialize RPC server as host mode at 0.0.0.0:5551",主节点的设备列表里能看到远端设备及其显存。生成期间用nvidia-smi观察计算节点:暴露的卡显存应持续被占用,利用率随生成上升。固定一条 256 token 的提示词,对比接入前后 t/s:因网络开销通常略低于本机单机,但此前装不下的模型现在可以完整生成,这就是组大模型集群的主要收益。
网络条件允许时,后续可尝试 RDMA 编译选项 GGML_RPC_RDMA 进一步降低传输延迟;先让 TCP 路径稳定跑通。
【免费下载链接】koboldcppKoboldCpp - Run GGUF AI models locally with a KoboldAI UI. One File. Zero Install.项目地址: https://gitcode.com/gh_mirrors/ko/koboldcpp
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考