目录
应用简介
NAMD (Nanoscale Molecular Dynamics) 是一款主流的开源分子动力学模拟软件,由美国伊利诺伊大学香槟分校 (UIUC) 理论与计算生物物理研究组 (TCBG) 和并行程序设计实验室 (PPL) 联合开发,曾获得2002 年Gordon Bell Award和2012年 Sidney Fernbach Award。NAMD是建立在并行编程模型Charm++之上的开源分子动力学模拟软件,可以运行在从个人电脑、工作站直到大规模并行的计算机等各种不同类型的计算设备上。借助Charm++提供的消息传递与负载均衡功能,NAMD有效解决了大规模并行计算过程中负载不平衡的问题,实现了良好的可扩展性。同时,NAMD也始终紧跟先进计算硬件设施的发展,不断推出最新计算设备上的移植版本。基于目前最强大的CPU+GPU异构计算机,NAMD已经实现了20亿原子数量级的分子动力学模拟。
编译安装
HIP版NAMD源代码可以从以下仓库下载:
https://cancon.hpccube.com:65024/1/main/DTK-23.10_hpcapps-20231120/NFS3.2_CentOS7.6
首先需要编译安装charm,根据底层通信库的不同,charm可以编译为多种版本。通常单节点内使用时可以编译为multicore版,需要多节点并行且需要使用GPU加速时,可以编译为ucx版。charm编译完成后在编译namd。
multicore版本编译步骤:
进入NAMD顶层目录,按照如下步骤进行安装:
tar -zxvf charm-6.10.2.tar.gz && ln -s charm-v6.10.2/ charm
tar -zxvf fftw-linux-x86_64.tar.gz && mv linux-x86_64/ fftw
tar -zxvf tcl8.5.9-linux-x86_64.tar.gz && mv tcl8.5.9-linux-x86_64 tcl
tar -zxvf tcl8.5.9-linux-x86_64-threaded.tar.gz && mv tcl8.5.9-linux-x86_64-threaded tcl-threaded
cd charm
./build charm++ multicore-linux-x86_64 --with-production --enable-error-checking
cd ..
./config Linux-x86_64-g++ --charm-arch multicore-linux-x86_64 --with-hip --rocm-prefix $ROCM_PATH --hipcub-prefix ${ROCM_PATH}/hipcub --rocprim-prefix ${ROCM_PATH}/rocprim
cd Linux-x86_64-g++/
make
ucx版需要ucx、pmix、hpcx。进入NAMD顶层目录:
tar -zxvf charm-6.10.2.tar.gz && ln -s charm-v6.10.2/ charm
tar -zxvf fftw-linux-x86_64.tar.gz && mv linux-x86_64/ fftw
tar -zxvf tcl8.5.9-linux-x86_64.tar.gz && mv tcl8.5.9-linux-x86_64 tcl
tar -zxvf tcl8.5.9-linux-x86_64-threaded.tar.gz && mv tcl8.5.9-linux-x86_64-threaded tcl-threaded
cd charm
./build charm++ ucx-linux-x86_64 ompipmix smp --with-production --enable-error-checking --basedir=${pmix_path} --basedir=${ucx_path} --basedir=${hpcx_path} -j4
cd ..
./config Linux-x86_64-g++ --charm-arch ucx-linux-x86_64-ompipmix-smp --with-hip --rocm-prefix $ROCM_PATH --hipcub-prefix ${ROCM_PATH}/hipcub --rocprim-prefix ${ROCM_PATH}/rocprim
cd Linux-x86_64-g++/
make
相关目录需根据实际情况进行修改,make 完成后,Linux-x86_64-g++目录将包含如下目录和文件:
charmrun colvars flipbinpdb flipdcd inc lepton Make.config Make.depends Makefile namd2 namd3 obj plugins psfgen sb sortreplicas src
测试算例
实际进行一个分子动力学模拟通常需要手动制定所需研究体系的输入文件。可以参考http://www.ks.uiuc.edu/Training/Tutorials/namd/namd-tutorial-unix-html/index.html从头开始制作一个典型的NAMD算例:
NAMD通常包含一下几种输入文件:
- 蛋白质数据文件(pdb)
- 蛋白质结构文件(psf)
- 力场参数文件
- 输入配置文件
不过在运行程序阶段,用户直接操作的只有输入配置文件,其他输入文件通过输入配置文件进行指定。
通常使用如下命令发起一个计算任务:
mpirun -np 4 /path/to/namd2 ./f1atpase.namd ++ppn 7 +setcpuaffinity
上述命令通过适用于基于ucx版charm++的namd。mpirun发起4个进程,f1atpase.namd为输入配置文件,其余参数意义分别如下:
-
++ppn: 指定每个进程使用的线程数
-
+setcpuaffinity:使用CPU线程绑定
HIP版NAMD的功能与CUDA版完全一致,更多命令选项可参见NAMD官方文档:NAMD Git-2022-07-21 User's Guide
针对国产异构计算平台的硬件架构,可以采用如下脚本进行进程绑定,通常可提高NAMD的性能:
bind.sh:
APP="/path/to/namd2 ./f1atpase.namd ++ppn 7 "
lrank=$OMPI_COMM_WORLD_LOCAL_RANK
if [ $lrank -lt 7 ];then
core=$((lrank+1))
#echo $core
nnode=$((core/8))
export HIP_VISIBLE_DEVICES=0
export UCX_NET_DEVICES=mlx5_${nnode}:1
export UCX_IB_PCI_BW=mlx5_${nnode}:50Gbs
numactl --physcpubind=${core} --membind=${nnode} ${APP}
elif [ $lrank -lt 14 ];then
core=$((lrank+2))
# echo $core
nnode=$((core/8))
export HIP_VISIBLE_DEVICES=1
export UCX_NET_DEVICES=mlx5_${nnode}:1
export UCX_IB_PCI_BW=mlx5_${nnode}:50Gbs
numactl --physcpubind=${core} --membind=${nnode} ${APP}
elif [ $lrank -lt 21 ];then
core=$((lrank+3))
# echo $core
nnode=$((core/8))
export HIP_VISIBLE_DEVICES=2
export UCX_NET_DEVICES=mlx5_${nnode}:1
export UCX_IB_PCI_BW=mlx5_${nnode}:50Gbs
numactl --physcpubind=${core} --membind=${nnode} ${APP}
else
core=$((lrank+4))
# echo $core
nnode=$((core/8))
export HIP_VISIBLE_DEVICES=3
export UCX_NET_DEVICES=mlx5_${nnode}:1
export UCX_IB_PCI_BW=mlx5_${nnode}:50Gbs
numactl --physcpubind=${core} --membind=${nnode} ${APP}
fi
使用如下脚本提交上述脚本:
#!/bin/bash
#SBATCH -J NAMD-DCU
#SBATCH -p normal
#SBATCH -N 1
#SBATCH --ntasks-per-node=32
#SBATCH --cpus-per-task=1
#SBATCH --gres=dcu:4
#SBATCH -o %j.loop
#SBATCH -e %j.loop
srun hostname |sort |uniq |awk '{printf "%s\n",$1}'> hostfile
((num_procs=$SLURM_JOB_NUM_NODES*28))
mpirun -hostfile hostfile -np $num_procs -N 28 --bind-to none ./bind.sh
上述脚本适用于OpenMPI。其他MPI需修改OMPI_COMM_WORLD_LOCAL_RANK相应的环境变量。
性能对比
使用NAMD 3.0 alpha8版本,分别在DCU、P100、V100和A100平台进行性能对比测试。为减少CPU差异造成的影响,使用all in GPU功能,各平台各算例均使用1个CPU核心+一个GPU卡运行。
平台参数
平台 | CPU | 备注 |
---|---|---|
昆山 | Hygon C86 7185 32-core Processor | GPU频率 1700+1000 |
P100 | Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz | |
V100 | Hygon C86 7185 32-core Processor | 甘肃 |
A100 | AMD EPYC 7502 32-Core |
算例1 STMV
算例特征:包括成键力、非键力、PME等各种作用力,1066628原子。
算例配置文件
#############################################################
## ADJUSTABLE PARAMETERS ##
#############################################################
structure stmv.psf
coordinates stmv.pdb
#############################################################
## SIMULATION PARAMETERS ##
#############################################################
# Input
paraTypeCharmm on
parameters par_all27_prot_na.inp
temperature 298
# Force-Field Parameters
exclude scaled1-4
1-4scaling 1.0
cutoff 12.
switching on
switchdist 10.
pairlistdist 13.5
# Integrator Parameters
timestep 1.0
nonbondedFreq 1
fullElectFrequency 4
stepspercycle 20
# Constant Temperature Control
langevin on ;# do langevin dynamics
langevinDamping 5 ;# damping coefficient (gamma) of 5/ps
langevinTemp 298
langevinHydrogen off ;# don't couple langevin bath to hydrogens
# Constant Pressure Control (variable volume)
useGroupPressure yes ;# needed for rigidBonds
useFlexibleCell no
useConstantArea no
langevinPiston on
langevinPistonTarget 1.01325 ;# in bar -> 1 atm
langevinPistonPeriod 100.
langevinPistonDecay 50.
langevinPistonTemp 298
cellBasisVector1 216.832 0. 0.
cellBasisVector2 0. 216.832 0.
cellBasisVector3 0. 0 216.832
cellOrigin 0. 0. 0.
PME on
PMEGridSizeX 216
PMEGridSizeY 216
PMEGridSizeZ 216
# Output
outputName /usr/tmp/stmv-output
outputEnergies 20
outputTiming 20
numsteps 10000
CUDASOAintegrate on
margin 4
运行命令
namd3 ./stmv.namd3 +p 1 +setcpuaffinity +devices 0
测试结果
平台 | 算例整体性能(walltime / s) | V100的相对性能/ % |
---|---|---|
昆山 | 332.193817 | 64.26 |
P100 | 312.832031 | 68.24 |
V100 | 213.474976 | 100 |
A100 | 208.925613 | 102.18 |