09 ‐ FAQ - arcarneiro/teste-doc-sdumont GitHub Wiki
As senhas são informações pessoais e intransferíveis. Os usuários dos serviços do ambiente tecnológico do LNCC, incluindo o SDumont, devem definir suas senhas de acordo com a política de senhas do LNCC. Clique aqui para maiores informações sobre as políticas e procedimentos do LNCC.
Recomenda-se utilizar:
- Quantidade mínima de caracteres numéricos: 1
- Serão considerados caracteres numéricos: 0123456789
- Quantidade mínima de caracteres especiais: 1
- Serão considerados caracteres especiais (incluindo o espaço): ! #$%&*)(_+=-}{^`'~][/;?:><.,|"
- Quantidade mínima de caracteres alfabéticos maiúsculos: 1
- Serão considerados caracteres alfabéticos maiúsculos: ABCDEFGHIJKLMNOPQSTUVXYWZ
- Quantidade mínima de caracteres alfabéticos minúsculos: 1
- Serão considerados caracteres alfabéticos minúsculos: abcdefghijklmnopqrstuvxywz
- Números aleatórios;
- Substituir letras por números ou caracteres especiais;
- Criar uma frase que auxilie na memorização da senha (ex: “Utilizar uma frase para memorizar a senha é mais seguro” pode gerar a senha "u1FpMaSe+s";
- Criar padrões para formação da senha (#ftg9@AwS, #ftg9@GmAiL e etc.).
- Repetição de sequências de caracteres conhecidos ou sequências de teclas do teclado como: 123456, abcdef, asdfgh, qwerty e etc;
- Uso de nomes, sobrenomes, nomes de membros da família e demais dados pessoais;
- Uso de placas de carros;
- Uso de palavras do dicionário;
- Uso de nomes de times de futebol, filmes, músicas, personagens e etc.;
- Repetição de senhas anteriores;
- Anotar a senha em papel ou no próprio computador;
- Uso da mesma senha em mais de uma conta.
O comprimento da senha deve ter um mínimo de 8 caracteres.
As senhas devem ter um período de validade inferior a 06 (seis) meses.
A conta será bloqueada após 5 tentativas incorretas. As solicitações de desbloqueio deverão ser encaminhadas ao Helpdesk-SDumont, que seguirá o procedimento de validação das informações do usuário para efetuar o desbloqueio.
Dentro do período de validade da senha, o usuário pode alterá-la a qualquer momento. Para isso, basta utilizar o comando passwd diretamente no terminal do nó de login do SDumont, conforme descrito abaixo:
[meu.usuario@sdumontXX ~]$ passwd
Changing password for user meu.usuario.
(current) LDAP Password: #--- ATENÇÃO: DIGITAR A SENHA ATUAL
New password: #--- ATENÇÃO: DIGITAR A SUA NOVA SENHA
Retype new password: #--- ATENÇÃO: REDIGITAR A SUA NOVA SENHA
passwd: all authentication tokens updated successfully.
O portal para redefinição de senha está disponível no endereço: https://novasenhasdumont.lncc.br.
Acesse a interface, informe seu login de acesso ao SDumont, resolva o captcha e clique no botão Enviar.
Os usuários devem alterar suas senhas imediatamente ao se conectarem no SDumont após uma redefinição de senha pela equipe do Helpdesk-SDumont.
*Lembre-se: No próximo acesso após a redefinição, caso tenha salvado a senha anterior no cliente VPN, será necessário ajustar essa configuração com a nova senha redefinida ao acessar o SDumont.
Essas diretrizes então em acordo com a Política de Segurança do LNCC. Para maiores informações.
Caso ocorra erro parecido com o descrito abaixo:
forrtl: severe (174): SIGSEGV, segmentation fault occurred
Image PC Routine Line Source
APP.............. 0000000001409B95 Unknown Unknown Unknown
APP.............. 00000000014077B7 Unknown Unknown Unknown
APP.............. 00000000013B8E74 Unknown Unknown Unknown
APP.............. 00000000013B8C86 Unknown Unknown Unknown
APP.............. 0000000001357E76 Unknown Unknown Unknown
APP.............. 000000000135DF30 Unknown Unknown Unknown
....
Adicionar as linhas abaixo no script de submissão, antes de iniciar a execução da aplicação:
ulimit -c unlimited ulimit -s unlimited
O sistema de VPN não suporta grandes taxas de transmissão de dados, prejudicando a transferência.
Estamos projetando a implementação de um servidor dedicado para poder realizar o upload/download dos dados de forma mais prática e eficiente, porém ainda sem data para entrar em produção.
A solução adotada por enquanto é a de realizar a cópia dos dados a partir do nó de login do SDumont para algum host acessível através da Internet, utiliza comandos como o scp (enviar e receber dados) ou wget (receber dados). Dessa forma, a comunicação de saída não passa pela VPN, possibilitando alcançar melhores taxas de transferência.
Caso ocorra erro parecido com o descrito abaixo:
DAPL ERR reg_mr Cannot allocate memory
Adicionar a linha abaixo no script de submissão, antes de iniciar a execução da aplicação:
export I_MPI_FABRICS=shm:ofa
Essa variável de ambiente configura a fabric a ser utilizada na comunicação dos processos MPI ao utilizar o Intel MPI. A primeira (shm) define a comunicação internamente no nó e a segunda (ofa) entre os nós.
Dessa forma a configuração para os requisitos de alocação de memória é realizada automaticamente.
Maiores informações: Selecting Fabrics | Intel® MPI Library for Linux
Há algumas formas de realizar essa tarefa. As mais simples estão listadas abaixo.
Essa é a forma mais simples. Se a aplicação não necessita utilizar parâmetros de entrada e é executada diretamente, é necessário apenas configurar o ambiente do SLURM corretamente.
O exemplo abaixo executará 48 vezes a mesma aplicação, sendo 24 em cada nó.
Script de submissão exemplo_1_simples.srm
#!/bin/bash
#SBATCH --nodes=2 #Numero de Nós
#SBATCH --ntasks-per-node=24 #Numero de tarefas por Nó
#SBATCH --ntasks=48 #Numero total de tarefas MPI
#SBATCH -p sequana_cpu_dev #Fila (partition) a ser utilizada
#SBATCH -J exemplo_1 #Nome job
#SBATCH --exclusive #Utilização exclusiva dos nós durante a execução do job
#Exibe os nós alocados para o Job
echo $SLURM_JOB_NODELIST
nodeset -e $SLURM_JOB_NODELIST
cd $SLURM_SUBMIT_DIR
#Configura o executavel
EXEC=/scratch/app/NPB3.3.1-MZ/bin/cg.C.x
#exibe informações sobre o executável
/usr/bin/ldd $EXEC
srun --resv-ports --nodes 1 --ntasks=24 $EXEC > $PWD/log1.txt &
srun --resv-ports --nodes 1 --ntasks=24 $EXEC > $PWD/log2.txt &
wait
No exemplo acima, executará 24 vezes o benchmark cg do NPB em cada um dos nós nós.
No exemplo anterior o job colocará a saída das execuções em um arquivo para cada execução do srun, agregando assim a saída de 24 execuções em um único arquivo de log, o que pode ficar confuso.
Uma forma de contornar isso é utilizar um script intermediário.
No exemplo abaixo, a linha do srun executará um script, que por sua vez executará as 24 instâncias da aplicação, direcionando a saída para arquivos diferentes.
Script de submissão exemplo_2_simples_com_script.srm
#!/bin/bash
#SBATCH --nodes=2 #Numero de Nós
#SBATCH --ntasks-per-node=24 #Numero de tarefas por Nó
#SBATCH --ntasks=48 #Numero total de tarefas MPI
#SBATCH -p sequana_cpu_dev #Fila (partition) a ser utilizada
#SBATCH -J exemplo_2 #Nome job
#SBATCH --exclusive #Utilização exclusiva dos nós durante a execução do job
#Exibe os nós alocados para o Job
echo $SLURM_JOB_NODELIST
nodeset -e $SLURM_JOB_NODELIST
cd $SLURM_SUBMIT_DIR
#Configura o script intermediario
SCRIPT=${PWD}/script_intermediario_2.sh
srun --resv-ports --nodes 1 --ntasks=1 -c 24 $SCRIPT log_run_node1 &
srun --resv-ports --nodes 1 --ntasks=1 -c 24 $SCRIPT log_run_node2 &
wait
script_intermediario_2.sh - *DEVE SER EXECUTÁVEL
#!/bin/bash
#Configura o executavel
EXEC=/scratch/app/NPB3.3.1-MZ/bin/cg.C.x
#Configura a variavel do log - passada por parametro pela execucao do srun
RUN_LOG=${1}
#Exibe informações sobre o executável
/usr/bin/ldd $EXEC
#Inicia as execucoes
$EXEC > ${PWD}/${RUN_LOG}_1_log.txt &
$EXEC > ${PWD}/${RUN_LOG}_2_log.txt &
$EXEC > ${PWD}/${RUN_LOG}_3_log.txt &
$EXEC > ${PWD}/${RUN_LOG}_4_log.txt &
$EXEC > ${PWD}/${RUN_LOG}_5_log.txt &
$EXEC > ${PWD}/${RUN_LOG}_6_log.txt &
$EXEC > ${PWD}/${RUN_LOG}_7_log.txt &
$EXEC > ${PWD}/${RUN_LOG}_8_log.txt &
$EXEC > ${PWD}/${RUN_LOG}_9_log.txt &
$EXEC > ${PWD}/${RUN_LOG}_10_log.txt &
$EXEC > ${PWD}/${RUN_LOG}_11_log.txt &
$EXEC > ${PWD}/${RUN_LOG}_12_log.txt &
$EXEC > ${PWD}/${RUN_LOG}_13_log.txt &
$EXEC > ${PWD}/${RUN_LOG}_14_log.txt &
$EXEC > ${PWD}/${RUN_LOG}_15_log.txt &
$EXEC > ${PWD}/${RUN_LOG}_16_log.txt &
$EXEC > ${PWD}/${RUN_LOG}_17_log.txt &
$EXEC > ${PWD}/${RUN_LOG}_18_log.txt &
$EXEC > ${PWD}/${RUN_LOG}_19_log.txt &
$EXEC > ${PWD}/${RUN_LOG}_20_log.txt &
$EXEC > ${PWD}/${RUN_LOG}_21_log.txt &
$EXEC > ${PWD}/${RUN_LOG}_22_log.txt &
$EXEC > ${PWD}/${RUN_LOG}_23_log.txt &
$EXEC > ${PWD}/${RUN_LOG}_24_log.txt &
wait
A utilização de parâmetros por parte do executável vai depender de cada caso. Se ele lê um arquivo de entrada, é possível criar um arquivo para cada execução independente.
Script de submissão exemplo_3_com_parametros_em_arquivo.srm
#!/bin/bash
#SBATCH --nodes=2 #Numero de Nós
#SBATCH --ntasks-per-node=24 #Numero de tarefas por Nó
#SBATCH --ntasks=48 #Numero total de tarefas MPI
#SBATCH -p sequana_cpu_dev #Fila (partition) a ser utilizada
#SBATCH -J exemplo_3 #Nome job
#SBATCH --exclusive #Utilização exclusiva dos nós durante a execução do job
#Exibe os nós alocados para o Job
echo $SLURM_JOB_NODELIST
nodeset -e $SLURM_JOB_NODELIST
cd $SLURM_SUBMIT_DIR
#Configura o script intermediario
SCRIPT=${PWD}/script_intermediario_3.sh
srun --resv-ports --nodes 1 --ntasks=1 -c 24 $SCRIPT run_node1 &
srun --resv-ports --nodes 1 --ntasks=1 -c 24 $SCRIPT run_node2 &
wait
#!/bin/bash
#Configura o executavel
EXEC=/scratch/app/NPB3.3.1-MZ/bin/cg.C.x
#Configura a variavel da execucao - passada por parametro pela execucao do srun
RUN=${1}
#Exibe informações sobre o executável
/usr/bin/ldd $EXEC
#Inicia as execucoes
$EXEC -f ${PWD}/${RUN}_1_entrada > ${PWD}/${RUN}_1_log.txt &
$EXEC -f ${PWD}/${RUN}_2_entrada > ${PWD}/${RUN}_2_log.txt &
$EXEC -f ${PWD}/${RUN}_3_entrada > ${PWD}/${RUN}_3_log.txt &
$EXEC -f ${PWD}/${RUN}_4_entrada > ${PWD}/${RUN}_4_log.txt &
$EXEC -f ${PWD}/${RUN}_5_entrada > ${PWD}/${RUN}_5_log.txt &
$EXEC -f ${PWD}/${RUN}_6_entrada > ${PWD}/${RUN}_6_log.txt &
$EXEC -f ${PWD}/${RUN}_7_entrada > ${PWD}/${RUN}_7_log.txt &
$EXEC -f ${PWD}/${RUN}_8_entrada > ${PWD}/${RUN}_8_log.txt &
$EXEC -f ${PWD}/${RUN}_9_entrada > ${PWD}/${RUN}_9_log.txt &
$EXEC -f ${PWD}/${RUN}_10_entrada > ${PWD}/${RUN}_10_log.txt &
$EXEC -f ${PWD}/${RUN}_11_entrada > ${PWD}/${RUN}_10_log.txt &
$EXEC -f ${PWD}/${RUN}_12_entrada > ${PWD}/${RUN}_11_log.txt &
$EXEC -f ${PWD}/${RUN}_13_entrada > ${PWD}/${RUN}_12_log.txt &
$EXEC -f ${PWD}/${RUN}_14_entrada > ${PWD}/${RUN}_13_log.txt &
$EXEC -f ${PWD}/${RUN}_15_entrada > ${PWD}/${RUN}_14_log.txt &
$EXEC -f ${PWD}/${RUN}_16_entrada > ${PWD}/${RUN}_15_log.txt &
$EXEC -f ${PWD}/${RUN}_17_entrada > ${PWD}/${RUN}_16_log.txt &
$EXEC -f ${PWD}/${RUN}_18_entrada > ${PWD}/${RUN}_17_log.txt &
$EXEC -f ${PWD}/${RUN}_19_entrada > ${PWD}/${RUN}_18_log.txt &
$EXEC -f ${PWD}/${RUN}_20_entrada > ${PWD}/${RUN}_19_log.txt &
$EXEC -f ${PWD}/${RUN}_21_entrada > ${PWD}/${RUN}_20_log.txt &
$EXEC -f ${PWD}/${RUN}_22_entrada > ${PWD}/${RUN}_21_log.txt &
$EXEC -f ${PWD}/${RUN}_23_entrada > ${PWD}/${RUN}_22_log.txt &
$EXEC -f ${PWD}/${RUN}_24_entrada > ${PWD}/${RUN}_23_log.txt &
wait
* Importante observar que nesse caso é necessário gerar previamente um arquivo de entrada diferente para cada execução.
É possível também passar diferentes parâmetros diretamente para o script.
Script de submissão exemplo_3.1_com_parametros_direto.srm
#!/bin/bash
#SBATCH --nodes=2 #Numero de Nós
#SBATCH --ntasks-per-node=24 #Numero de tarefas por Nó
#SBATCH --ntasks=48 #Numero total de tarefas MPI
#SBATCH -p sequana_cpu_dev #Fila (partition) a ser utilizada
#SBATCH -J exemplo_3.1 #Nome job
#SBATCH --exclusive #Utilização exclusiva dos nós durante a execução do job
#Exibe os nós alocados para o Job
echo $SLURM_JOB_NODELIST
nodeset -e $SLURM_JOB_NODELIST
cd $SLURM_SUBMIT_DIR
#Configura o script intermediario
SCRIPT=${PWD}/script_intermediario_3.1.sh
srun --resv-ports --nodes 1 --ntasks=1 -c 24 $SCRIPT parametro_1 parametro_2 parametro_3 parametro_4 parametro_5 parametro_6 parametro_7 parametro_8 parametro_9 parametro_10 parametro_11parametro_12 parametro_13 parametro_14 parametro_15 parametro_16 parametro_17 parametro_18 parametro_19 parametro_20 parametro_21 parametro_22 parametro_23 parametro_24 &
srun --resv-ports --nodes 1 --ntasks=1 -c 24 $SCRIPT parametro_25 parametro_26 parametro_27 parametro_28 parametro_29 parametro_30 parametro_31 parametro_32 parametro_33 parametro_34 parametro_35 parametro_36 parametro_37 parametro_38 parametro_39 parametro_40 parametro_41 parametro_42 parametro_43 parametro_44 parametro_45 parametro_46 parametro_47 parametro_48 &
wait
#!/bin/bash
#Configura o executavel
EXEC=/scratch/app/NPB3.3.1-MZ/bin/cg.C.x
#Exibe informações sobre o executável
/usr/bin/ldd $EXEC
#Inicia as execucoes
$EXEC ${1} &
$EXEC ${2} &
$EXEC ${3} &
$EXEC ${4} &
$EXEC ${5} &
$EXEC ${6} &
$EXEC ${7} &
$EXEC ${8} &
$EXEC ${9} &
$EXEC ${10} &
$EXEC ${11} &
$EXEC ${12} &
$EXEC ${13} &
$EXEC ${14} &
$EXEC ${15} &
$EXEC ${16} &
$EXEC ${17} &
$EXEC ${18} &
$EXEC ${19} &
$EXEC ${20} &
$EXEC ${21} &
$EXEC ${22} &
$EXEC ${23} &
$EXEC ${24} &
wait
* O script intermediário pega os 24 diferentes parâmetros de entrada e os distribui para as 24 execuções.
Uma outra forma seria criar diferentes scripts intermediários completos, cada um contando todos os parâmetros necessários, sem a necessidade de passar valores do script de submissão.
Script de submissão exemplo_4_com_scripts_completos.srm
#!/bin/bash
#SBATCH --nodes=2 #Numero de Nós
#SBATCH --ntasks-per-node=24 #Numero de tarefas por Nó
#SBATCH --ntasks=48 #Numero total de tarefas MPI
#SBATCH -p sequana_cpu_dev #Fila (partition) a ser utilizada
#SBATCH -J exemplo_4 #Nome job
#SBATCH --exclusive #Utilização exclusiva dos nós durante a execução do job
#Exibe os nós alocados para o Job
echo $SLURM_JOB_NODELIST
nodeset -e $SLURM_JOB_NODELIST
cd $SLURM_SUBMIT_DIR
srun --resv-ports --nodes 1 --ntasks=1 -c 24 ${PWD}/script_intermediario_4_completo.1.sh &
srun --resv-ports --nodes 1 --ntasks=1 -c 24 ${PWD}/script_intermediario_4_completo.2.sh &
wait
#!/bin/bash
#Configura o executavel
EXEC=/scratch/app/NPB3.3.1-MZ/bin/cg.C.x
#Exibe informações sobre o executável
/usr/bin/ldd $EXEC
#Inicia as execucoes
$EXEC parametro_1 parametro_2 .... parametro_N &
$EXEC parametro_1 parametro_2 .... parametro_N &
$EXEC parametro_1 parametro_2 .... parametro_N &
$EXEC parametro_1 parametro_2 .... parametro_N &
$EXEC parametro_1 parametro_2 .... parametro_N &
$EXEC parametro_1 parametro_2 .... parametro_N &
$EXEC parametro_1 parametro_2 .... parametro_N &
$EXEC parametro_1 parametro_2 .... parametro_N &
$EXEC parametro_1 parametro_2 .... parametro_N &
$EXEC parametro_1 parametro_2 .... parametro_N &
$EXEC parametro_1 parametro_2 .... parametro_N &
$EXEC parametro_1 parametro_2 .... parametro_N &
$EXEC parametro_1 parametro_2 .... parametro_N &
$EXEC parametro_1 parametro_2 .... parametro_N &
$EXEC parametro_1 parametro_2 .... parametro_N &
$EXEC parametro_1 parametro_2 .... parametro_N &
$EXEC parametro_1 parametro_2 .... parametro_N &
$EXEC parametro_1 parametro_2 .... parametro_N &
$EXEC parametro_1 parametro_2 .... parametro_N &
$EXEC parametro_1 parametro_2 .... parametro_N &
$EXEC parametro_1 parametro_2 .... parametro_N &
$EXEC parametro_1 parametro_2 .... parametro_N &
$EXEC parametro_1 parametro_2 .... parametro_N &
$EXEC parametro_1 parametro_2 .... parametro_N &
wait
#!/bin/bash
#Configura o executavel
EXEC=/scratch/app/NPB3.3.1-MZ/bin/cg.C.x
#Exibe informações sobre o executável
/usr/bin/ldd $EXEC
#Inicia as execucoes
$EXEC parametro_A parametro_B .... parametro_XZY &
$EXEC parametro_A parametro_B .... parametro_XZY &
$EXEC parametro_A parametro_B .... parametro_XZY &
$EXEC parametro_A parametro_B .... parametro_XZY &
$EXEC parametro_A parametro_B .... parametro_XZY &
$EXEC parametro_A parametro_B .... parametro_XZY &
$EXEC parametro_A parametro_B .... parametro_XZY &
$EXEC parametro_A parametro_B .... parametro_XZY &
$EXEC parametro_A parametro_B .... parametro_XZY &
$EXEC parametro_A parametro_B .... parametro_XZY &
$EXEC parametro_A parametro_B .... parametro_XZY &
$EXEC parametro_A parametro_B .... parametro_XZY &
$EXEC parametro_A parametro_B .... parametro_XZY &
$EXEC parametro_A parametro_B .... parametro_XZY &
$EXEC parametro_A parametro_B .... parametro_XZY &
$EXEC parametro_A parametro_B .... parametro_XZY &
$EXEC parametro_A parametro_B .... parametro_XZY &
$EXEC parametro_A parametro_B .... parametro_XZY &
$EXEC parametro_A parametro_B .... parametro_XZY &
$EXEC parametro_A parametro_B .... parametro_XZY &
$EXEC parametro_A parametro_B .... parametro_XZY &
$EXEC parametro_A parametro_B .... parametro_XZY &
$EXEC parametro_A parametro_B .... parametro_XZY &
$EXEC parametro_A parametro_B .... parametro_XZY &
wait
* Nesse caso é necessário um script específico para cada linha do srun.
* Esse script intermediário deverá conter todos os parâmetros necessários para a execução da aplicação, representados por “parametro_X.Y”
Ao submeter um job utilizando o OpenMPI 2.X, algumas aplicações apresentam o seguinte aviso no arquivo de log:
mxm.c:196 MXM WARN The 'ulimit -s' on the system is set to 'unlimited'. This may have negative performance implications. Please set the stack size to the default value (10240)
É possível configurar o job para enviar uma notificação através do e-mail. Para utilizar essa funcionalidade, é necessário configurar as linhas abaixo no script de submissão:
#SBATCH --mail-type=TIPO
#SBATCH --mail-user=DESTINO
- NONE: Não envia notificação por e-mail.
- BEGIN: Envia uma notificação por e-mail quando o job inicia.
- END: Envia uma notificação por e-mail quando o job finaliza.
- FAIL: Envia uma notificação por e-mail quando o job falha.
- REQUEUE: Envia uma notificação por e-mail quando o job é reenfileirado.
- ALL: Equivalente a BEGIN, END, FAIL e REQUEUE
- TIME_LIMIT: Envia uma notificação por e-mail quando o job atinge seu limite de tempo.
- TIME_LIMIT_90: Envia uma notificação por e-mail quando o job atinge 90% do seu limite de tempo.
- TIME_LIMIT_80: Envia uma notificação por e-mail quando o job atinge 80% do seu limite de tempo.
- TIME_LIMIT_50: Envia uma notificação por e-mail quando o job atinge 50% do seu limite de tempo.
- ARRAY_TASKS: Envia uma notificação por e-mail para cada tarefa do JOB ARRAY.
Múltiplos TIPOS podem ser especificados através de uma lista separada por vírgula.
Múltiplos DESTINOS também podem ser especificados através de uma lista separada por vírgula.
*ATENÇÃO: Ao configurar o envio de e-mail, verifique a caixa de Spam da sua conta se a notificação enviada pelo SLURM foi taxada como tal. Alguns servidores de E-Mail podem não identificar a notificação como um e-mail válido.
O Path para o diretório de SCRATCH de Parceiros e ICTs da Petrobras sempre será /scratch/parceirosbr.
De acordo com o projeto que estiver trabalhado você deverá utilizar o subdiretório correspondente.
Se você participar de apenas um projeto de parceiros e ICTs poderá customizar sua variável SCRATCH nos arquivos de configuração da sua conta (~/.bashrc por exemplo).
Devido as particularidades da infraestrutura dos parceiros e ICTs da Petrobras, não é possível definir a variável $SCRATCH da mesma forma que é feito para os usuários do LNCC.
Não. O SDumont não possui licença para softwares proprietários. Sendo assim, esse softwares devem ser adquiridos pelo usuário.
Sim. Todos os nós tem acesso a internet. Porém, o acesso é controlado. Havendo necessidade, é necessário entrar em contato com o Helpdesk e solicitar a liberação para o endereço de destino.
Os usuários podem realizar a instalação de softwares em sua área de dados. Os softwares que serão utilizados nos nós de processamento devem ser instalados em um subdiretório do /scratch/projeto. A equipe de suporte do SDumont também pode realizar a instalação dos softwares, mediante abertura de chamado.
Para evitar problema de permissão e conflitos com outras versões instaladas no cluster SDumont, orientamos que os pacotes python e/ou pacotes R sejam instalados dentro da sua área de SCRATCH, utilizando o Anaconda.
Para configurar o seu ambiente conda, siga as instruções descritas abaixo:
Carregar um dos módulos do anaconda instalados no cluster (Por exemplo):
module load anaconda3/2024.02_sequana
Criar o virtual env dentro da sua área de scratch. (Ajustar as versões, caso seja necessário ou deixar sem versão para que seja instalada a ultima versão disponível)
- PYTHON: conda create --prefix $SCRATCH/conda-env python=3.8
- R: conda create --prefix $SCRATCH/conda-env conda-forge::r-base
- PYTHON+R: conda create --prefix $SCRATCH/conda-env conda-forge::r-base conda-forge::python
source activate $SCRATCH/conda-env
Instalar o pacote:
pip3 install <NOME-DO-PACOTE>
ou
conda install <NOME-DO-PACOTE>
ou
R > install.packages("remotes", dependencies = TRUE) (Por exemplo
Desativar o ambiente criado: (se necessário)
conda deactivate
Dentro do script de submissão deve conter as seguintes linhas para a correta utilização:
module load anaconda3/<VERSÃO> source activate $SCRATCH/conda-env
Após seguir as indicações de como criar um ambiente virtual Python, para executar uma aplicação em python, basta executar diretamente no script de submissão. Não é obrigatório a utilização do comando srun, ao utilizar apenas um nó de computação. Se for utilizar uma submissão executando múltiplas tarefas em um único job, aí será necessário utilizar o comando srun.
- Exemplo de Script utilizando um único nó:
#!/bin/bash
#SBATCH --nodes=1 #Numero de Nós
#SBATCH --ntasks=1 #Numero total de tarefas MPI
#SBATCH -p sequana_cpu_dev #Fila (partition) a ser utilizada
#SBATCH -J python_1_no #Nome job
#Exibe os nós alocados para o Job
echo $SLURM_JOB_NODELIST
nodeset -e $SLURM_JOB_NODELIST
cd $SLURM_SUBMIT_DIR
#Carrega o modulo do anaconda
module load anaconda3/2024.02_sequana
#Ativar o virtual env
source activate $SCRATCH/conda-env
#executa o python
python meu_script.py
- Exemplo de Script utilizando um vários nós:
#!/bin/bash
#SBATCH --nodes=4 #Numero de Nós
#SBATCH --ntasks-per-node=1 #Numero de tarefas por Nó
#SBATCH --ntasks=4 #Numero total de tarefas MPI
#SBATCH -p sequana_cpu_dev #Fila (partition) a ser utilizada
#SBATCH -J python_4_no #Nome job
#Exibe os nós alocados para o Job
echo $SLURM_JOB_NODELIST
nodeset -e $SLURM_JOB_NODELIST
cd $SLURM_SUBMIT_DIR
#Carrega o modulo do anaconda
module load anaconda3/2024.02_sequana
#Ativar o virtual env
source activate $SCRATCH/conda-env
#executa o python
srun --nodes 1 --ntasks=1 python meu_script_1.py > 1.out 2>&1 &
srun --nodes 1 --ntasks=1 python meu_script_2.py > 2.out 2>&1 &
srun --nodes 1 --ntasks=1 python meu_script_3.py > 3.out 2>&1 &
srun --nodes 1 --ntasks=1 python meu_script_4.py > 4.out 2>&1 &
wait
Para instalar e executar corretamente o MPI4PY, é necessário carregar algum módulo MPI antes de executar o comando de instalação (pip install <PACOTE>). Abaixo descrevemos um processo de exemplo, usando o OpenMPI 4.1.4.
#Carregar um dos módulos do anaconda instalados no cluster
module load anaconda3/2024.02_sequana
#Cria o ambiente virtual do python
conda create --prefix $SCRATCH/conda-env/mpi4py python=3.12.8
#Ativar o ambiente virtual do python
source activate $SCRATCH/conda-env/mpi4py
#Carregar o módulo do OpenMPI
module load openmpi/gnu/4.1.4_sequana
#Remover o executável 'ld' (linker de bibliotecas) instalado pelo ANACONDA e criar um link simbólico para a utilizada pelo Sistema Operacional. Esse passo é necessário, pois o ld instalado pelo anaconda gera confusões e erros ao procurar pelas bibliotecas corretas utilizadas pelo MPI.
rm $SCRATCH/conda-env/mpi4py/compiler_compat/ld
ln -s /usr/bin/ld $SCRATCH/conda-env/mpi4py/compiler_compat/ld
#Instalar o MPI4PY
pip install mpi4py
#A saída deve ser algo como (a depender da versão do MPI4PY. Neste exemplo, foi instalada a versão 4.0.1)
...
Building wheels for collected packages: mpi4py
Building wheel for mpi4py (pyproject.toml) ... done
Created wheel for mpi4py: filename=mpi4py-4.0.1-cp312-cp312-linux_x86_64.whl size=1017571 sha256=72912c40e44ece22431a24fd4f93d3581a03562e28912f297de58a9e30b77800
...
Successfully built mpi4py
Installing collected packages: mpi4py
Successfully installed mpi4py-4.0.1
- Exemplo de script de submissão, usando 4 nós e 4 processos por nó, totalizando 16 processos, usando o script de demonstração demo/helloworld.py da própria distribuição do MPI4PY.
#!/bin/bash
#SBATCH --nodes=4 #Numero de Nós
#SBATCH --ntasks-per-node=4 #Numero de tarefas por Nó
#SBATCH --ntasks=16 #Numero total de tarefas MPI
#SBATCH -p sequana_cpu_dev #Fila (partition) a ser utilizada
#SBATCH -J python_4_no #Nome job
#Exibe os nós alocados para o Job
echo $SLURM_JOB_NODELIST
nodeset -e $SLURM_JOB_NODELIST
cd $SLURM_SUBMIT_DIR
#Carrega o modulo do anaconda
module load anaconda3/2024.02_sequana
#Ativar o virtual env
source activate $SCRATCH/conda-env/mpi4py
#executa o python
srun python -m mpi4py.bench helloworld
A saída, gerada no arquivo de log do job (slurm-XXXXXXXX.out) deverá ser algo parecido com:
Hello, World! I am process 0 of 16 on sdumont6XXX.
Hello, World! I am process 1 of 16 on sdumont6XXX.
Hello, World! I am process 2 of 16 on sdumont6XXX.
Hello, World! I am process 3 of 16 on sdumont6XXX.
Hello, World! I am process 4 of 16 on sdumont6XXY.
Hello, World! I am process 5 of 16 on sdumont6XXY.
Hello, World! I am process 6 of 16 on sdumont6XXY.
Hello, World! I am process 7 of 16 on sdumont6XXY.
Hello, World! I am process 8 of 16 on sdumont6XXZ.
Hello, World! I am process 9 of 16 on sdumont6XXZ.
Hello, World! I am process 10 of 16 on sdumont6XXZ.
Hello, World! I am process 11 of 16 on sdumont6XXZ.
Hello, World! I am process 12 of 16 on sdumont6XXW.
Hello, World! I am process 13 of 16 on sdumont6XXW.
Hello, World! I am process 14 of 16 on sdumont6XXW.
Hello, World! I am process 15 of 16 on sdumont6XXW.
A única solução homologada e permitida no SDumont é o Singularity. Conforme a documentação oficial, a aplicação oferece suporte aos containers Docker.
Mais detalhes sobre a utilização do Singularity e o suporte ao docker podem ser encontradas na documentação: User Guide.
Exemplos de jobs utilizando containers e executando através do singularity estão disponíveis aqui.