HPC

De IngridPtWiki

(Redireccionado de HPC Ingrid)

Tabela de conteúdo


Introdução

  • Esta página tem como objectivo orientar os utilizadores HPC INCD a submeter tarefas paralelas (corridas) ao cluster, e a manipular os dados gerados durante as execuções.


Como utilizar os recursos HPC da INCD

Registo de Utilizadores e Recursos

  • A INCD oferece acesso aos recursos HPC segundo os seguintes contextos:
    • Acesso local a todos os utilizadores cujas instituições não possuam recursos HPC;
    • Acesso Grid a utilizadores que queiram partilhar os seus recursos HPC no contexto da INCD.
  • No sentido de ajudar a compreender as necessidades dos utilizadores, avaliar a adequação das aplicações à infraestrutura, e orientar os utilizadores, estes devem começar por preencher um pedido de adesão: Novos utilizadores: Formulário de contexto
  • De seguida, as equipas responsáveis pelo suporte entrarão em contacto com os utilizadores para um encontro de integração, e para o esclarecimento do contexto de utilização.


Acesso

Recursos de acesso

  • O acesso local é realizado por ssh para um conjunto de máquinas instaladas com SL6, e servidas pelo alias ui6-hpc.ncg.ingrid.pt.
  • Dependendo do "load", os utilizadores podem ser redirecionados para uma das diferentes máquinas físicas que operam sobre o alias ui6-hpc.ncg.ingrid.pt.
$ host ui6-hpc.ncg.ingrid.pt
ui6-hpc.ncg.ingrid.pt has address 193.136.75.231
ui6-hpc.ncg.ingrid.pt has address 193.136.75.225


Acesso do Exterior

  • O acesso a partir do exterior é restrito e filtrado de acordo com a fonte IP de contacto. Deve comunicar a rede IP a partir de onde pretende inicializar a conexão.


Autenticação: Como gerar chaves ssh

Linux

  • A autenticação ao cluster e feita via chave pública ssh.
  • Para gerar um conjunto de chaves ssh, o utilizador deve executar no seu desktop linux (ou da máquina a partir de onde pretende aceder às máquinas de login) o comando ssh-keygen. É muito importante que o utilizador introduza uma boa password durante o processo.
$ ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/home/username/.ssh/id_rsa): 
Created directory '/home/username/.ssh'.
Enter passphrase (empty for no passphrase):           ----> IMPORTANTE: Introduzir uma boa password
Enter same passphrase again:                          ----> IMPORTANTE: Introduzir uma boa password
Your identification has been saved in /home/username/.ssh/id_rsa.
Your public key has been saved in /home/username/.ssh/id_rsa.pub.
The key fingerprint is:
a8:60:b3:73:aa:ed:7f:bf:88:32:7a:fc:9d:00:1d:1d username@mydesktop
The key's randomart image is:
+--[ RSA 2048]----+
|      E          |
|     . .         |
|    . .          |
|   . . .         |
|  = . . S        |
| . = .           |
| .o +            |
| .=+ +.o         |
|o=+=+.+.o.       |
+-----------------+
  • O comando ssh-keygen gera um conjunto chave privada / chave pública em ~username/.ssh. NUNCA partilhe a sua chave privada (id_rsa) !!!
ls -l ~username/.ssh/
total 8
-rw------- 1 username group 1743 Feb 19 10:52 id_rsa
-rw-r--r-- 1 username group  404 Feb 19 10:52 id_rsa.pub
  • Envie o conteúdo da sua chave publica (~username/.ssh/id_rsa.pub) para helpdesk@incd.pt.

Windows

  • Para utilizadores windows a geração de chave pode ser feita usando o Putty
  • Descarregue e instale o Putty [1]
    • Gere a chave privada e publica seguindo estas intruções:
  • Envie o conteúdo da sua chave publica (id_rsa.pub) para helpdesk@incd.pt.
  • Espere pela confirmação dos administradores de que a sua chave foi inserida no sistema.


Login

  • Faça login nas máquinas interactivas.
  1. É importante usar a opção "-A" para o forward da chave
  2. Sempre que faz ssh pela primeira vez será solicitada a password que utilizou para proteger a sua chave privada de ssh. Esta operação é apenas realizada uma vez por cada sessão a partir do seu desktop
$ ssh -A -l username ui6-hpc.ncg.ingrid.pt
/usr/bin/xauth:  creating new authority file /home/hpc/username/.Xauthority
-bash-3.2$


Directorias e sistemas de ficheiros

  • As directorias $HOME dos utilizadores são partilhadas entre a máquina de submissão e as máquinas de execução pelo que os utilizadores não necessitam de ter a preocupação adicional de transferir ficheiros.


Módulos para 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:
  1. consultar software: module avail
  2. carregar software: module load
  3. listar software em uso: module list
  4. descarregar software: module unload
  5. Ajuda sobre comandos module: module help
# Listar modulos disponíveis
-bash-3.2$ module avail
------------------------------ /exper-sw/sw/Modules/sl6/software ------------------------------
bluefin            matlab-R2012a      matlab-R2012b      pp-1.6.4
cmake-2.8.12       matlab-R2012a.i686 matlab-R2013b      root-5.34.09

--------------------------- /exper-sw/sw/Modules/sl6/software.gcc44 ---------------------------
gcc44/MITSIMLab_sl5 gcc44/gcc-4.4       gcc44/mvapich2-1.8  gcc44/parmetis-3.1
gcc44/abyss-1.3.6   gcc44/gerris-121130 gcc44/netcdf-4.1.3  gcc44/pvm-3.4.6
gcc44/esys-2.2.2    gcc44/gerris-130802 gcc44/openmpi-1.6.3 gcc44/selfe-3.1dc
gcc44/fftw-3.3.2    gcc44/gromacs-4.5.5 gcc44/openmpi-1.6.5 gcc44/yade-1.5.0

--------------------------- /exper-sw/sw/Modules/sl6/software.gcc46 ---------------------------
gcc46/MITSIMLab_sl5 gcc46/gerris-121130 gcc46/openmpi-1.6.3 gcc46/teste
gcc46/abyss-1.3.6   gcc46/gerris-130802 gcc46/openmpi-1.6.5 gcc46/velvet-1.2.10
gcc46/esys-2.2.2    gcc46/gromacs-4.5.5 gcc46/parmetis-3.1  gcc46/yade-1.5.0
gcc46/fftw-3.3.2    gcc46/mvapich2-1.8  gcc46/pvm-3.4.6
gcc46/gcc-4.6.3     gcc46/netcdf-4.1.3  gcc46/selfe-3.1dc 
--------------------------- /exper-sw/sw/Modules/sl6/software.gcc47 ---------------------------
gcc47/abyss-1.3.6   gcc47/gerris-121130 gcc47/openmpi-1.6.3 gcc47/selfe-3.1dc
gcc47/esys-2.2.2    gcc47/gerris-130802 gcc47/openmpi-1.6.5
gcc47/fftw-3.3.2    gcc47/mvapich2-1.8  gcc47/parmetis-3.1
gcc47/gcc-4.7.1     gcc47/netcdf-4.1.3  gcc47/pvm-3.4.6

-------------------------- /exper-sw/sw/Modules/sl6/software.open64 ---------------------------
open64/MITSIMLab_sl5 open64/mvapich2-1.8  open64/openmpi-1.6.3 open64/pvm-3.4.6
open64/esys-2.2.2    open64/netcdf-4.1.3  open64/openmpi-1.6.5 open64/selfe-3.1dc
open64/fftw-3.3.2    open64/open64-5.0    open64/parmetis-3.1

# 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


Notas adicionais: MATLAB

  • Tendo em conta que o Matlab não se encontra disponível, em alternativa existe o Matlab compiler runtime.
  • Este software permite utilizar código do Matlab (previamente compilado) em máquinas que não tenham este software.
  • Os seguintes módulos encontram-se agora disponíveis, que podem ser carregados com o comando module load <name_of_the_module>
matlab/R2012a
matlab/R2012a.i686
matlab/R2012b
  • Referências
  1. http://www.mathworks.com/products/compiler/mcr/

Sistema de submissão de tarefas

Topologias e limites para as filas de execução

  • Os utilizadores de HPC têm ao seu dispor uma unica filas de execução denominada de hpcgrid
  • A fila de execução hpcgrid tem um limite máximo de 48h (por instância) de tempo de CPU, e de 72h de wallclock time.
  • O número máximo de instâncias paralelas permitidas por corrida é de 64.


Infiniband versus Gigabit Ethernet

  • A fila de execução hpcgrid contribui com recursos de 2 tipos:
  1. um conjunto interconnectado através de uma rede Gigabit Ethernet.
  2. um outro conjunto interconnectado através de infiniband.
  • 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 foram implementadas para submissões na fila de execução hpcgrid:
  1. Por pré-definição, todas as tarefas são redireccionadas para os recursos a Gigabit Ethernet;
  2. 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").
  • Os recursos de infiniband devem ser utilizados apenas por tarefas que necessitem de processamento paralelo.


Recursos disponíveis

A ocupação dos recursos na fila de execução pode ser consultada a cada instante através de:

$ qstat -g c -q hpcgrid
CLUSTER QUEUE                   CQLOAD   USED    RES  AVAIL  TOTAL aoACDS  cdsuE  
--------------------------------------------------------------------------------
hpcgrid                           0.08     24      0    289    321      0      8 


O comando qhost permite determinar se existem recursos com as características requeridas. Por exemplo, suponhamos que procuramos saber se existem servidores disponíveis com 8 slots livres e pelo menos 40GB de memória RAM livre:

$ qhost -l slots=8,mem_free=40g
HOSTNAME ARCH      NCPU NSOC NCOR NTHR  LOAD  MEMTOT  MEMUSE   SWAPTO  SWAPUS
-----------------------------------------------------------------------------
hpc045   lx-amd64    16    2    8   16  0.00   47.1G  690.5M   64.0G     0.0
hpc046   lx-amd64    16    2    8   16  0.00   39.2G  661.1M   64.0G     0.0
hpc048   lx-amd64    16    2    8   16  0.01   47.1G  733.0M   64.0G     0.0

Os valores dos parâmetros do tipo numérico correspondem sempre ao valor mínimo da condição, quer dizer que devemos olhar para a condição como um enequação. Por exemplo slots=8 tem o significado real slots>=8. A vírgula deve ser entendida como um E lógico.

Existem enumeros parâmetros definidos mas a maioria são prédefinidos pelo sistema de "batch", como se pode ver nas folhas de manual load_parameters e complex:

$ man load_parameters
$ man complex

A lista de parâmetros é extensa da qual destacamos os seguintes:

* mem_free
* mem_used
* mem_total
* virtual_total
* virtual_free
* qname
* slots
* s_vmem
* s_fsize
* bigmem, gpu, infiniband, exclusive (ver secção Requisição de Recursos)

Note-se que a obtenção da lista mastra apenas os recursos que cumprem as condições enunciadas, a autorização de execução nos servidores listados não é coberta pelo comando. E mesmo quando sabe-se à priori que o utilizador está autorizado a usar esses recursos, é sempre possível que entre o momento da obtenção da lista e a submissão das tarefas estes sejam ocupados por terceiros.

Interagir com o sistema de gestão de tarefas

Submissão de tarefas

  • Os serviços de login ui6-hpc.ncg.ingrid.pt (SL6) têm instalados os comandos cliente que permitem submeter e gerir as corridas / tarefas.
  • 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 do comando (caso este seja um script bash ou outro). Para mais informações sobre as opções, por favor consulte o manual (man qsub).
  • As submissoes paralelas e sequencias são executadas da mesma maneira. Elas são apenas diferenciadas pelas opções específicas que são passadas para o sistema de submissao.
  • No exemplo seguinte mostramos um script que compila e executa uma aplicação paralela. As opções ao comando qsub são incluídas através de directivas #$. De notar que o utilizador explicitamente pretende:
  1. submeter à fila de execução hpcgrid.
  2. compilar a sua aplicação com gcc44, e utilar a versão de MPI openmpi-1.4.1
  3. 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
# (Remover se a tarefa não for paralela)
#$ -pe mpi 2

# Escolher explicitamente a queue hpcgrid para a execução da tarefa
#$ -q hpcgrid

# Carregar os modules de interesse
source /etc/profile.d/modules.sh
module load gcc44/openmpi-1.4.1

# Compilar a aplicação (adequar para cada tipo de submissao)
echo "=== Compiling ===" 
mpicc -o cpi cpi.c

# Executar a aplicação (adequar para cada tipo de submissao)
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 recursos infiniband para a sua aplicação paralela, basta introduzir na script de submissão a seguinte opção:
# Requerer acesso a recursos Infiniband
#$ -l ib=y
  • Obviamente, será necessário aplicar o exemplo anterior à especificidade de cada aplicação e de cada caso.


Estado das tarefas

  • 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        
  • Se existirem recursos livres para execução, a informação devolvida pelo comando anterior mostra que a tarefa entrou em execução (estado r) na queue hpcgrid, e na máquina hpc001.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 hpcgrid@hpc001.ncg.ingrid.pt     2


  • A ocupação dos recursos ocupados numa fila de execução específica pode ser consultada a cada instante através de:
# qstat -q hpcgrid
job-ID  prior   name       user         state submit/start at     queue                          slots ja-task-ID 
-----------------------------------------------------------------------------------------------------------------
5490784 0.94686 cyl3D2_1_6 ssamp        r     12/04/2012 10:36:34 hpcgrid@hpc001.ncg.ingrid.pt      64        
5463342 1.07468 qap-esc32a vp           r     12/03/2012 13:59:16 hpcgrid@wn005.ncg.ingrid.pt        8


Resultados (Standard Error / Standard Output)

  • Depois de finalizada a execução, são gerados 4 ficheiros (no caso de aplicações paralelas) ou 2 ficheiros (no caso de aplicações sequencias). Os mais importantes a ter em conta em ambos os casos 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 hpc001.ncg.ingrid.pt
Process 1 of 2 is on hpc001.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.


Todas as aplicações

Acesso Interactivo

  • O acesso interactivo funciona apenas com autenticação via chave pública ssh. Utilizadores que continuem a aceder ao cluster via password, não conseguem utilizar esta funcionalidade. Para gerar conjuntos de chave pública / privada ssh, por favor consulte a secção Autenticação: Como gerar chaves ssh
  • O acesso interactivo apenas funciona se o forward das chaves ssh estiver activo. Por isso é importante conectar às máquinas de login usando a opção "-A" para o ssh.
  • Jobs interactivos são invocados com o comando qlogin. Automáticamente ganha-se acesso a um terminal numa máquina de execução.
$ ssh -A -l username ui6-hpc.ncg.ingrid.pt
$ qlogin
JSV "/opt/ge-tools/submit/jsv.sh" has been started
JSV "/opt/ge-tools/submit/jsv.sh" has been stopped
Your job 977402 ("QLOGIN") has been submitted
waiting for interactive job to be scheduled ...
Your interactive job 977402 has been successfully scheduled.
Establishing /opt/sge/util/resources/wrappers/qlogin_wrapper session to host hpc017.ncg.ingrid.pt ...
Warning: Permanently added '[hpc017.ncg.ingrid.pt]:58283,[10.193.5.17]:58283' (RSA) to the list of known hosts.
[username@hpc017 ~]$ 
[username@hpc017 ~]$ hostname
hpc017.ncg.ingrid.pt


Dependencias entre tarefas

  • Alguns utilizadores necessitam de submeter tarefas que devem executar durante muito tempo, para além dos limites / politicas permitidas. Neste caso, a estratégia a adoptar será a de segmentar uma tarefa muito grande em multiplas tarefas que dependem umas das outras. Isso é conseguido através da directiva qsub -hold_jid JOBID1
  • O exemplo seguinte demonstra como se pode contruir uma script para a submissão de várias tarefas que dependem sempre da anterior.
$ cat dependencies.sh

#!/bin/sh

j=$1
NJOBS=$2
NPROC=$3

jfinal=`expr $j + $NJOBS`
first="true"

while [ $j -lt $jfinal ]; do
   j=`expr $j + 1`
   j1=`expr $j + 1`

cat - > $0.$j << EOF;
#!/bin/bash
#!/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 mp, e executar a tarefa com 2 instâncias
#$ -pe mpi $NPROC

# Escolher explicitamente a queue hpcgrid para a execução da tarefa
#$ -q hpcgrid

# 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
EOF

if [ "X$first" == "Xtrue" ]; then
   JID=`qsub $0.$j | awk '{print $3}'`
   if [ $? == 0 ]; then
            first="false"
               echo "Submitting job for $j (JID=$JID)"
       else
          echo "Problem submitting job for $j"
          exit 1
   fi
else
   OLDJID=$JID
   JID=`qsub -hold_jid $JID $0.$j | awk '{print $3}'`
       if [ $? != 0 ]; then
              echo "Problem submitting job $j"
              exit 1
       else
       echo "Submitting job for j=$j (JID=$JID). Depends on $OLDJID"
       fi
fi

rm -f $0.$j
done
  • Para a submissão de 100 tarefas, utilizado 8 cores cada uma, em que a tarefa n+1 apenas começa depois da tarefa n ter acabado, seria:
./dependencies.sh 1 100 8
  • Obviamente, será necessário aplicar o exemplo anterior à especificidade de cada aplicação e de cada caso.


Aplicações paralelas

Reserva de nós dedicados

  • Alguns utilizadores têm a necessidade de executar tarefas paralelas híbridas (threads/MPI), ou seja:
  1. várias threads em execução no mesmo nó;
  2. gerir a comunicação entre nós independentes por processos MPI.
  • Neste tipo de contexto, é habitual o utilizador solicitar a reserva de nós dedicados. No sistema de gestão de tarefas em uso na infra-estrutura da INCD, esse cenário é possível com a invocação de um novo ambiente paralelo (-pe mp "N") e da propriedade exclusive=true que garante a exclusividade dos nós
  • O exemplo seguinte (adaptado dos exemplos anteriores) resulta na atribuição de 4 máquinas dedicadas (uma por cada processo MPI). A gestão das threads a executar em cada nó dedicado é da exclusiva responsabilidade do utilizador.. De notar que cada máquina possui 8 cores, que deve ser o limite maximo do número de threads a utilizar. Entre threads e processos MPI, o exemplo anterior resulta em (4 processos MPI x 8 Threads) = 32 instâncias em execução.
-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 utilizador submete.
#$ -cwd  

# Invocar o ambiente paralelo denominado mp, e executar a tarefa com 4 instâncias
#$ -pe mp 4

# Invocar exclusividade em cada máquina
#$ -l exclusive=true

# Escolher explicitamente a queue hpcgrid para a execução da tarefa
#$ -q hpcgrid

# 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


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)  |  ...
       +----+----------+--------+--------+------------------------------->

Ambientes Paralelos Disponíveis

Os ambientes paralelos são requeridos com a opção "-pe <nome> <nslots>" que pode ser incluída no ficheiro de submissão como directiva do SGE #$ -pe <nome> <nslots>. Existem várias opções de paralelização, resumidas na tabela seguinte, integradas com o GridEngine que monta automaticamente a infrastrutura de paralelização. Em qualquer uma das solução de paralelização as tarefas podem usar a totalidade do espaço de endereçamento de memória.

Nome Tipo nslots
mpi OpenMPI Número de slots ou threads, corresponde ao número de processadores agregado
pvm MPICH2 Número de slots ou theads, corresponde ao número de processadores agregado
mp OpenMP Número de servidores disponibilizados em modo exclusivo
h2o H2O Número de slots ou threads, corresponde ao número de processadores agregado, ver exemplo mais abaixo

Requisição de Recursos

Com o passar do tempo a tipologia dos recursos oferecidos diversificou-se por forma a satisfazer os requisitos dos utilizadores de outras áreas do conhecimento. Em alguns casos os utilzador tem de pedir explicitamente que tipo de recursos pretende obter através da opção -l resourcename=value,... do comando qsub, a tabela seguinte resume o tipo de recursos presentemente disponibilizados.

Nome Descrição
infiniband Requer que a interconexão entre os servidores suporte a tecnologia infiniband caracterizado por baixas latências
exclusive requer o uso exclusivo dos servidores destacados
bigmem Requer servidores com oferta de memória RAM elevada, este serviço está em testes, temos uma máquina com 40GB de RAM e duas com 48GB de RAM, o processo de aquisição de recursos mais generosos está em cursos. Os servidores destacados ficam reservados em modo exclusivo.
gpu Requer um servidor com um controlador GPU do fabricante NVIDIA, o sistema permite apenas a utilização de uma única máquina por tarefa. O servidor destacado fica reservado em modo exclusivo.

O recurso exclusive podem ser usado isoladamente ou combinado com o recurso infiniband, não faz sentido juntá-lo aos outros recursos, bigmem e gpu, porque estes implementam a mesma funcionalidade. Esta é a única referência multipla de recursos autorizada, os recursos infiniband, bigmem e gpu representam servidores diferentes e como tal não faz sentido requerer mais do que uma característica.

O recurso bigmem é disponibilizado apenas em 3 servidores e por isso o máximo de slots utilizável é 24 nos ambientes paralelos mpi, pvm e h2o, ou 3 no caso do ambiente paralelo mp; o recurso gpu tem obviamente o mesmo tipo de restricções mas neste caso esses limites são 8 e 1, respectivamente. Os valores são verificados no momento da submissão.

Existem muito mais recursos que podem ser requeridos na submissão e que são disponibilizados automaticamente pelo systema de tarefas GridEngine, a folha de manual load_parameters lista e explica cada um deles:

$ man load_parameters
LOAD_PARAMETERS(5)         Grid Engine File Formats         LOAD_PARAMETERS(5)

NAME
       load_parameters - Grid Engine default load parameters

DESCRIPTION
       The  load  parameters  reported by the execution daemon sge_execd(8) by
       default currently are:

arch   An architecture string compiled into  the  sge_execd  describing
       the  operating  system  architecture for which the execd is tar-
...

Exemplos com o Ambiente Paralelo MPI

Requesição de Servidores com GPU

Exemplo simples que obtem as características do GPU. Construímos primeiro o script de submissão

$ cat gpu.sh
#!/bin/bash

#$ -q hpcgrid
#$ -pe mpi 4
#$ -l gpu

module load cuda-7.0.28
cp -r $CUDA_SAMPLES_DIR .
cd NVIDIA_CUDA-7.0_Samples/1_Utilities/deviceQuery
make
[ -e deviceQuery ] || chmod u+x deviceQuery
[ -x deviceQuery ] && ./deviceQuery

submetemos o script

$ qsub gpu.sh
Your job 4274053 ("gpu.sh") has been submitted

e esperamos pelo resultado

$ qstat
$ ls -l
-rw-------  1 martinsj hpc  238 Apr  2 12:17 gpu.sh
-rw-r--r--  1 martinsj hpc    0 Apr  2 12:36 gpu.sh.e4274053
-rw-r--r--  1 martinsj hpc 2256 Apr  2 12:36 gpu.sh.o4274053
-rw-r--r--  1 martinsj hpc    0 Apr  2 12:36 gpu.sh.pe4274053
-rw-r--r--  1 martinsj hpc    0 Apr  2 12:36 gpu.sh.po4274053
drwxr-xr-x 12 martinsj hpc 4096 Apr  2 12:15 NVIDIA_CUDA-7.0_Samples
$ cat gpu.sh.o4274053
./deviceQuery Starting...

CUDA Device Query (Runtime API) version (CUDART static linking)

Detected 1 CUDA Capable device(s)

Device 0: "Quadro K2200"
 CUDA Driver Version / Runtime Version          7.0 / 7.0
 CUDA Capability Major/Minor version number:    5.0
 Total amount of global memory:                 4096 MBytes (4294770688 bytes)
 ( 5) Multiprocessors, (128) CUDA Cores/MP:     640 CUDA Cores
 GPU Max Clock rate:                            1124 MHz (1.12 GHz)
 Memory Clock rate:                             2505 Mhz
 Memory Bus Width:                              128-bit

Exemplos com o Ambiente Paralelo H2O

Integração com o Sistema de Batch

O sistema de batch constroi automaticamente o cluster H2O, os scripts R do utilizador devem usar a variável de ambiente H2O_PORT para obter o porto em que o "cluster" está disponível. A chamada da função h2o.init() deverá ser alterado para algo como o exemplo seguinte, considerando que o nosso ficheiro R tem o nome LIP.R:

$ cat LIP.R
...
h2o_port=Sys.getenv(c("H2O_PORT"))
localH2O = h2o.init(port=as.integer(h2o_port))
...

A chamada da função h2o.init() não requer mais nenhum opção, como por exemplo o número de threads ou a memória máxima utilizável, porque a infrastrutura H2O é criada automaticamente com os valores apropriados.

Satisfeito o requesito anterior, a submissão de uma tarefa H2O pode ser efectuada do seguinte modo:

$ cat h2o.sh
#!/bin/bash
#$ -pe h2o 32
module load r-3.1.3
R CMD BATCH LIP.R

$ qsub h2o.sh
Your job 4265607 ("h2o.sh") has been submitted

$ qstat
job-ID  prior   name   user     state submit/start at     queue                        slots ja-task-ID 
-------------------------------------------------------------------------------------------------------
4265607 0.43292 h2o.sh martinsj r     04/01/2015 11:23:36 hpcgrid@hpc046.ncg.ingrid.pt 16 
Requesição de Servidores com Memória Estendida
$ cat h2o.sh
#!/bin/bash
#$ -pe h2o 16
#$ -l bigmem
module load r-3.1.3
R CMD BATCH LIP.R

$ qsub h2o.sh

Casos de uso (informação específica)

Gromacs

RStudio Server

VASP

Dados Técnicos

Servidores de Entrada INCD

Servidor Utilizadores
gridc.ncg.ingrid.pt LIP Coimbra
imm.ncg.ingrid.pt Instituto de Medicina Molecular
neuro.ncg.ingrid.pt Fundação Champalimaud (Neurociência)
ui6.ncg.ingrid.pt GRID
ui-atlas.ncg.ingrid.pt LIP Lisboa Atlas
ui-cms.ncg.ingrid.pt LIP Lisboa CMS (CentOS5)
ui6-cms.ncg.ingrid.pt LIP Lisboa CMS
ui-hpc.ncg.ingrid.pt Computação de Alto Desempenho
ui-lnec.ncg.ingrid.pt Laboratório Nacional de Engenharia Civil


Recursos INCD

Modelo MemTot CPU #serv. #cores

/serv.

#cores

Total

Disco Local Outros Dispositivos Sistema Operativo
IBM LS22 32GB Quad-Core AMD Opteron 2356 14 8 112 260GB infiniband 10Gbps CentOS 6
IBM LS22 24GB Quad-Core AMD Opteron 2356 26 8 208 260GB CentOS 6
HP BL460c G6 40GB Intel Xeon X5550 1 8 8 80GB CentOS 6
HP BL460c G6 48GB Intel Xeon X5550 2 8 16 80GB CentOS 6
HP DL160 G5 24GB Intel Xeon E5472 1 8 8 750GB GPU NVIDIA Quadro K2200 CentOS 6
HP DL160 G5 24GB Intel Xeon E5472 1 8 8 750GB GPU NVIDIA FX 3700 CentOS 7


Configurações gerais

Armazenamento

    • Lustre como shared file system para as directorias de HOME dos utilizadores
    • 12 OSTs com 1 TB cada configurados em regime de stripe all
    • 10 Gigabit Ethernet

Gestor de tarefas


Suporte e Contactos

Ferramentas pessoais
Suporte