Chen Shawn's Blogs

╭(●`∀´●)╯ ╰(●’◡’●)╮

0%

5行shell忙等抢占GPU——论如何与流氓公用GPU

几行简单的shell代码,用来在实验室公用的服务器上忙等之前占用GPU的进程,一旦之前的进程退出,马上启动自己的进程来抢占GPU (再也不用担心总是排不到空闲GPU了

基础版

临时写的因而比较随意,大部分情况下,在这个代码基础上改一改就可以实现类似需求

1
2
3
4
5
6
7
8
9
10
11
12
res=`ps -ef | grep english_drop | wc -l`
while [ ${res} -gt 1 ]
do
sleep 10
res=`ps -ef | grep english_drop | wc -l`
time=$(date "+%Y-%m-%d %H:%M:%S")
echo "$time"
done

echo "Start to run...\n"

# Activate your own process here

重点只有一个,就是灵活地用起来shell中的wc指令

  • -l: 返回行数
  • -L: 返回字符最多的一行的长度
  • -m: 返回characters数量
  • -c: 返回bytes数量

流氓版

同理想盯某一块显卡有没有进程在占用就可以这样写(只对用python启动的进程有效,用其他方式启动的进程只要改下grep后面的参数即可)

1
2
3
4
5
6
7
8
9
10
11
12
res=`nvidia-smi | grep python | wc -l`
while [ ${res} -gt 0 ]
do
sleep 10
res=`nvidia-smi | grep english_drop | wc -l`
time=$(date "+%Y-%m-%d %H:%M:%S")
echo "$time"
done

echo "Start to run...\n"

# Activate your own process here

单显卡的情况下更简单,没有进程占用GPU时nvidia-smi返回会显示

| No running processes found |

可以grep其中任意一个词来查看是否有进程占用,例如

1
res=`nvidia-smi | grep running | wc -l`