利用Python進行全面的GPU環(huán)境檢測與分析
簡介
本文介紹了一個強大的 GPU 診斷工具,它能夠全面收集和分析系統(tǒng)中的 GPU 相關(guān)信息,包括硬件規(guī)格、驅(qū)動狀態(tài)、顯存使用情況以及 USB 控制器信息。這個工具特別適用于深度學(xué)習(xí)開發(fā)環(huán)境的配置檢查和問題診斷。
功能特點
1.系統(tǒng)環(huán)境檢測
- Python 運行環(huán)境版本
- PyTorch 版本信息
- CUDA 和 cuDNN 版本檢查
2.CUDA 環(huán)境變量檢查
- CUDA_HOME
- CUDA_PATH
- CUDA_VISIBLE_DEVICES
3.GPU 硬件信息
- 設(shè)備數(shù)量和型號
- 計算能力
- 顯存容量
- 多處理器數(shù)量
- 最大線程數(shù)
4.顯存使用狀態(tài)
- 已分配顯存
- 已預(yù)留顯存
- 可用顯存
5.USB 和雷電接口支持
- NVIDIA USB 控制器檢測
- Type-C 接口支持檢查
- 雷電接口支持檢查
實現(xiàn)細節(jié)
1. 環(huán)境信息收集
工具使用 Python 的系統(tǒng)庫和 PyTorch 庫來收集基本的環(huán)境信息。通過訪問系統(tǒng)環(huán)境變量和 PyTorch 的內(nèi)置函數(shù),可以獲取 CUDA 相關(guān)的配置信息。
2. GPU 信息獲取
使用 PyTorch 的 CUDA API 獲取詳細的 GPU 信息,包括:
- torch.cuda.is_available() 檢查 GPU 可用性
- torch.cuda.device_count() 獲取 GPU 數(shù)量
- torch.cuda.get_device_properties() 獲取 GPU 屬性
3. 顯存監(jiān)控
通過 PyTorch 的內(nèi)存管理 API 實時監(jiān)控顯存使用情況:
- torch.cuda.memory_allocated()
- torch.cuda.memory_reserved()
4. 硬件接口檢測
使用 Windows Management Instrumentation Command-line (WMIC) 工具檢測系統(tǒng)的 USB 控制器和雷電接口支持情況。
使用方法
確保系統(tǒng)已安裝 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") # 系統(tǒng)信息 print("系統(tǒng)信息:") 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 環(huán)境檢查 print("CUDA 環(huán)境變量:") cuda_vars = { 'CUDA_HOME': os.environ.get('CUDA_HOME', '未設(shè)置'), 'CUDA_PATH': os.environ.get('CUDA_PATH', '未設(shè)置'), 'CUDA_VISIBLE_DEVICES': os.environ.get('CUDA_VISIBLE_DEVICES', '未設(shè)置') } 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"執(zhí)行 nvidia-smi 失敗: {e}\n") # PyTorch GPU 信息 print("\nPyTorch GPU 詳細信息:") if torch.cuda.is_available(): print(f"檢測到 {torch.cuda.device_count()} 個 GPU 設(shè)備") 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"├─ 多處理器數(shù)量: {props.multi_processor_count}") print(f"├─ 最大線程數(shù)/塊: {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"├─ 已預(yù)留顯存: {memory_reserved:.1f} MB") print(f"└─ 可用顯存: {memory_free:.1f} MB") except Exception as e: print(f"└─ 無法獲取顯存使用情況: {e}") else: print("未檢測到可用的 GPU 設(shè)備") print("\n可能的原因:") print("1. CUDA 驅(qū)動未正確安裝") print("2. PyTorch 未編譯 CUDA 支持") print("3. GPU 被其他進程占用") print("4. 系統(tǒng)未正確識別 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()
注意事項
確保系統(tǒng)已正確安裝 NVIDIA 驅(qū)動
PyTorch 需要安裝 CUDA 版本
在 Windows 系統(tǒng)中,需要管理員權(quán)限來獲取某些硬件信息
故障排除
如果工具報告未檢測到 GPU,請檢查:
NVIDIA 驅(qū)動是否正確安裝
CUDA 工具包是否與 PyTorch 版本匹配
環(huán)境變量是否正確配置
GPU 是否被其他進程獨占
以上就是利用Python進行全面的GPU環(huán)境檢測與分析的詳細內(nèi)容,更多關(guān)于Python GPU環(huán)境檢測的資料請關(guān)注腳本之家其它相關(guān)文章!
- Python基于pyCUDA實現(xiàn)GPU加速并行計算功能入門教程
- 關(guān)于Python的GPU編程實例近鄰表計算的講解
- Python實現(xiàn)GPU加速的基本操作
- Python3實現(xiàn)打格點算法的GPU加速實例詳解
- GPU排隊腳本實現(xiàn)空閑觸發(fā)python腳本實現(xiàn)示例
- python 詳解如何使用GPU大幅提高效率
- python沒有g(shù)pu,如何改用cpu跑代碼
- 淺談Python實時檢測CPU和GPU的功耗
- 一文詳解如何用GPU來運行Python代碼
- Python Pytorch gpu 分析環(huán)境配置
- Python調(diào)用GPU算力的實現(xiàn)步驟
相關(guān)文章
Python調(diào)用scp向服務(wù)器上傳文件示例
今天小編就為大家分享一篇Python調(diào)用scp向服務(wù)器上傳文件示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12python將pandas datarame保存為txt文件的實例
今天小編就為大家分享一篇python將pandas datarame保存為txt文件的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-02-02Python文件基本操作open函數(shù)應(yīng)用與示例詳解
這篇文章主要為大家介紹了Python文件基本操作open函數(shù)應(yīng)用與示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-12-12Opencv中cv2.cvtColor彩色圖轉(zhuǎn)灰度圖的其他6種方法
本文主要介紹了Opencv中cv2.cvtColor彩色圖轉(zhuǎn)灰度圖的其他6種方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05使用python-cv2實現(xiàn)Harr+Adaboost人臉識別的示例
這篇文章主要介紹了使用python-cv2實現(xiàn)Harr+Adaboost人臉識別的示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10思考分析Python運算中?a+=b?和?a=a+b是否相等
這篇文章主要為大家介紹了Python運算中a+=b和a=a+b是否相等及原理思考分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-04-04Python實現(xiàn)變量數(shù)值交換及判斷數(shù)組是否含有某個元素的方法
這篇文章主要介紹了Python實現(xiàn)變量數(shù)值交換及判斷數(shù)組是否含有某個元素的方法,涉及Python字符串與數(shù)組的相關(guān)賦值、判斷操作技巧,需要的朋友可以參考下2017-09-09