%20%E4%B8%8A%E7%9A%84%E5%B9%B6%E8%A1%8C%E7%8E%AF%E5%A2%83%20(PE)%20%E6%97%A0%E6%B3%95%E8%BF%90%E8%A1%8C%E4%BD%9C%E4%B8%9A%EF%BC%9A%E2%80%9C%E4%BB%85%E6%8F%90%E4%BE%9B%200%20%E4%B8%AA%E6%8F%92%E6%A7%BD%E2%80%9D.png)
我在一台 8 核的 Ubuntu 10.10 服务器上安装了 Sun Grid Engine(版本 6.2u5)。为了能够预留多个插槽,我设置了一个并行环境 (PE),如下所示:
pe_name serial
slots 999
user_lists NONE
xuser_lists NONE
start_proc_args /bin/true
stop_proc_args /bin/true
allocation_rule $pe_slots
control_slaves FALSE
job_is_first_task TRUE
urgency_slots min
accounting_summary FALSE
这与相关服务器上的 all.q 相关(我们将其称为服务器 A)。但是,当我使用例如 qsub -q all.q@A -pe serial 4 mycmd.sh 提交使用 4 个线程的作业时,它从未被安排,我从 qstat 得到以下推理:
无法在 PE“串行”中运行,因为它仅提供 0 个插槽
为什么 SGE 说“串行”仅提供 0 个插槽,而我指定的服务器(服务器 A)上有 8 个可用插槽?
所讨论的队列配置如下(服务器名称已更改):
qname all.q
hostlist @allhosts
seq_no 0
load_thresholds np_load_avg=1.75
suspend_thresholds NONE
nsuspend 1
suspend_interval 00:05:00
priority 0
min_cpu_interval 00:05:00
processors UNDEFINED
qtype BATCH INTERACTIVE
ckpt_list NONE
pe_list make orte serial
rerun FALSE
slots 1,[D=32],[C=8], \
[B=30],[A=8]
tmpdir /tmp
shell /bin/sh
prolog NONE
epilog NONE
shell_start_mode posix_compliant
starter_method NONE
suspend_method NONE
resume_method NONE
terminate_method NONE
notify 00:00:60
owner_list NONE
user_lists NONE
xuser_lists NONE
subordinate_list NONE
complex_values NONE
projects NONE
xprojects NONE
calendar NONE
initial_state default
s_rt INFINITY
h_rt 08:00:00
s_cpu INFINITY
h_cpu INFINITY
s_fsize INFINITY
h_fsize INFINITY
s_data INFINITY
h_data INFINITY
s_stack INFINITY
h_stack INFINITY
s_core INFINITY
h_core INFINITY
s_rss INFINITY
h_rss INFINITY
s_vmem INFINITY
h_vmem INFINITY,[A=30g], \
[B=5g]
答案1
分配规则$pe_slots
要求您提交的作业大小与任何一台机器上的核心数量完全相同。请将分配规则更改为$fill_up
或尝试提交需要 8、30 或 32 个核心的作业。
答案2
qalter -w p
我不知道答案,但您可以通过运行和来获取有关为什么网格引擎不调度作业的更多信息qalter -w v
。唯一需要注意的是,至少在某些版本中,qalter -w v
它不会像应该的那样忽略独占资源。