/wuat/miniconda3/envs/py310/bin/python /home/wuat/文档/cudatest.py (py310) (base) wuat@wuat-ubuntu22:/$ /home/wuat/miniconda3/envs/py310/bin/python /home/wuat/文档/cudatest.py PyTorch 版本: 2.4.0+cu121 /home/wuat/miniconda3/envs/py310/lib/python3.10/site-packages/torch/cuda/init.py:128: UserWarning: CUDA initialization: Unexpected error from cudaGetDeviceCount(). Did you run some cuda functions before calling NumCudaDevices() that might have already set an error? Error 101: invalid device ordinal (Triggered internally at ../c10/cuda/CUDAFunctions.cpp:108.) return torch._C._cuda_getDeviceCount() > 0 CUDA 是否可用: False CUDA 不可用,PyTorch 将在 CPU 上运行。 (py310) (base) wuat@wuat-ubuntu22:/$ nvcc -V nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2023 NVIDIA Corporation Built on Tue_Feb__7_19:32:13_PST_2023 Cuda compilation tools, release 12.1, V12.1.66 Build cuda_12.1.r12.1/compiler.32415258_0 (py310) (base) wuat@wuat-ubuntu22:/$ nvidia-smi Thu May 22 15:52:39 2025 +---------------------------------------------------------------------------------------+ | NVIDIA-SMI 535.230.02 Driver Version: 535.230.02 CUDA Version: 12.2 | |-----------------------------------------+----------------------+----------------------+ | 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 Tesla P40 Off | 00000000:01:00.0 Off | Off | | N/A 26C P8 13W / 250W | 4MiB / 24576MiB | 0% Default | | | | N/A | +-----------------------------------------+----------------------+----------------------+ +---------------------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=======================================================================================| | 0 N/A N/A 1840 G /usr/lib/xorg/Xorg 4MiB | +---------------------------------------------------------------------------------------+
时间: 2025-05-31 09:45:51 AIGC 浏览: 29 评论: 5
### 解决 PyTorch CUDA Unavailable Error (Invalid Device Ordinal) 问题
当遇到 `RuntimeError: CUDA error: invalid device ordinal` 错误时,通常是因为 GPU 配置不正确、环境变量设置不当或者软件版本之间的兼容性问题所致。以下是针对此问题的详细分析和解决方案。
#### 检查 GPU 是否可用
首先需要确认系统是否能够识别 NVIDIA GPU 并加载相应的驱动程序。运行以下命令以验证 GPU 的状态:
```bash
nvidia-smi
```
该工具会列出所有可见的 GPU 设备及其利用率。如果没有看到任何设备或报告错误,则可能是驱动程序未正确安装[^1]。
#### 环境变量配置
在多 GPU 系统中,需确保设置了正确的环境变量来控制哪些 GPU 被应用程序所见。例如,在只希望使用第二个 GPU(索引为 1)的情况下,应在启动脚本前加入如下语句:
```python
os.environ['CUDA_VISIBLE_DEVICES'] = '1'
conf.device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
```
注意这里指定了 `"cuda"` 而非特定编号如 `"cuda:0"` ,因为一旦设定了 `CUDA_VISIBLE_DEVICES=1`, 实际上的第一个逻辑设备即对应物理上的第2张卡[^2].
#### 更新与匹配版本
为了防止因不同组件间的版本差异引发冲突,建议遵循官方推荐组合表选择相适应的 PyTorch, CUDA 和 cuDNN 版本。当前您提到的是 PyTorch 2.4.0+cu121 和 CUDA 12.1,理论上它们应该互相支持良好。不过仍有必要再次核实 NVIDIA Driver Version(535.230.02),保证其满足最低需求标准[^3]。
#### 修改代码中的设备分配策略
如果项目涉及分布式或多进程计算场景下的数据并行化操作,则特别需要注意初始化阶段里关于 rank 和 local_rank 参数设定准确性。下面给出一段修正后的示范代码片段供参考:
```python
import os
import torch.distributed as dist
from torch.nn.parallel import DistributedDataParallel as DDP
def setup(rank, world_size):
os.environ["MASTER_ADDR"] = 'localhost'
os.environ["MASTER_PORT"] = '12355'
# initialize the process group
dist.init_process_group("nccl", rank=rank, world_size=world_size)
local_rank = int(os.environ.get('LOCAL_RANK', 0))
setup(local_rank, num_gpus_per_node)
model.to(f'cuda:{local_rank}')
ddp_model = DDP(model, device_ids=[local_rank])
```
#### 日志记录排查
最后一步也是至关重要的就是仔细阅读异常抛出位置附近的完整追踪信息(stack trace),从中往往能获得更多线索指向根本原因所在之处。启用调试模式可以帮助定位潜在隐患:
```python
torch.set_printoptions(precision=None, threshold=float('inf'), edgeitems=3, linewidth=160, profile='default')
try:
...
except Exception as e:
logging.error(e.args[0], exc_info=True)
```
---
### 示例总结
综上所述,解决 `invalid device ordinal` 类型的问题可以从以下几个方面入手:一是基础层面保障硬件正常工作并通过适当指令调用;二是合理规划资源利用途径减少竞争干扰;三是依据实际应用场景调整算法框架内部实现细节优化性能表现。最终目的是达成稳定高效的模型训练流程。
阅读全文
相关推荐





评论

小明斗
2025.07.31
日志记录有助于更精准定位错误根源

BJWcn
2025.06.21
PyTorch 无法识别 CUDA 设备,可能是驱动或版本不匹配

WaiyuetFung
2025.04.19
CUDA_VISIBLE_DEVICES 设置不当导致设备不可用

lirumei
2025.03.21
代码中设备分配逻辑需调整以适配多 GPU 环境

zh222333
2025.03.11
建议检查 NVIDIA 驱动与 CUDA 版本是否兼容