Windows bundled llama-server.exe is missing `longPathAware`: GGUF paths > 260 chars fail with “No such file or directory” even when the file

该问题通常发生在 Windows 上用 bundled llama-server.exe 加载绝对路径超过 260 字符的 GGUF(典型如 Hugging Face 缓存目录)时:即使文件真实存在且系统已启用长路径,仍报 “No such file or directory”。优先确认该 exe

快速结论:该问题通常发生在 Windows 上用 bundled llama-server.exe 加载绝对路径超过 260 字符的 GGUF(典型如 Hugging Face 缓存目录)时:即使文件真实存在且系统已启用长路径,仍报 “No such file or directory”。优先确认该 exe 的 manifest 是否声明了 longPathAware,或改用已修复 manifest 的构建。

适用环境:Windows 11 Build 22631;LongPathsEnabled=1(HKLM\SYSTEM\CurrentControlSet\Control\FileSystem);Unsloth Studio 随附的 Windows x64 bundled llama-server.exe;llama.cpp(具体 commit 未在 Issue 中给出)。

最快修复方案:暂无确认的一步修复方案(用户侧无法通过配置项一步解决)。Issue 报告者验证过:用 UpdateResource 向 exe 的 RT_MANIFEST 注入 longPathAware=true 后,276 字符路径的模型可正常加载;该 Issue 最终由 #31329 修复,应升级到包含该修复的构建。

注意事项:仅设置系统级 LongPathsEnabled=1 不足以让未声明 longPathAware 的进程获得长路径支持;就地修改 exe manifest 属非官方手段,会改动二进制文件且需重新签名/分发时谨慎;在 #31329 之前,短路径模型不受影响,因此不能据短路径正常就断定引擎损坏。

问题场景

在 Windows 11 上通过 Unsloth Studio 随附的 llama-server.exe(x64)加载 GGUF 模型,模型来自 Hugging Face 缓存路径,绝对路径超过 260 字符(报告者案例为 276 字符):

llama-server.exe -m "C:\Users\<name>\.cache\huggingface\hub\models--xxx\snapshots\<sha>\...model.gguf"

同一台机器上 158 字符的短路径模型可以正常加载,说明模型文件与引擎本身可用;用 .NET / PowerShell 的 File.OpenRead 也能正常打开同一文件。

报错原文

error: failed to open GGUF file '<path>' (No such file or directory)

原因分析

最可能的原因:随附的 llama-server.exe 应用清单(manifest)没有声明 longPathAware。Windows 即使已开启系统级 LongPathsEnabled=1,进程仍须在 manifest 中声明 <longPathAware xmlns="urn:schemas-microsoft-com:windows:manifest.v3">true</longPathAware> 才会启用长路径支持。

未声明时,CRT / fopen 风格的路径处理回退到旧的 MAX_PATH(260)限制,打开失败后返回误导性的 ENOENT,所以报 “No such file or directory”,而文件实际存在。报告者通过向 exe 的 RT_MANIFEST 注入 longPathAware=true 验证了该判断:注入后 276 字符模型可加载,短路径模型不受影响。

环境排查

  • 确认操作系统版本与 LongPathsEnabled 注册表值:HKLM\SYSTEM\CurrentControlSet\Control\FileSystem 下是否为 1(Issue 中该值为 1,问题仍复现)。
  • 确认所运行 llama-server.exe 的来源与构建(Issue 中为 Unsloth Studio 随附的 Windows x64 版本),并检查其 manifest 是否含 longPathAware。
  • 测量模型文件的绝对路径长度,判断是否超过 260 字符;可先用一条路径长度 < 260 的模型做对照测试。
  • 用另一工具(如 PowerShell / .NET File.OpenRead)打开同一长路径文件,排除文件缺失或损坏。
  • Issue 未提供 Python、CUDA、PyTorch、显卡驱动及具体 llama.cpp commit,这些不是本次问题的排查重点。

解决步骤

  1. 先用短路径(< 260 字符)模型验证引擎可正常加载,确认不是模型文件损坏。
  2. 确认问题确为长路径导致:同一文件用 PowerShell / .NET 可读,而 llama-server.exe 报 ENOENT。
  3. 优先升级到包含 #31329 修复的 llama.cpp 构建(该 Issue 已标记为 Fixed by #31329);若使用 Unsloth Studio 随附版本,需等待其更新到含修复的构建。
  4. 若无法升级,可优先尝试把 GGUF 复制或链接到较短路径(如 C:\models\ 下)后再加载,以绕过 260 字符限制。
  5. 仅在试验环境考虑:向 exe 的 RT_MANIFEST 注入 longPathAware=true(报告者用 UpdateResource 验证有效),注意这会修改二进制文件,升级后需重新处理。

验证方法

用原先超过 260 字符的 GGUF 路径重新执行 llama-server.exe -m <path>,不再出现 failed to open GGUF file ... (No such file or directory) 并能进入正常加载;同时确认短路径模型加载行为未变化。

参考来源

ggml-org/llama.cpp #30935

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 33102

发表回复

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