Eval bug: Segmentation fault (core dumped)

在 WSL2(Ubuntu)中编译并运行启用了 CUDA 后端的 llama.cpp 时,即使只是执行 llama-cli --version 或 llama-server --version ,也会触发 Eval bug: Segmentation fault (core dumped) 。该问题

快速结论:在 WSL2(Ubuntu)中编译并运行启用了 CUDA 后端的 llama.cpp 时,即使只是执行 llama-cli --version 或 llama-server --version,也会触发 Eval bug: Segmentation fault (core dumped)。该问题发生在模型加载之前,所以优先排查的方向是 WSL2 下的 CUDA 运行时与驱动之间的动态库链接是否匹配,而不是模型或推理逻辑本身。

适用环境:Issue 中已确认的环境包括:Linux,具体为 WSL2 内的 Ubuntu 24.04.3 LTS(noble);GGML 后端为 CUDA;GPU 为 RTX 5090;CUDA Toolkit 为 13.2(nvcc release 13.2, V13.2.51);NVIDIA 驱动版本为 595.45.03 / 595.71,nvidia-smi 显示 CUDA Version 13.2;llama.cpp 为从 GitHub 最新源码自行编译。

最快修复方案:暂无确认的一步修复方案。Issue 讨论里给出的排查方向是先用 ldd 检查 llama-cli 的动态库依赖、并核对 /usr/lib/wsl/lib/ 下的 WSL CUDA 库,但用户反馈这些输出中看不出明显缺库,因此该问题最终没有被定位到具体根因。

注意事项:用户已确认:不开启 -DGGML_CUDA=ON、改用 CPU 编译时程序可以运行,这说明问题集中在 CUDA 相关路径。RTX 5090 搭配 CUDA 13.2 属于很新的组合,WSL2 的 CUDA 互操作库可能尚未完全适配,这是讨论中的推测,未经证实。Issue 标签为 bug-unconfirmed,关闭时没有给出经过验证的修复版本或降级建议,因此不要把任何具体版本号或降级步骤当作已验证结论。

问题场景

用户从 GitHub 克隆最新 llama.cpp 源码,在 WSL2 的 Ubuntu 24.04 中编译,并按 CUDA 后端方式运行。只要执行带 CUDA 支持的 llama-cli --version 或 llama-server --version,也就是还未加载任何模型的版本查询命令,就会立即崩溃,既没有输出帮助信息,也没有输出版本号。

报错原文

Eval bug: Segmentation fault (core dumped)

实际命令输出示例:

$ ./llama.cpp/llama-cli --version
Segmentation fault (core dumped)

$ ./llama.cpp/llama-server --version
Segmentation fault (core dumped)

原因分析

由于崩溃发生在 --version 阶段、模型加载之前,讨论中判断它更可能是运行时库问题,而不是 llama.cpp 的推理或计算逻辑 bug。可能原因包括:

  • WSL2 下的 CUDA 运行时(libcudart、libcublas 等,指向 /usr/local/cuda-13.2/lib64)与 WSL 提供的 /usr/lib/wsl/lib/libcuda.so.1 之间版本或互操作层不匹配;
  • RTX 5090 与 CUDA 13.2 组合较新,WSL2 CUDA 互操作库可能尚未跟上,导致动态链接阶段出现异常;
  • 用户 ldd 输出中没有出现 not found,说明缺少库并不是直接原因,问题更可能出在库版本兼容性或加载顺序上。

以上均为 Issue 中的推断;Issue 关闭时未确认根因。

环境排查

  • 确认 llama.cpp 的构建参数是否启用了 -DGGML_CUDA=ON;用户已验证关闭 CUDA 后会走 CPU,可以正常运行。
  • 用 ldd 检查编译产物依赖,确认是否存在 not found:ldd /home/user/repos/llama.cpp/build/bin/llama-cli。
  • 核对 WSL CUDA 库目录 /usr/lib/wsl/lib/ 中 libcuda.so.1 等文件的版本与驱动是否一致。
  • 对照 CUDA Toolkit(13.2)、nvcc、nvidia-smi 中显示的驱动与 CUDA Version 是否匹配。
  • 确认运行环境是 WSL2 而非原生 Linux,因为驱动由 Windows 侧提供。

解决步骤

  1. 先复现并记录崩溃命令:./llama.cpp/llama-cli --version,确认是 CUDA 构建才触发。
  2. 执行 ldd 检查编译出的 llama-cli,重点看是否有 not found 的条目;Issue 中用户的输出没有缺库。
  3. 查看 ls -lh /usr/lib/wsl/lib/,确认 WSL 注入的 libcuda.so.1 等库存在且版本与驱动相符。
  4. 作为对照:用不启用 -DGGML_CUDA=ON 的方式重新编译,确认 CPU 路径可以运行(用户已确认可行)。
  5. 如果确实需要 GPU 且上述检查无法定位,可优先尝试(尚未在 Issue 中验证):更换 CUDA Toolkit 版本后重新编译,或等待 WSL2 CUDA 互操作库与驱动更新后再试。Issue 关闭时未给出经过验证的降级版本。

验证方法

重新构建后执行 ./llama.cpp/llama-cli --version 与 ./llama.cpp/llama-server --version,若能正常打印版本信息、不再出现 Segmentation fault (core dumped),即说明问题已解决。进一步可加载模型做一次简单推理确认 CUDA 后端实际可用。

参考来源

ggml-org/llama.cpp #20631

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 30763

发表回复

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