Misc. bug: 76a5bc86d1bdfae96feccdc7a41fea535e792e6e breaks symlinked cache dirs for RPC

这个报错通常出现在 Linux 上把 ~/.cache/llama.cpp/rpc 设成符号链接(symlink)后启动 llama.cpp RPC server 的场景,程序会误报无法创建缓存目录。优先排查该符号链接指向的目标目录是否存在、以及当前运行用户是否有权限访问。

快速结论:这个报错通常出现在 Linux 上把 ~/.cache/llama.cpp/rpc 设成符号链接(symlink)后启动 llama.cpp RPC server 的场景,程序会误报无法创建缓存目录。优先排查该符号链接指向的目标目录是否存在、以及当前运行用户是否有权限访问。

适用环境:Issue 已确认的环境为 Linux、提交 76a5bc86d1bdfae96feccdc7a41fea535e792e6e、llama.cpp RPC server(rpc-server -c / ggml-rpc-server)、CUDA 设备 NVIDIA GeForce RTX 4070(11873 MiB、compute capability 8.9)。Issue 未提供 Python、PyTorch 版本信息。

最快修复方案:暂无确认的一步修复方案。Issue 中维护者用有效符号链接在 master 和 76a5bc8~1 上测试均未复现回归,只有悬空符号链接(目标不存在)才会失败;因此可优先尝试确认符号链接目标目录真实存在且当前用户可读写,或暂时改用普通目录而非符号链接。

注意事项:“root 能启动、普通用户失败”的线索来自报告者观察,但 Issue 未给出最终根因结论,也未确认是哪一处代码回归导致,属于未验证推测。该 Issue 标签为 bug-unconfirmed,且已关闭,方案不一定适用于其他提交或环境。

问题场景

用户在 Linux 上运行 llama.cpp 的 RPC server:先用 rpc-server -c -H 0.0.0.0 -p 50052 启动服务,同时把缓存目录 /home/rpcserver/.cache/llama.cpp/rpc 设置为指向 /data3hd/models/rpccache/Q3627B.Q4_E_H 的符号链接,该目标目录已存在且存放了模型哈希文件。启动时程序直接报无法创建缓存目录并退出。报告者指出以 root 身份运行时同一命令可以正常启动并显示 local cache : /root/.cache/llama.cpp/rpc,而普通用户 rpcserver 则失败。

报错原文

rpcserver@tnewton5:~/.cache/llama.cpp$ rpc-server -c -H 0.0.0.0 -p 50052

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
WARNING: Host ('0.0.0.0') is != '127.0.0.1'
         Never expose the RPC server to an open network!
         This is an experimental feature and is not secure!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

ggml_cuda_init: found 1 CUDA devices (Total VRAM: 11873 MiB):
  Device 0: NVIDIA GeForce RTX 4070, compute capability 8.9, VMM: yes, VRAM: 11873 MiB
Failed to create cache directory: /home/rpcserver/.cache/llama.cpp/rpc

原因分析

可能原因是提交 76a5bc86d1bdfae96feccdc7a41fea535e792e6e 引入的缓存目录创建逻辑,在目录本身是符号链接、或当前用户对链接目标缺少某些权限时,判断“无法创建目录”并直接报错。维护者的复现脚本显示:悬空符号链接(目标不存在)在新旧版本都会失败,而有效的符号链接在 master 与 76a5bc8~1 上均能正常工作,因此未能确认是哪个具体代码改动导致的回归。报告者额外观察到 root 可以启动、普通用户不行,这提示可能与权限或路径解析有关,但 Issue 中没有给出最终定位。

环境排查

  • 确认 llama.cpp 的提交版本,重点确认是否包含 76a5bc86d1bdfae96feccdc7a41fea535e792e6e。
  • 确认操作系统为 Linux,并使用普通用户而非 root 运行 RPC server。
  • 确认 ~/.cache/llama.cpp/rpc 是否为符号链接,以及 ls -l 显示的链接目标。
  • 确认符号链接目标目录真实存在且有内容(Issue 中目标为 /data3hd/models/rpccache/Q3627B.Q4_E_H)。
  • 确认当前用户对符号链接路径上的各级目录(~/.cache、~/.cache/llama.cpp、链接目标及其父目录)具备可执行/可读写权限。
  • 确认 CUDA 设备可用(Issue 中为 RTX 4070、CUDA11.8 级别显存 11873 MiB),但这与缓存目录报错无直接因果关系。

解决步骤

  1. 先确认符号链接目标是否存在:执行 ls -l ~/.cache/llama.cpp/rpc,并检查链接指向的目录能否正常 cd 进入。
  2. 如果目标是悬空链接或不存在,先创建目标目录,再重新启动 RPC server,因为维护者测试表明悬空链接在新旧版本都会失败。
  3. 如果目标存在,检查普通用户对该路径的权限:对链接自身、链接目标以及各级父目录执行 ls -ld,确认运行用户具备遍历与读写权限。
  4. 作为可优先尝试的绕过方式,暂时把 ~/.cache/llama.cpp/rpc 替换为普通目录(取消符号链接),或将缓存指向用户可完全控制的位置后启动,以验证是否为符号链接相关行为。
  5. 若上述均无效,按维护者思路补充信息:提供完整的目录权限、符号链接目标状态,以及在 master 与 76a5bc8~1 上的对比结果,便于进一步定位回归。

验证方法

重新执行 rpc-server -c -H 0.0.0.0 -p 50052,观察是否还出现 Failed to create cache directory。若启动成功,日志中应出现 Starting RPC server v7.0.0、endpoint、local cache 以及 CUDA 设备列表等信息,即表示缓存目录问题已解决。

参考来源

ggml-org/llama.cpp #29759

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 26833

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注