SLURM集群sreport按GRES使用量排序失效问题求助
解决SLURM sreport按GRES资源正确排序的问题
我来帮你搞定这个排序异常的问题。先拆解下你遇到的现象:
当你只指定--tres=gres/gpu:tesla时,虽然SLURM官方文档说会按第一个指定的TRES资源排序,但由于大部分用户的GPU使用量是0,SLURM会** fallback 到默认的CPUTime作为次要排序依据**,所以结果看起来是按CPU使用量排的;而当你把cpu加入--tres参数后,第一个TRES变成了cpu,自然就按CPU使用量排序了。
下面给你两个可行的解决方案:
方案1:显式指定按GRES使用量降序排序
使用--sort参数强制让结果按GPU使用量降序排列,即使是0值的条目也会严格遵循这个排序规则:
sreport user -t hourper TopUsage TopCount=5 --tres=gres/gpu:tesla --sort=-gres/gpu:tesla start=2021-05-01T00:00:00
这里的-符号表示降序排序,这样有GPU使用量的用户会直接排在最前面,其他0使用量的用户则按GPU使用量(都是0)之后的次要规则排序,但不会再优先按CPU排序。
方案2:过滤掉GRES使用量为0的用户
如果你只关心有实际GPU使用的用户,可以用--filter选项过滤掉使用量为0的条目,这样结果会自动按GPU使用量排序(因为剩下的条目都是有非0使用量的,SLURM会严格遵循--tres指定的第一个资源排序):
sreport user -t hourper TopUsage TopCount=5 --tres=gres/gpu:tesla --filter="gres/gpu:tesla>0" start=2021-05-01T00:00:00
这个命令只会显示GPU使用量大于0的用户,结果会正确按GPU使用量从高到低排序。
补充说明
SLURM的TopUsage模块在排序时,当第一个指定的TRES资源使用量相同时,会默认使用CPUTime作为次要排序键。这就是为什么你之前看到0使用量的用户按CPU使用量排的原因——因为他们的GPU使用量都是0,SLURM就用CPU时间来区分顺序了。通过显式指定排序规则或者过滤掉0值条目,就能解决这个问题。
内容的提问来源于stack exchange,提问作者emiliojorge
相关产品推荐
相关产品推荐

