
Distributed speculative decoding: GPU draft model over network
快速结论:该报错通常出现在用户希望将 GPU 加速的草稿模型(draft model)部署在远端机器,与本地 CPU 目标模型协同进行投机解码(Speculative Decoding)时。优先排查是否已启用 GGML_RPC 后端,并使用 --rpc 和 --spec-draft-device RPC0 参数配置网络草稿模型。
问题场景
用户在使用 llama.cpp 的 llama-server 或 llama-cli 进行分布式投机解码时,尝试通过 --spec-draft-model 指定远端 GPU 机器上的草稿模型(例如笔记本电脑上的 GPU 草稿模型,服务器上的 CPU 目标模型)。但现有参数要求草稿模型文件必须位于本地文件系统,无法直接引用网络上的模型实例。
报错原文
Speculative decoding with `--spec-draft-model` requires the draft model file to be local.
(此为 Issue 描述中的隐含问题,实际报错可能表现为“找不到模型文件”或“模型加载失败”等,取决于具体调用方式。)
原因分析
可能原因:--spec-draft-model 参数设计为仅加载本地磁盘上的模型文件,不支持通过网络 URL 或远端进程直接访问。同时,llama.cpp 的投机解码逻辑默认假设草稿模型与目标模型运行在同一进程内,未原生支持跨机器协作。
解决方案:GGML_RPC 后端(需编译时启用 -DGGML_RPC=ON)提供了网络级别的模型分布能力,允许将草稿模型分配在远端 RPC 服务器上,通过 --rpc 和 --spec-draft-device RPC0 参数实现分布式投机解码,无需修改模型文件路径或自行搭建代理。
环境排查
- 确认
llama.cpp是否以-DGGML_RPC=ON编译(可通过llama-server --help查看是否有--rpc和--spec-draft-device参数)。 - 确认主服务器和目标机器上的
rpc-server二进制已编译并运行。 - 确认主服务器和目标机器的
llama.cpp版本一致。 - 确认草稿模型和目标模型使用相同的分词器(vocab 兼容)。
- 确认网络连通性:主服务器能访问远端 RPC 服务器的 IP 和端口(默认
127.0.0.1:50052)。 - 可选:确认
--spec-type draft-mtp参数是否正确(需草稿模型支持 MTP(Multi-Token Prediction)结构)。
解决步骤
- 编译支持 RPC 的 llama.cpp:在主服务器和目标机器上,使用 CMake 选项
-DGGML_RPC=ON重新编译llama.cpp。例如:cmake -B build -DGGML_RPC=ON cmake --build build -j - 启动远端 RPC 服务器:在远端 GPU 机器上运行
rpc-server二进制,监听主服务器可访问的地址。默认监听127.0.0.1:50052,可修改--host和--port为实际网络接口。 - 启动主服务器:在主服务器上,使用
--rpc指定远端 RPC 服务器地址,并通过--spec-draft-device RPC0将草稿模型分配至远端设备。示例命令:llama serve \ -hf ggml-org/Qwen3.6-27B-GGUF:Q8_0 \ -dev MTL0 \ --rpc 127.0.0.1:50052 \ --spec-type draft-mtp \ --spec-draft-hf ggml-org/Qwen3.6-27B-GGUF \ --spec-draft-model mtp-Qwen3.6-27B-Q4_0.gguf \ --spec-draft-n-max 3 \ --spec-draft-device RPC0 \ --host 0.0.0.0 --port 8014 \ --chat-template-kwargs "{\"preserve_thinking\": true}" -lv 4 - 可选:调整网络参数:如果远端服务器不在本机,需将
--rpc参数改为实际 IP(如192.168.1.100:50052),并确保防火墙允许该端口。 - 验证配置:主服务器启动后,检查日志是否正常加载草稿模型,以及是否能通过
/completion端点正常推理。
验证方法
运行一个测试请求(如 curl 到 http://localhost:8014/completion),观察推理速度是否提升。如果日志显示草稿模型被成功加载并使用 RPC0 设备,且目标模型通过本地设备推理,则确认配置成功。可以对比不使用 --spec-draft-device RPC0 时的性能。



