插件窝 干货文章 Python终端下如何绘制实时显卡利用率折线图?

Python终端下如何绘制实时显卡利用率折线图?

Utilization pynvml 利用率 获取 280    来源:    2025-03-14

在Python终端下绘制实时的显卡利用率折线图,可以使用 matplotlib 库来绘制图表,并使用 pynvml 库来获取显卡的利用率信息。以下是一个简单的实现步骤:

1. 安装所需的库

首先,确保你已经安装了 matplotlibpynvml 库。如果没有安装,可以使用以下命令进行安装:

pip install matplotlib pynvml

2. 编写代码

以下是一个示例代码,用于在终端中实时绘制显卡利用率的折线图:

import matplotlib.pyplot as plt
import pynvml
import time

# 初始化NVML
pynvml.nvmlInit()

# 获取GPU数量
device_count = pynvml.nvmlDeviceGetCount()

# 初始化图表
plt.ion()  # 开启交互模式
fig, ax = plt.subplots()
x_data = []
y_data = []

# 设置图表标题和标签
ax.set_title('GPU Utilization')
ax.set_xlabel('Time (s)')
ax.set_ylabel('Utilization (%)')

# 主循环
try:
    while True:
        # 获取当前时间
        current_time = time.time()

        # 获取GPU利用率
        handle = pynvml.nvmlDeviceGetHandleByIndex(0)  # 获取第一个GPU的句柄
        utilization = pynvml.nvmlDeviceGetUtilizationRates(handle)
        gpu_utilization = utilization.gpu

        # 更新数据
        x_data.append(current_time)
        y_data.append(gpu_utilization)

        # 绘制折线图
        ax.clear()
        ax.plot(x_data, y_data, label='GPU Utilization')
        ax.legend()
        ax.set_xlabel('Time (s)')
        ax.set_ylabel('Utilization (%)')
        ax.set_title('GPU Utilization Over Time')

        # 显示图表
        plt.pause(1)  # 暂停1秒

except KeyboardInterrupt:
    print("Exiting...")

# 关闭NVML
pynvml.nvmlShutdown()

3. 运行代码

将上述代码保存为一个Python文件(例如 gpu_utilization_plot.py),然后在终端中运行:

python gpu_utilization_plot.py

4. 解释代码

  • pynvml.nvmlInit(): 初始化NVML库,以便获取GPU信息。
  • pynvml.nvmlDeviceGetCount(): 获取系统中的GPU数量。
  • pynvml.nvmlDeviceGetHandleByIndex(0): 获取第一个GPU的句柄。
  • pynvml.nvmlDeviceGetUtilizationRates(handle): 获取GPU的利用率信息。
  • plt.ion(): 开启Matplotlib的交互模式,以便实时更新图表。
  • plt.pause(1): 暂停1秒,以便在每次更新图表后等待一段时间。

5. 注意事项

  • 该代码假设系统中只有一个GPU。如果有多个GPU,可以通过修改 pynvml.nvmlDeviceGetHandleByIndex(0) 中的索引来获取其他GPU的利用率。
  • 代码中的 plt.pause(1) 控制图表的更新频率。你可以根据需要调整这个值。

6. 退出程序

按下 Ctrl+C 可以退出程序。

通过这种方式,你可以在终端中实时监控并绘制显卡的利用率折线图。