我正在尝试监控使用cuda和MPI的进程,有什么方法可以做到这一点,比如命令“top”但是监视GPU呢?
答案 0 :(得分:84)
nvidia-smi -l 1
这将循环并每秒调用视图。
如果您不想在控制台历史记录中保留循环调用的痕迹,您还可以执行以下操作:
watch -n0.1 nvidia-smi
其中0.1是时间间隔,以秒为单位。
答案 1 :(得分:76)
我不知道任何结合了这些信息的内容,但你可以使用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 %
答案 2 :(得分:37)
我发现gpustat非常有用。 In可以与pip install gpustat
一起安装,并按进程或用户打印使用情况的细分。
答案 3 :(得分:19)
从here下载并安装最新的稳定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驱动程序中,此支持仅限于特斯拉卡。
答案 4 :(得分:13)
另一种有用的监控方法是对使用GPU的进程使用ps
进行过滤。我经常使用这个:
ps f -o user,pgrp,pid,pcpu,pmem,start,time,command -p `lsof -n -w -t /dev/nvidia*`
这将显示所有nvidia GPU利用流程以及有关它们的一些统计信息。 lsof ...
使用当前用户拥有的nvidia GPU检索所有进程的列表,ps -p ...
显示这些进程的ps
结果。 ps f
显示了子/父进程关系/层次结构的良好格式,-o
指定了自定义格式。那个类似于只执行ps u
但添加了进程组ID并删除了其他一些字段。
这个优于nvidia-smi
的一个优点是它会显示进程分支以及使用GPU的主要进程。
sudo
之前添加lsof
。
最后,我将其与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
答案 5 :(得分:13)
使用参数“--query-compute-apps =”
nvidia-smi --query-compute-apps=pid,process_name,used_memory --format=csv
如需进一步帮助,请按照
nvidia-smi --help-query-compute-app
答案 6 :(得分:8)
答案 7 :(得分:2)
这可能不太优雅,但您可以尝试
while true; do sleep 2; nvidia-smi; done
我也尝试过@Edric的方法,但是我更喜欢nvidia-smi
的原始布局。
答案 8 :(得分:2)
您可以尝试nvtop
,该工具类似于广泛使用的android:textDirection="anyRtl"
工具,但适用于NVIDIA GPU。这是其中htop
的屏幕截图。
答案 9 :(得分:2)
在Linux Mint和最有可能的Ubuntu中,您可以尝试“ nvidia-smi --loop = 1”
答案 10 :(得分:0)
有Prometheus GPU Metrics Exporter (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
答案 11 :(得分:0)
您可以使用nvidia-smi pmon -i 0
来监视GPU 0中的每个进程。
包括计算模式,短信使用率,内存使用率,编码器使用率,解码器使用率。
答案 12 :(得分:0)
您可以将监控程序glances及其GPU monitoring插件一起使用:
sudo apt-get install -y python-pip; sudo pip install glances[gpu]
sudo glances
它还监视CPU,磁盘IO,磁盘空间,网络和其他一些东西:
答案 13 :(得分:0)
我在Windows机器中用以下代码创建了一个批处理文件,以每秒进行一次监视。它对我有用。
:loop
cls
"C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi"
timeout /T 1
goto loop
nvidia-smi exe通常位于“ C:\ Program Files \ NVIDIA Corporation”中,如果您只想运行一次命令。
答案 14 :(得分:0)
如果只想查找在gpu上运行的进程,只需使用以下命令即可:
SET character_set_server = 'utf8mb4';
SET collation_server = 'utf8mb4_unicode_ci';
CREATE TABLE authors (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(150) CHARACTER SET utf8mb4,
personal_name VARCHAR(150) CHARACTER SET utf8mb4,
PRIMARY KEY(id)
);
对我来说,lsof /dev/nvidia*
和nvidia-smi
在大多数情况下就足够了。有时watch -n 1 nvidia-smi
没有显示任何进程,但gpu内存已用完,因此我需要使用以上命令来查找进程。
答案 15 :(得分: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
和{{1} } 字段,比 COMMAND
详细得多。 此外,它可以响应监控模式下的用户输入。您可以中断或终止 GPU 上的进程。
有关详细信息,请参阅 https://github.com/XuehaiPan/nvitop。