Laboratorio Nacional de Computacao Cientifica

Cluster Altix-XE

1. Características do cluster

O Cluster é formado por 30 máquinas (nós de execução), cada uma com a seguinte especificação:

Altix-XE 340

voltar

2. Informações sobre acesso e submissão

  1. A submissão dos jobs deve ser feita através do gerenciador de filas Sun Grid Engine (SGE)
  2. O número máximo de processadores por usuário é 96
  3. O filesystem dos usuários não tem backup

voltar

3. Módulos de Ambiente

O objetivo dos módulos é carregar as variáveis de ambiente e a inclusão no path dos programas de forma modular. Para uma lista completa dos módulos disponíveis execute:

ls /hpc/modulos/bash
ls /hpc/modulos/csh

Comandos

Para carregar um módulo automaticamente ao se logar inclua no arquivo de inicialização do shell:

o comando:

source /hpc/modulos/bash/modulo_desejado
ou 
. /hpc/modulos/bash/modulo_desejado

Exemplo

source /hpc/modulos/bash/mvapich1-gcc.sh

OBS.: Caso o modulo não seja executado através do arquivo de inicialização do shell, este deve ser executado antes da submissão de jobs para o SGE.

voltar

4. Selecionar o MPI

As opções de mpi são mvapich1, mvapich2 e openmpi. Para colocar os executávies (mpicc, mpif77, etc) no path execute um dos comandos abaixo.

MPI utilizando compiladores gnu

MPI utilizando compiladores intel

voltar

5. Gerenciador de filas

O gerenciador de filas utilizado é o Sun Grid Engine (SGE). Todos os jobs devem ser submetidos através do SGE.

As filas de execução do SGE são:

1 slot = 1 core

voltar

6. Ambientes paralelos MPI/OpenMP/Threads

O ambiente paralelo deverá ser especificado em toda submissão de job paralelo, seja ele MPI, OpenMP ou thread. A tabela a seguir descreve a forma de distribuição dos processos nos nós do cluster.

Parallel Environment (PE)Processos por máquinaMétodo de Paralelismo
mpiDinâmicoMPI
mpi11MPI
mpi22MPI
mpi33MPI
mpi44MPI
mpi55MPI
mpi66MPI
mpi77MPI
mpi88MPI
mpit22MPI-multithreaded
mpit33MPI-multithreaded
mpit44MPI-multithreaded
mpit55MPI-multithreaded
mpit66MPI-multithreaded
mpit77MPI-multithreaded
mpit88MPI-multithreaded
threadsaté 8 em 1 máquinaOpenMP e Thread

No parallel environment mpi, começando pelo nó mais adequado (escolhido pelo SGE), todos slots disponíveis serão alocados. Os slots dos nós subsequentes serão alocados, da mesma forma, até se completar a requisição de slots do job.

Este é o parallel environment mais flexível pois independe do número de slots livres nos nós individualmente, contanto que o somatório de slots livres da fila satisfaça o job.

No script de submissão o PE é escolhido através do parâmetro:

#$ -pe nome_do_pe NP

Exemplo:

#$ -pe mpi2 8

Os 8 processos MPI serão distribuídos de forma que cada nó execute 2 processos. Nesse caso serão utilizados 4 nós.

ATENÇÃO: Não é possível dividir o job paralelo em partes desiguais (exceto com o PE mpi).

Exemplo:

#$ -pe mpi2 9

voltar

7. Submeter Jobs

  1. Criar um script de submissão
  2. Submeter o script com o comando qsub
  3. Verificar os arquivos de saída

voltar

7.1. Jobs seriais

Script Geral

#$ -S  /bin/bash
#$ -q  nome_da_fila

./programa  parametros_do_programa
Exemplo:

Script rodar.sh
#$ -S  /bin/bash
#$ -q  fila

./flops
qsub rodar.sh

voltar

7.2. Jobs paralelos (MPI)

Consulte a tabela de pe's no ítem 6

Script Geral

#$ -S  /bin/bash
#$ -pe  nome_do_pe  numero_de_processadores

# MVAPICH1 e MVAPICH2
mpirun_rsh  -rsh  -np  numero_de_processadores  -hostfile  $TMPDIR/hostfile  programa \
parametros_do_programa

# OPENMPI
mpirun  -np  numero_de_processadores  -hostfile  $TMPDIR/hostfile  programa \
parametros_do_programa

# Intel MPI
source /hpc/modulos/bash/intel-cluster_studio_xe_2013.sh
mpiexec.hydra -bootstrap sge -n numero_de_processadores -env I_MPI_FABRICS shm:ofa -machine $TMPDIR/hostfile programa \
parametros_do_programa

Exemplo 1:

Script rodarmpi.sh
#$ -S  /bin/bash
#$ -pe  mpi  8

# MVAPICH1 e MVAPICH2
mpirun_rsh  -rsh  -np  8  -hostfile  $TMPDIR/hostfile  programa
qsub rodarmpi.sh

Exemplo 2: Requisitando uma quantidade maior de memória por processo

#$ -S  /bin/bash
#$ -pe  mpi8  8
#$ -l h_vmem=2.5G

# OPENMPI
mpirun  -np  8  -hostfile  $TMPDIR/hostfile  programa 
qsub rodarmpi.sh

Exemplo 3: Utilizando o MPI da Intel

#$ -S  /bin/bash
#$ -pe  mpi4  8
#$ -l h_vmem=1.0G

# Intel MPI
source /hpc/modulos/bash/intel-cluster_studio_xe_2013.sh
mpiexec.hydra -bootstrap sge -n 8 -env I_MPI_FABRICS shm:ofa -machine $TMPDIR/hostfile programa 
qsub rodarmpi.sh

voltar

7.3. Jobs paralelos (MPI-multithreaded)

Consulte a tabela de pe's no ítem 6

Script Geral

#$ -S  /bin/bash
#$ -pe  nome_do_pe  numero_de_processadores

export  OMP_NUM_THREADS=numero_de_threads

# MVAPICH1
export  VIADEV_USE_AFFINITY=0

# MVAPICH2
export  MV2_ENABLE_AFFINITY=0

# MVAPICH1 e  MVAPICH2
mpirun_rsh  -rsh  -np  numero_de_maquinas  -hostfile  $TMPDIR/hostfile  programa \
parametros_do_programa

# OPENMPI
mpirun  -np  numero_de_maquinas  -hostfile  $TMPDIR/hostfile  programa \
parametros_do_programa

Exemplo 1:

Número de threads que cada mpi abrirá = 4

Número de máquinas = 8

Número total de processadores = 4 * 8 = 32

Script rodarmpi.sh

#$ -S  /bin/bash
#$ -pe  mpit4  32

export  OMP_NUM_THREADS=4

# MVAPICH1
export  VIADEV_USE_AFFINITY=0

# MVAPICH2
export  MV2_ENABLE_AFFINITY=0

# MVAPICH1 e MVAPICH2
mpirun_rsh  -rsh  -np  8  -hostfile  $TMPDIR/hostfile  programa
qsub rodarmpi.sh

Exemplo 2:

Número de threads que cada mpi abrirá = 2

Número de máquinas = 32

Número total de processadores = 2 * 32 = 64

#$ -S  /bin/bash
#$ -pe  mpit2  64

export  OMP_NUM_THREADS=2

# OPENMPI
mpirun  -np  32  -hostfile $TMPDIR/hostfile  programa 
qsub rodarmpi.sh

voltar

7.4. Jobs paralelos (threads)

O número máximo de threads deve ser 8

Script Geral

#$ -S  /bin/bash
#$ -q  nome_da_fila
#$ -pe  threads  numero_de_processadores

./programa.exe  parametros_do_programa

Exemplo

Script rodarthread.sh
#$ -S  /bin/bash
#$ -q  fila
#$ -pe  threads  4

./programa.exe 
qsub rodarthread.sh

voltar

7.5. Jobs paralelos (openmp)

O número máximo de threads deve ser 8

Script Geral

#$ -S  /bin/bash
#$ -q  nome_da_fila
#$ -pe  threads  numero_de_processadores

export  OMP_NUM_THREADS=numero_de_processadores

./programa.exe  parametros_do_programa

Exemplo:

Script openmp.sh
#$ -S  /bin/bash
#$ -q  fila
#$ -pe  threads  8

export  OMP_NUM_THREADS=8

./programa.exe
qsub openmp.sh

voltar

7.6. Jobs paralelos com perl

É possível submeter jobs utilizando MPI com perl, utilizando o módulo Parallel::MPI::Simple

Script Geral

#$ -S  /bin/bash
#$ -q  nome_da_fila
#$ -pe mpi  numero_de_processadores

# OPENMPI

source /hpc/modulos/bash/openmpi-gcc44-1.4.1.sh

mpirun -np 8 -hostfile $TMPDIR/hostfile  perl /caminho/script/perl.pl

Exemplo:

Script submit_perl.sh
#$ -S  /bin/bash
#$ -q  fila
#$ -pe mpi 8

# OPENMPI

source /hpc/modulos/bash/openmpi-gcc44-1.4.1.sh

mpirun -np numero_de_processadores -hostfile $TMPDIR/hostfile  perl ./teste.pl

qsub submit_perl.sh
* - É obrigatório a utilização do módulo openmpi-gcc44-1.4.1 pois o Parallel::MPI::Simple foi compilado utilizando essa versão do OpenMPI com o Compilado GCC v4.4

** - Dentro do script teste.pl deve conter a linha use Parallel::MPI::Simple;

*** - Maiores informações sobre o Parallel::MPI::Simple

voltar

7.7. Jobs para a fila gpu

Exemplo:

Script submit.sh
#$ -S  /bin/bash
#$ -q  gpu
#$ -l gpuonly
#$ -l gpu=0
#$ -pe mpi 8

# OPENMPI

source /hpc/modulos/bash/openmpi-gcc44-1.4.1.sh

mpirun -np 8 -hostfile $TMPDIR/hostfile ~/NPB3.2/bin/cg.C.8

qsub submit.sh

voltar

7.8. Jobs para a fila k20

Informações sobre a fila:

Os compiladores/bibliotecas que estão disponívies para esses nós são (devem ser utilizados dentro do nó 41 para compilar):

Exemplo:

Script submit.sh
#$ -S /bin/bash
#$ -q  k20
#$ -pe mpi 8

# PGI+OPENMPI

source /hpc/modulos/bash/openmpi-1.6.5-pgi-14.sh

mpirun -np 8 -hostfile $TMPDIR/hostfile ~/NPB3.2/bin/cg.C.8

qsub submit.sh

Exemplo 2 : - Utilizando MPI da Intel

Script submit.sh
#$ -S /bin/bash
#$ -q  k20
#$ -pe mpi 8

# MPI da Intel
source /hpc/modulos/bash/intel-cluster_studio_xe_2013.sh
mpiexec.hydra -bootstrap sge -n 8 -env I_MPI_FABRICS shm:ofa -machine $TMPDIR/hostfile ~/NPB3.2/bin/cg.C.8

qsub submit.sh

voltar

7.9. Jobs para a fila xeonphi

Informações sobre a fila:

Os compiladores/bibliotecas que estão disponívies para essa fila são (devem ser utilizados dentro do nó 45 para compilar):

Exemplo:

Script submit.sh
#$ -S /bin/bash
#$ -q xeonphi
#$ -pe mpi 8

# PGI+OPENMPI

source /hpc/modulos/bash/openmpi-1.6.5-pgi-14.sh

mpirun -np 8 -hostfile $TMPDIR/hostfile ~/NPB3.2/bin/cg.C.8

qsub submit.sh

Exemplo 2 : - Utilizando MPI da Intel

Script submit.sh
#$ -S /bin/bash
#$ -q xeonphi
#$ -pe mpi 8

# MPI da Intel
source /hpc/modulos/bash/intel-cluster_studio_xe_2013.sh
mpiexec.hydra -bootstrap sge -n 8 -env I_MPI_FABRICS shm:ofa -machine $TMPDIR/hostfile ~/NPB3.2/bin/cg.C.8

qsub submit.sh

Exemplo 3 : - Requisitando a utilização da GPU

Script submit.sh
#$ -S /bin/bash
#$ -q xeonphi
#$ -l gpu=1

source /hpc/modulos/bash/cuda_toolkit_6.5.sh
~/NVIDIA_CUDA-6.5_Samples/bin/x86_64/linux/release/simpleCUFFT

qsub submit.sh

Exemplo 4 : - Requisitando a utilização da XeonPHI

Script submit.sh
#$ -S /bin/bash
#$ -q xeonphi
#$ -l phi=1

source  /hpc/modulos/bash/intel-cluster_studio_xe_2013.sh
/caminho/programa

qsub submit.sh
* - Para utilizar a GPU e o XeonPHI, basta utilizar o parâmetro #$ -l gpu=1,phi=1

Exemplo 5 : - Iniciando uma sessão interativa através do SGE

Para poder compilar, ou testar diretamente a execução na placa XeonPHI, é necessário se logar no nó 45. Para isso, basta iniciar uma sessão interativa, utilizando o qrsh. Isso irá abrir uma sessão como se estivesse logado via ssh no nó. Dentro dessa sessão é possível compilar e executar um programa:

usuario@altix-xe:~$ qrsh -q xeonphi
	
	usuario@no45:~$ source /hpc/modulos/bash/intel-cluster_studio_xe_2013.sh
	usuario@no45:~$ make ...
	usuario@no45:~$ /caminho/programa
	

É possível também executar programas paralelos. Basta configurar o ambiente paralelo (PE):

usuario@altix-xe:~$ qrsh -q xeonphi -pe mpi 16 -l phi=1,gpu=1
	
	usuario@no45:~$ source /hpc/modulos/bash/intel-cluster_studio_xe_2013.sh
	usuario@no45:~$ make ...
	usuario@no45:~$ mpiexec.hydra -bootstrap sge -n 16 -env I_MPI_FABRICS shm:ofa /caminho/programa-mpi
	

* - Ao tentar iniciar uma sessão interativa através do SGE, é possível que o seguinte erro ocorra:

Your "qrsh" request could not be scheduled, try again later.

Isso ocorre quando solicita um recurso que já está em uso por algum outro job. Como a sessão interativa não fica em espera na fila, aguardando o recurso ser liberado, esse erro é retornado. Para verificar quais recursos estão disponíveis na fila xeonphi:

usuario@altix-xe:~$ qstat -F -q xeonphi (exibe todos os recursos disponíveis)

ou

usuario@altix-xe:~$ qstat -F phi,gpu,h_vmem -q xeonphi (exibe somente os recursos especificados)

voltar

7.10. Jobs para a fila qrandom

Exemplo:

Script sub_qrand.sh
#$ -S  /bin/bash
#$ -q  qrandom


/hpc/QuantisRNG-2.7/bin/EasyQuantis -p 0 -i ~/arquivo_saida.txt -n 1000 --min 0 --max 7

qsub sub_qrand.sh

Opções do programa EasyQuantis:

EasyQuantis 1.4

Usage:
  EasyQuantis [options]

Generic options:
  -h [ --help ]         Display this help message

Quantis options:
  -l [ --list ]         List all Quantis devices
  -p [ --pci ] arg      Set Quantis PCI device number
  -u [ --usb ] arg      Set Quantis USB device number

Acquisition options:
  -n [ --size ] arg (=1024)   Number of bytes/numbers to read
  -b [ --binary ] arg         Create a binary file
  -i [ --integers ] arg       Create a file with integers numbers
  -f [ --floats ] arg         Create a file with floats numbers
  -s [ --separator ] arg (=
) Defines the separator for non-binary files
  --min arg                   Specify the minimal value of the number
  --max arg                   Specify the maximal value of the number

Examples:
  The following generates a binary file of 1Gbyte named random.dat using
  first Quantis PCI device:
    EasyQuantis -p 0 -b random.dat -n 1073741824

  The following generates the file integers.dat with 10 numbers (one number 
  per line) whose values are between 1 and 6 with first Quantis USB device:
    EasyQuantis -u 0 -i integers.dat -n 10 --min 1 --max 6

voltar

8. Verificar status dos jobs

Comando: qstat [parametros]

Comando: qhost [parametros]

  1. qstat
  2. qstat -f (exibe sumário de informações de todas as filas)
  3. qstat -j (exibe informações de erro para job com problema)
  4. qstat -j jobid (exibe informções detalhadas de um determinado job)
  5. qstat -F [resource_attributes] (exibe informações sobre os recursos disponíveis na fila/nó. Ex: -F phi ou -F h_vmem)
  6. qhost -j ( exibe os nós que estão executando os jobs)

voltar

9. Remover jobs da fila ou em execução

Comando: qdel [parametros]

  1. qdel 145 (remove o jobid 145 da fila ou em execução)
  2. qdel 178 179 180 (remove os jobid 178 179 180 da fila ou em execução)
  3. qdel -u joao (remove todos os jobs do usuário joao da fila ou em execução)

voltar

10.1 Utilizando bibliotecas MPI (sem utilizar os scripts mpicc e mpif90)

Para compilar programas que irão chamar diretamente as bibliotecas do MPI é preciso incluir algumas bibliotecas Infiniband que se encontram no diretório /usr/lib64:

voltar

10.2 Problema com inicialização demorada do mpirun_rsh

Ocorre quando o mpirun demora a ser inicializado devido a carga de utilização das máquinas.

Exemplo do Erro:

command: no15 kill 10280 >&/dev/null
command: no6 kill 4616 >&/dev/null
command: no29 kill 10279 >&/dev/null
command: no3 kill 28532 >&/dev/null
cmd: kill 10280 >&/dev/null
cmd: kill 4616 >&/dev/null
cmd: kill 10279 >&/dev/null
cmd: kill 28532 >&/dev/null
/hpc/sungrid/bin/lx24-amd64/qrsh -V -inherit no15 kill 10280 >&/dev/null
/hpc/sungrid/bin/lx24-amd64/qrsh -V -inherit no6 kill 4616 >&/dev/null
/hpc/sungrid/bin/lx24-amd64/qrsh -V -inherit no29 kill 10279 >&/dev/null
/hpc/sungrid/bin/lx24-amd64/qrsh -V -inherit no3 kill 28532 >&/dev/null

Solução: setar no script de submissão, ou no shell a variável de ambiente:

Caso o erro persista aumente o valor.

voltar

11. Comentários Finais

Para maiores detalhes consulte os manuais dos comandos:

voltar

LNCC © Equipe de Suporte Técnico