实验室有多个大佬同时共用多台伺服器,每个伺服器上有若干块GPU显卡,经常在一台伺服器上搭好环境,调好代码,准备跑程序,发现GPU卡已经全被被占了。将环境和代码移植到另一台伺服器,完成后发现也没有GPU卡可用。请问在实验室如何优雅的抢占GPU显卡?


最近不得不实践了,因为想把显卡空余的时间浪费降到最低。贴一下代码吧。

import pynvml
import os
pynvml.nvmlInit()
# 这里的0是GPU id
handle = pynvml.nvmlDeviceGetHandleByIndex(0)
ratio = 1024**2
while 1:
meminfo = pynvml.nvmlDeviceGetMemoryInfo(handle)
total = meminfo.total/ratio#以兆M为单位就需要除以1024**2
used = meminfo.used/ratio
free = meminfo.free/ratio
print("total: ", total)
print("used: ", used)
print("free: ", free)
if used &< total/8: print("start") os.system(python train.py) print("finish") break


没有实践过,但提供一个思路。

首先,了解一下screen命令,这个可以达到终端关闭,命令依然可以运行的效果。

其次,学会写一个shell文件或者Python文件,在screen里运行,包含循环判断显卡占用率以及运行自己的训练文件功能。

最后,添加逻辑,一旦显卡空缺,则运行你想要的命令。

有三点需要注意:

第一,可以不用判断显卡使用情况,直接while循环你的命令,但不优雅。

第二,最好显卡空缺长达二十分钟再使用,以防他人短时间内还要再用。

第三,以上方法没有相互协商好,相互体量来的优雅。


趁GPU空闲的时候在上面开个程序占满内存。等你要用的时候再把这个程序kill掉,跑自己的代码。我实验室有一个大佬就这样长期霸占7块显卡中的3块,另一个大佬霸占3块,还剩1块给我们十几个闲杂人等用。


写了个程序,伺服器有卡可以邮件通知,仅供参考,希望帮到你。https://www.yuque.com/docs/share/d28fc430-e5bf-461b-9181-069d3bacf78d?# 《记录一下好用的程序》


最近也是被这东西逼疯了,撸了个小程序,欢迎提bug

https://github.com/cnstark/gputasker?

github.com


我觉得跑一个程序留两块卡给别人用是基本的美德,我们实验室有位大佬每次跑自己的程序,8个卡全部占用,一块不留给别人,说真的有点过分。


我只有一块GPU。不太清楚跑程序可以指定一块显卡吗?


推荐阅读:
相关文章