如何解决PBS/TORQUE集群中future.apply并行任务被误杀问题?
PBS/TORQUE集群中使用future.apply并行时内存统计异常导致任务终止
我在本地机器使用future.apply和future包实现R任务并行化完全正常,但在PBS/TORQUE管理的计算机集群上运行时,任务会因违反资源策略被终止。查看进程后发现,qstat报告的resources_used.mem和resources_used.vmem数值高得离谱。
注:我已了解并使用过batchtools和future.batchtools包,但它们需要按特定方式组织脚本并向队列提交任务,本次案例希望避免使用这类工具。
最小可复现示例(MVE)
代码先生成一个含10^9个元素的向量,再通过future_lapply进行并行运算:
library(future.apply) plan(multicore, workers = 12) sample <- rnorm(n = 10^9, mean = 10, sd = 10) print(object.size(sample)/(1024*1024)) # 占用约8GB内存 options(future.globals.maxSize=+Inf) options(future.gc = TRUE) future_lapply(future.seed = TRUE, X = 1:12, function(idx){ # 执行简单操作 for(i in sample){ if (i > 0) dummy <- 1 } return(dummy) })
集群运行情况
在本地32GB可用内存的计算机上,代码运行正常(无内存问题)。但在资源充足的集群上通过以下命令提交交互式任务:
qsub -I -l mem=60Gb -l nodes=1:ppn=12 -l walltime=72:00:00
任务会因违反资源策略被自动终止。执行qstat -f JOBNAME | grep used查看资源使用情况:
resources_used.cput = 00:05:29 resources_used.mem = 102597484kb resources_used.vmem = 213467760kb resources_used.walltime = 00:02:06
结果显示进程占用约102GB内存和213GB虚拟内存,但实际通过htop等工具监控节点时,内存使用量是正常的,问题出在TORQUE/PBS的统计数值虚高。
内容的提问来源于stack exchange,提问作者D1X
相关产品推荐
相关产品推荐

