Skip to content

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

参考链接

  1. NAMD 官网
  2. NAMD 源码下载链接
  3. NAMD 用户手册

本站内容未经授权禁止转载
联系邮箱: [email protected]