NAMD - lncc-sered/manual-sdumont2nd GitHub Wiki
Página oficial, com documentação
Teste utilizando o dataset ApoA1 (92.224 atoms) do repositório oficial.
Baixar o arquivo de entrada:
cd $SCRATCH wget https://www.ks.uiuc.edu/Research/namd/benchmarks/systems/apoa1_gpu.tar.gz tar -zxvr apoa1_gpu.tar.gz cd apoa1_gpu
Todos os exemplos utilizam 1 nó e 1 GPU por nó.
- Versão 3.0.1, com binários pré-compilados: singlenode-multicore
#!/bin/bash
#SBATCH --nodes=1
#SBATCH --ntasks=192
#SBATCH -p lncc-cpu_amd_dev
#SBATCH -J namd+apoa1+cpu
#Exibe os nos alocados para o Job
echo $SLURM_JOB_NODELIST
nodeset -e $SLURM_JOB_NODELIST
cd $SLURM_SUBMIT_DIR
#Carrega o ambiente
module load arch_cpu_amd
module load namd/3.0_multicore
export EXEC=$(which namd3)
$EXEC +p${SLURM_NTASKS} apoa1.namd
O desempenho obtido para esse teste foi de:
PERFORMANCE: 500 averaging 10.082 ns/day, 0.00856969 sec/step with standard deviation 0.00597542
- OBS: O argumento +p é usado para especificar o número de núcleos (cores ou tarefas) a serem usados, devendo ser configurado de acordo com o número de tarefas do job (--ntasks ou --ntasks-per-node), bastando utilizar a variável de ambiente ${SLURM_NTASKS} conforme o exemplo.
- Versão 3.0.1, com binários pré-compilados: multinode-multicore
#!/bin/bash
#SBATCH --nodes=2
#SBATCH --ntasks-per-node=96
#SBATCH -p lncc-cpu_amd_dev
#SBATCH -J namd+apoa1+cpu
#Exibe os nos alocados para o Job
echo $SLURM_JOB_NODELIST
nodeset -e $SLURM_JOB_NODELIST
cd $SLURM_SUBMIT_DIR
#Carrega o ambiente
module load arch_cpu_amd
module load namd/3.0_multinode
export EXEC=$(which namd3)
charmrun +p$SLURM_NTASKS ++mpiexec ++remote-shell mpiexec $EXEC apoa1.namd
O desempenho obtido para esse teste foi de:
PERFORMANCE: 500 averaging 0.852321 ns/day, 0.10137 sec/step with standard deviation 0.0672974
- OBS¹: O argumento +p é usado para especificar o número de núcleos (cores ou tarefas) a serem usados, devendo ser configurado de acordo com o número de tarefas do job (--ntasks ou --ntasks-per-node), bastando utilizar a variável de ambiente ${SLURM_NTASKS} conforme o exemplo.
- OBS²: O desempenho obtido com essa execução foi menor do que o observado com a execução "singlenode-multicore". Então, recomendamos utilizar essa versão apenas em casos específicos. Ajustes dos parâmetros de execução para melhorar o desempenho ficam à cargo do usuário!
Referência: https://catalog.ngc.nvidia.com/orgs/hpc/containers/namd
Lista de versões (tags) disponíveis em: https://catalog.ngc.nvidia.com/orgs/hpc/containers/namd/tags
Versão do exemplo: 3.0.1
As imagens dos container disponíveis no catálogo da NVidia e compatíveis com o SDumont2nd já está presentes dentro do sistema de armazenamento, não sendo necessário o Download.
Os módulos disponíveis, conforme exemplos abaixo, configuram a variável de ambiente $NAMD_IMAGE com o caminho correto da imagem, visando facilitar a utilização do script.
Script sub_namd_container_nvidia_h100.srm:
#!/bin/bash
#SBATCH --nodes=1
#SBATCH --ntasks=24
#SBATCH --ntasks-per-node=24
#SBATCH --gpus-per-node=1
#SBATCH -p lncc-h100_dev
#SBATCH -J namd+apoa1+container-nvidia
#Exibe os nos alocados para o Job
echo $SLURM_JOB_NODELIST
nodeset -e $SLURM_JOB_NODELIST
cd $SLURM_SUBMIT_DIR
#Carrega o ambiente
module load arch_gpu
module load namd/3.0_nv_container
export NAMD_EXE=namd3
export SINGULARITY="singularity run --nv -B ${PWD}:/host_pwd --pwd /host_pwd $NAMD_IMAGE"
$SINGULARITY $NAMD_EXE +p${SLURM_NTASKS} +devices $CUDA_VISIBLE_DEVICES apoa1_gpures_nve.namd
O desempenho obtido para esse teste foi de:
PERFORMANCE: 295000 averaging 283.237 ns/day, 0.00061009 sec/step with standard deviation 6.39566e-06
- OBS: O argumento +p é usado para especificar o número de núcleos (cores ou tarefas) a serem usados, devendo ser configurado de acordo com o número de tarefas do job (--ntasks), bastando utilizar a variável de ambiente ${SLURM_NTASKS} conforme o exemplo.
- OBS: O argumento +devices especifica as GPUs usadas, devendo ser ajustada utilizando a variável de ambiente $CUDA_VISIBLE_DEVICES.
ATENÇÃO: O container disponibilizado pela NVidia para essa arquitetura não funcionou corretamente com o benchmark descrito acima (ApoA1 para GPU), devido a algumas diretivas do arquivo de configuração não suportadas. O benchmark stmv_nve_cuda.namd descrito aqui transcorreu sem erros. Abaixo o script utilizado em nossos testes.
Script sub_namd_container_nvidia_gh200.srm:
#!/bin/bash
#SBATCH --nodes=1
#SBATCH --ntasks=72
#SBATCH --ntasks-per-node=72
#SBATCH --gpus-per-node=1
#SBATCH -p lncc-gh200_dev
#SBATCH -J namd+apoa1+container-nvidia_gh200
#Exibe os nos alocados para o Job
echo $SLURM_JOB_NODELIST
nodeset -e $SLURM_JOB_NODELIST
cd $SLURM_SUBMIT_DIR
#Carrega o ambiente
module load arch_gpu_sc
module load namd/3.0_nv_container
export NAMD_EXE=namd3
export SINGULARITY="singularity run --nv -B ${PWD}:/host_pwd --pwd /host_pwd $NAMD_IMAGE"
$SINGULARITY $NAMD_EXE +p${SLURM_NTASKS} +devices $CUDA_VISIBLE_DEVICES stmv_nve_cuda.namd
- OBS: O argumento +p é usado para especificar o número de núcleos (cores ou tarefas) a serem usados, devendo ser configurado de acordo com o número de tarefas do job (--ntasks), bastando utilizar a variável de ambiente ${SLURM_NTASKS} conforme o exemplo.
- OBS: O argumento +devices especifica as GPUs usadas, devendo ser ajustada utilizando a variável de ambiente $CUDA_VISIBLE_DEVICES.