我发现我的 GPU 占用了大量计算能力。它经常超过 70%,从未低于 50%(重启后直接测量)
14:06:34 ~/ $ gpustat
laptop0 Wed Mar 9 14:09:11 2022
[0] NVIDIA GeForce RTX 2060 with Max-Q Design | 56'C, 74 % | 1369 / 5934 MB
但这只能说明 GPU 的整体使用情况。我不知道哪个进程正在使用 GPU。
cpu-stat
可以选择列出进程,但这只会显示内存使用情况:
14:10:38 ~/ $ gpustat -cp
laptop0 Wed Mar 9 14:10:44 2022
[0] NVIDIA GeForce RTX 2060 with Max-Q Design | 54'C, 50 % | 1358 / 5934 MB |
Xorg/4904(843M) gnome-shell/5106(163M) mattermost-desktop/5640(55M) jetbrains-toolbox/6338(22M)
brave/8888(269M)
我尝试过但没能找到一个可以显示每个进程的 GPU 使用情况的工具。有很多程序可以显示 GPU 使用情况,但只能显示整体,而不能显示每个进程的使用情况。
我试过了:
glances
cpu-stat
nvidia-smi
也许我遗漏了另一个参数?也许是因为 NVidia 的专有特性,这是不可能的?
答案1
该nvidia-smi
工具可以访问GPU并查询信息。例如:
nvidia-smi --query-compute-apps=pid --format=csv,noheader
这将返回pid
当前正在运行的应用程序。它有点用,但可能存在以下注意事项。
> nvidia-smi
Fri Nov 11 02:08:18 2022
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 520.61.05 Driver Version: 520.61.05 CUDA Version: 11.8 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 NVIDIA GeForce ... On | 00000000:01:00.0 Off | N/A |
| 50% 61C P2 301W / 350W | 23683MiB / 24576MiB | 69% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| 0 N/A N/A 2747694 C python 23680MiB |
+-----------------------------------------------------------------------------+
> nvidia-smi --query-compute-apps pid --format=csv,noheader
2747694
这很简单,因为只有一个进程。在具有多个进程的机器上,可能会令人惊讶:
> nvidia-smi
Fri Nov 11 11:10:38 2022
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 510.85.02 Driver Version: 510.85.02 CUDA Version: 11.6 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 NVIDIA GeForce ... On | 00000000:01:00.0 Off | N/A |
| N/A 32C P8 N/A / N/A | 3546MiB / 4096MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| 0 N/A N/A 1515 G /usr/lib/xorg/Xorg 28MiB |
| 0 N/A N/A 1724 G /usr/bin/gnome-shell 67MiB |
| 0 N/A N/A 2806 G /usr/lib/xorg/Xorg 296MiB |
| 0 N/A N/A 3025 G /usr/bin/gnome-shell 22MiB |
| 0 N/A N/A 3569 G ...AAAAAAAAA= --shared-files 10MiB |
| 0 N/A N/A 12329 G /usr/lib/firefox/firefox 34MiB |
| 0 N/A N/A 13708 G ...oken=16615837409882897952 8MiB |
| 0 N/A N/A 28690 C ...abcdef/venv/bin/python3.7 3069MiB |
+-----------------------------------------------------------------------------+
> nvidia-smi --query-compute-apps=pid --format=csv,noheader
28690
它只返回我感兴趣的进程(幸运),类型为 C。这可能令人惊讶,但是说得通,因为 C 代表计算,而查询过滤器用于计算(G 代表图形)。