我想要监控一个使用CUDA和MPI的进程,有没有办法做到这一点,类似于命令“top”但同时监控GPU?
我想要监控一个使用CUDA和MPI的进程,有没有办法做到这一点,类似于命令“top”但同时监控GPU?
nvidia-smi -lms 500
(每500毫秒)-例如一周-而不会遇到使用 watch
时可能面临的任何问题。 - n1k31t4nvidia-smi -l
会一直打印表格。使用 watch nvidia-smi
可以在同一位置显示它。 - Mirceawatch gpustat -cp
后,您可以持续查看状态,但是颜色会消失。您该如何解决这个问题?@Alleo - abhimanyuaryanwatch -c
命令。@Roman Orac,谢谢,当我在 Python 中导入 _curses 时遇到一些错误时,这个方法也适用于我在 Redhat 8 上的情况。 - CasualSciencewatch -c gpustat -cp --color
。 - Lee Nethertonwatch -n 0.5 -c gpustat -cp --color
- Gabriel Romon--watch
选项:gpustat -cp --watch
- jayelmnvidia-smi
工具获取原始数据,就像这样(感谢@jmsu提供-l提示):$ nvidia-smi -q -g 0 -d UTILIZATION -l
==============NVSMI LOG==============
Timestamp : Tue Nov 22 11:50:05 2011
Driver Version : 275.19
Attached GPUs : 2
GPU 0:1:0
Utilization
Gpu : 0 %
Memory : 0 %
watch -n 0.5 nvidia-smi
,这样可以避免终端输出过多的内容。 - ali_m最近,我编写了一个名为nvitop
的监控工具,它是交互式的 NVIDIA-GPU 进程查看器。
该工具使用纯 Python 编写,易于安装。
从 PyPI 安装:
pip3 install --upgrade nvitop
从GitHub安装最新版本(推荐):
pip3 install git+https://github.com/XuehaiPan/nvitop.git#egg=nvitop
作为资源监视器运行:
nvitop -m
nvitop
会展示GPU状态,类似于nvidia-smi
,但会额外增加漂亮的柱状图和历史图表。
对于进程,它将使用psutil
收集进程信息并显示USER
、%CPU
、%MEM
、TIME
和COMMAND
字段,这比nvidia-smi
更详细。此外,在监视模式下,它对用户输入做出响应。您可以在GPU上中断或杀死进程。
nvitop
带有树形视图屏幕和环境屏幕:
此外,nvitop
可以集成到其他应用程序中。例如,将其整合到PyTorch训练代码中:
import os
from nvitop.core import host, CudaDevice, HostProcess, GpuProcess
from torch.utils.tensorboard import SummaryWriter
device = CudaDevice(0)
this_process = GpuProcess(os.getpid(), device)
writer = SummaryWriter()
for epoch in range(n_epochs):
# some training code here
# ...
this_process.update_gpu_status()
writer.add_scalars(
'monitoring',
{
'device/memory_used': float(device.memory_used()) / (1 << 20), # convert bytes to MiBs
'device/memory_percent': device.memory_percent(),
'device/memory_utilization': device.memory_utilization(),
'device/gpu_utilization': device.gpu_utilization(),
'host/cpu_percent': host.cpu_percent(),
'host/memory_percent': host.virtual_memory().percent,
'process/cpu_percent': this_process.cpu_percent(),
'process/memory_percent': this_process.memory_percent(),
'process/used_gpu_memory': float(this_process.gpu_memory()) / (1 << 20), # convert bytes to MiBs
'process/gpu_sm_utilization': this_process.gpu_sm_utilization(),
'process/gpu_memory_utilization': this_process.gpu_memory_utilization(),
},
global_step
)
更多详情请参考https://github.com/XuehaiPan/nvitop
注意:nvitop
的许可证为GPLv3许可证和Apache-2.0许可证的双重授权。欢迎将其用作自己项目的依赖项。有关详细信息,请参见版权声明。
nvitop
作为依赖项,即使只是导入该库,您的项目也需要“同时”遵守GPL许可证(如果发布)。https://opensource.stackexchange.com/questions/6033/can-a-non-gpl-python-program-use-gpl-python-module - Jongwook Choisudo apt install nvtop
就完成了! - Hossein使用参数 "--query-compute-apps="。
nvidia-smi --query-compute-apps=pid,process_name,used_memory --format=csv
如需进一步帮助,请遵循所包含的帮助。
nvidia-smi --help-query-compute-apps
nvidia-smi --help-query-compute-app
无效的输入参数组合。请运行 nvidia-smi -h
获取帮助。 - user894319twitter--help-query-compute-apps
- Alexey另一种有用的监控方法是使用过滤掉消耗GPU的进程的ps
命令。我经常使用以下命令:
ps f -o user,pgrp,pid,pcpu,pmem,start,time,command -p `lsof -n -w -t /dev/nvidia*`
lsof ...
检索当前用户拥有的使用nvidia GPU的所有进程列表,ps -p ...
显示这些进程的ps
结果。 ps f
显示子/父进程关系/层次结构的良好格式,-o
指定自定义格式。它类似于仅执行 ps u
但添加了进程组ID并删除了一些其他字段。nvidia-smi
相比,其中一个优点是它将显示进程分叉以及使用GPU的主要进程。lsof
前添加了 sudo
。watch
结合使用,以获得连续更新。因此,最终看起来像:watch -n 0.1 'ps f -o user,pgrp,pid,pcpu,pmem,start,time,command -p `sudo lsof -n -w -t /dev/nvidia*`'
这将输出如下:
Every 0.1s: ps f -o user,pgrp,pid,pcpu,pmem,start,time,command -p `sudo lsof -n -w -t /dev/nvi... Mon Jun 6 14:03:20 2016
USER PGRP PID %CPU %MEM STARTED TIME COMMAND
grisait+ 27294 50934 0.0 0.1 Jun 02 00:01:40 /opt/google/chrome/chrome --type=gpu-process --channel=50877.0.2015482623
grisait+ 27294 50941 0.0 0.0 Jun 02 00:00:00 \_ /opt/google/chrome/chrome --type=gpu-broker
grisait+ 53596 53596 36.6 1.1 13:47:06 00:05:57 python -u process_examples.py
grisait+ 53596 33428 6.9 0.5 14:02:09 00:00:04 \_ python -u process_examples.py
grisait+ 53596 33773 7.5 0.5 14:02:19 00:00:04 \_ python -u process_examples.py
grisait+ 53596 34174 5.0 0.5 14:02:30 00:00:02 \_ python -u process_examples.py
grisait+ 28205 28205 905 1.5 13:30:39 04:56:09 python -u train.py
grisait+ 28205 28387 5.8 0.4 13:30:49 00:01:53 \_ python -u train.py
grisait+ 28205 28388 5.3 0.4 13:30:49 00:01:45 \_ python -u train.py
grisait+ 28205 28389 4.5 0.4 13:30:49 00:01:29 \_ python -u train.py
grisait+ 28205 28390 4.5 0.4 13:30:49 00:01:28 \_ python -u train.py
grisait+ 28205 28391 4.8 0.4 13:30:49 00:01:34 \_ python -u train.py
sudo
:nvidia-smi --query-compute-apps=pid --format=csv,noheader
。 - Lenar Hoytnvidia-smi
不会列出所有进程,因此您最终会发现您的内存被未在列表中列出的进程所使用。这是我追踪和终止这些进程的主要方式。 - randps
给出的pmem
并不考虑GPU的总内存,而是CPU的内存,因为ps
不具备“Nvidia GPU”意识。 - SebMa从这里下载并安装最新的稳定版CUDA驱动程序(4.2)。在Linux上,nVidia-smi 295.41会给你想要的内容。使用nvidia-smi
。
[root@localhost release]# nvidia-smi
Wed Sep 26 23:16:16 2012
+------------------------------------------------------+
| NVIDIA-SMI 3.295.41 Driver Version: 295.41 |
|-------------------------------+----------------------+----------------------+
| Nb. Name | Bus Id Disp. | Volatile ECC SB / DB |
| Fan Temp Power Usage /Cap | Memory Usage | GPU Util. Compute M. |
|===============================+======================+======================|
| 0. Tesla C2050 | 0000:05:00.0 On | 0 0 |
| 30% 62 C P0 N/A / N/A | 3% 70MB / 2687MB | 44% Default |
|-------------------------------+----------------------+----------------------|
| Compute processes: GPU Memory |
| GPU PID Process name Usage |
|=============================================================================|
| 0. 7336 ./align 61MB |
+-----------------------------------------------------------------------------+
编辑:在最新的NVIDIA驱动程序中,此支持仅限于Tesla卡。
while true; do sleep 2; nvidia-smi; done
nvidia-smi
的原始布局。nvidia-smi -l 2
命令。或者为了避免重复的控制台输出,可以执行 watch -n 2 'nvidia-smi'
命令。 - william_grisaitis