我试图监控一个使用CUDA和MPI的进程,有没有办法我可以做到这一点,像命令“顶部”,但也监控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的双重授权。请随意将其作为您自己项目的依赖项使用。详见版权声明。
其他回答
我不知道有什么东西可以结合这些信息,但你可以使用nvidia-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 %
如果你只是想找到运行在gpu上的进程,你可以简单地使用下面的命令:
lsof /dev/nvidia*
对我来说,nvidia-smi和watch -n 1 nvidia-smi在大多数情况下已经足够了。有时nvidia-smi显示没有进程,但gpu内存用完了,所以我需要使用上面的命令来查找进程。
您可以使用监控程序glances及其GPU监控插件:
开源 安装方法:sudo apt-get install -y python-pip;Sudo PIP安装[gpu] 启动:sudo扫视
它还监视CPU、磁盘IO、磁盘空间、网络和其他一些东西:
最近,我写了一个名为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"