【问题标题】:How to customize nvidia-smi 's output to show PID username如何自定义 nvidia-smi 的输出以显示 PID 用户名
【发布时间】:2018-10-20 05:28:32
【问题描述】:

nvidia-smi 的正常输出是这样的:

Thu May 10 09:05:07 2018       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 384.111                Driver Version: 384.111                   |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 108...  Off  | 00000000:0A:00.0 Off |                  N/A |
| 61%   74C    P2   195W / 250W |   5409MiB / 11172MiB |    100%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      5973      C   ...master_JPG/build/tools/program_pytho.bin  4862MiB |
|    0     46324      C   python                                       537MiB |
+-----------------------------------------------------------------------------+

如您所见,它显示了正在运行 CPU 的 PID 列表。但是我也想知道 PID 的名称。我可以自定义输出以显示每个 PID 的用户名吗?我已经知道如何显示单个 PID 的用户名:

ps -u -p $pid

请帮助我。非常感谢。

更新:我在下面发布了对我有用的解决方案。我还把它作为一个简单的脚本上传到了 Github,供需要详细 GPU 信息的人使用:

https://github.com/ManhTruongDang/check-gpu

【问题讨论】:

  • “但是我也想知道 PID 的名称”。它已经表明
  • @talonmies 不。我想要这些 PIDS 用户的姓名。查看我的回答了解更多信息
  • 多个相关话题在this question

标签: cuda resource-monitor


【解决方案1】:

这是我能想到的最好的:

nvidia-smi
ps -up `nvidia-smi |tail -n +16 | head -n -1 | sed 's/\s\s*/ /g' | cut -d' ' -f3` 

样本输出:

Thu May 10 15:23:08 2018       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 384.111                Driver Version: 384.111                   |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 108...  Off  | 00000000:0A:00.0 Off |                  N/A |
| 41%   59C    P2   251W / 250W |   5409MiB / 11172MiB |    100%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      1606      C   ...master_JPG/build/tools/program.bin       4862MiB |
|    0     15314      C   python                                       537MiB |
+-----------------------------------------------------------------------------+
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
user111+  1606  134  4.8 32980224 789164 pts/19 Rl+ 15:23   0:08 /home/user111
user2     15314  0.4 10.0 17936788 1647040 pts/16 Sl+ 10:41   1:20 python server_

脚本的简短说明:

  • Tailhead 删除冗余行

  • Sed 删除空格(此后,每列将仅用 1 个空格分隔)

  • Cut提取相关列

输出是一个 PID 列表,每个占用 1 行。我们只需要使用ps -up来显示相关信息

更新:更好的解决方案:

ps -up `nvidia-smi |tee /dev/stderr |tail -n +16 | head -n -1 | sed 's/\s\s*/ /g' | cut -d' ' -f3`

这样,nvidia-smi 只需调用一次。 另见:

How to output bash command to stdout and pipe to another command at the same time?

更新 2:我已将此作为简单脚本上传到 Github,供需要详细 GPU 信息的用户使用。

https://github.com/ManhTruongDang/check-gpu

【讨论】:

  • 如何获取每个进程的gpu利用率?
  • ..哦,应该是\s\+
【解决方案2】:

我创建了一个脚本,它接受 nvidia-smi 输出并用更多信息丰富它:https://github.com/peci1/nvidia-htop

这是一个 Python 脚本,它解析 GPU 进程列表,解析 PID,通过 ps 运行它们以收集更多信息,然后用丰富的列表替换 nvidia-smi 的进程列表。

使用示例:

$ nvidia-smi | nvidia-htop.py -l
Mon May 21 15:06:35 2018
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 390.25                 Driver Version: 390.25                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 108...  Off  | 00000000:04:00.0 Off |                  N/A |
| 53%   75C    P2   174W / 250W |  10807MiB / 11178MiB |     97%      Default |
+-------------------------------+----------------------+----------------------+
|   1  GeForce GTX 108...  Off  | 00000000:05:00.0 Off |                  N/A |
| 66%   82C    P2   220W / 250W |  10783MiB / 11178MiB |    100%      Default |
+-------------------------------+----------------------+----------------------+
|   2  GeForce GTX 108...  Off  | 00000000:08:00.0 Off |                  N/A |
| 45%   67C    P2    85W / 250W |  10793MiB / 11178MiB |     51%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
|  GPU   PID     USER    GPU MEM  %MEM  %CPU  COMMAND                                                                                               |
|    0  1032 anonymou   10781MiB   308   3.7  python train_image_classifier.py --train_dir=/mnt/xxxxxxxx/xxxxxxxx/xxxxxxxx/xxxxxxx/xxxxxxxxxxxxxxx  |
|    1 11021 cannotte   10765MiB   114   1.5  python3 ./train.py --flagfile /xxxxxxxx/xxxxxxxx/xxxxxxxx/xxxxxxxxx/xx/xxxxxxxxxxxxxxx                |
|    2 25544 nevermin   10775MiB   108   2.0  python -m xxxxxxxxxxxxxxxxxxxxxxxxxxxxx                                                               |
+-----------------------------------------------------------------------------+

【讨论】:

  • 当我尝试这个时,底部的输出似乎没有正确排列,尤其是当“COMMAND”列中的路径很长时
  • @DangManhTruong 您能否在 github 上将其作为问题与终端中的输出一起提出?
  • 如何获取每个进程的gpu利用率?
  • @debonair 我不确定这是否可能......至少 nvidia-smi 不提供此类信息
【解决方案3】:

我用nvidia-smi -q -x 做的,这是 nvidia-smi 的 XML 样式输出

ps -up `nvidia-smi -q -x | grep pid | sed -e 's/<pid>//g' -e 's/<\/pid>//g' -e 's/^[[:space:]]*//'`

【讨论】:

  • 这太棒了!当我尝试给它起别名时,bash 会尝试将 PID 作为命令执行。你有别名的技巧吗?
  • @JayStanley,我绝不是 Unix 专家,所以这可能不是最好的解决方案,但是 FWIW,我发现我可以将它导出到像 export FOO="ps -up nvidia-smi 这样的变量中 - q -x | grep pid | sed -e 's///g' -e 's///g' -e 's/^[[:space:]]*//'" 然后简单在命令行输入 $FOO....如果这是一个糟糕的解决方案,我很想听听更多了解 Unix 的人的意见。
【解决方案4】:

Jay Stanley,我可以使用 xargs 为 Junwon Lee 的命令起别名,如下所示:

alias gpu_user_usage="nvidia-smi -q -x | grep pid | sed -e 's/<pid>//g' -e 's/<\/pid>//g' -e 's/^[[:space:]]*//' | xargs ps -up"

(由于声誉限制,我无法发表评论...)

【讨论】:

    【解决方案5】:

    以前的解决方案不起作用,所以我在这里发布我的解决方案。 我用的NVIDIA-SMI的版本是440.44,不过我觉得没关系。

    nvidia-smi | tee /dev/stderr | awk '/ C / {print $3}' | xargs -r ps -up
    

    一点解释:

    • tee: 避免调用 nvidia-smi 两次
    • awk:抓取计算进程的PID列(C型)
    • xargs -r: -r 检查输入是否为空,以避免来自ps -up 的不良错误消息

    如果你想让它成为.bash_profile.bashrc 中的别名:

    alias nvidia-smi2='nvidia-smi | tee /dev/stderr | awk "/ C / {print \$3}" | xargs -r ps -up'
    

    不同的是它必须在$3 之前转义。

    【讨论】:

      【解决方案6】:

      正如 Robert 的评论所暗示的,这个答案 https://stackoverflow.com/a/51406093/2160809 建议使用 gpustat,我发现它真的很有帮助

      gpustat -up
      [0] NVIDIA GeForce GTX 1080 Ti | 90'C,  73 % |  6821 / 11178 MB | user1/732124(6817M)
      [1] NVIDIA GeForce GTX 1080 Ti | 63'C,   0 % |  7966 / 11178 MB | user2/268172(1287M) user3/735496(6675M)
      [2] NVIDIA GeForce GTX 1080 Ti | 66'C,  13 % |  2578 / 11178 MB | user2/268478(1287M) user2/725391(1287M)
      [3] NVIDIA GeForce GTX 1080 Ti | 58'C,   0 % |  1291 / 11178 MB | user2/726058(1287M)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-08-17
        • 2022-07-04
        • 2013-12-27
        • 2019-11-29
        • 2019-04-24
        相关资源
        最近更新 更多