Recurso consumível configurado automaticamente pela SGE?

Recurso consumível configurado automaticamente pela SGE?

Estou usando uma ferramenta chamada starclusterhttp://star.mit.edu/clusterpara inicializar um cluster configurado SGE na nuvem Amazon. O problema é que ele não parece estar configurado com nenhum recurso consumível predefinido, exceto SLOTS, que não consigo solicitar diretamente com um arquivo qsub -l slots=X. Cada vez que inicializo um cluster, posso solicitar um tipo diferente de nó EC2, então o fato desse recurso de slot ser pré-configurado é muito bom. Posso solicitar um certo número de slots usando um ambiente paralelo pré-configurado, mas o problema é que ele foi configurado para MPI, portanto, solicitar slots usando esse ambiente paralelo às vezes concede slots de trabalho espalhados por vários nós de computação.

Existe uma maneira de 1) criar um ambiente paralelo que aproveite as configurações de slots HOST = X pré-configuradas existentes que o starcluster configura onde você está solicitando slots em um único nó ou 2) usa algum tipo de recurso que o SGE está automaticamente ciente? A execução qhostme faz pensar que, embora NCPUe MEMTOTnão estejam definidos em nenhum lugar que eu possa ver, que o SGE esteja de alguma forma ciente desses recursos, existem configurações onde posso tornar esses recursos solicitáveis ​​sem definir explicitamente quanto de cada um está disponível?

Obrigado pelo seu tempo!

qhostsaída:

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 -mcsaída:

#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 mastersaída (um dos nós como exemplo):

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 -msconfsaída:

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.qsaída:

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

Responder1

A solução que encontrei é fazer um novo ambiente paralelo que possua a $pe_slotsregra de alocação (veja man sge_pe). Defino o número de slots disponíveis para esse ambiente paralelo como igual ao máximo, pois $pe_slotslimita o uso do slot por nó. Como o starcluster configura os slots no momento da inicialização do cluster, isso parece funcionar muito bem. Você também precisa adicionar o novo ambiente paralelo à fila. Então, apenas para tornar isso muito simples:

qconf -ap by_node

e aqui está o conteúdo depois de editar o arquivo:

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

Modifique também a fila (chamada all.qpelo starcluster) para adicionar este novo ambiente paralelo à lista.

qconf -mq all.q

e altere esta linha:

pe_list               make orte

para isso:

pe_list               make orte by_node

Fiquei preocupado que os trabalhos gerados a partir de um determinado trabalho fossem limitados a um único nó, mas não parece ser o caso. Eu tenho um cluster com dois nós e dois slots cada.

Fiz um arquivo de teste parecido com este:

#!/bin/bash

qsub -b y -pe by_node 2 -cwd sleep 100

sleep 100

e executei assim:

qsub -V -pe by_node 2 test.sh

Depois de um tempo, qstatmostra os dois trabalhos em execução em nós diferentes:

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  

Também testei o envio de três trabalhos de uma vez, solicitando o mesmo número de slots em um único nó, e apenas dois executados por vez, um por nó. Portanto, isso parece estar configurado corretamente!

informação relacionada