我试图监控一个使用CUDA和MPI的进程,有没有办法我可以做到这一点,像命令“顶部”,但也监控GPU ?
当前回答
如果你只是想找到运行在gpu上的进程,你可以简单地使用下面的命令:
lsof /dev/nvidia*
对我来说,nvidia-smi和watch -n 1 nvidia-smi在大多数情况下已经足够了。有时nvidia-smi显示没有进程,但gpu内存用完了,所以我需要使用上面的命令来查找进程。
其他回答
最近,我写了一个名为nvitop的监控工具,交互式NVIDIA-GPU进程查看器。
它是用纯Python编写的,易于安装。
从PyPI安装:
pip3 install --upgrade nvitop
从GitHub安装最新版本(推荐):
pip3 install git+https://github.com/XuehaiPan/nvitop.git#egg=nvitop
作为资源监视器运行:
nvitop -m
nvitop将像nvidia-smi一样显示GPU状态,但有额外的花式条和历史图。
对于进程,它将使用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 License和Apache-2.0 License的双重授权。请随意将其作为您自己项目的依赖项使用。详见版权声明。
在Linux Mint和Ubuntu中,你可以尝试"nvidia-smi——loop=1"
只需使用watch nvidia-smi,它将默认以2s间隔输出消息。
例如,如下图:
你也可以使用watch -n 5 nvidia-smi (-n 5 by 5s interval)。
您可以使用监控程序glances及其GPU监控插件:
开源 安装方法:sudo apt-get install -y python-pip;Sudo PIP安装[gpu] 启动:sudo扫视
它还监视CPU、磁盘IO、磁盘空间、网络和其他一些东西:
Prometheus GPU Metrics exporters (PGME)利用了nvidai-smi二进制文件。你可以试试这个。一旦运行了导出器,就可以通过http://localhost:9101/metrics访问它。对于两个gpu,示例结果如下所示:
temperature_gpu{gpu="TITAN X (Pascal)[0]"} 41
utilization_gpu{gpu="TITAN X (Pascal)[0]"} 0
utilization_memory{gpu="TITAN X (Pascal)[0]"} 0
memory_total{gpu="TITAN X (Pascal)[0]"} 12189
memory_free{gpu="TITAN X (Pascal)[0]"} 12189
memory_used{gpu="TITAN X (Pascal)[0]"} 0
temperature_gpu{gpu="TITAN X (Pascal)[1]"} 78
utilization_gpu{gpu="TITAN X (Pascal)[1]"} 95
utilization_memory{gpu="TITAN X (Pascal)[1]"} 59
memory_total{gpu="TITAN X (Pascal)[1]"} 12189
memory_free{gpu="TITAN X (Pascal)[1]"} 1738
memory_used{gpu="TITAN X (Pascal)[1]"} 10451