Singularity

From VeRLab Wiki
Revision as of 15:58, 23 August 2019 by Mauferrari (talk | contribs) (Regras de bom uso dos recursos)
Jump to: navigation, search

Singularity

O Singularity é uma ferramenta para a criação de "máquina container" (uma espécie de "máquina virtual") que trás algumas vantagens, quando for rodar experimentos nas máquinas de processamento do Verlab/J:

  • Não precisa ser usuário com privilégios root para executar sua máquina container (apenas para criar) e pode instalar suas dependências de experimento no container sem alterar a máquina host. Isso evita mudanças e instalação de pacotes nas máquinas de processamento e que podem atrapalham experimentos de outros usuários.
  • Depois de criar sua máquina container com todas suas dependências, pode-se usá-la para rodar experimento em diferentes máquinas host que tenham GPU. Isso trás flexibilidade para rodar experimento em máquinas simultaneamente, sem precisar instalar todas dependências novamente em outra máquina host.
  • A massa de arquivos de dataset (que geralmente ocupam espaço >=500GB) ficam localmente armazenados na máquina host, assim evita tráfego desnecessário na rede. Geralmente na pasta /homeLocal/nome_do_usuario.
  • O usuário deixa na sua pasta home da rede apenas sua máquina container em formato de imagem (que em geral ocupa ~4GB) assim basta logar em uma máquina de processamento para rodar seu experimento.

Instalação

Toda máquina de processamento do Verlab/J (máquinas com GPU) deve ter o Singularity instalado e não precisam ter pacotes específicos de software como ROS, cuda, tensorflow.

A equipe de rede é responsável por:

  • Instalar o Singularity em toda máquina host com GPU (máquina de processamento)
  • Criar a pasta /homeLocal em toda máquina host para os usuários criarem e modificarem suas máquinas container.
  • Configurar o comando $sudo singularity ... de modo que todo usuário possa rodá-lo dentro da pasta /homeLocal, sem necessitar de senha root

Regras de bom uso dos recursos

  • A máquina container para rodar os experimentos deve estar em formato de imagem para rodar mais rápido (.img ou .simg). Porém, enquanto estiver em teste e instalando pacotes, ela deve ser uma "pasta sandbox".
  • Usuários não devem deixar o dataset (massa de arquivos grande, em geral >=500GB, que vão ser acessados durante o experimento) dentro da sua pasta home na rede (por exemplo, para o login "fulano" /home/fulano/dataset na rede, pois isso aumenta o tráfego na rede desnecessáriamente. Os datasets devem ser armazenados numa pasta local do computador com o nome do usuário ou no servidor de storage. Por exemplo /homeLocal/fulano/dataset /storage/dataset/fulano/dataset
  • Cada usuário deve criar/preparar sua máquina container em uma pasta local e executá-la em "modo edição" e como "pasta sandbox" (--writable) para instalar os pacotes e dependências para seus experimentos. Por exemplo, usar a pasta local /homeLocal/fulano/my_container . Depois de pronta, a máquina container, pode ser convertida para o formato de imagem (.img ou .simg) e ser ser armazenado na pasta home da rede, assim pode ser executada como leitura de qualquer máquina de processamento que o usuário logar.
  • Use sudo somente quando necessário (e.g., instalação de pacotes e configuração). Quando for rodar o container para experimentos, não será necessário invocar o singularity com permissão sudo.

singularity image.expand my_test.simg

Links para aprender Singularity e Criar sua Máquina Container

  • Documentação oficial:

https://www.sylabs.io/docs/ (desde julho/2018)

https://singularity.lbl.gov/docs-docker

  • More details about the different build options and best practices, read singularity flow:

https://www.sylabs.io/guides/2.5.1/user-guide/singularity_flow.html#singularity-flow

Alguns Comandos Básicos

https://www.sylabs.io/guides/2.5.1/user-guide/quick_start.html#interact-with-images

  • build: Cria uma imagem para a máquina container old link
  • shell: Executa a máquina container no prompt do shell old link
  • exec: Executa um comando dentro do shell da máquina container, em segundo plano, e apresenta o resultado no shell da máquina host old link
  • run: Executa ações e scripts configurados no container, como se fosse um executável. old link
  • pull: ??? Copia um container de um repositório, pasta sandbox ou imagem pronta ???

Criar uma máquina container

  • IMPORTATNE entender a Diferença entre os 3 formatos criados pelo build:
    • .simg: arquivo únicode extensão .simg, que ocupa menos espaço e executa mais rápido que .img.
    • Desvantagem: não dá para faaer nenhuma modificação. Para Instalar algo, tem que transformar em .img ou "pasta sandbox".
      • (single file) compressed read-only squashfs file system suitable for production (default)
    • .img (arquivo único, ocupa menos espaço e executa mais rápido que "pasta sandbox". Desvantagem:pode-ser fazer modificações, mas o disco tem tamanho fixo, assim ao instalar coisas maiores o disco precisa ser expandido manualmente com image.expand --size)
      • (single file): writable ext3 file system suitable for interactive development ( --writable option )
    • sandbox directory (vários arquivos e sub-pastas, mais lento para executar, mas não tem que se preocupar com o tamanho do sico virtual, que se expande automaticamente ao instalar pacotes)
      • (many files and sub-folders): writable (ch)root directory called a sandbox for interactive development ( --sandbox option)


  • Criar uma máquina container em formato .simg (read-only) a partir de um repositório Docker Hub:

singularity build lolcow.simg docker://godlovedc/lolcow


  • Criar uma máquina container em formato .img (read-only) a partir de um repositório Docker Hub:

sudo singularity build my_ubuntu.img docker://index.docker.io/library/ubuntu:latest


  • Criar uma máquina container em formato .img (writable) a partir de um repositório Docker Hub:

sudo singularity build --writable my_ubuntu.img docker://index.docker.io/library/ubuntu:latest


  • Criar uma máquina container container formato de estrutura de diretórios (formato sandbox) a partir do repositório Ubuntu 16.04 do Docker Hub: (Dicas sobre a opção --sandbox)

sudo singularity build --sandbox my_container/ docker://index.docker.io/library/ubuntu:latest

sudo singularity build --sandbox my_container/ docker://index.docker.io/library/ubuntu:16.04

  • Criar um sandbox usando um repositório qualquer do dockerhub

sudo singularity build --sandbox my_container/ docker://repository_name:tag


sudo singularity build my_ubuntu.simg my_container/

Executar a máquina container no shell:

You can make changes to the container (assuming you have the proper permissions to do so) but those changes will disappear as soon as you exit. To make your changes persistent across sessions, use the --writable option. It’s also a good practice to shell into your container as root to ensure you have permissions to write where you like.

  • Executar a máquina container no shell, sem salvar modificações feitas na sessão:

singularity shell my_container/

singularity shell my_ubuntu.img/

sudo singularity shell my_ubuntu.img/ - para algum teste de configuração ou instalação de pacote temporário

sudo singularity shell --writable my_container/ - para instalação de pacotes / configuração

singularity shell --writable my_container/ - para a execução de experimentos

Exemplos com exec