zoukankan      html  css  js  c++  java
  • 如何监控GPU使用情况并杀死指定其中进程

    仰望高端玩家的小清新 http://www.cnblogs.com/luruiyuan/

    有时候我们常常会有一个需求是监控GPU指定情况,并且需要根据需要杀死GPU进程

    这里介绍几个与之相关的指令:

    watch -n 秒数 命令 :每隔指定秒数,就执行一次命令,并将结果打印在屏幕上

    例如:

    watch -3 nvidia-smi

    watch -n 3 nvidia-smi

    上述命令每隔三秒就输出一次GPU列表信息

    通过 nvidia-smi 可以输出使用GPU的进程ID,因此可以借助 awk 工具对 nvidia-smi 的输出进行过滤,从而找到进程信息,再对指定进程进行kill

    例如:

    要终止GPU-0到GPU-3的所有进程中,PID大于1000的,可以使用如下指令完成:

    kill -9 $(nvidia-smi | awk '$2 == "GPU" && $3 == "PID" {flag = 1} flag && $3 > 0 {print $2, $3}' | awk '$1 < 4 && $2 > 1000 {print $2}')

    kill -9 PIDs 需要所有待停止的进程编号,而 nvidia-smi 经过第一个 awk 的输出为:

    GPU PID

    0 10053

    1 3343

    再经过第二个awk后,即可对GPU ID 和PID进行筛选,并输出 {print $2},可以得到:

    10053

    3343

    最后,通过 $() 对输出的 PID 进行读取,完成kill过程。

    同样的,结合 watch 指令,我们可以周期性地清理占用GPU的僵尸进程

    例如,每分钟清理一次:

    sudo watch -n 60 kill -9 $(nvidia-smi | awk '$2 == "GPU" && $3 == "PID" {flag = 1} flag && $3 > 0 {print $2, $3}' | awk '$1 < 4 && $2 > 1000 {print $2}')

     或者防止非法用户访问GPU:

    sudo watch -n 60 kill -9 $(for x in $(nvidia-smi | awk '$2 == "GPU" && $3 == "PID" {flag = 1} flag && $3 > 0 {print $2, $3}' | awk '$1 < 4 && $2 > 1000 {print $2}'); do ps -aux | awk '$2 == '$x' && $1 == "illigal_user_name" {print $2}'; done)

    原始问题和我的回答见:这里,网址:https://unix.stackexchange.com/questions/250244/how-to-kill-all-processes-using-a-given-gpu/511668#511668

  • 相关阅读:
    人月神话阅读笔记(三)
    MongoDB设置用户名以及密码
    pdf.js使用总结#如何在网页读取并显示PDF格式文档
    Python中eval函数的作用
    寒假学习笔记(13)
    寒假学习笔记(12)
    寒假学习笔记(11)
    寒假学习笔记(10)
    寒假学习笔记(9)
    寒假学习笔记(8)
  • 原文地址:https://www.cnblogs.com/luruiyuan/p/10686181.html
Copyright © 2011-2022 走看看