有道-A100 可见但 CUDA 初始化失败的证据链

A100 可见但 CUDA 初始化失败:证据链

根据一份有道云笔记提炼的排查线索,尚未独立复现或核对厂商资料。只用于缩小故障层次,不代表该笔记所述根因已经成立。

适用版本与现象

原笔记记录的是 Linux 上的 A100 PCIe 40GB 与 NVIDIA 驱动 550.54.14;nvidia-smi 显示 CUDA 12.x,这不等于实际安装的 CUDA Toolkit 版本。重启后 nvidia-smi 能列出设备,模型服务启动时却报 CUDA GPU 不可用。其他驱动分支、GPU 型号或容器配置应重新取证,不能直接套用原因。

可复用的证据顺序

发生故障的同一运行环境记录时间、驱动版本和输出,再逐层检查:

  1. nvidia-smi 是否能枚举设备。能枚举只证明管理接口和部分驱动路径可用,不能证明 CUDA 计算可初始化。
  2. 用最小 Driver API 调用观察 cuInit(0) 的返回值,再与框架的 CUDA 检测对照。原笔记记录 cuInit(0) 返回非零值 3;这将调查范围推进到 Driver API、用户态库、设备节点及其下层,不能单独指认固件。
  3. 核对进程实际加载的 libcuda.so、正在运行的内核模块版本、安装包版本与 /dev/nvidia* 设备节点。主机与容器要分别记录,避免把两个命名空间的证据混用。
  4. 按同一时间窗查看内核日志中的 API mismatch、Xid、UVM 和固件加载错误,并将日志中的 PCI 设备与故障 GPU 对上。

最小只读探针可用 python3 -c 'import ctypes; print(ctypes.CDLL("libcuda.so.1").cuInit(0))'。它只检查初始化返回值;不能替代实际计算测试。

原笔记事实与未证实解释

笔记显示:设备可枚举、Driver API 初始化失败,内核日志曾出现 GSP 固件读取失败;后来相应固件文件又可见。笔记据此推测驱动组件安装不完整,并建议重装驱动。现有材料缺少固件缺失与 cuInit 失败之间的时间对应、所报固件与 A100 的对应关系,以及重装后恢复的验证结果。因此,驱动组件不一致只是待检验假设,不能凭这一页直接重装或切换驱动。

待核查

  • 查 NVIDIA 对该驱动分支和具体 GPU 的固件要求,确认日志所报文件与设备的对应关系。
  • 在故障当时的同一主机或容器中留存 cuInit、库路径、模块版本、设备节点和内核日志,排除其他并发错误。
  • 若执行修复,补齐变更前后证据、计算样例和服务恢复结果,才可记录为已验证处置。

关联

GPU 不可用排查提纲提供更广的入口;分层判断原则解释为什么设备可见不等于框架可用。