NAMD 编译与使用
NAMD 是一个并行分子动力学程序,专为高性能模拟大型生物分子系统而设计。它曾获得 2002 年的戈登贝尔奖、2012年的 Sidney Fernbach 奖和 2020 年的戈登贝尔奖。基于 Charm++ 并行对象,NAMD 在典型模拟中可以扩展到数百个核心,在最大的模拟中甚至可以超过 500,000 个核心。
本文将介绍如何在 SonmiHPC 集群上编译、安装并使用 NAMD 的 MPI 版本。
源码下载
NAMD 官方提供了预编译的二进制程序文件以及源码下载。提供的下载选项如下:
- Linux-x86_64-multicore (64-bit Intel/AMD single node)
- Linux-x86_64-multicore-AVX512 (x86_64 AVX-512)
- Linux-x86_64-multicore-CUDA (NVIDIA CUDA acceleration)
- Linux-x86_64-netlrts-smp (Multi-copy algorithms, single process per copy)
- Linux-x86_64-netlrts-smp-CUDA (Multi-copy algorithms, single process per copy)
- Linux-x86_64-verbs-smp (InfiniBand, no MPI needed, supports multi-copy algorithms)
- Linux-x86_64-verbs-smp-CUDA (InfiniBand, no MPI needed, supports multi-copy algorithms)
- MacOS-universal-multicore (Apple silicon and Intel-based)
- Source Code
可以根据自身需要下载预编译好的二进制文件,也可以下载源码按下面教程自行进行编译。
首先需要在官网注册用户,并下载源码到本地,再上传源码压缩包到集群 /share/apps/
目录中。
进行解压之后,进入源码目录中:
shell
tar xzvf NAMD_3.0_Source.tar.gz
cd NAMD_3.0_Source/
tar xzvf NAMD_3.0_Source.tar.gz
cd NAMD_3.0_Source/
激活Intel OneAPI 环境
执行下面的命令来激活 Intel OneAPI 环境:
shell
source /opt/intel/oneapi/setvars.sh
source /opt/intel/oneapi/setvars.sh
构建 Charm++/Converse 库
解包 charm 并构建测试 Charm++/Converse 库,根据需要进行自行调整,可参照源码目录下的 notes.txt 文档。
执行下面命令构建 MPI 版本:
shell
tar xf charm-8.0.0.tar
cd charm-8.0.0
env MPICXX=mpicxx ./build charm++ mpi-linux-x86_64 --with-production
cd mpi-linux-x86_64/tests/charm++/megatest
make
mpiexec -n 4 ./megatest
cd ../../../../..
tar xf charm-8.0.0.tar
cd charm-8.0.0
env MPICXX=mpicxx ./build charm++ mpi-linux-x86_64 --with-production
cd mpi-linux-x86_64/tests/charm++/megatest
make
mpiexec -n 4 ./megatest
cd ../../../../..
下载安装 TCL/FFTW 库
在进行下面操作前,确保已经处于 NAMD 源码根目录下。
shell
wget http://www.ks.uiuc.edu/Research/namd/libraries/fftw-linux-x86_64.tar.gz
tar xzf fftw-linux-x86_64.tar.gz
mv linux-x86_64 fftw
wget http://www.ks.uiuc.edu/Research/namd/libraries/tcl8.6.13-linux-x86_64.tar.gz
wget http://www.ks.uiuc.edu/Research/namd/libraries/tcl8.6.13-linux-x86_64-threaded.tar.gz
tar xzf tcl8.6.13-linux-x86_64.tar.gz
tar xzf tcl8.6.13-linux-x86_64-threaded.tar.gz
mv tcl8.6.13-linux-x86_64 tcl
mv tcl8.6.13-linux-x86_64-threaded tcl-threaded
wget http://www.ks.uiuc.edu/Research/namd/libraries/fftw-linux-x86_64.tar.gz
tar xzf fftw-linux-x86_64.tar.gz
mv linux-x86_64 fftw
wget http://www.ks.uiuc.edu/Research/namd/libraries/tcl8.6.13-linux-x86_64.tar.gz
wget http://www.ks.uiuc.edu/Research/namd/libraries/tcl8.6.13-linux-x86_64-threaded.tar.gz
tar xzf tcl8.6.13-linux-x86_64.tar.gz
tar xzf tcl8.6.13-linux-x86_64-threaded.tar.gz
mv tcl8.6.13-linux-x86_64 tcl
mv tcl8.6.13-linux-x86_64-threaded tcl-threaded
进行编译
执行下面的版本编译 MPI 版本:
shell
./config Linux-x86_64-g++ --charm-arch mpi-linux-x86_64
cd Linux-x86_64-g++/
make -j
./config Linux-x86_64-g++ --charm-arch mpi-linux-x86_64
cd Linux-x86_64-g++/
make -j
设置路径权限:
shell
chmod -R 755 /share/apps/NAMD_3.0_Source
chmod -R 755 /share/apps/NAMD_3.0_Source
Modulefile 编写
为方便集群上其他用户使用,以 Module 模块加载的方式提供软件给集群用户,创建如下的路径,并新建 Modulefile 文件:
shell
mkdir -p /share/apps/modulefiles/namd/
cd /share/apps/modulefiles/namd/ && vim 3.0
mkdir -p /share/apps/modulefiles/namd/
cd /share/apps/modulefiles/namd/ && vim 3.0
新增文件内容如下:
shell
#%Module###########################################
set modulefilename "NAMD"
set modulefilever "3.0"
set min_tcl_ver 8.4
if { $tcl_version < $min_tcl_ver } {
puts stderr " "
puts stderr "ERROR: This modulefile requires tcl $min_tcl_ver or greater."
puts stderr "Your system reports that tclsh version $tcl_version is installed."
exit 1
}
if { [ module-info mode load ] } {
puts stderr "Loading $modulefilename version $modulefilever"
}
if { [ module-info mode ] == "unload" || [ module-info mode ] == "remove" } {
puts stderr "Removing $modulefilename version $modulefilever"
puts stderr "Use to view any remaining dependent modules."
}
prepend-path PATH /share/apps/NAMD_3.0_Source/Linux-x86_64-g++
#%Module###########################################
set modulefilename "NAMD"
set modulefilever "3.0"
set min_tcl_ver 8.4
if { $tcl_version < $min_tcl_ver } {
puts stderr " "
puts stderr "ERROR: This modulefile requires tcl $min_tcl_ver or greater."
puts stderr "Your system reports that tclsh version $tcl_version is installed."
exit 1
}
if { [ module-info mode load ] } {
puts stderr "Loading $modulefilename version $modulefilever"
}
if { [ module-info mode ] == "unload" || [ module-info mode ] == "remove" } {
puts stderr "Removing $modulefilename version $modulefilever"
puts stderr "Use to view any remaining dependent modules."
}
prepend-path PATH /share/apps/NAMD_3.0_Source/Linux-x86_64-g++
保存后设置权限:
shell
chmod -R 755 /share/apps/modulefiles
chmod -R 755 /share/apps/modulefiles
集群上面用户可以通过下面的命令来加载该模块:
shell
module load namd/3.0
module load namd/3.0
使用示例
在用户目录下创建一个 namd-example 文件夹,并进入文件夹中:
shell
mkdir namd-example && cd namd-example
mkdir namd-example && cd namd-example
从源码文件夹中复制输入文件到新建的文件夹中:
shell
cp -r /share/apps/NAMD_3.0_Source/Linux-x86_64-g++/src/alanin* .
cp -r /share/apps/NAMD_3.0_Source/Linux-x86_64-g++/src/alanin* .
在当前文件夹中创建如下的提交脚本:
shell
vim submit.sh
vim submit.sh
脚本内容如下:
shell
#!/bin/bash
#SBATCH --job-name=namd
#SBATCH --partition=sonmi
#SBATCH --output=%j.out
#SBATCH --error=%j.err
#SBATCH --nodelist=compute-0-[0-1]
#SBATCH --exclusive
#SBATCH --time=02:00:00
ulimit -s unlimited
ulimit -l unlimited
module load namd/3.0
source /opt/intel/oneapi/setvars.sh
cd $SLURM_SUBMIT_DIR
mpirun -np 16 namd3 alanin
#!/bin/bash
#SBATCH --job-name=namd
#SBATCH --partition=sonmi
#SBATCH --output=%j.out
#SBATCH --error=%j.err
#SBATCH --nodelist=compute-0-[0-1]
#SBATCH --exclusive
#SBATCH --time=02:00:00
ulimit -s unlimited
ulimit -l unlimited
module load namd/3.0
source /opt/intel/oneapi/setvars.sh
cd $SLURM_SUBMIT_DIR
mpirun -np 16 namd3 alanin
保存后,执行下面的命令提交任务:
shell
sbatch submit.sh
sbatch submit.sh