Aula 02: Acessando o Cluster Franky¶
Na Atividade 2, você irá executar as implementações que foram testadas na Atividade 1, mas agora no ambiente de um cluster HPC usando SLURM. O objetivo é observar como o ambiente de cluster, com sua capacidade de processamento paralelo, pode impactar o desempenho das operações computacionalmente intensivas que você já explorou.
Parte 0: Configurando seu acesso ao Cluster Franky¶
Para ter acesso ao Cluster Franky você precisa configurar suas credenciais de acesso e realizar acesso remoto via SSH.
Entre no Blackboard, navegue até a seção de materiais do curso onde a pasta com o par de chaves foi disponibilizada, Faça o download da pasta completa, que contém os arquivos id_rsa
(chave privada) e id_rsa.pub
(chave pública). Dependendo do sistema operacional que você utiliza, siga as instruções abaixo para configurar corretamente sua chave privada.
Para Macbook ou Linux:¶
Abra o terminal, navegue até a pasta onde a chave privada (id_rsa
) foi baixada, mova a chave para o diretório .ssh
em sua home:
mv id_rsa ~/.ssh/
Garanta que apenas você possa ler o arquivo:
chmod 400 ~/.ssh/id_rsa
Conecte-se ao cluster utilizando o comando SSH:
Substitua nome_da_pasta
pelo nome que está na pasta com as chaves que você baixou no BlackBoard e cluster_endereco
pelo endereço de IP fornecido durante a aula.
ssh -i ~/.ssh/id_rsa nome_da_pasta@ip_do_cluster
ssh nome_da_pasta@ip_do_cluster
Para Windows:¶
Usando OpenSSH :
Abra o PowerShell ou Windows Terminal. Navegue até a pasta onde a chave privada (id_rsa
) foi baixada, mova a chave para a pasta .ssh
em seu diretório de usuário:
mkdir $env:USERPROFILE\.ssh
mv id_rsa $env:USERPROFILE\.ssh\
Certifique-se de que as permissões estão corretas:
icacls $env:USERPROFILE\.ssh\id_rsa /inheritance:r /grant:r "$($env:USERNAME):(R)"
ssh -i $env:USERPROFILE\.ssh\id_rsa seu_usuario_insper@ip_do_cluster
Configurar o VS Code para Acesso Remoto ao Cluster**¶
Instale a Extensão Remote - SSH:
Abra o VS Code, vá para a aba de extensões (ícone de quadrado no lado esquerdo). Pesquise por "Remote - SSH" e instale a extensão oficial da Microsoft.
Configurar o Acesso Remoto:
Pressione Ctrl+Shift+P
(ou Cmd+Shift+P
no Mac) para abrir o painel de comandos.
Digite Remote-SSH: Add New SSH Host...
e selecione a opção.
Insira o comando SSH que você utilizou anteriormente:
ssh -i ~/.ssh/id_rsa nome_da_pasta@ip_do_cluster
~/.ssh/config
para Mac/Linux ou C:\Users\seu_usuario\.ssh\config
para Windows).
Pressione Ctrl+Shift+P
(ou Cmd+Shift+P
no Mac) novamente e digite Remote-SSH: Connect to Host...
. Selecione o host configurado.
O VS Code abrirá uma nova janela conectada ao ambiente remoto do cluster.
Gerenciar Projetos Remotamente:
Após a conexão, você pode abrir pastas e arquivos no cluster diretamente pelo VS Code.
Utilize os recursos do VS Code, como o terminal integrado e o debug para trabalhar no cluster Franky.
Executando a Atividade 0 no Cluster Franky usando SLURM¶
Um arquivo .slurm é usado para "lançar jobs" no sistema SLURM, especificando os recursos necessários para a execução, como memória, número de máquinas e núcleos. Nesse arquivo, também definimos como desejamos o output do executável e onde o sistema pode encontrar o arquivo a ser executado. Como a equipe que gerencia o Cluster definiu que os jobs sejam lançados apenas da pasta SCRATCH, podemos omitir o caminho do arquivo nos nossos arquivos .slurm.
Warning
As instruções #SBATCH são tecnicamente consideradas "comentários" pelo interpretador de comandos do shell (bash), mas não são realmente ignoradas. Quando você escreve um script para ser executado pelo SLURM, o bash interpreta as linhas #SBATCH como comentários normais, enquanto o gerenciador de jobs SLURM interpreta essas mesmas linhas como diretivas que definem como o job deve ser executado.
Tip
Não é necessário neste momento, mas se você quiser transferir arquivos da sua máquina para o cluster e vice versa, você pode usar o comando scp mais detalhes aqui
Crie um script de submissão .slurm para cada implementação utilizando os exemplos abaixo. Esse script será utilizado para enviar o job ao cluster.
Script SLURM para o código em Python:
matriz_mult_python.slurm
#!/bin/bash
#As instruções SBATCH não devem ser descomentadas
#SBATCH --job-name=mult_matriz_py
# define o nome do job. Esse nome aparece nas listas de jobs e é útil para identificar o job.
#SBATCH --output=mult_matriz_py.out
# Especifica o arquivo onde a saída padrão (stdout) do job será salva.
#SBATCH --ntasks=1
# Define o número de tarefas que o job executará. Neste caso, o job executa uma única tarefa.
#SBATCH --time=00:10:00
# Define o tempo máximo de execução para o job. Neste caso, o job tem um tempo limite de 10 minutos. Se o job exceder esse tempo, ele será automaticamente encerrado.
#SBATCH --partition=normal
# Especifica a partição (ou fila) onde o job será submetido. Aqui, o job será submetido a fila "normal".
python3 mult_matriz_py.py
#Executa o programa python3 dentro do nó de computação.
Script SLURM para arquivos C++:
Como o C++ é uma linguagem que requer compilação, precisamos gerar o executável antes de preparar o arquivo .slurm.
Dentro da pasta SCRATCH, compile seu código .cpp para gerar o binário.
g++ mult_matriz_cpp.cpp -o mult_matriz_cpp
matriz_mult_cpp.slurm
#!/bin/bash
#SBATCH --job-name=matriz_mult_cpp
# Define o nome do job como "matrix_mult_openmp". Esse nome aparece nas listas de jobs e é útil para identificar o job.
#SBATCH --output=matriz_mult_cpp.out
# Especifica o arquivo onde a saída padrão (stdout) do job será salva.
#SBATCH --ntasks=1
# Define o número de tarefas que o job executará. Neste caso, o job executa uma única tarefa.
#SBATCH --time=00:10:00
# Define o tempo máximo de execução para o job. Neste caso, o job tem um tempo limite de 10 minutos. Se o job exceder esse tempo, ele será automaticamente encerrado.
#SBATCH --partition=normal
# Especifica a partição (ou fila) onde o job será submetido. Aqui, o job será submetido a fila "normal".
./mult_matriz_cpp
# Executa o programa compilado "mult_matriz_cpp" dentro do nó de computação.
Script SLURM para arquivos C++ com Paralelismo:
Ao utilizar o OpenMP para paralelizar códigos em C++, é necessário incluir a flag apropriada durante a compilação. Essa flag informa ao compilador para interpretar corretamente as diretivas OpenMP no código e gerar o binário de forma adequada.
g++ -fopenmp mult_matriz_paralelo.cpp -o mult_matriz_paralelo
matriz_mult_paralelo.slurm
#!/bin/bash
#SBATCH --job-name=matriz_mult_paralelo
# Define o nome do job como "matrix_mult_paralelo". Esse nome aparece nas listas de jobs e é útil para identificar o job.
#SBATCH --output=matriz_mult_paralelo.out
# Especifica o arquivo onde a saída padrão (stdout) do job será salva.
#SBATCH --ntasks=1
# Define o número de tarefas que o job executará. Neste caso, o job executa uma única tarefa.
#SBATCH --cpus-per-task=4
# Especifica o número de CPUs que devem ser alocadas para esta tarefa.
#SBATCH --time=00:10:00
# Define o tempo máximo de execução para o job. Neste caso, o job tem um tempo limite de 10 minutos. Se o job exceder esse tempo, ele será automaticamente encerrado.
#SBATCH --partition=normal
# Especifica a partição (ou fila) onde o job será submetido. Aqui, o job será submetido a fila "normal".
./mult_matriz_paralelo
# Executa o programa compilado "mult_matriz_paralelo" dentro do nó de computação.
Parte 2: Execução das Implementações no Cluster¶
Submissão dos Jobs:
Utilize o comando sbatch
para submeter cada script SLURM ao cluster.
Exemplo:
sbatch matriz_mult_python.slurm
sbatch matriz_mult_cpp.slurm
sbatch matriz_mult_paralelo.slurm
Monitoramento dos Jobs:
Use o comando squeue
para monitorar o status dos jobs.
Exemplo:
squeue
Análise dos Resultados:
Após a execução dos jobs, os resultados estarão disponíveis nos arquivos .out
especificados em cada script SLURM.
-
Compare os tempos de execução dos três métodos (Python, C++, C++ com OpenMP) no cluster.
-
Analise como o paralelismo afeta o desempenho no ambiente do cluster, em comparação com sua execução local.
Tip
Se quiser explorar mais os comandos do SLURM, temos uma material aqui que pode te ajudar
Entrega Atividade 2 - Relatório de Desempenho:
-
Prepare um relatório detalhado, incluindo gráficos que mostrem a relação entre o tamanho das matrizes e o tempo de execução para cada implementação.
-
Discuta o impacto do ambiente HPC no desempenho das operações e como o paralelismo pode escalar em um cluster de múltiplos nós.
-
Submeta seu relatório até as 23h59 de 10/02 pelo Classroom, disponível no Blackboard.
Nesta atividade, você explorou como o ambiente de cluster, pode ser utilizado para otimizar e acelerar operações que são intensivas em termos computacionais. Isso oferece uma base sólida para entender como tarefas de grande escala, como o processamento de big data ou o treinamento de modelos de IA, podem ser significativamente aceleradas com HPC.