先祝大家圣诞快乐,周末玩的开心。
但开心的同时也别忘了把模型训起来哦,通常一训就要好几天,不如花个几分钟先运行起来,周末结束不就能直接收菜了嘛!
但当你兴高采烈登上服务器,一看显卡全部被占满,这你总不能一直盯着别人的程序跑结束,然后赶紧跑你的程序吧,那岂不是要累死。
所以,我给大家写了一个抢占GPU的脚本,只需要花几秒钟运行一下就可以关机去玩了,卷死别人!
有人可能会说,网上抢占的脚本多的是啊,你这有啥区别?区别就是,我这是C++写的,给你也编译好了,不像Python还需要装各种包,我这可以直接运行,非常方便,此外功能也比较人性化。
做人留一线,日后好相见,记得给别人留两张卡,做的别太绝了!
抢占脚本说明
脚本我已经开源了:
https://github.com/godweiyang/GrabGPU
你也可以直接下载下面这个可执行文件:
https://github.com/godweiyang/GrabGPU/blob/master/grab_gpu
目前这个脚本可以指定如下参数:
- 抢占的显存大小。如果空闲的显存超过这个大小,就抢占成功,否则无限循环抢占。
- 占有的时间。如果抢占到了,你想占有的时间。如果运行你自己的程序,这个参数无效。
- 显卡ID。支持多卡,你想抢占哪几张卡。
- 你自己程序的执行脚本路径(可选)。你可以选择抢占到显卡后,执行你自己的程序,例如模型训练代码。你也可以不指定,这样默认使用我提供的程序,一直把卡占着,别人也用不了。
实际应用举例
举两个实际场景中的例子。
第一个场景,你实验室服务器有8张32GB显存的显卡,但是都被人占满了,你想等他运行完就立刻占住跑你自己的程序gpu.sh
,那么可以直接执行下面命令:
./grab_gpu 31 24 -1 gpu.sh
这里有四个参数,31表示每张卡要抢占31GB,24表示抢到后占有24小时(在运行自己程序脚本时无效),-1表示抢占全部8张显卡,gpu.sh
是你程序的执行脚本。
第二个场景,你现在也没啥程序想跑的,但就想在服务器空闲的时候占住显卡,防止别人抢了,那你可以执行下面命令:
./grab_gpu 31 24 -1
和第一个场景区别就是没有run.sh
了,这时就会执行我提供的默认CUDA程序,显卡利用率会保持在较高水平,同时执行一段时间还会休眠几秒钟,给服务器也喘口气。注意这时候24这个参数就有作用了,占有24小时后会自动停止,释放所有显卡。
源码编译
如果想进一步做定制,满足自己的需求,可以去看看源码并做修改:
https://github.com/godweiyang/GrabGPU
编译命令也很简单:
nvcc grab_gpu.cu -o grab_gpu