python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python GPU环境检测

利用Python进行全面的GPU环境检测与分析

作者:老大白菜

这篇文章主要为大家详细介绍了如何使用Python编写一个强大的 GPU 诊断工具,它能够全面收集和分析系统中的 GPU 相关信息,感兴趣的可以了解下

简介

本文介绍了一个强大的 GPU 诊断工具,它能够全面收集和分析系统中的 GPU 相关信息,包括硬件规格、驱动状态、显存使用情况以及 USB 控制器信息。这个工具特别适用于深度学习开发环境的配置检查和问题诊断。

功能特点

1.系统环境检测

2.CUDA 环境变量检查

3.GPU 硬件信息

4.显存使用状态

5.USB 和雷电接口支持

实现细节

1. 环境信息收集

工具使用 Python 的系统库和 PyTorch 库来收集基本的环境信息。通过访问系统环境变量和 PyTorch 的内置函数,可以获取 CUDA 相关的配置信息。

2. GPU 信息获取

使用 PyTorch 的 CUDA API 获取详细的 GPU 信息,包括:

3. 显存监控

通过 PyTorch 的内存管理 API 实时监控显存使用情况:

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环境检测的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文