Dell AMD EPYC 7662 / NVIDIA Tesla A100

Singularity

Singularity é uma solução para o uso de containers em ambientes HPC. Desenhado para permitir a execução de aplicações com portabilidade e reprodutibilidade em um ambiente seguro e proporcionando desempenho bare-metal, ou seja, o mesmo desempenho obtido com o uso de servidores físicos dedicados. Com Singularity é possível configurar o ambiente de execução mais adequado para cada aplicação, por meio de solução BYOE (Bring Your Own Environment) ou, em tradução livre, “Traga seu próprio ambiente”. Nesta solução pode ser usada uma imagem disponível no Singularity ou então pode ser usada uma imagem pronta. Nestas imagens estão disponíveis todos os pacotes e configurações necessários para a execução da aplicação.

Informações sobre o Singularity estão disponíveis em https://sylabs.io/singularity/

Especificação

No ambiente Lovelace está instalado o Singularity na versão 3.7.1
A documentação oficial pode ser consultada em https://singularity.hpcng.org/user-docs/3.7/

Como usar no ambiente Lovelace

A execução de programas no ambiente Lovelace é feita através submissão de jobs para filas, gerenciadas pelo software OpenPBS. Os passos a serem seguidos são:

  1. Preparação da imagem
  2. Preparação do script para submissão
  3. Submissão do script

  1. Preparação da Imagem
  2. As imagens, que podem ser obtidas em repositórios, devem ser previamente preparadas.

    1. Acessar o ambiente Lovelace. Referência aqui
      	  
      ssh -p 31459 usuario@cenapad.unicamp.br
      ssh lovelace
            
    2. Criar uma pasta para hospedar os arquivos de imagem, script de submissão e arquivos do job. Se for necessário fazer a execução em pastas separadas, deve ser feita também a adaptação dos caminhos nos arquivos:
    3. mkdir pasta_job
      cd pasta_job
            
    4. Carregar o modulefile do singularity:
    5. module load singularity
            
    6. Selecionar a imagem:
    7. As imagens podem ser obtidas em repositórios. Os mais comuns são:

      1. Container Library - https://cloud.sylabs.io/library
      2. Imagens Nvidia https://ngc.nvidia.com/catalog/containers
      3. Docker Hub. https://hub.docker.com/
      4. Shub - Singularity HUB - https://singularityhub.github.io/
      5. OCI registry - diretórios que suportem o formato OCI

      Para procurar um pacote no repositório Container Library (https://cloud.sylabs.io/library ) pode ser usado o comando:

      singularity search pacote
            

      OBS: o comando search procura no repositório Container Library somente

    8. Fazer o download de uma imagem:
    9. singularity pull repositorio://imagem
      singularity pull library://lolcow
      singularity pull docker://godlovedc/lolcow
            
      1. Para ajuda no comando pull:
      2. singularity help pull
                 
      3. Para mais informações, consulte a documentação do Singularity: https://sylabs.io/guides/3.7/user-guide/

    10. Construir a imagem:
    11. ID_IMAGEM=imagem_a_ser_gerada
      singularity build ${ID_IMAGEM}.sif repositorio://imagem:${ID_IMAGEM}
            

      Será criado o arquivo imagem_a_ser_gerada.sif

  3. Preparação do script para submissão
  4. No exemplo a seguir ilustramos a preparação da imagem do software NAMD e o script usado para submissão para a fila testegpu. Os mesmos passos aqui descritos podem ser aplicados para outras imagens e filas.

    Para informações sobre a submissão de jobs, consultar o guia do usuário Lovelace

    1. Imagens usadas:
    2. Repositório Nvidia ( https://ngc.nvidia.com/catalog/containers )
      Imagem NAMD ( https://ngc.nvidia.com/catalog/containers/hpc:namd )

    3. Faça login no ambiente lovelace
    4. Crie uma pasta para hospedar os arquivos
    5. mkdir pasta_job
      cd pasta_job
          
    6. Carregue o modulefile singularity
    7. module load singularity
          
    8. Indique o nome da imagem a ser gerada:
    9. NAMD_TAG=2.13-singlenode
      singularity build ${NAMD_TAG}.sif docker://nvcr.io/hpc/namd:${NAMD_TAG}
          

      Será criado o arquivo 2.13-singlenode.sif. Este arquivo será usado para submissão do job.

    10. Crie um arquivo, contendo todos os comandos necessários para executar o software, como por exemplo, entrar na pasta de dados e executar o programa. Nesse exemplo, criamos um arquivo com o nome namd01.sh, contendo:
    11. #!/bin/bash
      cd $PBS_O_WORKDIR/f1atpase
      namd2   f1atpase.namd
          
    12. Atribua permissão para execução neste arquivo:
    13. chmod +x namd01.sh
          
    14. Crie um arquivo, que aqui chamamos de namd01.job, contendo o script a ser submetido para execução do singularity com a imagem a ser usada e o script de apoio (namd01.sh neste exemplo). Este arquivo deve conter:
    15. #!/bin/bash
      #PBS -S /bin/bash
      #PBS -q testegpu
      #PBS -N namd01
      #PBS -m abe
      
      
      module load singularity/3.7.1
      cd $PBS_O_WORKDIR
      singularity run --nv 2.13-singlenode.sif ./namd01.sh
          
    16. Importante: o uso do flag --nv que habilita o uso de placas NVIDIA na imagem, sem essa opção o container não consegue usar as GPUs

  5. Submissão do script para execução
  6. Usando os arquivos namd01.sh e namd01.job criados, o job deve ser submetido por meio da execução do comando:

    qsub namd01.job
        

    Mais informações sobre o uso do PBS clique aqui




Voltar ao topo