Both sides previous revisionPrevious revisionNext revision | Previous revision |
tutoriais:apptainer [2024-03-15 16:47] – gnann | tutoriais:apptainer [2025-05-22 16:03] (current) – david-local |
---|
====== Utilizando programas através do Apptainer ====== | ====== Utilizando programas através do Apptainer ====== |
| |
O Apptainer é um programa para criação e execução de containers, compatível com o Docker, que permite rodar programas dentro de 'imagens' prontas. Isso evita problemas de compatibilidade entre pacotes do sistema e os requeridos pelo programa. | O Apptainer é um programa para criação e execução de containers, compatível com o Docker e que permite rodar programas dentro de 'imagens' prontas. Isso evita problemas de compatibilidade entre pacotes do sistema e os requeridos pelo programa. |
| |
Sua principal vantagem em relação ao Docker no nosso caso é não precisar de permissões especiais dos usuários, o que o torna mais adequado a nossos servidores de uso compartilhado. | Sua principal vantagem em relação ao Docker é não precisar de permissões especiais dos usuários, tornando-o mais adequado a nossos servidores de uso compartilhado. |
| |
| Quase tudo que serve para o Singularity serve para o Apptainer. |
| |
Abaixo um guia de como rodar um programa dentro do ambiente (no caso, o R). | Abaixo um guia de como rodar um programa dentro do ambiente (no caso, o R). |
| |
==== Imagens pré-baixadas ==== | |
Para facilitar, deixaremos algumas imagens baixadas em ''/opt/apptainer''. | |
| |
Para rodar o R com a imagem ml-verse: | ==== Executando uma imagem ==== |
| |
apptainer exec /opt/apptainer/ml-verse_latest.sif R | As imagens são ambientes com as dependências necessárias para que o programa funcione, por isso é preciso primeiro baixá-las. <WRAP>++++ Clique para ver os passos | |
| |
Para o Rstudio, temos um script que chama a imagem do ml-verse com os parâmetros necessários, sendo necessário especificar a porta da interface web do Rstudio. É preciso escolher uma porta (qualquer número de 10000 a 40000 que já não esteja ocupado por outro processo no servidor), e acessar o servidor da seguinte forma (no exemplo, foi escolhido o número 12345): | |
| |
ssh -L 12345:localhost:12345 usuario@brucutu.ime.usp.br | Para baixar uma imagem podemos usar o subcomando ''pull'', como: |
| |
Então, chamar o script com o mesmo número: | |
| |
rstudio_apptainer.sh 12345 | apptainer pull docker://rocker/ml-verse |
| |
O script irá gerar e exibir uma senha de acesso. Basta acessar pelo navegador o endereço http://localhost:12345 e usar a senha para acessar o Rstudio. | |
| |
==== Baixando uma imagem ==== | O exemplo baixa uma imagem do R do [[ https://rocker-project.org/ | Projeto Rocker ]] que já vem com o R dentro de um ambiente Ubuntu com um repositório de pacotes pré-configurado para instalação mais rápida. A imagem deve ser baixada no diretório onde o comando foi executado, com extensão .sif (no exemplo, seria ''ml-verse_latest.sif''). |
| |
As imagens do Apptainer são ambientes completos, com as dependências necessárias para que o programa incluso funcione corretamente. Para baixar uma imagem, podemos usar o subcomando ''pull'', como: | O comando aceita URIs que apontem para imagens que seguem o padrão OCI. Imagens de docker como a do exemplo costumam funcionar. |
| |
apptainer pull docker://rocker/ml-verse | ++++ |
| </WRAP> |
| |
Esse exemplo baixa uma imagem do R do [[ https://rocker-project.org/ | Projeto Rocker ]], que já vem com o R dentro de um ambiente Ubuntu com um repositório de pacotes pré-configurado para instalação mais rápida. A imagem deve ser baixada na pasta atual onde o comando foi executado o comando, com extensão .sif (no exemplo, seria ''ml-verse_latest.sif''). | Com o objetivo de facilitar, **deixaremos algumas imagens pré-baixadas em ''/opt/apptainer''**. |
| |
O comando aceita URIs que apontem para imagens que seguem o padrão OCI. Imagens de docker como a do exemplo devem funcionar normalmente. | Para executar, utilizamos o comando ''exec'' no escopo da imagem. Como exemplo, utilizaremos a ml-verse (já disponivel nas máquinas): |
| |
==== Executando uma imagem ==== | <code bash> |
| apptainer exec --nv /opt/apptainer/ml-verse_latest.sif R |
| </code> |
| |
Para executar a imagem, utilizamos o subcomando ''apptainer run'', especificando o nome do arquivo da imagem: | Ao executar o comando, o apptainer irá criar um container baseado na imagem e executar o programa. |
| |
apptainer run ml-verse_latest.sif | Rodar o ''Rscript'' é análogo. |
| |
Também é possível executar um comando no escopo da imagem: | Para rodar o RStudio, siga [[servicos:rstudio|o guia]]. |
| |
apptainer exec ml-verse_latest.sif R | ==== Particularidades do ambiente ==== |
| |
Ao executar o comando, o apptainer irá criar um container baseado na imagem e executar o programa. Essa parte deve ser transparente, com a saída do terminal sendo similar a um programa executado nativamente. | O apptainer irá automaticamente disponibilizar seu ''$HOME'' dentro do ambiente, então seus arquivos devem continuar a ser acessíveis normalmente. A maior diferença se dá nas bibliotecas e outras dependências inclusas na imagem. Caso algum pacote dependa de bibliotecas que não estejam inclusas, o ideal é baixar ou criar uma imagem mais completa. |
| |
==== Particularidades do ambiente ==== | Para instalar pacotes é preciso configurar o .libPaths(). No R, rodar: |
| <code> |
Apesar de rodar dentro de um container, o apptainer irá automaticamente disponibilizar seu ''$HOME'' dentro do ambiente, então seus arquivos devem continuar a ser acessíveis normalmente. A maior diferença se dá nas bibliotecas e outras dependências inclusas na imagem. Caso algum pacote dependa de bibliotecas que não estejam inclusas, o ideal é baixar uma imagem mais completa. Também é possível criar imagens customizadas. | dir.create(Sys.getenv('R_LIBS_USER'), recursive=TRUE) |
| .libPaths(Sys.getenv('R_LIBS_USER')) |
| </code> |
| Por padrão isso resultará em pacotes instalados em seu ''$HOME'' na pasta ''R''. É possível alterar a variável de ambiente para mexer nesse comportamento. |
| |
==== Particularidades dos servidores do IME ==== | ==== Particularidades dos servidores do IME ==== |
Além do ''$HOME'', o apptainer já disponibiliza o ''/tmp'' e o ''/var/tmp'' (entre outros diretórios). Nas brucutus também configuramos acesso ao ''/var/fasttmp'', que é sempre um SSD. | Além do ''$HOME'', o apptainer já disponibiliza o ''/tmp'' e o ''/var/tmp'' (entre outros diretórios). Nas brucutus também configuramos acesso ao ''/var/fasttmp'', que é sempre um SSD. |
| |
| ==== Referências ==== |
| * https://apptainer.org/docs/user/latest/ |
| * https://rocker-project.org/use/singularity.html |