SGE Automatisch konfigurierte Verbrauchsressource?

SGE Automatisch konfigurierte Verbrauchsressource?

Ich verwende ein Tool namens Starclusterhttp://star.mit.edu/clusterum einen SGE-konfigurierten Cluster in der Amazon-Cloud hochzufahren. Das Problem ist, dass er anscheinend nicht mit voreingestellten verbrauchbaren Ressourcen konfiguriert ist, außer SLOTS, die ich anscheinend nicht direkt mit einem anfordern kann qsub -l slots=X. Jedes Mal, wenn ich einen Cluster hochfahre, fordere ich möglicherweise einen anderen EC2-Knotentyp an, daher ist die Tatsache, dass diese Slot-Ressource vorkonfiguriert ist, wirklich nett. Ich kann eine bestimmte Anzahl von Slots mithilfe einer vorkonfigurierten parallelen Umgebung anfordern, aber das Problem ist, dass sie für MPI eingerichtet wurde, sodass das Anfordern von Slots mithilfe dieser parallelen Umgebung manchmal dazu führt, dass die Job-Slots auf mehrere Rechenknoten verteilt werden.

Gibt es eine Möglichkeit, entweder 1) eine parallele Umgebung zu erstellen, die die vorhandenen vorkonfigurierten HOST=X-Sloteinstellungen nutzt, die Starcluster einrichtet, wenn Sie Slots auf einem einzelnen Knoten anfordern, oder 2) eine Art Ressource zu verwenden, die SGE automatisch erkennt? Beim Ausführen qhostdenke ich, dass SGE diese Ressourcen irgendwie erkennt, obwohl NCPUund MEMTOTnirgends definiert sind, soweit ich sehen kann. Gibt es Einstellungen, mit denen ich diese Ressourcen anforderbar machen kann, ohne explizit zu definieren, wie viel von jeder verfügbar ist?

Vielen Dank für Ihre Zeit!

qhostAusgabe:

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 -mcAusgabe:

#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 masterAusgabe (einer der Knoten als Beispiel):

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 -msconfAusgabe:

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.qAusgabe:

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

Antwort1

Die Lösung, die ich gefunden habe, besteht darin, eine neue parallele Umgebung zu erstellen, die die $pe_slotsZuweisungsregel (siehe man sge_pe) hat. Ich habe die Anzahl der für diese parallele Umgebung verfügbaren Slots auf das Maximum gesetzt, da $pe_slotsdie Slot-Nutzung auf pro Knoten begrenzt ist. Da Starcluster die Slots beim Booten des Clusters einrichtet, scheint dies gut zu funktionieren. Sie müssen auch die neue parallele Umgebung zur Warteschlange hinzufügen. Um es ganz einfach zu machen:

qconf -ap by_node

und hier ist der Inhalt, nachdem ich die Datei bearbeitet habe:

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

Ändern Sie auch die Warteschlange (aufgerufen all.qvon Starcluster), um diese neue parallele Umgebung zur Liste hinzuzufügen.

qconf -mq all.q

und ändern Sie diese Zeile:

pe_list               make orte

dazu:

pe_list               make orte by_node

Ich war besorgt, dass aus einem bestimmten Job generierte Jobs auf einen einzigen Knoten beschränkt wären, aber das scheint nicht der Fall zu sein. Ich habe einen Cluster mit zwei Knoten und jeweils zwei Slots.

Ich habe eine Testdatei erstellt, die so aussieht:

#!/bin/bash

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

sleep 100

und habe es folgendermaßen ausgeführt:

qsub -V -pe by_node 2 test.sh

Nach kurzer Zeit qstatwird angezeigt, dass beide Jobs auf unterschiedlichen Knoten ausgeführt werden:

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  

Ich habe auch getestet, 3 Jobs gleichzeitig zu übermitteln, die dieselbe Anzahl von Slots auf einem einzelnen Knoten anfordern, und es werden immer nur zwei gleichzeitig ausgeführt, einer pro Knoten. Das scheint also richtig eingerichtet zu sein!

verwandte Informationen