LAMMPS - lncc-sered/manual-sdumont2nd GitHub Wiki

Table of Contents

LAMMPS

Página oficial, com documentação

Teste utilizando o exemplo "Lennard Jones = atomic fluid with Lennard-Jones potential".

Baixar o arquivo de entrada:

 cd $SCRATCH
 wget https://www.lammps.org/inputs/in.lj.txt

Todos os exemplos abaixo utilizam 1 nó e 1 GPU.

Compilada

Referência, lista de versões e documentação para LAMMPS GPU disponíveis para em: https://docs.lammps.org/Speed_gpu.html

Arquitetura GPU H100

Versão do exemplo: 29Ago2024

Os principais comandos, que exemplificam alguns senários prováveis está listados abaixo:

# 1 tarefa MPI usa 1 GPU
lmp -sf gpu -pk gpu 1 -in in.script

# 12 tarefas MPI compartilham 2 GPUs em um único 
mpirun -np 12 lmp -sf gpu -pk gpu 2 -in in.script

# Ou a mesma tarefa acima utilizando 4 nós 
mpirun -np 48 -ppn 12 lmp -sf gpu -pk gpu 2 -in in.script

Foram adicionadas informações de ajuda ao modulo acessível com o comando abaixo, onde é possível também verificar os alias criados para execução simplificada do lammps e Kokkos em somente uma gpu. Para acessar o modo ajuda do modulo digite o comando abaixo: ou somente o comando "module help lammps/2024.8_openmpi-5.0_gnu" caso os módulos anteriores já estejam carregados:

module load arch_gpu/current && lammps/2024.8_openmpi-5.0_gnu && module help lammps/2024.8_openmpi-5.0_gnu
### RESULTADO DO COMANDO ###
----------------- Module Specific Help for "lammps/2024.8_openmpi-5.0_gnu" -----------------

LAMMPS (Large-scale Atomic/Molecular Massively Parallel Simulator)
Versao: 29Ago2024 compilada com suporte a GPU e OpenMPI 5.0.5.1.0

Funcionalidades:
  - Executavel principal: lmp
  - Potenciais instalados em: $LAMMPS_POTENTIALS_PATH
  - Scripts de benchmark em: $LAMMPS_BENCH_PATH

Exemplos de uso com GPU:
  mpirun -np 4 lmp -sf gpu -pk gpu 1 < in.lj
  lmp -k on g 1 -sf kk < in.lj

Foram criados alias para execucao simplificada do lammps e Kokkos em uma gpu
Alias para facilitar execucao do LAMMPS com GPU via MPI: O alias lmp-one-gpu executa o comand
o -> lmp -sf gpu -pk gpu 1
Alias para facilitar a execucao usando o pacote Kokkos (opcao alternativa de GPU). O alias lm
p-one-kokkos executa o comando -> lmp -k on g 1 -sf kk
 
OBS: A variavel de ambiente OMP_NUM_THREADS nao esta definida por padrao.
     Isso significa que o LAMMPS usara apenas 1 thread OpenMP por processo MPI.
### FINAL DO RESULTADO DO COMANDO ###

Para sua comodidade tambémo exemplo de script SLURM abaixo possui a variável "EXEC=lmp", sendo necessário somente a modificação das flag do LAMMPS e arquivos de input. Caso seja de sua preferência utilize seu comando personalizado ao final deste script SLURM, substituindo a linha "srun -n $SLURM_NTASKS $EXEC -sf gpu -in in.lj.txt" por "srun SEU-COMANDO"

#!/bin/bash
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=12
#SBATCH --ntasks=12
#SBATCH --gpus-per-node=1
#SBATCH -p lncc-h100_dev
#SBATCH -J lammps+LJ+compilado+GPU

# Exibe os nós alocados para o Job
echo $SLURM_JOB_NODELIST
nodeset -e $SLURM_JOB_NODELIST

cd $SLURM_SUBMIT_DIR

module load arch_gpu
module load lammps/2024.8_openmpi-5.0_gnu

# Executável compilado com suporte a GPU
EXEC=lmp

# Executa o exemplo com aceleração GPU
srun -n $SLURM_NTASKS $EXEC -sf gpu -in in.lj.txt

Arquitetura APU MI300A

O suporte à GPU dessa arquitetura é implementada apenas através do Kokkos como pacote de aceleração. Na documentação oficial há a seguinte nota:

When using a GPU, you will achieve the best performance if your input script does not use fix or compute styles which are not yet Kokkos-enabled. This allows data to stay on the GPU for multiple timesteps, without being copied back to the host CPU. Invoking a non-Kokkos fix or compute, or performing I/O for thermo or dump output will cause data to be copied back to the CPU incurring a performance penalty.

Script sub_lammps_compilado_mi300a.srm:

#!/bin/bash
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=24
#SBATCH --gpus-per-node=1
#SBATCH -p lncc-mi300a_dev
#SBATCH -J lammps+HEAT+compilado

#Exibe os nos alocados para o Job
echo $SLURM_JOB_NODELIST
nodeset -e $SLURM_JOB_NODELIST

cd $SLURM_SUBMIT_DIR

#Carrega o modulo do lammps
module load arch_apu_amd
module load lammps/27Jun2024_openmpi-4.1_amd


#Configura o executavel
EXEC=$(which lmp)

export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK
export OMP_PROC_BIND=spread
export OMP_PLACES=threads

ldd $EXEC

#configura a quantidade de gpus disponiveis
gpu_count=${1:-$(amd-smi list | grep GPU | wc -l)}

srun --mpi=pmi2 $EXEC -k on g ${gpu_count} t $SLURM_CPUS_PER_TASK -sf kk -pk kokkos gpu/aware on neigh full comm device binsize 2.8 -in  in.lj.txt

NVidia Container

Referência: https://catalog.ngc.nvidia.com/orgs/hpc/containers/lammps

Lista de versões (tags) disponíveis em: https://catalog.ngc.nvidia.com/orgs/hpc/containers/lammps/tags

Versão do exemplo: 15Jun2023

ATENÇÃO: Os Containers fornecidos pela NVidia implementam apenas o Kokkos como pacote de aceleração para utilizar GPUs. Na documentação oficial há a seguinte nota:

When using a GPU, you will achieve the best performance if your input script does not use fix or compute styles which are not yet Kokkos-enabled. This allows data to stay on the GPU for multiple timesteps, without being copied back to the host CPU. Invoking a non-Kokkos fix or compute, or performing I/O for thermo or dump output will cause data to be copied back to the CPU incurring a performance penalty.

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 $LAMMPS_IMAGE com o caminho correto da imagem, visando facilitar a utilização do script.

Baixar o

Arquitetura GPU H100

Script sub_lammps_container_nvidia_h100.srm:

#!/bin/bash
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=24
#SBATCH --ntasks=24
#SBATCH --gpus-per-node=1
#SBATCH -p lncc-h100_dev
#SBATCH -J lammps+LJ+container-nvidia

#Exibe os nos alocados para o Job
echo $SLURM_JOB_NODELIST
nodeset -e $SLURM_JOB_NODELIST

cd $SLURM_SUBMIT_DIR

#carrega os modulos de ambiente
module load arch_gpu
module load lammps/15Jun2023_nv_container

#configura a quantidade de gpus disponiveis
gpu_count=${1:-$(nvidia-smi --list-gpus | wc -l)}

export SINGULARITY="singularity run --nv -B ${PWD}:/host_pwd --pwd /host_pwd $LAMMPS_IMAGE"
srun --mpi=pmi2 $SINGULARITY lmp -k on g ${gpu_count} -sf kk -pk kokkos cuda/aware on neigh full comm device binsize 2.8 -in  in.lj.txt

Arquitetura GPU GH200

Script sub_lammps_container_nvidia_gh200.srm:

#!/bin/bash
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=72
#SBATCH --ntasks=72
#SBATCH --gpus-per-node=1
#SBATCH -p lncc-gh200_dev
#SBATCH -J lammps+LJ+container-nvidia

#Exibe os nos alocados para o Job
echo $SLURM_JOB_NODELIST
nodeset -e $SLURM_JOB_NODELIST

cd $SLURM_SUBMIT_DIR

#carrega os modulos de ambiente
module load arch_gpu_sc
module load lammps/15Jun2023_nv_container

#configura a quantidade de gpus disponiveis
gpu_count=${1:-$(nvidia-smi --list-gpus | wc -l)}

export SINGULARITY="singularity run --nv -B ${PWD}:/host_pwd --pwd /host_pwd $LAMMPS_IMAGE"
srun --mpi=pmi2 $SINGULARITY lmp -k on g ${gpu_count} -sf kk -pk kokkos cuda/aware on neigh full comm device binsize 2.8 -in  in.lj.txt

⚠️ **GitHub.com Fallback** ⚠️