
starcluster라는 도구를 사용하고 있습니다.http://star.mit.edu/clusterAmazon 클라우드에서 SGE로 구성된 클러스터를 부팅합니다. 문제는 SLOTS를 제외하고는 미리 설정된 소모성 리소스로 구성되어 있지 않은 것 같은데, qsub -l slots=X
. 클러스터를 부팅할 때마다 다른 유형의 EC2 노드를 요청할 수 있으므로 이 슬롯 리소스가 사전 구성되어 있다는 사실은 정말 좋습니다. 사전 구성된 병렬 환경을 사용하여 특정 개수의 슬롯을 요청할 수 있지만 문제는 MPI용으로 설정되었기 때문에 해당 병렬 환경을 사용하여 슬롯을 요청하면 여러 컴퓨팅 노드에 분산된 작업 슬롯이 부여되는 경우가 있습니다.
1) 단일 노드에서 슬롯을 요청할 때 starcluster가 설정하는 기존의 사전 구성된 HOST=X 슬롯 설정을 활용하는 병렬 환경을 만들거나 2) SGE가 제공하는 일종의 리소스를 사용하는 방법이 있습니까? 자동으로 인식되나요? 실행하면 및 가 내가 볼 수 있는 어디에도 정의되어 있지 않더라도 SGE가 어떻게든 해당 리소스를 인식하고 있다고 qhost
생각됩니다 . 각각의 사용 가능한 양을 명시적으로 정의하지 않고도 해당 리소스를 요청 가능하게 만들 수 있는 설정이 있습니까?NCPU
MEMTOT
시간 내 줘서 고마워!
qhost
산출:
HOSTNAME ARCH NCPU LOAD MEMTOT MEMUSE SWAPTO SWAPUS
-------------------------------------------------------------------------------
global - - - - - - -
master linux-x64 2 0.01 7.3G 167.4M 0.0 0.0
node001 linux-x64 2 0.01 7.3G 139.6M 0.0 0.0
qconf -mc
산출:
#name shortcut type relop requestable consumable default urgency
#----------------------------------------------------------------------------------------
arch a RESTRING == YES NO NONE 0
calendar c RESTRING == YES NO NONE 0
cpu cpu DOUBLE >= YES NO 0 0
display_win_gui dwg BOOL == YES NO 0 0
h_core h_core MEMORY <= YES NO 0 0
h_cpu h_cpu TIME <= YES NO 0:0:0 0
h_data h_data MEMORY <= YES NO 0 0
h_fsize h_fsize MEMORY <= YES NO 0 0
h_rss h_rss MEMORY <= YES NO 0 0
h_rt h_rt TIME <= YES NO 0:0:0 0
h_stack h_stack MEMORY <= YES NO 0 0
h_vmem h_vmem MEMORY <= YES NO 0 0
hostname h HOST == YES NO NONE 0
load_avg la DOUBLE >= NO NO 0 0
load_long ll DOUBLE >= NO NO 0 0
load_medium lm DOUBLE >= NO NO 0 0
load_short ls DOUBLE >= NO NO 0 0
m_core core INT <= YES NO 0 0
m_socket socket INT <= YES NO 0 0
m_topology topo RESTRING == YES NO NONE 0
m_topology_inuse utopo RESTRING == YES NO NONE 0
mem_free mf MEMORY <= YES NO 0 0
mem_total mt MEMORY <= YES NO 0 0
mem_used mu MEMORY >= YES NO 0 0
min_cpu_interval mci TIME <= NO NO 0:0:0 0
np_load_avg nla DOUBLE >= NO NO 0 0
np_load_long nll DOUBLE >= NO NO 0 0
np_load_medium nlm DOUBLE >= NO NO 0 0
np_load_short nls DOUBLE >= NO NO 0 0
num_proc p INT == YES NO 0 0
qname q RESTRING == YES NO NONE 0
rerun re BOOL == NO NO 0 0
s_core s_core MEMORY <= YES NO 0 0
s_cpu s_cpu TIME <= YES NO 0:0:0 0
s_data s_data MEMORY <= YES NO 0 0
s_fsize s_fsize MEMORY <= YES NO 0 0
s_rss s_rss MEMORY <= YES NO 0 0
s_rt s_rt TIME <= YES NO 0:0:0 0
s_stack s_stack MEMORY <= YES NO 0 0
s_vmem s_vmem MEMORY <= YES NO 0 0
seq_no seq INT == NO NO 0 0
slots s INT <= YES YES 1 1000
swap_free sf MEMORY <= YES NO 0 0
swap_rate sr MEMORY >= YES NO 0 0
swap_rsvd srsv MEMORY >= YES NO 0 0
qconf -me master
출력(예: 노드 중 하나):
hostname master
load_scaling NONE
complex_values NONE
user_lists NONE
xuser_lists NONE
projects NONE
xprojects NONE
usage_scaling NONE
report_variables NONE
qconf -msconf
산출:
algorithm default
schedule_interval 0:0:15
maxujobs 0
queue_sort_method load
job_load_adjustments np_load_avg=0.50
load_adjustment_decay_time 0:7:30
load_formula np_load_avg
schedd_job_info false
flush_submit_sec 0
flush_finish_sec 0
params none
reprioritize_interval 0:0:0
halftime 168
usage_weight_list cpu=1.000000,mem=0.000000,io=0.000000
compensation_factor 5.000000
weight_user 0.250000
weight_project 0.250000
weight_department 0.250000
weight_job 0.250000
weight_tickets_functional 0
weight_tickets_share 0
share_override_tickets TRUE
share_functional_shares TRUE
max_functional_jobs_to_schedule 200
report_pjob_tickets TRUE
max_pending_tasks_per_job 50
halflife_decay_list none
policy_hierarchy OFS
weight_ticket 0.010000
weight_waiting_time 0.000000
weight_deadline 3600000.000000
weight_urgency 0.100000
weight_priority 1.000000
max_reservation 0
default_duration INFINITY
qconf -mq all.q
산출:
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
rerun FALSE
slots 1,[master=2],[node001=2]
tmpdir /tmp
shell /bin/bash
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 INFINITY
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
답변1
제가 찾은 해결책은 $pe_slots
할당 규칙이 있는 새로운 병렬 환경을 만드는 것입니다(참고자료 참조 man sge_pe
). $pe_slots
슬롯 사용량을 노드별로 제한하므로 해당 병렬 환경에서 사용할 수 있는 슬롯 수를 최대값과 동일하게 설정했습니다 . starcluster는 클러스터 부팅 시 슬롯을 설정하므로 이 방법이 훌륭하게 작동하는 것 같습니다. 또한 새 병렬 환경을 대기열에 추가해야 합니다. 그래서 이것을 간단하게 만들려면 다음과 같이 하십시오.
qconf -ap by_node
파일을 편집한 후의 내용은 다음과 같습니다.
pe_name by_node
slots 9999999
user_lists NONE
xuser_lists NONE
start_proc_args /bin/true
stop_proc_args /bin/true
allocation_rule $pe_slots
control_slaves TRUE
job_is_first_task TRUE
urgency_slots min
accounting_summary FALSE
all.q
또한 이 새로운 병렬 환경을 목록에 추가하려면 대기열(starcluster에 의해 호출됨)을 수정하십시오 .
qconf -mq all.q
다음 줄을 변경하세요.
pe_list make orte
이에:
pe_list make orte by_node
특정 작업에서 생성된 작업이 단일 노드로 제한될까 봐 걱정했는데, 그렇지 않은 것 같습니다. 두 개의 노드와 각각 두 개의 슬롯이 있는 클러스터가 있습니다.
다음과 같은 테스트 파일을 만들었습니다.
#!/bin/bash
qsub -b y -pe by_node 2 -cwd sleep 100
sleep 100
다음과 같이 실행했습니다.
qsub -V -pe by_node 2 test.sh
잠시 후 qstat
서로 다른 노드에서 실행 중인 두 작업이 모두 표시됩니다.
job-ID prior name user state submit/start at queue slots ja-task-ID
-----------------------------------------------------------------------------------------------------------------
25 0.55500 test root r 10/17/2012 21:42:57 all.q@master 2
26 0.55500 sleep root r 10/17/2012 21:43:12 all.q@node001 2
또한 단일 노드에서 동일한 수의 슬롯을 요청하는 동시에 3개의 작업을 제출하고 노드당 하나씩, 한 번에 2개만 실행하는 것을 테스트했습니다. 그럼 제대로 설정이 된 것 같네요!