Skip to content

Passo-a-passo para submeter um job para o Cluster Carbono utilizando Miniconda, Pytorch e CUDA.

Notifications You must be signed in to change notification settings

jpgois/tutorial-GPU-expresso

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 

Repository files navigation

Passo-a-passo-GPU-super-expresso

Passo-a-passo que realizei para submeter um job para o Cluster Carbono utilizando Miniconda, Pytorch e CUDA. Talvez não sejam necessários todos estes passos. Então, fiquem a vontade para entrarem em contato para aprimorarmos este documento.


Atenção: Este passo a passo não funcionou adequadamente quando tentei compilar o código do Neuralangelo. Tentei carregar dois modulos

  • nvhpc/23.5-gcc-12.2.0-23kbozl
  • cuda/12.2-gcc-12.2.0-cexgeyz e então compilar novamente. Aguardando para ver se funciona.

  1. Loguei na HPC (se voce estiver dentro da UFABC, não é necessário logar primeiramente na HPC):
  1. Loguei na Carbono
ssh carbono.ufabc.int.br
  1. Uma vez dentro da Carbono, carreguei o Miniconda para construir os ambientes (envs).
  2. Utilizei o Miniconda que está disponível como módulo.
  3. Consultei os módulos com o comando:
module avail
  1. Carreguei o módulo Miniconda:
module load miniconda3/22.11.1-gcc-12.2.0-qnqpe5k
  1. Inicializei o Conda
conda init
  1. Saí e entrei novamente no cluster e notei que o Conda já estava sendo carregado (com o env base) :
(base) [foo.bar@carbono ~]$

OBS: Caso o Conda não esteja sendo inicializado quando voce loga na Carbono, tente incluir estas linhas no seu arquivo .bashrc

# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/opt/spack/opt/spack/linux-oracle8-x86_64/gcc-12.2.0/miniconda3-22.11.1-qnqpe5kjmlj72r2lv6k4dffgsepien
22/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
    eval "$__conda_setup"
else
    if [ -f "/opt/spack/opt/spack/linux-oracle8-x86_64/gcc-12.2.0/miniconda3-22.11.1-qnqpe5kjmlj72r2lv6k4dffgsepien22/et
c/profile.d/conda.sh" ]; then
        . "/opt/spack/opt/spack/linux-oracle8-x86_64/gcc-12.2.0/miniconda3-22.11.1-qnqpe5kjmlj72r2lv6k4dffgsepien22/etc/
profile.d/conda.sh"
    else
        export PATH="/opt/spack/opt/spack/linux-oracle8-x86_64/gcc-12.2.0/miniconda3-22.11.1-qnqpe5kjmlj72r2lv6k4dffgsep
ien22/bin:$PATH"
    fi
fi
unset __conda_setup
# <<< conda initialize <<<
  1. Criei um env específico para teste com GPU utilizando o Pytorch, com a seguinte sequência de comandos:
conda env list
conda create --name basetorch
conda activate basetorch
conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia

OBS: Uma vez o Conda configurado, não é necessário repetir os passos 3-9.

  1. Voce consegue ver as partições que o Cluster contém com o comando:
sinfo
  1. No caso da Carbono, duas delas tem GPUs, que são as partições metano (Nvidia A30) e a etileno (Nvidia A40).

  2. Utilizei o seguinte código em Python, salvo como checktorchgpu.py, para testar se a GPU estava visível:

import torch

# Verificar se há GPUs disponíveis
if torch.cuda.is_available():
    # Exibir informações sobre as GPUs
    for i in range(torch.cuda.device_count()):
        print("Nome da GPU:", torch.cuda.get_device_name(i))
        print("Disponível para uso:", torch.cuda.is_available())
        print("Memória total:", torch.cuda.get_device_properties(i).total_memory)
else:
    print("Nenhuma GPU encontrada.")
  1. E o seguinte script bash, salvo como scriptTorchGPU.sh, para submeter este código para o Cluster
#!/bin/bash
#SBATCH --job-name=jpg_testGPU
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=2
#SBATCH --gres=gpu:2
#SBATCH --output testGPU-%j.out
#SBATCH --error testGPU-%j.err
#SBATCH --partition metano

# module load cuda/12.2-gcc-12.2.0-cexgeyz

# ACTIVATE ANACONDA

eval "$(conda shell.bash hook)"

conda activate basetorch

# RUN BENCHMARK
python3 -u checktorchgpu.py
  1. Finalmente, para rodar este código:
 sbatch scriptTorchGPU.sh
  1. Que gerou como saída dois arquivos, testGPU-1793.err e testGPU-1793.out, onde 1793 é o número do processo. O .err estava vazio e o .out continha:
Nome da GPU: NVIDIA A30
Disponível para uso: True
Memória total: 25231032320
Nome da GPU: NVIDIA A30
Disponível para uso: True
Memória total: 25231032320

Isto é, o programa Python encontrou duas A30.


Agradecimentos: Este passo-a-passo teve como ponto de partida o Tutorial do Oliveiras96.

About

Passo-a-passo para submeter um job para o Cluster Carbono utilizando Miniconda, Pytorch e CUDA.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published