Skip to content

LAMMPS编译及使用

LAMMPS ("Large-scale Atomic/Molecular Massively Parallel Simulator",大尺度原子/分子并行模拟工具)是由桑迪亚国家实验室开发的一套分子动力学模拟的开源程序包。 LAMMPS使用MPI实现多机器并行计算,在新的版本中,支持基于CUDA和OpenCL的GPU计算。其以GNU通用公共许可证发布,因而开源自由。

本教程将介绍如何在SonmiHPC集群中使用Intel OneAPI编译器来编译LAMMPS。

下载并解压源码

目前主要有两种方式来获取LAMMPS程序:

  • 用户可以从LAMMPS官网下载预编译好的二进制文件;
  • 用户直接下载LAMMPS源码手动进行编译,当你需要自定义增加某些模块的时候可以采用该方法。

本教程主要主要介绍第二种方式。

首先从官网链接下载最新的源码压缩包:

shell
wget https://download.lammps.org/tars/lammps-stable.tar.gz
wget https://download.lammps.org/tars/lammps-stable.tar.gz

由于LAMMPS官网服务器在国内访问速度过慢,因此如果直接使用wget太慢的话,可以用自己笔记本电脑使用代理下载到本地后再上传到集群上。

下载完成后解压压缩包:

shell
tar xzvf lammps-stable.tar.gz
tar xzvf lammps-stable.tar.gz

解压后可以看到在当前目录下有个lammps开头的目录,切换到该目录再进行后续操作:

shell
cd lammps-2Aug2023
cd lammps-2Aug2023

编译二进制文件

本教程中使用cmake的方式来编译,因此集群上需要安装有cmake工具,如果没找到可以通过如下的命令进行安装需要的工具:

shell
dnf install cmake patch
dnf install cmake patch

使用下面的命令激活oneAPI套件编译环境:

shell
source /opt/intel/oneapi/setvars.sh
source /opt/intel/oneapi/setvars.sh

创建build文件夹:

mkdir build && cd build
mkdir build && cd build

官方提供的oneapi.cmake文件需要修改以下3个地方才能顺利进行编译:

使用vim进行编辑vim ../cmake/presets/oneapi.cmake,并修改以下的三个位置,内容如下所示:

cmake
... ...
set(OpenMP_C_FLAGS "-qopenmp -qopenmp-simd" CACHE STRING "" FORCE)
... ...
set(OpenMP_CXX_FLAGS "-qopenmp -qopenmp-simd" CACHE STRING "" FORCE)
... ...
set(OpenMP_Fortran_FLAGS "-qopenmp -qopenmp-simd" CACHE STRING "" FORCE)
... ...
set(OpenMP_C_FLAGS "-qopenmp -qopenmp-simd" CACHE STRING "" FORCE)
... ...
set(OpenMP_CXX_FLAGS "-qopenmp -qopenmp-simd" CACHE STRING "" FORCE)
... ...
set(OpenMP_Fortran_FLAGS "-qopenmp -qopenmp-simd" CACHE STRING "" FORCE)

进行编译:

shell
# CMAKE_INSTALL_PREFIX: 设置安装路径
# Preset文件建议使用后面oneapi.cmake与most.cmake拼接的userdefined,包含大部分模块
cmake -D CMAKE_INSTALL_PREFIX=/share/apps/lammps -C ../cmake/presets/oneapi.cmake ../cmake/
make -j
make install
# CMAKE_INSTALL_PREFIX: 设置安装路径
# Preset文件建议使用后面oneapi.cmake与most.cmake拼接的userdefined,包含大部分模块
cmake -D CMAKE_INSTALL_PREFIX=/share/apps/lammps -C ../cmake/presets/oneapi.cmake ../cmake/
make -j
make install

如果要使用oneapi.preset和其他模块的preset比如most.preset等可以用如下的命令:

cat ../cmake/presets/oneapi.cmake > ../cmake/presets/userdefined.cmake
cat ../cmake/presets/most.cmake >> ../cmake/presets/userdefined.cmake
# 并在上面的编译步骤中将-C指向的配置文件改为userdefined.cmake
cat ../cmake/presets/oneapi.cmake > ../cmake/presets/userdefined.cmake
cat ../cmake/presets/most.cmake >> ../cmake/presets/userdefined.cmake
# 并在上面的编译步骤中将-C指向的配置文件改为userdefined.cmake

安装完成后进/share/apps/lammps可以看到以下的目录结构:

.
├── bin
│   └── lmp
├── etc
│   └── profile.d
└── share
    ├── lammps
    └── man
.
├── bin
│   └── lmp
├── etc
│   └── profile.d
└── share
    ├── lammps
    └── man

由于上面均为使用管理用户进行操作的,因此集群上其他用户需要使用的话需要修改以下文件夹权限:

shell
chmod -R 755 /share/apps/lammps
chmod -R 755 /share/apps/lammps

Modulefile编写

管理员如果在编译好程序后要通过Module模块加载的方式提供给集群上面的其他用户使用,可以编写如下的Modulefile文件:

shell
mkdir -p /share/apps/modulefiles/lammps
mkdir -p /share/apps/modulefiles/lammps

使用vim用cd /share/apps/moduefiles/lammps/ && vim latest 新增Modulefile文件,文件内容如下:

#%Module###########################################
set modulefilename "LAMMPS Stable Latest"
set modulefilever  "2Aug2023"

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/lammps/bin
setenv LAMMPS_POTENTIALS /share/apps/lammps/share/lammps/potentials
setenv MSI2LMP_LIBRARY /share/apps/lammps/share/lammps/frc_files
#%Module###########################################
set modulefilename "LAMMPS Stable Latest"
set modulefilever  "2Aug2023"

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/lammps/bin
setenv LAMMPS_POTENTIALS /share/apps/lammps/share/lammps/potentials
setenv MSI2LMP_LIBRARY /share/apps/lammps/share/lammps/frc_files

保存后,修改权限:

shell
chmod -R 755 /share/apps/modulefiles
chmod -R 755 /share/apps/modulefiles

用户使用如下的命令就可以看到该模块:

[root@sonmi lammps]# module avail 

--------------------------- /share/apps/modulefiles ---------------------------
lammps/latest
[root@sonmi lammps]# module avail 

--------------------------- /share/apps/modulefiles ---------------------------
lammps/latest

需要加载的时候使用下面的命令即可:

shell
module load lammps/latest
module load lammps/latest

提交脚本示例

集群上用户可以通过编辑如下的脚本进行任务调度,vim lammps.sub

shell
#!/bin/bash
#SBATCH --job-name=lammps
#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 lammps/latest
source /opt/intel/oneapi/setvars.sh
cd $SLURM_SUBMIT_DIR

mpirun -np 16 lmp -in in.protein
#!/bin/bash
#SBATCH --job-name=lammps
#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 lammps/latest
source /opt/intel/oneapi/setvars.sh
cd $SLURM_SUBMIT_DIR

mpirun -np 16 lmp -in in.protein

并使用sbatch命令进行提交:

sbatch lammps.sub
sbatch lammps.sub

参考链接

  1. LAMMPS官网下载

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