NAMD - lncc-sered/manual-sdumont2nd GitHub Wiki

Table of Contents

NAMD

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ó.

Compilada

CPU AMD GENOA

  • Versão 3.0.1, com binários pré-compilados: singlenode-multicore
Script sub_namd_cpu_multicore.srm:
#!/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
  1. 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
Script sub_namd_cpu_multinode+multicore.srm:
#!/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
  1. 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.
  2. 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!

NVidia Container

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.

Arquitetura GPU H100

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
  1. 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.
  2. OBS: O argumento +devices especifica as GPUs usadas, devendo ser ajustada utilizando a variável de ambiente $CUDA_VISIBLE_DEVICES.

Arquitetura GPU GH200

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
  1. 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.
  2. OBS: O argumento +devices especifica as GPUs usadas, devendo ser ajustada utilizando a variável de ambiente $CUDA_VISIBLE_DEVICES.
Início
⚠️ **GitHub.com Fallback** ⚠️