Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >nvidia-smi详解(二)- python

nvidia-smi详解(二)- python

原创
作者头像
何其不顾四月天
发布于 2024-07-18 17:32:59
发布于 2024-07-18 17:32:59
50802
代码可运行
举报
文章被收录于专栏:四月天的专栏四月天的专栏
运行总次数:2
代码可运行

Nvidia-smi and Python

前言

在之前的nvidia-smi 详解(一)写的过程中,查资料查到了有对应的python支持方法,就计划写这个了,随后写加查资料就写好代码了,但是就是犯懒一直没写文章,墨迹到了现在。

也是做了一些简单的接口测试以及使用,主要还是查询的接口,没测试控制类接口。

简介

对应的py库介绍主要是来自: nvidia-ml-py

代码语言:txt
AI代码解释
复制
Provides a Python interface to GPU management and monitoring functions.

This is a wrapper around the NVML library. For information about the NVML library, see the NVML developer page http://developer.nvidia.com/nvidia-management-library-nvml

Download the latest package from: http://pypi.python.org/pypi/nvidia-ml-py/

Note this file can be run with 'python -m doctest -v README.txt' although the results are system dependent

The nvml header file contains function documentation that is relevant to this wrapper. The header file is distributed with. https://developer.nvidia.com/gpu-deployment-kit

The main difference is this library handles allocating structs and passing pointers to the functions, before returning the desired value. Non-success return codes are raised as exceptions as described in the section below.

安装

pip安装

代码语言:shell
AI代码解释
复制
python3 -m pip install nvidia-ml-py

安装包安装

下载地址:nvidia-ml-py 12.555.43

代码语言:shell
AI代码解释
复制
wget https://files.pythonhosted.org/packages/ee/c6/2348fc1fb776ff41a34635fb1f18010a6d6fd7ba6e57184dabd9d98ba9cf/nvidia-ml-py-12.555.43.tar.gz
tar -xzf nvidia-ml-py-$major-$minor-$patch.tar.gz`
cd nvidia-ml-py-$major-$minor-$patch
sudo python setup.py install

注意:$major-$minor-$patch 这三个变量的替换

代码

导入

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
from pynvml import *

初始化

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
nvmlInit()

版本查询

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
print(f"Driver Version: {nvmlSystemGetDriverVersion()}")

输出结果: Driver Version: 552.22

GPU个数获取

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
deviceCount = nvmlDeviceGetCount()

获取对应索引GPU句柄

代码语言:python
代码运行次数:1
运行
AI代码解释
复制
handle = nvmlDeviceGetHandleByIndex(i)
print(f"Device {i} : {nvmlDeviceGetName(handle)}")

输出结果:

代码语言:shell
AI代码解释
复制
Device 0 : NVIDIA GeForce RTX 4060 Ti

获取显存信息

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
info = nvmlDeviceGetMemoryInfo(handle)
print(f"Total memory: {info.total} MiB")
print(f"Free memory: {info.free} MiB")
print(f"Used memory: {info.used} MiB")

输出结果:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
Total memory: 8585740288 MiB
Free memory: 6701080576 MiB
Used memory: 1884659712 MiB

获取显存利用率

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
info = nvmlDeviceGetUtilizationRates(handle)
print(f"UtilizationRates Gpu: {info.gpu}%")
print(f"UtilizationRates Memory: {info.memory}%")

输出结果:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
UtilizationRates Gpu: 1%
UtilizationRates Memory: 17%

获取编码利用率信息

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
info = nvmlDeviceGetEncoderUtilization(handle)
print(f"EncoderUtilization {info}")

输出结果:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
EncoderUtilization [0, 200000]

获取解码利用率信息

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
info = nvmlDeviceGetDecoderUtilization(handle)
print(f"DecoderUtilization {info}")

输出结果:

代码语言:shell
AI代码解释
复制
DecoderUtilization [0, 200000]

获取JPG利用信息

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
info = nvmlDeviceGetJpgUtilization(handle)
print(f"JpgUtilization {info}")

输出结果:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
JpgUtilization [0, 200000]

通过Pid获取进程名字

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
def get_process_name_by_pid(pid):
    try:
        return psutil.Process(pid).name()
    except:
        return None

获取正在运行计算操作的进程列表

代码语言:shell
AI代码解释
复制
info = nvmlDeviceGetComputeRunningProcesses(handle)
for index,item in enumerate(info):
    print(f"{index} : {item} ,name: {get_process_name_by_pid(item.pid)}")

输出信息(只放部分进程):

代码语言:shell
AI代码解释
复制
0 : {'pid': 1716, 'usedGpuMemory': None, 'gpuInstanceId': 4294967295, 'computeInstanceId': 4294967295} ,name: dwm.exe
1 : {'pid': 6384, 'usedGpuMemory': None, 'gpuInstanceId': 4294967295, 'computeInstanceId': 4294967295} ,name: explorer.exe
2 : {'pid': 6592, 'usedGpuMemory': None, 'gpuInstanceId': 4294967295, 'computeInstanceId': 4294967295} ,name: SearchHost.exe
3 : {'pid': 7064, 'usedGpuMemory': None, 'gpuInstanceId': 4294967295, 'computeInstanceId': 4294967295} ,name: StartMenuExperienceHost.exe

获取正在运行的图形进程列表

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
info = nvmlDeviceGetGraphicsRunningProcesses(handle)
for index,item in enumerate(info):
    print(f"{index} : {item} ,name: {get_process_name_by_pid(item.pid)}")

输出信息(只放部分输出结果);

代码语言:shell
AI代码解释
复制
0 : {'pid': 1716, 'usedGpuMemory': None, 'gpuInstanceId': 4294967295, 'computeInstanceId': 4294967295} ,name: dwm.exe
1 : {'pid': 6384, 'usedGpuMemory': None, 'gpuInstanceId': 4294967295, 'computeInstanceId': 4294967295} ,name: explorer.exe
2 : {'pid': 6592, 'usedGpuMemory': None, 'gpuInstanceId': 4294967295, 'computeInstanceId': 4294967295} ,name: SearchHost.exe
3 : {'pid': 7064, 'usedGpuMemory': None, 'gpuInstanceId': 4294967295, 'computeInstanceId': 4294967295} ,name: StartMenuExperienceHost.exe

获取GPU的当前温度

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
temperature_gpu = nvmlDeviceGetTemperature(handle, NVML_TEMPERATURE_GPU)
print(f"temperature_gpu {temperature_gpu}")

输出结果:

代码语言:shell
AI代码解释
复制
temperature_gpu 29

获取GPU的上限温度

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
temperature_threshold = nvmlDeviceGetTemperatureThreshold(handle, NVML_TEMPERATURE_THRESHOLD_GPU_MAX)
print(f"temperature_threshold {temperature_threshold}")

输出结果:

代码语言:shell
AI代码解释
复制
temperature_threshold 90

获取GPU设备的UUID

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
gpu_uuid = nvmlDeviceGetUUID(handle)
print(f"gpu_uuid {gpu_uuid}")

输出结果:

代码语言:shell
AI代码解释
复制
gpu_uuid GPU-3fd9292f-3024-fbdb-4596-5c5560b91654

获取GPU设备的PCI信息

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
pci_info = nvmlDeviceGetPciInfo(handle)
print(f"pci info {pci_info}")

获取的其他信息 CLOCK相关

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
print(f"GRAPHICS clock info {nvmlDeviceGetClockInfo(handle, NVML_CLOCK_GRAPHICS)}")
print(f"SM clock info {nvmlDeviceGetClockInfo(handle, NVML_CLOCK_SM)}")
print(f"MEM clock info {nvmlDeviceGetClockInfo(handle, NVML_CLOCK_MEM)}")
print(f"VIDEO clock info {nvmlDeviceGetClockInfo(handle, NVML_CLOCK_VIDEO)}")

输出结果:

代码语言:shell
AI代码解释
复制
GRAPHICS clock info 270
SM clock info 270
MEM clock info 405
VIDEO clock info 1185

获取电源相关信息

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
print(f"power state {nvmlDeviceGetPowerState(handle)}")
print(f"power usage watts {nvmlDeviceGetPowerUsage(handle) / 1000}")

输出结果:

代码语言:shell
AI代码解释
复制
power state 8
power usage percent 27.649

结束调用

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
nvmlShutdown()

全部代码

主要是遍历输出所有Nvidia状态信息,可以根据自己需要来进行编写设置。

代码语言:python
代码运行次数:1
运行
AI代码解释
复制
from pynvml import *
import psutil

def get_process_name_by_pid(pid):
    try:
        return psutil.Process(pid).name()
    except:
        return None

nvmlInit()
print(f"Driver Version: {nvmlSystemGetDriverVersion()}")

deviceCount = nvmlDeviceGetCount()
try:
    for i in range(deviceCount):
        handle = nvmlDeviceGetHandleByIndex(i)
        print(f"Device {i} : {nvmlDeviceGetName(handle)}")
        print(" ")
        try:
            (current, pending) = nvmlDeviceGetEccMode(handle)
            print("current",current,"pending",pending)
        except NVMLError as error:
            print(error)
        
        print(" ")
        info = nvmlDeviceGetMemoryInfo(handle)
        print(f"Total memory: {info.total} MiB")
        print(f"Free memory: {info.free} MiB")
        print(f"Used memory: {info.used} MiB")

        print(" ")
        info = nvmlDeviceGetUtilizationRates(handle)
        print(f"UtilizationRates Gpu: {info.gpu}%")
        print(f"UtilizationRates Memory: {info.memory}%")

        print(" ")
        info = nvmlDeviceGetEncoderUtilization(handle)
        print(f"EncoderUtilization {info}")

        print(" ")
        info = nvmlDeviceGetDecoderUtilization(handle)
        print(f"DecoderUtilization {info}")

        print(" ")
        info = nvmlDeviceGetJpgUtilization(handle)
        print(f"JpgUtilization {info}")

        print(" ")
        info = nvmlDeviceGetOfaUtilization(handle)
        print(f"OfaUtilization {info}")

        print(" ")
        info = nvmlDeviceGetComputeRunningProcesses(handle)
        for index,item in enumerate(info):
            print(f"{index} : {item} ,name: {get_process_name_by_pid(item.pid)}")

        print(" ")
        info = nvmlDeviceGetGraphicsRunningProcesses(handle)
        for index,item in enumerate(info):
            print(f"{index} : {item} ,name: {get_process_name_by_pid(item.pid)}")

        print(" ")
        try:
            # NVML_PROCESS_MODE_COMPUTE | NVML_PROCESS_MODE_GRAPHICS | NVML_PROCESS_MODE_MPS
            info = nvmlDeviceGetRunningProcessDetailList(handle, nvmlProcessDetailList_v1, NVML_PROCESS_MODE_COMPUTE)
            for item in info:
                print(f"ProcessDetailList {item}")
        except NVMLError as error:
            print(f"nvmlDeviceGetRunningProcessDetailList {error}")

        temperature_gpu = nvmlDeviceGetTemperature(handle, NVML_TEMPERATURE_GPU)
        print(f"temperature_gpu {temperature_gpu}")

        temperature_threshold = nvmlDeviceGetTemperatureThreshold(handle, NVML_TEMPERATURE_THRESHOLD_GPU_MAX)
        print(f"temperature_threshold {temperature_threshold}")

        print("")
        gpu_uuid = nvmlDeviceGetUUID(handle)
        print(f"gpu_uuid {gpu_uuid}")

        print("")
        pci_info = nvmlDeviceGetPciInfo(handle)
        print(f"pci info {pci_info}")

        print("")
        print(f"GRAPHICS clock info {nvmlDeviceGetClockInfo(handle, NVML_CLOCK_GRAPHICS)}")
        print(f"SM clock info {nvmlDeviceGetClockInfo(handle, NVML_CLOCK_SM)}")
        print(f"MEM clock info {nvmlDeviceGetClockInfo(handle, NVML_CLOCK_MEM)}")
        print(f"VIDEO clock info {nvmlDeviceGetClockInfo(handle, NVML_CLOCK_VIDEO)}")

        print("")
        print(f"power state {nvmlDeviceGetPowerState(handle)}")
        print(f"power usage watts {nvmlDeviceGetPowerUsage(handle) / 1000}")
        
except NVMLError as error:
    print(error)

nvmlShutdown()

结束语

其实写的比较简单,只是摘取了我觉得日常会用的一些信息,还有很多其他函数,可以在pynvml.py文件里边查看获取。或者 NVIDIA GPU等网站查看自己需要的一些信息,样例等。这半年其实一直没怎写,日常工作也比较无聊,开始研究srs,以及一些pyton脚本的编写,希望把文章抓起来,多写一些。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
nvidia-smi 详解(一)
nvidia-smi 全称 NVIDIA System Management Interface ,顾名思义:英伟达系统管理接口。nvidia-smi一般大家只是简单使用用来查询英伟达系列显卡的使用情况/工作情况(显存使用量/显卡利用率/显卡工作线程)等。如下图所示:
何其不顾四月天
2024/01/16
5.6K0
【教程】汇总nvidia-smi能查询的所有字段信息
小锋学长生活大爆炸
2025/05/31
2230
【教程】汇总nvidia-smi能查询的所有字段信息
py3nvml实现GPU相关信息读取
随着模型运算量的增长和硬件技术的发展,使用GPU来完成各种任务的计算已经渐渐成为算法实现的主流手段。而对于运行期间的一些GPU的占用,比如每一步的显存使用率等诸如此类的信息,就需要一些比较细致的GPU信息读取的工具,这里我们重点推荐使用py3nvml来对python代码运行的一个过程进行监控。
DechinPhy
2022/05/06
9170
如何监控NVIDIA GPU 的运行状态和使用情况
设备跟踪和管理正成为机器学习工程的中心焦点。这个任务的核心是在模型训练过程中跟踪和报告gpu的使用效率。
deephub
2021/11/08
6.5K0
如何监控NVIDIA GPU 的运行状态和使用情况
nvidia-smi入门
nvidia-smi是一个用于管理和监控NVIDIA GPU(图形处理器)的命令行实用程序。它提供了一个简单而强大的方式来查看GPU的使用情况、温度、内存占用等信息,以及进行一些基本的管理操作。 本篇文章将介绍如何使用nvidia-smi以及常见的用法和参数选项。
大盘鸡拌面
2023/11/01
1.8K0
python 输出 GPU内存 最大使用率
在跑任务时,另外运行脚本调用 check_gpu_mem_usedRate 就可以知道最大的 GPU内存 使用率,线上服务不要用的太满,最大80%左右为宜,防止极端情况GPU显存溢出
Michael阿明
2022/03/10
3K0
python 使用 pynvml 工具获取GPU工作状态
深度学习过程中经常需要和GPU打交道,需要在训练之前确定GPU工作状态。本文介绍python中的pynvml包的使用方法,用来获取上述信息。 安装 直接通过pip安装: pip install nvidia-ml-py 或者根据所使用的python版本安装对应包: pip install nvidia-ml-py2 # python2 pip install nvidia-ml-py3 # python3 使用方法 # 导入包 import pynvml # 每MB包含的字节数
为为为什么
2022/08/05
1.7K0
深度总结,带你玩转 NVIDIA GPU
大家好,我是三十一[0],最近北京也出现疫情了,昨晚公司大楼临时管控,测核酸折腾到小一点才到家。前两天的抢菜、囤菜,加上这次的管控经历,这次真有些慌了。。。
程序员荒生
2022/05/19
1.4K0
Docker: Nvidia Driver, Nvidia Docker 推荐安装步骤
最后, sudo reboot 重启。之后,运行 nvidia-smi 输出 Nvidia 驱动信息:
GoCoding
2021/05/06
1.5K0
使用腾讯云“自定义监控”监控 GPU 使用率
本文旨在通过使用腾讯云的“自定义监控”服务来自行实现对 GPU 服务器的 GPU 使用率的监控。
李想
2018/02/24
5.1K1
使用腾讯云“自定义监控”监控 GPU 使用率
讲解gpu显存查看 nvidia-smi实时刷新
在深度学习和计算机图形学等领域,使用GPU进行加速已经成为常见的做法。然而,GPU的显存是一种有限的资源,我们需要时刻关注显存的使用情况,以避免显存溢出导致的程序错误。NVIDIA提供了一个命令行工具nvidia-smi,能够实时查看GPU的状态和显存使用情况。本文将介绍如何使用nvidia-smi命令在终端实时刷新GPU显存。
大盘鸡拌面
2023/12/07
7.6K0
python查看显卡gpu信息
官网:https://pythonhosted.org/nvidia-ml-py/
py3study
2020/01/06
6.3K0
【教程】Python实时检测CPU和GPU的功耗
        相关一些检测工具挺多的,比如powertop、powerstat、s-tui等。但如何通过代码的方式来实时检测,是个麻烦的问题。通过许久的搜索和自己的摸索,发现了可以检测CPU和GPU功耗的方法。如果有什么不对,或有更好的方法,欢迎评论留言!
小锋学长生活大爆炸
2023/03/01
2.4K0
【教程】Python实时检测CPU和GPU的功耗
性能监控之Telegraf+InfluxDB+Grafana实时监控NVIDIA GPU
图形处理器(英语:Graphics Processing Unit,缩写:GPU),又称显示核心、视觉处理器、显示芯片,是一种专门在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上图像运算工作的微处理器。 用途是将计算机系统所需要的显示信息进行转换驱动,并向显示器提供行扫描信号,控制显示器的正确显示,是连接显示器和个人电脑主板的重要元件,也是“人机对话”的重要设备之一。显卡作为电脑主机里的一个重要组成部分,承担输出显示图形的任务,对于从事专业图形设计的人来说显卡非常重要,同时也在深度学习领域广泛应用。
高楼Zee
2019/07/17
3.2K0
性能监控之Telegraf+InfluxDB+Grafana实时监控NVIDIA GPU
python 运维常用脚本
path = "D:/UASM64/include/" dirs = os.listdir(path) temp=[];
用户5760343
2019/07/31
3.7K0
Ubuntu 18.04 安装 nvtop:一个高颜值的 nvidia-smi
平常我们查看 GPU 信息,比如哪个进程在占用 GPU,占用了多少,GPU 利用率怎么样等信息,都是使用 nvidia-smi,但这些信息都是实时的,也就是说你无法查看一定时间段内的变化情况。
Alan Lee
2021/12/07
1.9K0
Ubuntu 18.04 安装 nvtop:一个高颜值的 nvidia-smi
GPU功耗管理方式介绍(Linux)
Management PCI-Express Runtime D3 (RTD3) Power Management是一种用于管理PCI-Express设备的低功耗模式的技术RTD3是一种睡眠状态,当PCI-Express设备处于空闲状态时,可以将其置于低功耗模式,以减少能源消耗和热量产生。英伟达™(NVIDIA®)图形处理器有许多省电机制。其中一些机制会降低芯片不同部分的时钟和电压,在某些情况下还会完全关闭芯片部分的时钟或电源,但不会影响功能或继续运行,只是速度较慢。然而,英伟达™(NVIDIA®)GPU 的最低能耗状态需要关闭整个芯片的电源,通常是通过调用 ACPI 来实现。这显然会影响功能。在关机状态下,GPU 无法运行任何功能。必须注意的是,只有在 GPU 上没有运行任何工作负载的情况下才能进入这种状态,而且在试图开始工作或进行任何内存映射 I/O (MMIO) 访问之前,必须先重新开启 GPU 并恢复任何必要的状态。
Linux阅码场
2023/08/21
3.2K0
GPU功耗管理方式介绍(Linux)
Ubuntu 16.04安装 cuda 9.2
0x00 前言 之前在Ubuntu 16.04上安装了[cuda 9.1],工作也很正常。但是,后来莫名奇妙就出问题了,重装cuda之后还总是进不了系统。因此,寻找到了以下优化的安装方法。 0x01 安装步骤 主要优化点:将之前使用cuda中自带的GPU驱动改为手动安装。 以下操作都在root权限下执行: 1、 安装GPU驱动 更新源 add-apt-repository ppa:graphics-drivers/ppa apt update 检查当前最佳驱动版本 root@vm:~# ubuntu-dri
drunkdream
2018/07/06
2.2K0
玩转 AIGC:打造 AI 大模型云主机,Ubuntu 24.04 LTS 安装 Docker 和 NVIDIA Container Toolkit
今天分享的内容是 玩转 AIGC「2024」 系列文档中的 打造本地 AI 大模型地基,Ubuntu 24.04 LTS 安装 Docker 和 NVIDIA Container Toolkit。
运维有术
2024/05/07
1.2K0
玩转 AIGC:打造 AI 大模型云主机,Ubuntu 24.04 LTS 安装 Docker 和 NVIDIA Container Toolkit
python常用运维脚本实例
file是一个类,使用file('file_name', 'r+')这种方式打开文件,返回一个file对象,以写模式打开文件不存在则会被创建。但是更推荐使用内置函数open()来打开一个文件 .
菲宇
2019/06/12
1.9K0
相关推荐
nvidia-smi 详解(一)
更多 >
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验