无需TensorFlow/PyTorch,如何检测GPU是否可用?
不用深度学习框架检测GPU可访问性的方法
首先纠正一个误区:psutil.virtual_memory().percent是用来检测系统物理内存使用率的,和GPU完全无关,你之前用错工具了。下面是几种靠谱的检测方法:
1. 针对NVIDIA GPU:nvidia-smi命令
这是NVIDIA官方提供的工具,只要装了NVIDIA驱动就会自带,直接在终端运行nvidia-smi就能看到GPU型号、使用率、显存占用、正在运行的进程等信息。如果要在Python里自动化检测,可以用subprocess调用并解析输出:
import subprocess def check_nvidia_gpu(): try: # 调用nvidia-smi获取关键GPU信息,格式化为csv result = subprocess.run( ['nvidia-smi', '--query-gpu=name,utilization.gpu,memory.used,memory.total', '--format=csv,noheader,nounits'], capture_output=True, text=True, check=True ) gpu_list = result.stdout.strip().split('\n') if not gpu_list: print("未检测到可用NVIDIA GPU") return False print("检测到NVIDIA GPU信息:") for idx, info in enumerate(gpu_list): name, gpu_util, used_mem, total_mem = info.split(', ') print(f"GPU {idx+1}: {name}") print(f" 使用率: {gpu_util}%") print(f" 显存使用: {used_mem}/{total_mem} MB") return True except subprocess.CalledProcessError: print("nvidia-smi调用失败,可能未安装NVIDIA驱动或无NVIDIA GPU") return False
2. 跨平台通用:OpenCL(支持NVIDIA/AMD/Intel GPU)
OpenCL是跨厂商的并行计算框架,通过pyopencl库可以检测所有支持OpenCL的GPU设备:
import pyopencl as cl def check_opencl_gpu(): try: platforms = cl.get_platforms() has_gpu = False for platform in platforms: # 只筛选GPU设备 gpu_devices = platform.get_devices(device_type=cl.device_type.GPU) if gpu_devices: has_gpu = True print(f"\n平台:{platform.name}") for idx, device in enumerate(gpu_devices): print(f"GPU {idx+1}: {device.name}") print(f" 总显存: {device.global_mem_size / 1024**2:.2f} MB") print(f" 最大工作组大小: {device.max_work_group_size}") if not has_gpu: print("未检测到支持OpenCL的GPU") return has_gpu except Exception as e: print(f"OpenCL检测失败:{str(e)}") return False
3. 针对NVIDIA GPU:pycuda库
pycuda是专门针对NVIDIA CUDA平台的Python库,能直接检测GPU并获取硬件参数:
import pycuda.driver as cuda def check_pycuda_gpu(): try: cuda.init() device_num = cuda.Device.count() if device_num == 0: print("未检测到NVIDIA GPU") return False print(f"检测到 {device_num} 个NVIDIA GPU:") for i in range(device_num): device = cuda.Device(i) print(f"GPU {i+1}: {device.name()}") print(f" 总显存: {device.total_memory() / 1024**2:.2f} MB") print(f" 计算能力: {device.compute_capability()}") return True except Exception as e: print(f"PyCUDA检测失败:{str(e)}") return False
4. 针对AMD GPU:rocm-smi命令
如果是AMD GPU,安装ROCm驱动后可以用rocm-smi命令查看GPU状态,Python里同样可以用subprocess调用解析:
import subprocess def check_amd_gpu(): try: result = subprocess.run(['rocm-smi', '--showgpu'], capture_output=True, text=True, check=True) print("AMD GPU信息:") print(result.stdout.strip()) return True except subprocess.CalledProcessError: print("rocm-smi调用失败,可能未安装ROCm驱动或无AMD GPU") return False
内容的提问来源于stack exchange,提问作者justRandomLearner
相关产品推荐
相关产品推荐

