在Linux操作系统环境中,图形处理器(GPU)不仅是图形渲染的核心,更是高性能计算、机器学习、数据科学等领域不可或缺的加速器。有效监控GPU的使用情况,对于系统性能优化、故障诊断、资源分配以及成本控制都具有极其重要的意义。

为什么需要查看GPU使用情况?

了解并掌握GPU的使用状态,可以帮助我们回答以下关键问题:

  1. 性能瓶颈分析: 您的应用程序运行缓慢,是受限于CPU还是GPU?通过查看GPU利用率和显存占用,可以判断GPU是否是当前工作负载的瓶颈。
  2. 资源管理与优化: 哪些进程正在占用GPU资源?它们的占用率是多少?这有助于识别并终止不必要的后台进程,确保关键任务获得足够的GPU能力。
  3. 故障诊断与排查: 当系统出现卡顿、画面异常或应用程序崩溃时,高GPU利用率或显存溢出可能是潜在原因。监控可以帮助快速定位问题。
  4. 温度与功耗监控: 长期高负载运行会提升GPU温度,甚至影响硬件寿命。查看温度和功耗数据,可以帮助您评估散热系统是否得力,并进行相应的调整。
  5. 成本效益分析: 在云计算环境中,GPU资源通常按小时计费。精确监控GPU使用情况有助于优化资源分配,避免不必要的浪费。

在哪里可以查看GPU使用情况?

查看GPU使用情况主要在Linux系统的命令行界面进行。无论您是直接在服务器上操作,还是通过SSH远程连接,都可以使用以下介绍的工具。这些工具直接与GPU驱动程序进行通信,获取实时的硬件数据。

能够查看多少GPU信息?

通过这些工具,您可以获取到相当详细的GPU信息,包括但不限于:

  • GPU利用率: 百分比表示,反映GPU核心的繁忙程度。
  • 显存(VRAM)使用情况: 已用显存、总显存、显存利用率。
  • GPU温度: 核心温度,通常以摄氏度表示。
  • 功耗: 实时功耗(瓦特),以及功耗上限。
  • 风扇转速: 如果有风扇控制功能,会显示风扇转速百分比。
  • 运行在GPU上的进程: 显示每个进程的PID(进程ID)、用户、进程名以及它们占用的显存。
  • GPU型号、驱动版本、CUDA版本(NVIDIA): 硬件和软件环境信息。

如何以及用什么工具查看GPU使用情况?

在Linux上,查看GPU使用情况的工具取决于您的GPU品牌。最常见且功能强大的工具是针对NVIDIA GPU的nvidia-smi,而AMD和Intel也有各自的工具。以下将详细介绍这些工具的使用方法。

1. NVIDIA GPU:nvidia-smi

nvidia-smi (NVIDIA System Management Interface) 是NVIDIA官方提供的一个命令行实用程序,用于监控和管理NVIDIA GPU设备。它功能强大且信息丰富,是NVIDIA用户必备的工具。

安装与确认

通常,当您安装了NVIDIA的驱动程序时,nvidia-smi工具也会一并安装。您可以通过在终端输入以下命令来确认其是否可用:

nvidia-smi

如果输出显示了GPU信息,则表示已正确安装。如果提示命令未找到,您可能需要检查NVIDIA驱动的安装情况。

基本使用与信息解读

直接运行nvidia-smi会显示一张包含当前所有NVIDIA GPU设备的概览表。这张表通常包含以下几列关键信息:

  • GPU: GPU设备的索引号。
  • Name: GPU的型号名称。
  • Fan: 风扇转速百分比。
  • Temp: GPU核心温度(摄氏度)。
  • Perf: 性能状态(P0-P12,P0为最高性能状态)。
  • Pwr: 实时功耗(瓦特)和功耗上限。
  • Bus-Id: GPU的PCI总线ID。
  • Disp.A: 是否有显示器连接到此GPU。
  • Memory-Usage: 已用显存 / 总显存。
  • Volatile GPU-Util: GPU核心利用率(百分比)。
  • Compute M.: 计算模式(Default或Exclusive_Process)。

在概览表的下方,通常会有一个“Processes”表格,列出了当前正在使用GPU的各个进程的详细信息,包括:

  • GPU: 进程正在使用的GPU索引号。
  • PID: 进程ID。
  • Type: 进程类型(C代表Compute,G代表Graphics)。
  • Process name: 进程的名称。
  • GPU Memory: 该进程占用的显存大小。

通过这个进程列表,您可以轻松识别是哪个程序在占用您的GPU资源,这对于调试和优化非常有用。您可以利用ps aux | grep <PID>命令来进一步查看该进程的详细信息,或者使用kill <PID>来终止不需要的进程。

高级用法与常用参数
  1. 实时监控:

    通过-l--loop参数可以实现周期性刷新,例如每秒刷新一次:

    nvidia-smi -l 1
            

    或者指定刷新间隔:

    watch -n 1 nvidia-smi
            
  2. 查询特定信息:

    使用--query-gpu参数可以查询GPU的各种指标,并通过--format参数指定输出格式。这对于脚本化监控或自定义输出非常有用。

    查询GPU利用率、显存使用、温度、功耗,并以CSV格式输出,不带标题和单位:

    nvidia-smi --query-gpu=utilization.gpu,memory.used,memory.total,temperature.gpu,power.draw --format=csv,noheader,nounits
            

    更多可查询的字段可以通过nvidia-smi --help-query-gpu查看。

  3. 查看特定进程的监控信息:

    nvidia-smi pmon命令可以提供更专注于进程的实时监控视图,显示每个进程的GPU利用率和显存使用情况。它比默认的nvidia-smi更动态,适合观察GPU负载随时间的变化。

    nvidia-smi pmon
            
  4. 查看更详细的设备信息:

    -q--query参数可以显示非常详细的GPU信息,包括驱动版本、CUDA版本、BIOS版本、各个时钟频率、错误状态等。配合-d参数可以指定显示哪些部分的详细信息。

    查看所有详细信息:

    nvidia-smi -q
            

    仅查看内存、利用率、温度和功耗的详细信息:

    nvidia-smi -q -d MEMORY,UTILIZATION,TEMPERATURE,POWER
            

2. AMD GPU:radeontop / amdgpu_top

对于AMD GPU,有两个主要的开源工具可用于监控:radeontop和更新的amdgpu_top

radeontop

radeontop是一个基于文本界面的实时GPU监控工具,类似于Linux的top命令。它提供了GPU核心利用率、显存使用、VDDCI(GPU核心电压)等信息。

安装

在大多数基于Debian/Ubuntu的系统上:

sudo apt install radeontop

在基于Arch的系统上:

sudo pacman -S radeontop

如果您的发行版没有提供,或者需要最新版本,您可能需要从GitHub仓库编译安装。

使用

直接运行radeontop即可:

radeontop

它会显示一个实时更新的界面,展示各种GPU指标。它通常会显示渲染引擎、DMA引擎、视频解码/编码引擎的利用率,以及显存和功耗信息。radeontop的缺点是通常不直接显示是哪个进程在使用GPU,这需要结合lsof等工具进行分析。

amdgpu_top (推荐)

amdgpu_top是一个更现代、更强大的AMD GPU监控工具,灵感来源于htopnvidia-smi,能够提供更详细的性能计数器以及类似nvidia-smi的按进程显示GPU使用情况的功能。

安装

amdgpu_top通常需要从源代码编译安装,因为它可能不包含在所有发行版的默认仓库中。请参考其GitHub页面获取最新的编译指南。

例如,在Debian/Ubuntu上,可能需要安装构建依赖:

sudo apt install meson libdrm-dev libsensors-dev libncurses-dev

然后下载源码编译:

git clone https://github.com/Umio-Yasuno/amdgpu_top.git
cd amdgpu_top
meson setup build
meson compile -C build
sudo meson install -C build
使用

运行amdgpu_top

amdgpu_top

它会显示一个交互式界面,提供GPU利用率、显存、温度、风扇转速等信息,并且最重要的是,它通常会列出占用GPU资源的进程及其对应的显存使用量和利用率,这极大地提高了AMD GPU的监控效率和问题诊断能力。

3. Intel 集成显卡:intel_gpu_top / top / htop

对于Intel集成显卡,通常没有像nvidia-smiamdgpu_top那样高度集成的专用工具来显示显存占用和进程级别利用率。但您仍然可以使用一些工具来获取相关信息。

intel_gpu_top

intel_gpu_top是Intel官方提供的一个用于监控Intel核显的工具,它能显示各种引擎(如渲染、Blitter、视频解码/编码)的利用率。

安装

在大多数基于Debian/Ubuntu的系统上:

sudo apt install intel-gpu-tools

在基于Arch的系统上:

sudo pacman -S intel-gpu-tools
使用

运行intel_gpu_top

sudo intel_gpu_top

它将显示一个实时更新的界面,展示Intel GPU不同引擎的繁忙程度。虽然它不直接显示显存使用量或特定进程的占用,但可以帮助您判断GPU是否处于高负载状态。

top / htop

对于集成显卡,CPU和GPU之间的内存是共享的,因此GPU的“显存”使用通常体现在系统总内存的使用上。通过tophtop这样的通用系统监控工具,您可以观察到进程的总内存占用。虽然不能区分是CPU还是GPU部分在使用,但对于判断整体资源压力仍有帮助。

top
htop

4. 通用硬件信息工具

这些工具不显示实时使用情况,但可以帮助您识别系统中的GPU硬件信息:

  • lspci: 列出所有PCI设备,包括GPU。
    lspci -vnn | grep -i VGA
            

    lspci -k | grep -EA3 'VGA|3D|Display'
            

    这将显示您的显卡型号以及正在使用的内核驱动。

  • lshw: 显示详细的硬件信息。
    sudo lshw -C display
            

    它会提供更详细的GPU设备信息,包括制造商、型号、产品ID、驱动程序等。

  • glxinfo: 用于显示OpenGL实现的详细信息。
    glxinfo | grep "OpenGL renderer"
    glxinfo | grep "OpenGL version"
            

    这可以帮助您确认正在使用的OpenGL渲染器和版本,间接反映驱动是否正常工作。

如何解读与处理高GPU利用率?

当您发现GPU利用率较高时,需要结合实际情况进行判断和处理:

  1. 是否为预期行为?
    • 如果您正在运行AI训练任务、玩大型游戏、进行视频编辑或渲染,那么高GPU利用率是正常的,甚至代表您的GPU正在充分发挥性能。
    • 如果高利用率是预期之内的,但性能仍不理想,则可能需要考虑升级GPU,或者优化您的应用程序。
  2. 识别“罪魁祸首”进程:

    如前所述,nvidia-smiamdgpu_top会列出占用GPU资源的进程。找到PID(进程ID)后,可以使用以下命令了解更多信息:

    ps aux | grep <PID>
            

    ls -l /proc/<PID>/exe
            

    这将显示进程的完整命令行和可执行文件路径,帮助您确定是哪个应用程序或脚本在运行。

  3. 非预期的高利用率:

    如果发现不明进程或非预期的高GPU利用率,可能的原因包括:

    • 后台进程: 某些应用程序可能在后台运行,例如云同步工具、浏览器插件(硬件加速)、或被遗忘的AI模型服务。
    • 恶意软件: 极少数情况下,可能是加密货币挖矿恶意软件在未经您许可的情况下占用您的GPU资源。
    • 程序错误: 某个应用程序可能存在内存泄漏或计算循环,导致GPU资源被持续占用。

    处理方法:

    • 终止进程: 确认是多余或恶意的进程后,可以使用kill <PID>命令终止它。如果无法终止,可以使用kill -9 <PID>强制终止(慎用,可能导致数据丢失)。
    • 检查自启动项: 检查系统或用户级别的自启动配置,防止不必要的程序开机自动运行。
    • 更新驱动或软件: 有时驱动或应用程序的bug可能导致异常的GPU行为,更新到最新版本可能解决问题。
    • 系统清理: 清理不再需要的应用程序和数据。
  4. 显存不足 (Out of VRAM):

    如果Memory-Usage显示显存接近100%,即使GPU利用率不高,也可能导致性能下降。这是因为GPU会尝试将数据交换到较慢的系统内存中,从而引入巨大的延迟。处理方法包括:

    • 减少应用程序对显存的需求(例如,降低模型大小、减少批处理大小、降低纹理质量)。
    • 关闭其他占用显存的应用程序。
    • 考虑升级显卡到拥有更大显存的型号。
  5. 温度过高:

    如果GPU温度持续过高(例如,NVIDIA GPU通常超过80-90°C),GPU可能会自动降频(“throttling”)以保护硬件,这会导致性能下降。处理方法包括:

    • 改善机箱内部散热,增加风扇,清理灰尘。
    • 确保GPU风扇正常运转。
    • 如果您的GPU支持,调整风扇曲线,使其在更高温度下更积极地工作。
    • 降低GPU功耗限制(在nvidia-smi中可通过-pl参数设置,但需谨慎操作)。

总结

在Linux系统上查看GPU使用情况是系统管理员、开发者和普通用户都应该掌握的基本技能。通过nvidia-smiradeontopamdgpu_topintel_gpu_top等专用工具,以及lspci等通用工具,您可以全面了解GPU的运行状态,包括其利用率、显存占用、温度和功耗,并识别出正在使用GPU的进程。掌握这些信息,不仅能够帮助您进行性能分析、故障诊断,还能有效管理和优化GPU资源,确保您的Linux系统高效稳定运行。