Como Utilizar¶
Como acessar¶
O acesso ao nosso cluster pode ser feito, através do Open OnDemand ou pelo do Terminal do JupyterLab (K8S). Em ambas opções, é imprescindível possuir uma conta válida no ambiente computacional do LIneA. Caso não possua uma conta, entre em contato com o Service Desk por email (helpdesk@linea.org.br) para mais informações.
Atenção
Mesmo possuindo uma conta ativa no LIneA, o acesso ao ambiente de processamento HPC não é automático. Para mais informações entre em contato com o Service Desk pelo email helpdesk@linea.org.br.
Acessando pelo terminal do JupyterLab
Na tela inicial do seu Jupyter Notebook, na seção "Other", você encontrará o botão do terminal. Ao clicar nele, você será redirecionado para um terminal Linux, inicialmente localizado em seu diretório home. Para acessar o Cluster Apollo, basta executar o seguinte comando:
ssh loginapl01
A máquina loginapl01 é onde você poderá fazer a alocação do nó de computação para submeter o seu job.
$HOME e $SCRATCH
Os nós de computação não possuem acesso ao seu diretório home de usuário. Mova ou copie, para seu diretório SCRATCH, todos os arquivos necessários para a submissão do seu job.
Como usar a área de Scratch¶
Seu diretório SCRATCH é o local para onde você pode direcionar os arquivos resultados do seu job, assim como armazenar temporariamente dados que são utilizados pelo código no momento do processamento.
- Para acessar o seu diretório SCRATCH:
cd $SCRATCH
- Para enviar arquivos para seu diretório SCRATCH:
cp <ARQUIVO> $SCRATCH
Limpeza Automática do Scratch¶
O scratch é uma área de armazenamento temporária destinada à arquivos de saída e processamento dos jobs executados no cluster. Para manter o ambiente organizado e garantir espaço disponível para todos, está em vigor um script de limpeza automática, que é executado uma vez por semana.
Esse processo remove arquivos que não foram acessados dentro do período de retenção definido - atualmente, 45 dias.
Arquivos de configuração essenciais (ex.: .bashrc, .bash_profile, .ssh, etc.) são preservados automaticamente e não entram no processo de exclusão.
ATENÇÃO
O scratch não deve ser usado para armazenamento permanente. Recomendamos mover dados importantes para seu diretório home.
Como usar a área de Scripts¶
Seu diretório SCRIPTS é o local para onde você pode armazenar scripts, códigos para serem executados no cluster. Recomenda-se também utilizar essa área para criação de environments Conda.
- Para acessar o seu diretório SCRIPTS:
cd $SCRIPTS
Fique Atento
A área de scripts não está incluída na rotina de backups. Por isso, não deve ser utilizada como armazenamento permanente de dados.
Como Submeter um Job¶
Um Job solicita recursos de computação e especifica os aplicativos a serem iniciados nesses recursos, juntamente com quaisquer dados/opções de entrada e diretivas de saída. O gerenciamento e agendamento das tarefas e recursos do cluster é feito através do Slurm. Logo, para submeter um Job é necessário utilizar um script como abaixo:
#!/bin/bash
#SBATCH -p PARTITION #Name of the Partition to use
#SBATCH --nodelist=NODE #Name of the Node to be allocated
#SBATCH -J simple-job #Job name
#----------------------------------------------------------------------------#
##path to executable code
EXEC=/scripts/YOUR.USER/EXECUTABLE.CODE
srun $EXEC
ATENÇÃO
É expressamente proibida a submissão de jobs diretamente para máquina loginapl01. Qualquer código em execução nessa máquina será interrompido imediatamente, sem aviso prévio.
- Para submeter o Job:
cd $SCRATCH
sbatch $SCRIPTS/PATH/TO/script-submit-job.sh
- Para verificar o andamento e informações do Job:
scontrol show job <ID>
- Para cancelar o Job:
scancel <ID>
Acesso à internet
Os nós de computação não têm acesso à internet. Pacotes e bibliotecas devem ser instalados a partir da loginapl01 em sua área de scripts .
EUPS (gerenciador de pacotes)¶
O EUPS é um gerenciador de pacotes alternativo (e oficial do LSST) que permite carregar variáveis de ambiente e incluir o caminho para programas e bibliotecas de forma modular.
- Para carregar o EUPS:
Info
Atualmente o EUPS é carregado automaticamente após o usuário acessar qualquer máquina do cluster apollo.
- Para listar todos os pacotes disponíveis:
eups list
- Para listar um pacotes específico:
eups list <PACOTE>
- Para carregar um pacotes na sessão atual:
setup <NOME DO PACOTE> <VERSÃO DO PACOTE>
- Para remover o pacote carregado:
unsetup <NOME DO PACOTE> <VERSÃO DO PACOTE>
Conda no Ambiente HPC¶
Visão Geral¶
O conda está disponível de forma centralizada em todos os nós do cluster em /opt/conda.
Os ambientes conda do sistema são mantidos pela equipe de operações e são somente leitura.
(a partir daqui chamaremos de env ou envs)
Cada usuário pode criar e gerenciar seus próprios envs pessoais.
Ativando o Conda¶
O conda já está disponível assim que você faz login. Para verificar:
conda --version
Envs Disponíveis¶
Para listar todos os envs disponíveis, do sistema e os seus pessoais:
conda env list
Exemplo de saída:
# conda environments:
base /opt/conda
base-science /opt/conda/envs/base-science
meu-env /home/usuario/.conda/envs/meu-env
analise-xray /scripts/usuario/.conda/envs/analise-xray
projeto-survey /scripts/cl/prj/projeto-survey
Os envs em /opt/conda/envs/ são mantidos pela equipe de suporte e não podem ser modificados.
Ativando um env¶
conda activate base-science
Para voltar ao env base:
conda deactivate
Criando envs pessoais¶
No home (recomendado para Jupyter e desenvolvimento)¶
conda create -n meu-env python=3.11
O env será criado em ~/.conda/envs/meu-env, que é acessível tanto no cluster quanto no Jupyter.
No /scripts (recomendado para jobs no cluster)¶
conda create -p /scripts/$USER/.conda/envs/meu-env python=3.11
Para um projeto compartilhado¶
Caso não exista, solicite ao helpdesk@linea.org.br a criação do diretório do projeto em /scripts/cl/prj/<projeto>.
Após a criação:
conda create -p /scripts/cl/prj/<projeto> python=3.11
ATENÇÃO
Atenção: /scripts não possui garantia de backup. Mantenha seus arquivos de definição de env (environment.yml) versionados no git.
Removendo um env¶
conda env remove -n meu-env
Ou pelo path completo:
conda env remove -p /scripts/$USER/.conda/envs/meu-env
Instalando Pacotes¶
Sempre ative o env antes de instalar:
conda activate meu-env
conda install numpy scipy matplotlib
Para instalar de um canal específico:
conda install -c conda-forge astropy
Para instalar via pip dentro do env:
pip install meu-pacote
ATENÇÃO
Atenção: prefira sempre conda install antes de recorrer ao pip, para evitar conflitos de dependências.
Removendo Pacotes¶
conda activate meu-env
conda remove numpy
Exportando e Reproduzindo envs¶
Para exportar a definição do env:
conda activate meu-env
conda env export > environment.yml
Para recriar o env a partir do arquivo:
conda env create -f environment.yml
Info
Recomendamos versionar o environment.yml no git para garantir a reprodutibilidade dos seus experimentos.
Usando o env em Jobs¶
Em jobs submetidos ao scheduler, ative o conda explicitamente no script:
#!/bin/bash
#SBATCH --job-name=meu-job
#SBATCH --ntasks=1
source /opt/conda/etc/profile.d/conda.sh
conda activate meu-env
python meu_script.py
Info
O env ativado no seu shell não é herdado automaticamente pelo job. O source e o conda activate são obrigatórios no script.
Boas Práticas¶
- Não instale conda no
/scratch— o scratch é para dados temporários de I/O, não para ambientes. Ambientes lá serão perdidos. - Não instale conda no
/scripts/<username>diretamente - use sempre o subdiretório.conda/envsdentro do seu diretório em/scripts. - Mantenha o
environment.ymlno git - é a única garantia de reprodutibilidade do seuenv. - Use
mambano lugar decondapara instalar pacotes - é mais rápido na resolução de dependências:mamba install numpy scipy - Ambientes grandes podem impactar a performance do filesystem. Se o seu job faz uso intensivo de muitos pacotes, considere falar com o helpdesk sobre o uso de
conda-pack.
Onde os envs são criados¶
| Contexto | Path padrão | Persistente |
|---|---|---|
conda create -n nome |
~/.conda/envs/ |
✅ sim |
| Jupyter (k8s) | ~/.conda/envs/ |
✅ sim |
| Job no cluster | /scripts/$USER/.conda/envs/ |
⚠️ sem backup |
| Projeto compartilhado | /scripts/cl/prj/<projeto> |
⚠️ sem backup |
Usando conda-pack em Jobs de Larga Escala¶
O conda-pack empacota um env conda inteiro num arquivo .tar.gz que pode ser
descompactado e usado diretamente no nó de compute, sem acesso ao NFS durante a execução.
Isso é recomendado para jobs que rodam em muitos nós simultaneamente, evitando uma
rajada de acessos ao /opt/conda via NFS no momento da ativação.
Os envs do sistema já estão disponíveis empacotados em /opt/conda/packed/:
/opt/conda/packed/
└── base-science.tar.gz
Usando no job script¶
#!/bin/bash
#SBATCH --job-name=meu-job
# Descompacta o env no scratch local do nó
mkdir -p /scratch/$USER/envs/base-science
tar -xzf /opt/conda/packed/base-science.tar.gz -C /scratch/$USER/envs/base-science
# Ativa o env localmente, sem depender do NFS
source /scratch/$USER/envs/base-science/bin/activate
# Roda normalmente
python meu_script.py
# Limpa o env ao final do job
rm -rf /scratch/$USER/envs/base-science
Empacotando um env pessoal¶
Caso queira usar conda-pack com um env pessoal:
conda activate meu-env
conda pack -o /scratch/$USER/meu-env.tar.gz
Info
Atenção: o arquivo .tar.gz pode ser grande dependendo do env.
Quando usar¶
| Situação | Recomendado |
|---|---|
| Desenvolvimento interativo no login | ❌ |
| Jupyter (k8s) | ❌ |
| Jobs curtos em poucos nós | ⚠️ opcional |
| Jobs longos ou com muitos nós simultâneos | ✅ |
| Ambientes com muitos pacotes | ✅ |
Suporte¶
Em caso de dúvidas ou para solicitar a criação de envs do sistema, abra um chamado com o helpdesk.
Comandos úteis do Slurm¶
Para aprender sobre todas as opções disponíveis para cada comando, insira man <comando> enquanto estiver conectado ao ambiente do Cluster.
| Comando | Definição |
|---|---|
| sbatch | Envia scripts de tarefas para a fila de execução |
| squeue | Exibir estado dos jobs |
| scontrol | Usado para exibir o estado Slurm (várias opções disponíveis apenas para root) |
| sinfo | Exibir estado de partições e nós |
| salloc | Envia um job para execução ou inicia um trabalho em tempo real |