DEBUG.WIKI
V.PS:让项目靠近用户,亚太、欧洲、北美 KVM VPS
IPPeak:从目标地区访问网页,住宅代理、SEO 监测、广告验证
ZgoCloud:多地区部署,按需选节点;日本、美国、香港、德国

Ollama 找到 NVIDIA 库,加载模型却报 CUDA error 100

发现 GPU 库不等于 CUDA 进程能访问设备。分开检查宿主驱动、容器 GPU 请求和实际 Ollama 服务,修通设备可见性后再验证模型处理器;不盲目重载驱动。

Ollama 日志先显示发现 NVIDIA 库,启动模型后却报:

CUDA error 100
no CUDA-capable device is detected

官方 issue #1940 在 2024 年 1 月记录了这种情况。维护者当时怀疑库和驱动不匹配,并讨论了 0.1.21 的改动;这只是该案例的排查方向,不能据此断言今天出现相同错误都由那个旧缺陷引起。

CUDA 的 100 表示未检测到 CUDA 设备。库文件存在、管理接口能列出卡和计算运行时能初始化设备,是不同检查位置。Ollama 的 GPU 排障说明也把宿主与容器运行时检查分开。

以下针对 Linux 上的 NVIDIA GPU 和 Docker。AMD、Apple MPS 不适用;WSL2 还需遵循 NVIDIA 的 Windows 驱动和设备透传约定,不直接照搬原生 Linux 驱动安装。

先在运行服务的机器上检查

nvidia-smi

如果这里已经失败,先处理宿主驱动、设备分配或平台问题,Ollama 的模型配置不能修复它。记录完整错误、驱动版本及显卡型号。驱动重载或重启会影响其他 GPU 任务,不把它们作为看到错误 100 后的第一条命令。

如果宿主能看到卡,再查实际 Ollama 容器。先从 docker ps 确定名称,以下用 ollama 作示例:

docker inspect --format '{{json .HostConfig.DeviceRequests}}' ollama
docker exec ollama nvidia-smi
docker logs --since 10m ollama

DeviceRequests 可以帮助确认创建容器时有没有申请 GPU。平台可能采用 CDI 或其他设备注入方式,不能只凭这个字段为空就断言未配置。容器内缺少 nvidia-smi 命令,也不等于宿主没有 GPU;接下来用容器运行时的独立样本区分。

独立样本也失败,先修容器运行时

在有权使用测试 GPU 的机器上,可以按 NVIDIA 官方样本检查运行时。下面指定 GPU 0,镜像可能需要下载;将编号换成允许使用的设备,不扩大调度器分配:

docker run --rm --runtime=nvidia --gpus device=0 ubuntu:24.04 nvidia-smi

这个命令只用于列出设备,不加载模型。它成功也不等于 CUDA 计算和模型兼容性都通过。

若 Docker 提示无法选择 GPU 驱动、找不到 nvidia runtime,或样本无法访问设备,按官方 Container Toolkit 安装说明核对当前系统的安装与配置。不要先反复重装 Ollama。

Ollama 的 Docker 文档给出了 Toolkit 与 GPU 请求要求。修改 Docker 运行时配置或重启 daemon 前,要安排其他容器的处理窗口。已经创建的 Ollama 容器也需要用修正后的声明重新创建;保留原模型卷和配置,单纯在现有容器内改环境变量不能补上创建时的 GPU 设备请求。

样本成功,回到 Ollama 的实际进程

样本使用的设备、Docker context 和 runtime 应与业务部署对齐。如果样本在宿主 Docker 成功,业务却跑在另一台 daemon、另一容器或另一服务用户下,还没有验证到发生故障的环境。

用原业务入口提交一个适合显存、已经安装的模型的小请求,再读同一次请求的服务日志。当前 CLI 支持时可查看:

ollama ps

终端必须指向出错的那份 Ollama 服务。FAQ说明 PROCESSOR 列反映模型的 CPU/GPU 加载情况。模型完成回答且该列符合预期分配,才可继续验证实际负载。混合 CPU/GPU 运行不一定是故障,不要求所有模型都显示 100% GPU。

如果 CUDA 初始化仍失败,保留 Ollama 版本、镜像版本、驱动信息和脱敏日志,继续核对受支持显卡及库加载路径。不要为尝试“让它识别到卡”默认加 --privileged、放宽全部设备权限,或盲目卸载正在使用的 NVIDIA 模块。