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

【踩坑记录】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

http://www.xdnf.cn/news/8670.html

相关文章:

  • 【MPC控制 - 从ACC到自动驾驶】2 车辆纵向动力学建模与离散化:MPC的“数字蓝图”
  • 初学c语言20(动态内存管理)
  • 浅析SpringBoot中的classpath
  • C++——volatile
  • C#学习第25天:GUI编程
  • 视频剪辑 VEGAS - 配置视频片段保持原长宽比
  • 2025 中青杯数学建模AB题
  • 加州房价预测:基于 Python 的多元回归分析实践
  • PP-YOLOE-SOD学习笔记2
  • ruoyi-erp 开源:功能全面灵活可定制
  • 25Yunxi期中
  • 基于CSP模型实现的游戏排行榜
  • 【Qt开发】进度条ProgressBar和日历Calendar Widget
  • 消息队列在异步推理任务中的作用
  • leetcode hot100刷题日记——14.二叉树的最大深度
  • pyhton基础【2】基本语法
  • CodeForces - 1692D
  • 算法笔记·数学·欧拉函数
  • PCB布局设计
  • Windows逆向工程提升之IMAGE_BASE_RELOCATION
  • 使用Python操作Mysql数据库
  • 【VBA 字典的引用和调用方法】
  • 【笔记】如何解决GitHub报错403
  • [创业之路-377]:企业战略管理案例分析-战略制定/设计-市场洞察“五看”:看宏观之社会发展趋势:数字化、智能化、个性化的趋势对初创公司的战略机会
  • 品鉴JS的魅力之防抖与节流【JS】
  • 英语写作中“随着……的出现”with the advent of 的用法
  • 03-工具篇-SSH远程登录ubuntu系统
  • 同为科技 智能PDU产品选型介绍 EN10/I801CI
  • Elasticsearch实操案例
  • Linux Shell编程(九)