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.shsource /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-threadedwget 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_Sourcechmod -R 755 /share/apps/NAMD_3.0_SourceModulefile 编写 
为方便集群上其他用户使用,以 Module 模块加载的方式提供软件给集群用户,创建如下的路径,并新建 Modulefile 文件:
shell
mkdir -p /share/apps/modulefiles/namd/
cd /share/apps/modulefiles/namd/ && vim 3.0mkdir -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/modulefileschmod -R 755 /share/apps/modulefiles集群上面用户可以通过下面的命令来加载该模块:
shell
module load namd/3.0module load namd/3.0使用示例 
在用户目录下创建一个 namd-example 文件夹,并进入文件夹中:
shell
mkdir namd-example && cd namd-examplemkdir 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.shvim 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.shsbatch submit.sh