快速结论:这个报错发生在 llama.cpp 通过 RPC 将模型拆分为 2 个及以上 worker 并行推理时,调度器把带有 compute 标记的视图(view)分配给不拥有其底层缓冲区的远程 worker。优先升级到包含 PR #26500 的最新 master 版本,该修复已确认可解决此问题。
适用环境:llama.cpp master 分支(已验证提交 74ce15741、f1793c1c4 可复现);6× NVIDIA DGX Spark(GB10,aarch64,128GB 统一内存),CUDA 13.0;1 个 head(llama-server)+ 5 个 worker(ggml-rpc-server),200 GbE 网络;支持 TCP 与 RDMA 传输,传输方式不影响问题。
最快修复方案:升级到包含 PR #26500(“rpc: avoid serializing buffers from other servers”)的构建版本。该修复在 master 1548a240e 上已验证可解决 GLM-5.3 跨 5 个 RPC worker 的确定性崩溃。
注意事项:DeepSeek-V4-Pro 复现未在修复后重跑(权重已下线),但报错 tensor 属于同一类跨 worker 缓冲区视图,预计同样被修复;未验证前如需临时方案,可尝试关闭 offload(原 Issue 中的 workaround 在新版本中已不再需要)。
问题场景
在 llama.cpp 中使用 RPC(Remote Procedure Call)模式运行大型 MoE(Mixture-of-Experts)模型时,将模型层(layer)拆分到 2 个或更多 RPC worker 上并行推理。触发时模型加载或预热(warmup)阶段崩溃,与具体模型架构无必然关联——已在使用不同调度策略的 DeepSeek-V4-Pro 和 GLM-5.3(glm-dsa)上复现。
报错原文
RPC: [create_node] invalid data ptr — split scheduler ships compute-flagged views to the wrong RPC worker
Head: ggml/src/ggml-rpc/ggml-rpc.cpp:566: Remote RPC server crashed or returned malformed response
(earlier builds: E recv failed (bytes_recv=0, size_to_recv=8), then ggml_abort in graph_compute)
Worker (error locally instrumented to print tensor identity):
# deepseek4:
[create_node] invalid data ptr: name=dsv4_csa_state_kv_l16 (view) op=VIEW type=f32
ne=[1024,32,1,1] data=0xf4101ca00000 buffer_id=0xc7b4b5d9e320 view_src_id=0x... view_offs=0 flags=16
# glm-dsa:
[create_node] invalid data ptr: name=top_k-40 (view) op=VIEW type=i32
ne=[256,2,1,1] ... view_offs=0 flags=16
[graph_compute] failed to create graph node 30
原因分析
根因在客户端侧序列化张量(serialize_tensor)时,会随视图发送远程缓冲区句柄。当 ggml_backend_sched_split_graph 调度器将消费节点分配给与缓冲区所在设备不同的 RPC worker 时,接收端 worker 无法解析该外部缓冲区句柄,于是在 create_node 中正确拒绝(表现为 result->buffer == nullptr && result->data != nullptr),主动断开连接,head 端因此中止报错。
更深层的问题是调度器允许带有 GGML_TENSOR_FLAG_COMPUTE(flags=16)且预先分配的视图输入跨 RPC 设备被调度。由于 ggml_backend_rpc_device_supports_op 目前实现为直接返回 true(代码中留有 TODO),算子支持度无法引导分配决策。问题已被 PR #26500 修复,其方案是:仅当缓冲区属于接收端 RPC socket 时才在序列化中包含远程缓冲区指针,从而阻止跨 worker 写入。
环境排查
- llama.cpp 版本:确认版本是否已包含 PR #26500(在 2026-09-05 之后合并,建议使用 master 1548a240e 或更新)。若版本为 74ce15741 或 f1793c1c4,则大概率触发。
- workers 数量:确认是否 ≥ 2。单 worker(即使使用 MOE 拆分或 CPU offload)不会崩溃。
- 模型架构:大型 MoE 模型(带每层状态压缩或动态稀疏注意力)更易触发;纯 vanilla MoE 或无限流压缩器调度的同系列模型则无此问题。
- 任务拆分方式:检查拆分策略(纯层拆分即可触发,无需
-ot或--cpu-moe配置)。 - Transport:TCP 或 RDMA 均可触发,传输方式不是关键变量。
解决步骤
- 升级 llama.cpp 源码到包含 PR #26500(rpc: avoid serializing buffers from other servers) 的提交(如 master 1548a240e 或更新)并重新编译。
- 若暂时无法升级,可优先尝试原 Issue 中验证的 workaround(关掉相关 offload,即
--no-offload或类似参数);注意验证新版本中已标记此 workaround 不再需要。 - 重新运行原本会崩溃的启动命令(llama-server + 多个 ggml-rpc-server,包含相同的模型拆分参数),并在加载与生成阶段观察是否还有崩溃。特别建议用 GLM-5.3(glm-dsa)进行回归验证,因为它在修复前是确定性崩溃的。
验证方法
确认之前的确定性崩溃已消失。在 5 个 RPC worker + 纯层拆分运行 GLM-5.3 562GB 模型,模型加载阶段不再报 Remote RPC server crashed 或 create_node invalid data ptr,单路输出与并发 multi-slot 解码在 TCP 和 RDMA 环境下均正常生成且无中断。
参考来源
ggml-org/llama.cpp PR #26500:rpc: avoid serializing buffers from other servers
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。

![[Bug] Gmail trigger silently stops after 7 days: subscription expires_at is persisted as -1](https://www.chat-gpts.plus/wp-content/uploads/2026/09/41162-d3216684-768x403.jpg)
