Difference between revisions of "Singularity3"

From VeRLab Wiki
Jump to: navigation, search
(outros exemplos menos usados, pois criam container's com limitação de edição ou não editável)
(shell: Executar a máquina container e interagir no shell:)
Line 176: Line 176:
 
<code>singularity shell my_container/</code>
 
<code>singularity shell my_container/</code>
  
<code>singularity shell my_ubuntu.img/</code>
+
<code>singularity shell my_ubuntu.sif/</code>
  
* para algum teste de configuração ou instalação de pacote temporário
+
* Para fazer modificações e instalações no container ele deve ser no formato sandbox
<code>sudo singularity shell my_ubuntu.img/</code>
+
<code>sudo singularity shell --writable my_ubuntu/</code>
 
<br><br>
 
<br><br>
  

Revision as of 17:24, 20 January 2022

Singularity CE 3.x (Community Edition)

Esta será a versão utilizada na rede VeRLab/JLab a partir de mar/2022

Documentação oficial Singularity v3.x


IMPORTANTE: Diferença entre os 2 formatos suportados pelo singularity build:

Pasta sandbox: INDICADO PARA FASE DE TESTES E MODIFICAÇÕES no container (instalar pacotes)

  • Destinado para desenvolvimento interativo do container, quando ainda precisa fazer testes e não se sabe exatamente as configurações/ferramentas a serem usadas, logo o container pode ter novas instalações e alterações nos pacotes.
  • Vantagem: vários arquivos e sub-pastas que são expansíveis automaticamente conforme os pacotes são instalados (opção --writable). O tamanho do disco é expansível conforme disponibilidade de espaço em disco da máquina host.
  • Desvantagem: Execução mais lenta, muitos arquivos para copiar de uma máquina para outra e reproduzir o experimento
  • writable (ch)root directory called a sandbox for interactive development ( --sandbox option)


Arquivo único, extensão .sif: SOMENTE LEITURA, NÃO é possível editar o container

  • Destinado para fase de experimentos em massa (production)
  • Vantagem: É uma imagem comprimida, ocupa menos espaço em disco e executa mais rápido que um container equivalente no formato sandbox. Também suporta criptografia
  • Desvantagem: Não é possível instalar/modificar pacotes do container. Para instalar/editar algo, tem que transformar em "pasta sandbox".
  • compressed read-only Singularity Image File (SIF) format suitable for production (default)


Passo a Passo: Uso do Singularity CE v3.x


Criar sua máquina container no formato "pasta sandbox" (build --sandbox)

1) Criar sua pasta de usuario em /srv/forge/fulano/ ou /homeLocal/fulano  :

  • Foi escolhido que das máquinas de processamento na rede, apenas EPONA e GHOST serão capazes de criar um container.
  • Outra restrição é que essa permissão só pode ser executada na pasta /srv/forge
   cd /srv/forge 
   mkdir fulano
   cd /srv/forge/fulano
   cd /homeLocal
   mkdir fulano
   cd /homeLocal/fulano

2) Criar seu container no formato "pasta sandbox" para ser possível instalar pacotes:

   sudo singularity build --sandbox [pasta_destino] [container_origem]
   sudo singularity build --sandbox my_container docker://jjanzic/docker-python3-opencv:opencv-4.0.1

A origem do container pode ser online ou local

  • URI docker:// container do repositório online no Docker Hub (Mais dicas sobre usar URI Docker Hub)
  • URI library:// container do repositório online no Sylab Container Library
  • URI shub:// container do repositório online no Singularity Hub
  • caminho para um outro container .sif numa pasta local na própria máquina host
  • caminho para um outro container em pasta sandbox na própria máquina host
  • caminho para um definition file no formato Singularity CE

Executar seu container singularity no formato "pasta sandbox" e instalar novos pacotes

1) Executar seu singularity no formato "pasta sandbox" em modo edição para instalar pacotes:

   sudo singularity shell --writable my_container/
  • Use sudo somente quando necessário modificar o container com instalação de pacotes e configuração
  • Foi escolhido que das máquinas de processamento na rede, apenas EPONA e GHOST serão capazes de criar um container e abrir em modo edição.
  • Outra restrição é que essa permissão só pode ser executada na pasta /srv/forge

2) Executar seu singularity no formato "pasta sandbox" em modo leitura para testar:

   singularity shell my_container/

Montar /homeLocal/usuario dentro container para salvar resultados (opção --bind )

O comportamento padrão do SingularityCE é montar as pastas /home/$USER, /tmp, and $PWD da máquina host dentro do container.

Para adicionar outros diretórios como /homeLocal/fulano dentro do container O exemplo mostra como deixar o path /homeLocal/fulano disponível dentro do container:

   sudo singularity shell --bind /homeLocal/fulano my_container/

É possível definir o ponto de montagem dentro do container(argumento depois de :) O exemplo mostra como deixar o path /homeLocal/fulano disponível dentro do container em /mnt:

   sudo singularity shell --bind /homeLocal/fulano:mnt my_container/

Converter um container singularity do formato "pasta sandbox" para o formato .sif

Depois de pronta, a máquina container, pode ser convertida do formato "pasta sandbox" para o formato de .sif) isso permite que ela execute mais rápido, reduz o espaço em disco.

O container pronto pode ser armazenado na sua pasta /home/nome_usuario da rede, assim pode ser executada como leitura de qualquer máquina de processamento que o usuário logar.

1) Para converter do formato "pasta sandbox" para o formato .sif. Dicas sobre conversão de formatos das máquinas container:

   sudo singularity build [container_destino] [container_origem]
   sudo singularity build my_container-compact.sif my_container/



PIP

O Python Package Installer, também conhecido como PIP, é responsável por instalar os pacotes Python criados pela comunidade. Dentro do singularity + moosefs, ele tem um comportamento anômalo, não instalando nas pastas padrão. Tais pastas "padrão" são especificadas diretamente no código-fonte do python, mais precisamente no módulo sys. Faz-se portanto necessário utilizar a flag -t/--target ao instalar os pacotes via pip, apontando para a pasta dist-packages da distribuição utilizada.

pip install <package> -t /usr/local/lib/python2.7/dist-packages/

Docker Hub: Usar repositório de Máquinas Container Prontas!

  • Docker Hub: várias imagens prontas com ferramentas instaladas
   https://hub.docker.com/

Por exemplo pode-se buscar no google: "docker hub opencv ubuntu", uma das respostas será o repositório

   https://hub.docker.com/r/jjanzic/docker-python3-opencv

Para usar um endereço de imagem docker hub e criar seu container singularity, usa-se o formato docker://REPOSITORIO:TAGS

No caso do repósitório exemplo, ao abrir o link, vai encontrar diversas TAGS listadas na pagina:

   List of available docker tags:
   opencv-4.1.0 (latest branch)
   contrib-opencv-4.1.0 (opencv_contrib branch)
   opencv-4.0.1
   contrib-opencv-4.0.1
   opencv-4.0.0
   contrib-opencv-4.0.0
   opencv-3.4.2
   contrib-opencv-3.4.2
   (...)

Assim para criar o container usando build e copiando do repositório exemplo a tag opencv-4.0.1, tem-se:

   sudo singularity build --sandbox opencv-base docker://jjanzic/docker-python3-opencv:opencv-4.0.1



Alguns Comandos Básicos

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

  • build: Cria uma imagem para a máquina container
  • shell: Executa a imagem da máquina container e permite a interação no prompt do shell
  • exec: Executa um comando na máquina container, em segundo plano, e apresenta o resultado no shell da máquina host
  • run: Executa ações e scripts configurados no container, como se fosse um executável.



build: Criar uma máquina container

Criar uma máquina container editável (para instalar pacotes)

  • Deve-se usar um singularity no formato "pasta sandbox" (estrutura de diretórios). Dicas sobre a opção --sandbox.
  • Criar singularity sandbox usando o repositório Ubuntu 18.04 do Docker Hub:

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

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

  • Exemplo singularity sandbox usando um repositório qualquer do dockerhub

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

outros exemplos menos usados, pois criam container's não editável

  • Criar uma máquina container em formato .img (read-only) a partir de um repositório Docker Hub:
    sudo singularity build my_ubuntu.sif docker://index.docker.io/library/ubuntu:latest 

Deve-se usar o formato .sif (writable) a partir de um repositório Docker Hub:

    sudo singularity build my_ubuntu.sif docker://index.docker.io/library/ubuntu:latest 
  • Converter ou Criar uma máquina container em formato de imagem a partir de uma pasta sandbox:
    sudo singularity build my_ubuntu.sif my_container/



shell: Executar a máquina container e interagir 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.sif/

  • Para fazer modificações e instalações no container ele deve ser no formato sandbox

sudo singularity shell --writable my_ubuntu/

opção --writable: Permitir que mudanças sejam salvas na imagem da máquina container (instalar pacotes):

  • TODO: Como fazer na homeLocal e como fazer na proc2:/srv/forge
  • Dado que sua imagem está no formato sandbox

sudo singularity shell --writable my_container/

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

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

  • Criar uma imagem .img writable

(Dicas sobre criar uma imagem .img --writable)

opção --bind:Montando pastas da máquina host para acessar dentro da máquina container

A pasta do home do usuário é montada automaticamente pelo singularity dentro da máquina container, mas se for necessário acessar outra pasta no disco da máquina host, deve-se usar a opção --bind para indicar o caminho (path) a ser usado. O usuário precisa ter permissão de leitura e escrita na pasta da máquina host.

  • Executar a máquina container no shell e montar o caminho /homeLocal/fulano da máquina host dentro da máquina container

singularity shell --bind /homeLocal/fulano my_container/