我试图监控一个使用CUDA和MPI的进程,有没有办法我可以做到这一点,像命令“顶部”,但也监控GPU ?


当前回答

在Linux Mint和Ubuntu中,你可以尝试"nvidia-smi——loop=1"

其他回答

我不知道有什么东西可以结合这些信息,但你可以使用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 %

最近,我写了一个名为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的双重授权。请随意将其作为您自己项目的依赖项使用。详见版权声明。

您可以尝试nvtop,它类似于广泛使用的htop工具,但用于NVIDIA gpu。下面是nvtop的截图。

要获得使用资源的实时洞察,请执行:

Nvidia-smi -l

这将在每一秒循环并调用视图。

如果你不想在控制台历史记录中保留循环调用的过去痕迹,你也可以这样做:

观看-n0.1 nvidia-smi

其中0.1是时间间隔,单位为秒。

从这里下载并安装最新的稳定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驱动程序中,此支持仅限于特斯拉卡。