||
计算资源总归是比较稀缺的。集群上一般都有任务管理系统,每个用户按照先来后到排队,公平公正。而由很多人共享的单个服务器就比较糟糕了,得一直地拿top命令盯着进程表,一旦有空余资源立刻提交,手速慢了煮熟的鸭子就要飞掉。有时为了抢资源还得熬夜,还可能闹得组里人际关系紧张。如果能让服务器替我们盯梢,人就可以放心地去睡大觉。这个需求其实不难满足,用shell几十行命令就能搞定,用python的话更短。
但这个程序实在太缺德了,并且用的人越少效果越好。如果大家都用,又会变成拼手速的局面。因此在这里不直接放源码,增加一下使用难度,同时过滤一下伸手党。程序可以在Github上yhli1016用户的misc repository里面找到。
程序中需要修改的有两处,第一处在main函数中:
program_list是一个列表,告诉服务器帮我们盯着哪些程序,比如说vasp。
dt告诉服务器每隔多少秒帮我们检查一下有没有可用的资源,比如说60秒。
maxloop告诉服务器总共帮我们检查多少次,比如说连着盯三天(86400秒乘以3除以dt)。
ncore_total告诉服务器上总共有多少个核,get_ncore_total返回的是物理核数,如果启用了超线程,需要在get_ncore_total()后面乘以2。
ncore_min告诉服务器自己的任务最少需要多少个核,默认使用全部核数。
ncore_max告诉服务器自己的任务最多用多少个核,默认使用全部核数。
程序运行时,服务器每隔dt检查一次program_list中的程序占用了多少个核,再结合ncore_total计算出有多少核可用。一旦可用核数大于ncore_min,就把它当作参数发给run_job函数。
第二处需要修改的地方为run_job函数:
如果需要执行单一计算任务,反注释第二行,把vasp.mpi.5.3.3改成要执行的程序名。如果需要运行一个脚本,反注释第一行,并在脚本中接收ncore作为可用核数。对于会改python程序和写shell脚本的人,这个应该不难。
在三天里每隔一分钟检查一次可用资源,已经没人抢得过你了。别把核都用光,给别人留一点。做人留一线,日后好相见。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-11-24 03:40
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社