Medusa
De IngridPtWiki
Tabela de conteúdo |
Introdução
- O cluster medusa encontra-se sob a operação técnica da equipa INGRID. Esta página tem como objectivo orientar os utilizadores LNEC a submeter tarefas paralelas (corridas) ao cluster, e a manipular os dados gerados durante as execuções.
Recursos LNEC
- Cluster MEDUSA
- Servidores FUJITSU SIEMENS PRIMERGYRX220 em rede Ethernet (1 Gbit/s)
- 67 servidores, 268 cores, 1 GB de RAM por core (4 GB de RAM por servidor)
- 1 disco de 70 GB
- Servidores instalados com Scientific Linux 5, versão x86_64
- Processadores
processor : 3 vendor_id : AuthenticAMD cpu family : 15 model : 33 model name : Dual Core AMD Opteron(tm) Processor 280 stepping : 2 cpu MHz : 2394.127 cache size : 1024 KB physical id : 1 siblings : 2 core id : 1 cpu cores : 2 apicid : 3 fpu : yes fpu_exception : yes cpuid level : 1 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt lm 3dnowext 3dnow pni lahf_lm cmp_legacy bogomips : 4787.31 TLB size : 1024 4K pages clflush size : 64 cache_alignment : 64 address sizes : 40 bits physical, 48 bits virtual power management: ts fid vid ttp
Configurações gerais
- Armazenamento
- shared file system NFS para as HOMES dos utilizadores disponível sobre /home/lnec. A utilizar para compilações de programas.
- shared file system do tipo LUSTRE disponível sobre /data/lnec (12 OSTs com 1 TB cada configurados em regime de stripe all, 10 Gigabit Ethernet). A utilizar para armazenamento de dados.
- Gestor de tarefas
- Grid Engine como Local resource Management System
Como utilizar os recursos Medusa
Acesso
- O acesso local ao serviço Medusa é realizado por ssh para uma máquina dedicada (lnec.ncg.ingrid.pt).
[username@machine ~]$ ssh -l username lnec.ncg.ingrid.pt username@lnec.ncg.ingrid.pt's password: /usr/bin/xauth: creating new authority file /home/hpc/username/.Xauthority -bash-3.2$
- O acesso a partir do exterior é restrito pelo que é necessário providenciar o IP da máquina da qual se pretende aceder. De momento apenas é permitido o acesso a partir de
- medusa-e.lnec.pt
- dha-aazevedo.lnec.pt
- dha-mfrodrigues.lnec.pt
- Rede 193.136.106.192/28 (IPs = 193.136.106.192 a 193.136.106.207)
Gestão de software
- As instalações de software disponíveis podem ser consultadas através do software Module. Este software inicia o ambiente adequado (PATH, LD_LIBRARY_PATH, etc) para utilização pelo utilizador, e é uma ferramenta conveniente para mudanças de software específicas. Os principais comandos são:
- consultar software: module avail
- carregar software: module load
- listar software em uso: module list
- Ajuda sobre comandos module: module help
# Listar modulos disponíveis -bash-3.2$ module avail ----------------------- /exper-sw/sw/Modules/modulefiles ----------------------- gcc41/root-5.26.00 modules open64/openmpi-noib-1.4.1 gcc44/fftw-noib-3.2.2 ncgenv gcc44/openmpi-noib-1.4.1 open64/fftw-noib-3.2.2 --------------------- /exper-sw/sw/Modules/modulefiles.hpc --------------------- gcc41/fftw-3.2.2 gcc44/openmpi-1.4.2 open64/open64-4.2.3-0 gcc41/gcc-4.1.2 gcc44/parmetis-3.1 open64/openmpi-1.4.1 gcc41/mvapich-1.1.0 intel/eval/gotm-4.0.0 open64/openmpi-1.4.2 gcc41/mvapich-1.4.1 intel/eval/intel-11.1.073 open64/openmpi-1.4.2-noib gcc41/netcdf-3.6.2 intel/eval/netcdf-3.6.2 open64/openmpi-1.4.3 gcc41/netcdf-4.1.1 intel/eval/openmpi-1.4.2 open64/parmetis-3.1 gcc41/openmpi-1.2.8 intel/eval/parmetis-3.1 open64/selfe-3.1c gcc41/openmpi-1.4.1 intel/eval/selfe-3.1c open64/selfe-3.1c-noib gcc41/openmpi-1.4.2 intel/eval/swan/mpi-40.81 open64/swan/mpi-40.72 gcc41/parmetis-3.1 intel/eval/swan/omp-40.81 open64/swan/mpi-40.81 gcc44/blacs-1.1 intel/eval/swan/ser-40.81 open64/swan/omp-40.72 gcc44/fftw-3.2.2 open64/fftw-3.2.2 open64/swan/omp-40.81 gcc44/gcc-4.4.0 open64/netcdf-3.6.2 open64/swan/ser-40.72 gcc44/mvapich-1.4.1 open64/netcdf-4.1.1 open64/swan/ser-40.81 gcc44/openmpi-1.4.1 open64/open64-4.2.3 toolworks/totalview-8.8.0 # Carregar modulos / software -bash-3.2$ module load gcc44/openmpi-1.4.1 -bash-3.2$ # Listar os modulos / software em uso -bash-3.2$ module list Currently Loaded Modulefiles: 1) gcc44/gcc-4.4.0 2) gcc44/openmpi-1.4.1
Gestão de tarefas
- O sistema de gestão de tarefas é o Grid Engine.
Topologia de directorias
Nas máquinas medusa existem os seguintes filesystems acessíveis aos utilizadores:
- /home/lnec (2.7 TB de capacidade total): As HOMES dos utilizadores copiado a partir da informação disponível no storage antigo. É a partir desta directoria que os utilizadores devem criar e compilar os seus programas.
- /data/lnec (5.0 TB de capacidade total): Directoria para armazenar grandes quantidades de dados. Esta não é uma directoria para execuções ou compilações mas apenas para armazenamento, preferencialmente, de grandes ficheiros.
Topologia para as filas de execução
- Os utilizadores de HPC têm ao seu dispor as seguintes filas de execução:
- hpcgrid: Para todos os utilizadores
- medusa Para os utilizadores LNEC
- Os utilizadores gerais executam tarefas na fila hpcgrid com um limite máximo de tempo de CPU de 48h, e de wallclock time de 72h. O número máximo de instâncias paralelas permitidas por tarefa é de 64.
- Os utilizadores LNEC podem adicionalmente executar tarefas na file medusa com um limite máximo de tempo de CPU de 12 dias, e de wallclock time de 18 dias. O número máximo de instâncias paralelas permitidas por tarefa é limitado pelo número máximo de máquinas disponíveis na fila (presentemente 28). Caso os utilizadores LNEC não explicitem em que fila pretendem correr a tarefa, essa informação será delegada ao sistema de gestão de tarefas. Para escolher uma fila específica, por favor consulte a secção "Submissão ao sistema".
Infiniband versus Gigabit Ethernet
- A fila de execução medusa contribui com recursos interconnectados através de uma rede Gigabit Ethernet a 1Gbits/s. Por agregação de portas nos switches pode-se conseguir uma largura de banda agregada de 4 Gbits/s.
- A fila de execução hpcgrid contribui com recursos de 2 tipos:
- um conjunto interconnectado através de uma rede Gigabit Ethernet sem agregações (Max: 1 Gbit/s)
- um outro conjunto interconnectado através de infiniband (Max: 8 Gbit/s).
- De forma a não degradar a execução e a latência do sistema, não são permitidas execuções híbridas. Deste modo, as seguintes políticas forma implementadas para submissões na fila de execução hpcgrid:
- Por pré-definição, todas as tarefas são redireccionadas para os recursos a Gigabit Ethernet;
- Para aceder aos recursos Infiniband, o utilizador terá que declarar essa vontade no acto de submissão do job (por favor consulte a secção "Submissão ao sistema").
Recursos disponíveis
A ocupação dos recursos das duas filas pode ser consultada a cada instante através de:
bash-3.2$ qstat -g c -q hpcgrid CLUSTER QUEUE CQLOAD USED RES AVAIL TOTAL aoACDS cdsuE -------------------------------------------------------------------------------- hpcgrid 0.45 80 0 16 216 0 200
-bash-3.2$ qstat -g c -q medusa CLUSTER QUEUE CQLOAD USED RES AVAIL TOTAL aoACDS cdsuE -------------------------------------------------------------------------------- medusa 0.00 0 0 252 252 0 0
Submissão ao sistema
- A submissão ao sistema é realizada com o comando qsub:
qsub [ options ] [ command | -- [ command_args ]].
- As opções podem ser indicadas directamente na linha de comando, ou no interior de um script bash (ou outro). Para mais informações sobre as opções, por favor consulte o manual (man qsub).
- No exemplo seguinte mostramos um script que compila e executa uma aplicação. As opções ao comando qsub são incluídas através de directivas #$. De notar que o utilizador explicitamente pretende:
- compilar a sua aplicação com gcc44, e utilar a versão de MPI openmpi-1.4.1,
- executar a sua tarefas com 2 instâncias, sobre o ambiente paralelo mpi.
-bash-3.2$ cat cpi_submit.sh #!/bin/bash # Opção para herdar o ambiente do utilizador na execução #$ -V # Opção para começar os jobs na directoria de onde o utizador submete. #$ -cwd # Invocar o ambiente paralelo denominado mpi, e executar a tarefa com 2 instâncias #$ -pe mpi 2 # Carregar os modules de interesse source /etc/profile.d/modules.sh module load gcc44/openmpi-1.4.1 # Compilar a aplicação echo "=== Compiling ===" mpicc -o cpi cpi.c # Executar a aplicação echo "=== Running ===" mpirun -np $NSLOTS cpi
- Finalmente, a script pode ser submetida para execução ao sistema:
-bash-3.2$ qsub cpi_submit.sh
Your job 5076311 ("cpi_submit.sh") has been submitted
- Caso o utilizador pretenda executar nos recursos da queue hpcgrid (sem infiniband), então teve adicionar a opção
# Accesso aos recursos do projecto HpcGrid #$ -P HpcGrid
- Caso o utilizador pretenda executar nos recursos da queue hpcgrid (com infiniband), então deve adicionar a seguinte opção (sem detrimento da anterior)
# Requerer acesso a recursos Infiniband #$ -l ib=y
Estado da tarefa
- O estado da tarefa é obtido através do comando qstat. Para informação sobre as opções deste comando, por favor consulte o manual (man qstat).
qstat [ -ext ] [ -cb ] [ -f ] [ -F [resource_name,...] ] [ -g {c|d|t}[+] ] [ -help ] [ -j
[job_list] ] [ -l resource=val,... ] [ -ne ] [ -pe pe_name,... ] [ -pri ] [ -q wc_queue_list ]
[ -qs {a|c|d|o|s|u|A|C|D|E|S} ] [ -r ] [ -s {r|p|s|z|hu|ho|hs|hd|hj|ha|h|a}[+] ] [ -t ] [ -U
user,... ] [ -u user,... ] [ -urg ] [ -xml ]
- No exemplo seguinte, pretendo obter informação sobre todas as tarefas submetidas ao sistema pelo utilizador goncalo. A resposta do sistema é que a tarefa se encontra em espera para ser executada (estado qw):
-bash-3.2$ qstat -u goncalo job-ID prior name user state submit/start at queue slots ja-task-ID ----------------------------------------------------------------------------------------------------------------- 5076311 0.00000 cpi_submit goncalo qw 11/26/2010 15:41:51 2
- Passados alguns segundos, a informação do mesmo comando mostra que a tarefa entrou em execução (estado r) na queue medusa, e na máquina gorgon101.ncg.ingrid.pt:
-bash-3.2$ qstat -u goncalo job-ID prior name user state submit/start at queue slots ja-task-ID ----------------------------------------------------------------------------------------------------------------- 5076311 0.31283 cpi_submit goncalo r 11/26/2010 15:41:58 medusa@gorgon101.ncg.ingrid.pt 2
Resultados (Standard Error / Standard Output)
Depois de finalizada a execução, são gerados 4 ficheiros. Os mais importantes a ter em conta são os ficheiros de Standard Error and Standard Output
-bash-3.2$ ll total 32 -rwxr-xr-x 1 goncalo hpc 10103 Nov 26 15:42 cpi -rw-r--r-- 1 goncalo csys 1513 Oct 1 16:02 cpi.c -rw-r--r-- 1 goncalo csys 352 Nov 26 15:35 cpi_submit.sh -rw-r--r-- 1 goncalo hpc 240 Nov 26 15:41 cpi_submit.sh.e5076311 -rw-r--r-- 1 goncalo hpc 287 Nov 26 15:42 cpi_submit.sh.o5076311 -rw-r--r-- 1 goncalo hpc 124 Nov 26 15:41 cpi_submit.sh.pe5076311 -rw-r--r-- 1 goncalo hpc 0 Nov 26 15:41 cpi_submit.sh.po5076311
- Standard Error (nota: considere as mensagens seguintes normais):
-bash-3.2$ cat cpi_submit.sh.e5076311 /bin/bash: module: line 1: syntax error: unexpected end of file /bin/bash: error importing function definition for `module' -bash: module: line 1: syntax error: unexpected end of file -bash: error importing function definition for `module'
- Standard Output:
-bash-3.2$ cat cpi_submit.sh.o5076311 === Compiling === === Running === Process 0 of 2 is on gorgon101.ncg.ingrid.pt Process 1 of 2 is on gorgon101.ncg.ingrid.pt pi is approximately 3.1416009869231241, Error is 0.0000083333333309 wall clock time = 0.002751
Opções Avançadas
- Nesta secção descrevem-se alguma opções avançadas para a gestão de tarefas.
Evitar fenómenos de job starvation
- A reserva de recursos para jobs paralelos grandes (acima de 24 slots) realiza-se com a inclusão da opção #$ -R y nas scripts usadas para submeter os jobs. Esta reserva evita o fenómeno denominado de job starvation, descrito nos parágrafos abaixo:
In this scenario there is one high priority pending job (possibly parallel) A that requires
a larger quota of a particular resource and a stream of smaller and lower priority jobs B(i)
requiring a smaller quota of the same resource. An assignment for A can not be guaranteed
assumed the stream of B(i) jobs does not stop - even if job A actually has higher priority
than the B(i) jobs:
A
|
+---+----+--------+--------+--------+--------+--------+ +----------+
| B(0) | B(2) | B(4) | B(6) | B(8) | B(10) | | |
+---+----+---+----+---+----+---+----+---+----+---+----+---+ A |
| B(1) | B(3) | B(5) | B(7) | B(9) | B(11) | |
+--------+--------+--------+--------+--------+--------+----------+-->
With resource reservation job A gets a reservation that blocks lower priority B(i) jobs and
thus guarantees resources will be available for A as soon as possible:
A
|
+---+----+----------+--------+
| B(0) | | B(2) | ...
+---+----+ A +--------+--------+
| | | B(1) | B(3) | ...
+----+----------+--------+--------+------------------------------->
Manipulação de dados
- Para optimizar a performance das execuções das corridas, os utilizadores devem proceder de acordo com as seguintes guidelines:
- Compilar e executar os seus programas nas suas HOMES em /home/lnec. As HOMES são disponibilizadas por NFS que é o melhor sistema para manipulação de ficheiros pequenos, logo, adequado a compilações e/ou execuções.
- Copiar os dados (principalmente ficheiros grandes) para /home/data. Este filesystem é disponibilizado por LUSTRE que é o melhor sistema para manipulação de ficheiros muito grandes.
- Adequar as tarefas de submissão e/ou programas para lerem e escreverem os dados para /home/data.
