Laboratorio Nacional de Computacao Cientifica

Cluster Altix ICE

1. Características do cluster

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

ICE 8400

O cluster conta com 1 login node com capacidade bruta de armazenamento de 5TB

voltar

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

  1. Acessar o cluster, através do login node: ssh usuario@ice
  2. A submissão dos jobs deve ser feita através do gerenciador de filas Torque
  3. O número máximo de processadores por usuário é 60
  4. O número máximo de jobs em execução por usuário é 40
  5. O número máximo de jobs na fila por usuário é 120
  6. O tempo máximo de execução do job é 168 hrs (7 dias)
  7. Cada nó está configurado, no Torque, para utilizar no máximo 12 processadores
  8. Não há garantias de que o job de cada usuário irá executar sozinho no nó de computação. O mais provável é que ocorra o compartilhamento de um nó por dois jobs
  9. Todas as variáveis de ambientes (PATH, LD_LIBRARY_PATH etc) necessárias para a execução do job (aplicação, MPI etc) devem ser configuradas antes da submissão do job.
  10. 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:

module avail

Comandos

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

o comando:

module load MODULO

Todas as variáveis de ambientes (PATH, LD_LIBRARY_PATH etc) necessárias para a execução do job (aplicação, MPI etc) devem ser configuradas antes da submissão do job.

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 Torque.

voltar

4. Selecionar o MPI

As opções de implementações MPI disponíveis são o SGI MPT e o OpenMPI 1.6.3. Para colocar os executávies (mpicc, mpif77, etc) no path, execute o comando abaixo.

module load mpt/2.06

ou

module load openmpi/1.6.3

Compilar:

mpicc -o myprog myprog.c

ou

mpif90 -o myprog myprog.f

Compilar programas híbridos (MPI-MultiThreaded):

  • Se estiver utilizando o OpenMPI, basta apenas incluir a flag "-fopenmp", para ativar o OpenMP, no comando de compilação
  • mpicc -fopenmp -o myprog myprog.c

  • Se estiver utilizando o MPT, é necessário incluir também a flag "-lmpi_mt" no comando de compilação
  • mpicc -lmpi_mt -fopenmp -o myprog myprog.c

    Maiores informações:

  • MTP: Guia do Usuário
  • OpenMPI 1.6
  • Compilador disponível: GNU v4.3

    voltar

    5. Gerenciador de filas

    O gerenciador de filas utilizado é o Torque integrado com o escalonador de jobs Maui. Todos os jobs devem ser submetidos através dele.

    As filas de execução são:

    1 slot = 1 core

    voltar

    6. Ambientes paralelos (Alocação de nós e processadores)

    Basicamente há duas formas de solicitar processadores no Torque


    No script de submissão, a forma de alocação é escolhida através do parâmetro:

    #PBS -l nodes=X

    ou

    #PBS -l nodes=X:ppn=Y

    ou

    #PBS -l nodes=1+1+...:ppn=1


    * ppn = Processor Per Node

    * Lembrando que o número máximo de processos por cada nó é 11

    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, que por padrão são colocados no diretório de onde o script foi submetido

    Nos scripts (jobs em batch) os parâmetros do Torque devem ser precedidos por #PBS como será visto mais adiante.

    Os scripts não precisam ser executáveis.

    voltar

    7.1. Jobs seriais

    Script Geral

    #PBS -S /bin/bash
    #PBS -N NOME_DO_JOB
    #PBS -q nome_da_fila
    #PBS -V
    
    
    cd $PBS_O_WORKDIR
    ./programa  parametros_do_programa
    
    Exemplo:

    Script rodar.sh
    #PBS -S /bin/bash
    #PBS -N JOB_SERIAL
    #PBS -q fila
    #PBS -V
    
    
    cd $PBS_O_WORKDIR
    
    
    /hpc/NPB3.2.1/SER/bin/cg.C
    
    qsub rodar.sh

    voltar

    7.2. Jobs paralelos

    Exemplo 1 - Dinâmico:

    Script Geral - Utilizando o MPT

    #PBS -S /bin/bash
    #PBS -N NOME_DO_JOB
    #PBS -q nome_da_fila
    #PBS -l nodes=NUMERO_DE_PROCESSADORES
    #PBS -V
    
    
    cd $PBS_O_WORKDIR
    
    mpiexec_mpt -n NUMERO_DE_PROCESSADORES  programa parametros_do_programa
    
    Script rodarmpi.sh
    #PBS -S  /bin/bash
    #PBS -N JOB_EXEMPLO1_DINAMICO
    #PBS -q fila
    #PBS -l nodes=16
    #PBS -V
    
    
    cd $PBS_O_WORKDIR
    
    mpiexec_mpt -n 16 /hpc/NPB3.2.1/MPI/bin/cg.C.16
    
    
    module load mpt/2.06 
    qsub rodarmpi.sh
    -----

    Script Geral - Utilizando o OpenMPI

    #PBS -S /bin/bash
    #PBS -N NOME_DO_JOB
    #PBS -q nome_da_fila
    #PBS -l nodes=NUMERO_DE_PROCESSADORES
    #PBS -V
    
    
    cd $PBS_O_WORKDIR
    
    mpiexec programa parametros_do_programa
    

    *Atenção: Ao utilizar o OpenMPI, não é necessário configurar o parâmetro "-n" do "mpiexec". Ele já obtem esse parâmetro diretamente da configuração do Torque.

    Script rodarmpi_openmpi.sh
    #PBS -S  /bin/bash
    #PBS -N JOB_EXEMPLO1_DINAMICO
    #PBS -q fila
    #PBS -l nodes=16
    #PBS -V
    
    
    cd $PBS_O_WORKDIR
    
    mpiexec /hpc/NPB3.2.1/MPI/bin/cg.C.16_openmpi
    
    
    module load openmpi/1.6.3 
    qsub rodarmpi_openmpi.sh

    Exemplo 2 - Fixado - Utilizando MPT:

    Script Geral

    #PBS -S /bin/bash
    #PBS -N NOME_DO_JOB
    #PBS -q nome_da_fila
    #PBS -l nodes=NUMERO_DE_NOS:ppn=NUMERO_DE_PROCESSADORES_POR_NO
    #PBS -V
    
    
    cd $PBS_O_WORKDIR
    
    mpiexec_mpt -n NUMERO_DE_NOS * NUMERO_DE_PROCESSADORES_POR_NO  programa parametros_do_programa
    
    Script rodarmpi2.sh
    #PBS -S  /bin/bash
    #PBS -N JOB_EXEMPLO2_FIXADO
    #PBS -q fila
    #PBS -l nodes=4:ppn=4
    #PBS -V
    
    
    cd $PBS_O_WORKDIR
    
    mpiexec_mpt -n 16 /hpc/NPB3.2.1/MPI/bin/cg.C.16
    
    
    module load mpt/2.06 
    qsub rodarmpi2.sh

    Atenção:
    - Nesse caso, o valor da flag -n deve ser o produto do valor de nodes pelo ppn (4*4)

    Exemplo 3 - Fixado - Utilizando OpenMPI:

    Script Geral

    #PBS -S /bin/bash
    #PBS -N NOME_DO_JOB
    #PBS -q nome_da_fila
    #PBS -l nodes=NUMERO_DE_NOS:ppn=1
    #PBS -V
    
    
    cd $PBS_O_WORKDIR
    
    mpiexec programa parametros_do_programa
    
    Script rodarmpi3.sh
    #PBS -S  /bin/bash
    #PBS -N JOB_EXEMPLO3_FIXADO
    #PBS -q fila
    #PBS -l nodes=1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1:ppn=1
    #PBS -V
    
    
    cd $PBS_O_WORKDIR
    
    mpiexec /hpc/NPB3.2.1/MPI/bin/cg.C.16_openmpi
    
    
    module load openmpi/1.6.3 
    qsub rodarmpi3.sh

    Atenção:
    - Nesse caso, irá submeter 1 processo MPI (utilizando 1 processador) para 16 nós computacionais diferentes.

    voltar

    7.3. Jobs paralelos (MPI-multithreaded)

    Script Geral

    #PBS -S /bin/bash
    #PBS -N NOME_DO_JOB
    #PBS -q nome_da_fila
    #PBS -l nodes=NUMERO_DE_NOS:ppn=NUMERO_DE_PROCESSOS_POR_NO
    #PBS -V
    
    
    cd $PBS_O_WORKDIR
    export  OMP_NUM_THREADS=NUMERO_DE_PROCESSOS_POR_NO
    
    mpimtexec_mpt -n NUMERO_DE_NOS omplace -nt NUMERO_DE_PROCESSOS  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

    #PBS -S  /bin/bash
    #PBS -N MULTITHREADED
    #PBS -l nodes=8:ppn=4
    #PBS -V
    
    
    cd $PBS_O_WORKDIR
    export  OMP_NUM_THREADS=4
    
    mpimtexec_mpt -n 8 omplace -nt 4 programa
    
    module load mpt/2.06 
    qsub rodarmpi.sh

    Exemplo 2:

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

    Número de máquinas = 20

    Número total de processadores = 2 * 20 = 40

    #PBS -S  /bin/bash
    #PBS -N MULTITHREADED
    #PBS -l nodes=20:ppn=2
    #PBS -V
    
    
    cd $PBS_O_WORKDIR
    export  OMP_NUM_THREADS=2
    
    mpimtexec_mpt -n 20 omplace -nt 2 programa
    
    module load mpt/2.06 
    qsub rodarmpi.sh

    voltar

    7.4. Jobs paralelos (threads e OpenMP)

    * Restrito a somente 1 nó computacional.

    ** O número máximo de threads é 10, que é o número máximo de processadores disponíveis em cada nó no Torque. Esse valor é configurado através da flag ncpus

    Script Geral

    #PBS -S  /bin/bash
    #PBS -N NOME_JOB
    #PBS -q fila
    #PBS -l ncpus=NUMERO_DE_THREADS
    #PBS -V
    
    
    cd $PBS_O_WORKDIR
    #No caso de jobs OpenMP, configurar a variavel abaixo
    export OMP_NUM_THREADS=NUMERO_DE_THREADS
    
    ./programa.exe parametros_do_programa
    

    Exemplo:

    Script openmp.sh
    #PBS -S  /bin/bash
    #PBS -N JOB_OPENMP
    #PBS -q fila
    #PBS -l ncpus=7
    #PBS -V
    
    
    cd $PBS_O_WORKDIR
    export OMP_NUM_THREADS=7
    /hpc/NPB3.2.1/OMP/bin/sp.C
    
    qsub openmp.sh

    voltar

    8. Verificar status dos jobs

    Comando: qstat [parametros]

    Comando: qhost [parametros]

    1. qstat
    2. qstat -f (exibe o estado completo do job)
    3. qstat -a (exibe todos os jobs)
    4. qstat -n (exibe, além das informações basicas, os nós/processadores alocados para o job)
    5. qstat -Q (exibe o estado das filas)
    6. qstat -q (exibe o estado das filas - formato alternativo)
    7. qstat -B (exibe o estado do servidor)
    8. tracejob -v JOBID (rastreia e exibe informações sobre o estado e os eventos do job)

    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. qselect | xargs qdel (remove todos os jobs da fila ou em execução)

    voltar

    10. Troubleshooting

    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:

    Exemplo:

    gcc ... -lmpi -losmcomp -lrdmacm -libverbs .... 

    O mais indicado é utilizar os "wrappers" mpicc/mpif90 sempre que possível quando for compilar/linkar algum programa, pois eles já utilizam os includes e bibliotecas necessárias.

    voltar

    11. Comentários Finais

    Para maiores detalhes consulte os manuais dos comandos:

    voltar

    LNCC © Equipe de Suporte Técnico