当前位置: 首页 > news >正文

【踩坑记录】nvidia-smi 能识别 GPU,但 torch.cuda.is_available() 报错的终极解决方案

问题描述

在一台多 GPU 的服务器上,运行如下命令:

nvidia-smi

可以正常看到 GPU0–GPU2,甚至 GPU3 也有显示(虽然状态异常):

Unable to determine the device handle for GPU3: 0000:E3:00.0: Unknown Error
Sat May 24 17:55:27 2025       
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 575.51.03              Driver Version: 575.51.03      CUDA Version: 12.9     |
|-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA GeForce RTX 3090        Off |   00000000:17:00.0 Off |                  N/A |
| 41%   33C    P8             33W /  350W |      15MiB /  24576MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+
|   1  NVIDIA GeForce RTX 3090        Off |   00000000:65:00.0 Off |                  N/A |
| 48%   31C    P8             25W /  350W |      15MiB /  24576MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+
|   2  NVIDIA GeForce RTX 3090        Off |   00000000:CA:00.0 Off |                  N/A |
| 42%   34C    P8             28W /  350W |      15MiB /  24576MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------++-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|    0   N/A  N/A            2406      G   /usr/lib/xorg/Xorg                        4MiB |
|    1   N/A  N/A            2406      G   /usr/lib/xorg/Xorg                        4MiB |
|    2   N/A  N/A            2406      G   /usr/lib/xorg/Xorg                        4MiB |
+-----------------------------------------------------------------------------------------+

但是在 Python 中运行:

import torch
print(torch.cuda.is_available())
print(torch.cuda.get_device_name(0))

却返回:

UserWarning: CUDA initialization: CUDA unknown error - this may be due to an incorrectly set up environment, e.g. changing env variable CUDA_VISIBLE_DEVICES after program start. Setting the available devices to be zero. (Triggered internally at ../c10/cuda/CUDAFunctions.cpp:108.)return torch._C._cuda_getDeviceCount() > 0RuntimeError: CUDA unknown error - this may be due to an incorrectly set up environment, e.g. changing env variable CUDA_VISIBLE_DEVICES after program start. Setting the available devices to be zero.

初步排查思路

✅ GPU 是存在的,nvidia-smi 正常

✅ PyTorch 是 GPU 版本,非 +cpu。之前在这个环境中成功运行过相关代码

torch.cuda 初始化失败

怀疑是 某块 GPU(如 GPU3)硬件或驱动状态异常,导致整个 CUDA 驱动初始化失败。

最终解决方案:无需重启,修复 CUDA 驱动状态

安装 nvidia-modprobe

sudo apt install nvidia-modprobe
sudo nvidia-modprobe

卸载并重载 NVIDIA 驱动模块

# 卸载驱动模块
sudo rmmod nvidia_uvm# 重新加载驱动模块
sudo modprobe nvidia_uvm

最终验证成功🎉

import torch
print(torch.cuda.is_available())
print(torch.cuda.get_device_name(0))True
NVIDIA GeForce RTX 3090

参考资料

CUDA initialization: CUDA unknown error - this may be due to an incorrectly set up environment

相关文章:

  • Selenium 测试框架 - Python
  • 语音合成之十六 语音合成(TTS)跳跃与重复问题的解析:成因、机制及解决方案
  • C语言学习之数据在内存中的存储
  • ModbusRTU转profibusDP网关与RAC400控制器06功能码的应用
  • Level1.7列表
  • Java IO流学习指南:从小白到入门
  • Java程序员学从0学AI(三)
  • 【信息系统项目管理师】一文掌握高项常考题型-项目进度类计算
  • python数据结构-列表详解
  • C++:共享指针unique_ptr的理解与应用
  • C++:虚函数与纯虚函数
  • SpringAI核心
  • Pr -- 耳机没有Pr输出的声音
  • 对比Redis与向量数据库(如Milvus)在AI中的应用
  • 6.3.2图的深度优先遍历
  • 配置tomcat时,无法部署工件该怎么办?
  • linux线程同步与互斥
  • 算法笔记·数学·最大公约数
  • 酷柚易汛ERP标签打印解决方案
  • [原创]X86C++反汇编01.IDA和提取签名
  • b2b电子商务网站调研报告文字/seo优化
  • 广州网站外包/网络平台推广
  • 武汉大学人民医院招聘/北仑seo排名优化技术
  • 网站建设 织梦者/广东河源最新疫情
  • html5 经典网站/公司查询
  • 加强网站建设说明报告范文/地推网app推广平台