利用Python进行全面的GPU环境检测与分析
作者:老大白菜
这篇文章主要为大家详细介绍了如何使用Python编写一个强大的 GPU 诊断工具,它能够全面收集和分析系统中的 GPU 相关信息,感兴趣的可以了解下
简介
本文介绍了一个强大的 GPU 诊断工具,它能够全面收集和分析系统中的 GPU 相关信息,包括硬件规格、驱动状态、显存使用情况以及 USB 控制器信息。这个工具特别适用于深度学习开发环境的配置检查和问题诊断。
功能特点
1.系统环境检测
- Python 运行环境版本
- PyTorch 版本信息
- CUDA 和 cuDNN 版本检查
2.CUDA 环境变量检查
- CUDA_HOME
- CUDA_PATH
- CUDA_VISIBLE_DEVICES
3.GPU 硬件信息
- 设备数量和型号
- 计算能力
- 显存容量
- 多处理器数量
- 最大线程数
4.显存使用状态
- 已分配显存
- 已预留显存
- 可用显存
5.USB 和雷电接口支持
- NVIDIA USB 控制器检测
- Type-C 接口支持检查
- 雷电接口支持检查
实现细节
1. 环境信息收集
工具使用 Python 的系统库和 PyTorch 库来收集基本的环境信息。通过访问系统环境变量和 PyTorch 的内置函数,可以获取 CUDA 相关的配置信息。
2. GPU 信息获取
使用 PyTorch 的 CUDA API 获取详细的 GPU 信息,包括:
- torch.cuda.is_available() 检查 GPU 可用性
- torch.cuda.device_count() 获取 GPU 数量
- torch.cuda.get_device_properties() 获取 GPU 属性
3. 显存监控
通过 PyTorch 的内存管理 API 实时监控显存使用情况:
- torch.cuda.memory_allocated()
- torch.cuda.memory_reserved()
4. 硬件接口检测
使用 Windows Management Instrumentation Command-line (WMIC) 工具检测系统的 USB 控制器和雷电接口支持情况。
使用方法
确保系统已安装 Python 和 PyTorch
运行脚本即可获取完整的诊断报告:
python gpu_info.py
完整代码
import sys import os import subprocess import torch from datetime import datetime def get_gpu_info(): print("=" * 50) print("GPU 诊断报告") print("=" * 50) print(f"诊断时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n") # 系统信息 print("系统信息:") print(f"Python 版本: {sys.version}") print(f"PyTorch 版本: {torch.__version__}") print(f"CUDA 版本 (PyTorch): {torch.version.cuda}") print(f"cuDNN 版本: {torch.backends.cudnn.version()}\n") # CUDA 环境检查 print("CUDA 环境变量:") cuda_vars = { 'CUDA_HOME': os.environ.get('CUDA_HOME', '未设置'), 'CUDA_PATH': os.environ.get('CUDA_PATH', '未设置'), 'CUDA_VISIBLE_DEVICES': os.environ.get('CUDA_VISIBLE_DEVICES', '未设置') } for var, value in cuda_vars.items(): print(f"{var}: {value}") print() # NVIDIA-SMI 输出 print("NVIDIA-SMI 信息:") try: encodings = ['gbk', 'utf-8', 'iso-8859-1'] nvidia_smi = None for encoding in encodings: try: nvidia_smi = subprocess.check_output(["nvidia-smi"]).decode(encoding) break except UnicodeDecodeError: continue if nvidia_smi: print(nvidia_smi) else: print("无法解码 nvidia-smi 输出") except Exception as e: print(f"执行 nvidia-smi 失败: {e}\n") # PyTorch GPU 信息 print("\nPyTorch GPU 详细信息:") if torch.cuda.is_available(): print(f"检测到 {torch.cuda.device_count()} 个 GPU 设备") for i in range(torch.cuda.device_count()): props = torch.cuda.get_device_properties(i) print(f"\nGPU {i}: {props.name}") print(f"├─ 计算能力: {props.major}.{props.minor}") print(f"├─ 总显存: {props.total_memory / (1024**2):.1f} MB") print(f"├─ 多处理器数量: {props.multi_processor_count}") print(f"├─ 最大线程数/块: {props.max_threads_per_multi_processor}") # 显存使用情况 try: memory_allocated = torch.cuda.memory_allocated(i) / (1024**2) memory_reserved = torch.cuda.memory_reserved(i) / (1024**2) memory_free = (props.total_memory / (1024**2)) - memory_allocated print(f"├─ 已分配显存: {memory_allocated:.1f} MB") print(f"├─ 已预留显存: {memory_reserved:.1f} MB") print(f"└─ 可用显存: {memory_free:.1f} MB") except Exception as e: print(f"└─ 无法获取显存使用情况: {e}") else: print("未检测到可用的 GPU 设备") print("\n可能的原因:") print("1. CUDA 驱动未正确安装") print("2. PyTorch 未编译 CUDA 支持") print("3. GPU 被其他进程占用") print("4. 系统未正确识别 GPU") def get_usb_controller_info(): print("\nUSB 控制器信息:") try: result = subprocess.check_output(["wmic", "path", "Win32_USBController", "get", "name,manufacturer"], encoding='gbk') controllers = result.strip().split('\n')[1:] # Skip header nvidia_controllers = [] for controller in controllers: if controller.strip(): if "NVIDIA" in controller: nvidia_controllers.append(controller.strip()) if nvidia_controllers: print("\nNVIDIA USB 控制器:") for controller in nvidia_controllers: print(f"- {controller}") if "Type-C" in controller: print(" * 支持 USB Type-C") # Check for Thunderbolt support try: tb_check = subprocess.check_output( ["wmic", "path", "Win32_PnPEntity", "where", "caption like '%Thunderbolt%'", "get", "caption"], encoding='gbk' ) if len(tb_check.strip().split('\n')) > 1: # Has content beyond header print(" * 支持雷电接口") except: pass else: print("未找到 NVIDIA USB 控制器") except Exception as e: print(f"获取 USB 控制器信息失败: {e}") if __name__ == "__main__": get_gpu_info() get_usb_controller_info()
注意事项
确保系统已正确安装 NVIDIA 驱动
PyTorch 需要安装 CUDA 版本
在 Windows 系统中,需要管理员权限来获取某些硬件信息
故障排除
如果工具报告未检测到 GPU,请检查:
NVIDIA 驱动是否正确安装
CUDA 工具包是否与 PyTorch 版本匹配
环境变量是否正确配置
GPU 是否被其他进程独占
以上就是利用Python进行全面的GPU环境检测与分析的详细内容,更多关于Python GPU环境检测的资料请关注脚本之家其它相关文章!