跳转至

如何检查 CUDA 是否可用?完整验证指南

问题背景

最近在配置深度学习环境时,遇到了一个常见问题:如何确认 CUDA 是否正确安装并可用?

这个问题看似简单,但实际上涉及到多个层面的检查: - CUDA 驱动是否安装? - CUDA Toolkit 是否正确配置? - GPU 是否被系统识别? - Python 环境能否调用 CUDA?

今天这篇文章,我会分享一套完整的 CUDA 可用性检查方法,帮你快速定位问题。

环境信息

  • 操作系统:Linux / Windows / macOS
  • CUDA 版本:11.8 / 12.0+
  • Python 版本:3.8+

检查方法

方法 1:使用 nvidia-smi 命令(最基础)

这是最直接的方法,检查 NVIDIA 驱动是否安装。

Linux / Windows

nvidia-smi

预期输出

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.85.12    Driver Version: 525.85.12    CUDA Version: 12.0  |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  NVIDIA GeForce ...  Off  | 00000000:01:00.0 On |                  N/A |
|  0%   45C    P8    12W / 250W |    123MiB / 12288MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

判断标准: - ✅ 如果能看到 GPU 信息 → 驱动已安装 - ✅ 如果显示 "CUDA Version: 12.0" → CUDA 驱动可用 - ❌ 如果提示 "command not found" → 驱动未安装

macOS

macOS 不支持 NVIDIA GPU(M1/M2 芯片),所以无法使用 nvidia-smi。


方法 2:检查 CUDA Toolkit 版本

如果 nvidia-smi 显示驱动已安装,接下来检查 CUDA Toolkit。

Linux / Windows

nvcc --version

预期输出

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
Built on Mon_Apr__3_17:16:06_PDT_2023
Cuda compilation tools, release 12.1, V12.1.105
Build cuda_12.1.r12.1/compiler.32688072_0

判断标准: - ✅ 显示版本号 → CUDA Toolkit 已安装 - ❌ 提示 "command not found" → 需要安装 CUDA Toolkit

注意:nvcc 版本和 nvidia-smi 显示的 CUDA Version 可能不同: - nvidia-smi 显示的是驱动支持的最高 CUDA 版本 - nvcc --version 显示的是实际安装的 CUDA Toolkit 版本


方法 3:使用 Python 检查(最实用)

对于深度学习开发者,这是最常用的方法。

安装 PyTorch 检查

import torch

# 检查 CUDA 是否可用
print(f"CUDA available: {torch.cuda.is_available()}")

# 检查 CUDA 版本
if torch.cuda.is_available():
    print(f"CUDA version: {torch.version.cuda}")
    print(f"cuDNN version: {torch.backends.cudnn.version()}")
    print(f"GPU count: {torch.cuda.device_count()}")
    print(f"GPU name: {torch.cuda.get_device_name(0)}")

预期输出

CUDA available: True
CUDA version: 12.1
cuDNN version: 8902
GPU count: 1
GPU name: NVIDIA GeForce RTX 4090

判断标准: - ✅ torch.cuda.is_available() 返回 True → CUDA 可用 - ❌ 返回 False → CUDA 不可用,需要检查环境

安装 TensorFlow 检查

import tensorflow as tf

# 检查 GPU 是否可用
print(f"GPU available: {tf.config.list_physical_devices('GPU')}")

# 检查 CUDA 版本
print(f"CUDA version: {tf.sysconfig.get_build_info()['cuda_version']}")
print(f"cuDNN version: {tf.sysconfig.get_build_info()['cudnn_version']}")

预期输出

GPU available: [PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]
CUDA version: 12.1
cuDNN version: 8.9

方法 4:运行简单 CUDA 程序验证

如果以上方法都显示 CUDA 可用,最后用实际程序验证。

使用 PyTorch 运行 GPU 计算

import torch

# 创建张量并移到 GPU
if torch.cuda.is_available():
    x = torch.randn(1000, 1000).cuda()
    y = torch.randn(1000, 1000).cuda()

    # 执行矩阵乘法(GPU 计算)
    z = torch.matmul(x, y)

    print(f"计算完成,结果形状: {z.shape}")
    print(f"结果在 GPU: {z.is_cuda}")
else:
    print("CUDA 不可用,无法执行 GPU 计算")

判断标准: - ✅ 程序正常运行,无报错 → CUDA 完全可用 - ❌ 报错 "CUDA out of memory" → CUDA 可用但显存不足 - ❌ 报错 "CUDA error" → CUDA 配置有问题


常见问题排查

问题 1:nvidia-smi 可用,但 torch.cuda.is_available() 返回 False

可能原因: 1. PyTorch 版本与 CUDA 版本不匹配 2. PyTorch 安装时未选择 CUDA 版本

解决方法

# 卸载当前 PyTorch
pip uninstall torch torchvision torchaudio

# 重新安装匹配的 PyTorch(以 CUDA 12.1 为例)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

问题 2:CUDA 版本不匹配

检查方法

# 检查驱动支持的 CUDA 版本
nvidia-smi | grep "CUDA Version"

# 检查安装的 CUDA Toolkit 版本
nvcc --version

# 检查 PyTorch 编译时的 CUDA 版本
python -c "import torch; print(torch.version.cuda)"

解决方法: - 确保三者版本兼容(驱动版本 ≥ Toolkit 版本 ≥ PyTorch 编译版本) - 推荐使用相同的主版本号(如都是 12.x)

问题 3:多 GPU 环境只识别到一个

检查方法

import torch

print(f"GPU count: {torch.cuda.device_count()}")
for i in range(torch.cuda.device_count()):
    print(f"GPU {i}: {torch.cuda.get_device_name(i)}")

解决方法: - 检查 GPU 是否都在同一台机器上 - 检查 PCIe 连接 - 检查驱动是否正确识别所有 GPU


完整检查脚本

为了方便使用,这里提供一个完整的检查脚本:

#!/usr/bin/env python3
"""
CUDA 可用性完整检查脚本
"""

import sys
import subprocess

def check_nvidia_smi():
    """检查 nvidia-smi 命令"""
    try:
        result = subprocess.run(['nvidia-smi'],
                               capture_output=True,
                               text=True)
        if result.returncode == 0:
            print("✅ nvidia-smi: 可用")
            print(result.stdout.split('\n')[0])  # 显示第一行(版本信息)
            return True
        else:
            print("❌ nvidia-smi: 不可用")
            return False
    except FileNotFoundError:
        print("❌ nvidia-smi: 未找到命令(驱动可能未安装)")
        return False

def check_nvcc():
    """检查 nvcc 命令"""
    try:
        result = subprocess.run(['nvcc', '--version'],
                               capture_output=True,
                               text=True)
        if result.returncode == 0:
            print("✅ nvcc: 可用")
            # 提取版本号
            for line in result.stdout.split('\n'):
                if 'release' in line:
                    print(f"   {line.strip()}")
                    break
            return True
        else:
            print("❌ nvcc: 不可用")
            return False
    except FileNotFoundError:
        print("❌ nvcc: 未找到命令(CUDA Toolkit 可能未安装)")
        return False

def check_pytorch():
    """检查 PyTorch CUDA 支持"""
    try:
        import torch
        print(f"\n📦 PyTorch 版本: {torch.__version__}")

        if torch.cuda.is_available():
            print("✅ PyTorch CUDA: 可用")
            print(f"   CUDA 版本: {torch.version.cuda}")
            print(f"   GPU 数量: {torch.cuda.device_count()}")
            for i in range(torch.cuda.device_count()):
                print(f"   GPU {i}: {torch.cuda.get_device_name(i)}")

            # 测试 GPU 计算
            try:
                x = torch.randn(100, 100).cuda()
                y = torch.randn(100, 100).cuda()
                z = torch.matmul(x, y)
                print("✅ GPU 计算测试: 通过")
            except Exception as e:
                print(f"❌ GPU 计算测试: 失败 - {e}")

            return True
        else:
            print("❌ PyTorch CUDA: 不可用")
            print("   可能原因:")
            print("   1. PyTorch 版本与 CUDA 版本不匹配")
            print("   2. PyTorch 安装时未选择 CUDA 版本")
            return False
    except ImportError:
        print("❌ PyTorch: 未安装")
        return False

def main():
    print("=" * 50)
    print("CUDA 可用性检查")
    print("=" * 50)

    results = []

    print("\n1️⃣  检查 NVIDIA 驱动...")
    results.append(("NVIDIA 驱动", check_nvidia_smi()))

    print("\n2️⃣  检查 CUDA Toolkit...")
    results.append(("CUDA Toolkit", check_nvcc()))

    print("\n3️⃣  检查 PyTorch CUDA 支持...")
    results.append(("PyTorch CUDA", check_pytorch()))

    print("\n" + "=" * 50)
    print("检查结果汇总")
    print("=" * 50)

    all_ok = True
    for name, status in results:
        status_icon = "✅" if status else "❌"
        print(f"{status_icon} {name}: {'可用' if status else '不可用'}")
        if not status:
            all_ok = False

    print("\n" + "=" * 50)
    if all_ok:
        print("🎉 所有检查通过!CUDA 环境配置正确。")
    else:
        print("⚠️  部分检查未通过,请根据上述提示进行排查。")
    print("=" * 50)

if __name__ == "__main__":
    main()

使用方法

# 保存为 check_cuda.py
python check_cuda.py

总结

检查 CUDA 是否可用,需要从多个层面验证:

  1. 驱动层面nvidia-smi 命令
  2. 工具层面nvcc --version 命令
  3. 应用层面:Python 库(PyTorch/TensorFlow)检查
  4. 实际验证:运行 GPU 计算测试

推荐流程: - 快速检查:nvidia-smi + torch.cuda.is_available() - 完整检查:运行上面的完整检查脚本 - 问题排查:根据错误信息对照常见问题

记住:只有所有层面都通过,CUDA 才算真正可用。


参考资料


最后更新:2025-12-03 测试环境:Ubuntu 22.04 + CUDA 12.1 + PyTorch 2.1

回到页面顶部