build server success but execute `ggml_cuda_init: failed to initialize CUDA: unknown error`

这个报错通常出现在 llama.cpp 已用 LLAMA_CUDA=1 成功编译、但运行时 CUDA 初始化失败的场景,优先排查内核模块 nvidia_uvm 是否已加载,以及 CUDA 运行时与驱动/设备状态是否匹配。

快速结论:这个报错通常出现在 llama.cpp 已用 LLAMA_CUDA=1 成功编译、但运行时 CUDA 初始化失败的场景,优先排查内核模块 nvidia_uvm 是否已加载,以及 CUDA 运行时与驱动/设备状态是否匹配。

适用环境:Ubuntu 22.04(评论中出现)、NVIDIA GeForce RTX 3090 / 1080Ti、NVIDIA-SMI 545.29.02、Driver Version 545.29.02、CUDA Version 12.3、编译命令 make server LLAMA_CUDA=1 CUDA_DOCKER_ARCH=all。

最快修复方案:Issue 中明确给出的处理方法是执行 sudo modprobe nvidia_uvm,但同一讨论链里也有用户反馈该命令无效,因此它不保证解决所有环境。

注意事项:执行 modprobe 需要 root 权限;如果 lsmod | grep nvidia_uvm 已显示模块加载但仍报错,就说明问题不在该模块,此方案无效。该 Issue 标签为 bug-unconfirmed 且已 stale,没有确认的根因结论。

问题场景

用户在搭载 RTX 3090 的机器上用 make server LLAMA_CUDA=1 CUDA_DOCKER_ARCH=all 编译 llama.cpp 的 server 二进制,编译过程成功,但执行 server 时 CUDA 初始化失败,日志提示找不到 CUDA,模型被加载到非 GPU(CPU)路径。同样的编译参数在另一台 1080Ti 机器上却能正常编译并运行,说明问题与具体机器环境相关,而不是编译参数本身。

报错原文

ggml_cuda_init: failed to initialize CUDA: unknown error

原因分析

可能原因:最常被提到的方向是 Linux 下 NVIDIA 的 nvidia_uvm 内核模块没有加载。CUDA 运行时进行初始化时需要该模块,缺失时会出现 CUDA 初始化失败。讨论中一位用户执行 sudo modprobe nvidia_uvm 后问题解决,说明该路径对部分环境有效。但另一位用户即使 lsmod | grep nvidia_uvm 已显示模块加载(引用数为 0),运行 ./llama-cli 仍然复现同样的 unknown error,因此 nvidia_uvm 缺失并非唯一原因。其余可能因素(驱动与 CUDA 运行时版本组合、设备初始化状态等)在本 Issue 中没有得到确认,只能作为待排查方向。

环境排查

  • 操作系统:评论中出现 Ubuntu 11.4.0-1ubuntu1~22.04(Ubuntu 22.04 系列)。
  • 显卡:RTX 3090(问题机器),1080Ti(对照机器可正常运行)。
  • NVIDIA 驱动与 CUDA:NVIDIA-SMI 545.29.02,Driver Version 545.29.02,CUDA Version 12.3。
  • 内核模块:确认 nvidia_uvm 是否已加载,可用 lsmod | grep nvidia_uvm 查看。
  • 编译参数:LLAMA_CUDA=1、CUDA_DOCKER_ARCH=all。
  • 执行命令:server 或 ./llama-cli -m <model>.gguf 触发报错。

解决步骤

  1. 在 Linux 上先尝试加载 NVIDIA UVM 内核模块:sudo modprobe nvidia_uvm。
  2. 确认模块是否真的加载成功:lsmod | grep nvidia_uvm,正常应能看到 nvidia_uvm 条目。
  3. 加载后重新执行 llama.cpp 的 server 或 llama-cli,观察 ggml_cuda_init 报错是否消失。
  4. 如果 lsmod 显示模块已在、但报错仍存在,说明不是该模块缺失导致,需要继续排查驱动/CUDA 运行时与设备初始化,本 Issue 未给出已验证的后续步骤。

验证方法

重新运行 llama.cpp 后,如果日志中不再出现 ggml_cuda_init: failed to initialize CUDA: unknown error,并且模型加载阶段显示使用了 GPU 而非仅 CPU,即可认为该处理在当前环境生效。若报错依旧,说明 modprobe nvidia_uvm 对当前环境无效,需要按其他方向继续排查。

参考来源

ggml-org/llama.cpp #7218

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 25710

发表回复

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