O Cluster é formado por 30 máquinas (nós de execução), cada uma com a seguinte especificação:
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
source /hpc/modulos/bash/modulo_desejado ou . /hpc/modulos/bash/modulo_desejado
Indiponível no momento
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.
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
mpiicc = Compilador C
mpiicpc = Compilador C++
mpiifort = Compilador FORTRAN
mpiexec.hydra = Comando para executar jobs compilados utilizando o MPI da Intel
Mais informações sobre como submeter jobs utilizando o MPI da Intel em 7. Submeter Jobs
Mais informações sobre o MPI da Intel em /hpc/intel/cluster_studio_xe/impi/4.1.3.048/doc/Getting_Started.pdf
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 |
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áquina | Método de Paralelismo |
mpi | Dinâmico | MPI |
mpi1 | 1 | MPI |
mpi2 | 2 | MPI |
mpi3 | 3 | MPI |
mpi4 | 4 | MPI |
mpi5 | 5 | MPI |
mpi6 | 6 | MPI |
mpi7 | 7 | MPI |
mpi8 | 8 | MPI |
mpit2 | 2 | MPI-multithreaded |
mpit3 | 3 | MPI-multithreaded |
mpit4 | 4 | MPI-multithreaded |
mpit5 | 5 | MPI-multithreaded |
mpit6 | 6 | MPI-multithreaded |
mpit7 | 7 | MPI-multithreaded |
mpit8 | 8 | MPI-multithreaded |
threads | até 8 em 1 máquina | OpenMP 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 |
Nos scripts (jobs em batch) os parâmetros do sge devem ser precedidos por #$ como será visto mais adiante.
Os scripts não precisam ser executáveis.
Por padrão o SGE aloca 2GB de memória para cada processo. Caso seja necessário uma quantidade maior de memória por processo, basta utilizar o parâmetro -l h_vmem=xG, onde 'x' é a quantidade de memória a ser alocada por processo. Importante observar o limite da quantidade de memória de cada nó.
Script Geral
#$ -S /bin/bash #$ -q nome_da_fila ./programa parametros_do_programaExemplo:
#$ -S /bin/bash #$ -q fila ./flops
qsub rodar.sh
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
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
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
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
É 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
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
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):
mpiicc = Compilador C
mpiicpc = Compilador C++
mpiifort = Compilador FORTRAN
mpiexec.hydra = Comando para executar jobs compilados utilizando o MPI da Intel
Mais informações sobre como submeter jobs utilizando o MPI da Intel abaixo.
Mais informações sobre o MPI da Intel em /hpc/intel/cluster_studio_xe/impi/4.1.3.048/doc/Getting_Started.pdf
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
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):
mpiicc = Compilador C
mpiicpc = Compilador C++
mpiifort = Compilador FORTRAN
mpiexec.hydra = Comando para executar jobs compilados utilizando o MPI da Intel
Mais informações sobre como submeter jobs utilizando o MPI da Intel abaixo.
Mais informações sobre o MPI da Intel em /hpc/intel/cluster_studio_xe/impi/4.1.3.048/doc/Getting_Started.pdf
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)
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
Comando: qstat [parametros]
Comando: qhost [parametros]
Comando: qdel [parametros]
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:
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.
Para maiores detalhes consulte os manuais dos comandos:
LNCC © Equipe de Suporte Técnico