一、简介
GPUMD 是一款开源分子动力学模拟软件,由渤海大学樊哲勇教授团队主导开发,2017年首发1.0版本,持续迭代至3.9.4版本,是国内首个完全基于GPU加速的开源分子动力学软件,专为 NVIDIA GPU 加速设计。它使用 CUDA 提高计算效率,能够快速模拟原子尺度的物理过程。
GPUMD – Graphics Processing Units Molecular Dynamics — GPUMD documentation
二、安装步骤
1. 准备环境
在Ubuntu 22.04 + CUDA 11.8环境下部署
要编译(和运行) GPUMD ,需要计算能力不低于 3.5 和 CUDA 工具包 9.0 或更高版本的 Nvidia GPU 卡。在 Linux 系统上,还需要至少支持 C++11 标准的 C++ 编译器。在 Windows 系统上,还需要 Microsoft Visual Studio 的编译器和 64 位版本的 make.exe。
更新系统和安装必要工具:
确保安装了编译器(支持 C++11)、Make 工具和其他必要工具。
sudo apt update && sudo apt upgrade -y
sudo apt install -y build-essential git g++ make cmake wget m4 file
安装 CUDA Toolkit :
确保已经安装了 CUDA 11.8 ,并配置了路径:
export PATH=/usr/local/cuda-11.8/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH
验证 CUDA 工具是否可用:
nvcc --version
2. 下载 GPUMD 源码
git clone https://github.com/brucefan1983/GPUMD.git
cd GPUMD
3. 编译:
cd /GPUMD/src
vim makefile
其中需要根据自己CUDA的架构支持修改 Makefile
中的 CUDA_ARCH
参数(计算能力),如:
- Tesla T4:
-arch=sm_75
- A100:
-arch=sm_80
- RTX 4090:
-arch=sm_89
如果需要支持多架构,可根据自己的型号前往NVIDIA官网查看,这里列出部分:
其多架构的设置格式为:
CUDA_ARCH = -gencode=arch=compute_86,code=sm_86
-gencode=arch=compute_89,code=sm_89
-gencode=arch=compute_70,code=sm_70
-gencode=arch=compute_80,code=sm_80
如下图:
然后输入 make
进行编译(注意:直接编译没有NetCDF和PLUMED功能支持):
然后点击
编译完成后输入 ls
看看是否有 gpumd
和 nep
4. 其它功能设置(可选)
安装并配置 NetCDF 支持
下载和解压 NetCDF-C 4.6.3
wget https://github.com/Unidata/netcdf-c/archive/refs/tags/v4.6.3.tar.gz
tar -xvzf v4.6.3.tar.gz
cd netcdf-c-4.6.3
配置和编译(设置安装路径为 /opt/netcdf
)
./configure --prefix=/opt/netcdf --disable-netcdf-4 --disable-dap
make -j$(nproc)
make install
在这里:
--prefix
指定安装路径,此处我设定为 /opt/netcdf
--disable-netcdf-4
:禁用 NetCDF-4 的支持(GPUMD 暂不需要 NetCDF-4 功能)
--disable-dap
:禁用 DAP(Distributed Access Protocol)
确认 NetCDF 是否已正确安装:
ls /opt/netcdf/bin
此时输出应该有:lib
、include
、bin
等
配置环境变量
安装完成后,需要将 netCDF
的 bin
目录添加到环境变量中,确保可以全局调用 nc-config
和其他工具:
echo 'export PATH=/opt/netcdf/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/opt/netcdf/lib:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
测试是否正确配置:
nc-config --version
nc-config --help
配置 GPUMD 使用 NetCDF
在 GPUMD 的 makefile
中启用 USE_NETCDF
并更新相关路径。
cd /GPUMD/src
vim makefile
启用 USE_NETCDF
支持:
CFLAGS = -std=c++14 -O3 $(CUDA_ARCH) -DUSE_NETCDF
设置 INC
、LDFLAGS
和 LIBS
变量(注意你的安装路径):
INC = -I/opt/netcdf/include
LDFLAGS = -L/opt/netcdf/lib
LIBS = -lnetcdf
INC
:头文件目录。LDFLAGS
:库文件目录。LIBS
:链接静态库libnetcdf.a
- 安装并配置 PLUMED 支持
下载和解压 PLUMED
wget https://github.com/plumed/plumed2/releases/download/v2.8.2/plumed-2.8.2.tgz
tar -xvzf plumed-2.8.2.tgz
cd plumed-2.8.2
配置和编译(安装到 /opt/plumed
路径,可以修改)
./configure --prefix=/opt/plumed --disable-mpi --enable-openmp --enable-modules=all
make -j$(nproc)
make instal
如果需要启用 Python 支持 ,可以在配置时添加相关参数,例如:
./configure --enable-python
配置环境变量
将以下内容添加到 ~/.bashrc
文件中:
export PLUMED_KERNEL=$HOME/plumed/lib/libplumedKernel.so
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/plumed/lib
export PATH=$PATH:$HOME/plumed/bin
使配置生效:
source ~/.bashrc
验证安装
检查 plumed
可执行文件是否可用
/opt/plumed/bin/plumed-config --versio
如果需要在全局使用 plumed
命令,可以将其路径添加到环境变量中:
echo 'export PATH=/opt/plumed/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
使用 plumed help
可以查看帮助信息
配置 GPUMD 使用 PLUMED
编辑 GPUMD 的 makefile
,启用 USE_PLUMED
并更新路径。
cd /GPUMD/rsc
vim makefile
启用 USE_PLUMED
:
CFLAGS = -std=c++14 -O3 $(CUDA_ARCH) -DUSE_PLUMED
设置 INC
、LDFLAGS
和 LIBS
变量:
INC = -I/opt/plumed/include
LDFLAGS = -L/opt/plumed/lib -lplumed -lplumedKernel
如果加上前面的NetCDF则makefile文件中结果应该如下:
CC = nvcc
CUDA_ARCH = -gencode=arch=compute_86,code=sm_86 \
-gencode=arch=compute_89,code=sm_89 \
-gencode=arch=compute_70,code=sm_70 \
-gencode=arch=compute_80,code=sm_80
ifdef OS # For Windows with the cl.exe compiler
CFLAGS = -O3 $(CUDA_ARCH)
else # For linux
CFLAGS = -std=c++14 -O3 $(CUDA_ARCH) -DUSE_NETCDF -DUSE_PLUMED
endif
INC = -I/opt/netcdf/include -I/opt/plumed/include
LDFLAGS = -L/opt/netcdf/lib -L/opt/plumed/lib
LIBS = -lnetcdf -lplumed -lplumedKernel
重新构建 GPUMD
检查库是否存在,确保 NetCDF
和 PLUMED
的库文件存在于指定路径中:
ls /opt/netcdf/lib/libnetcdf.a
ls /opt/plumed/lib/libplumed.so
ls /opt/plumed/lib/libplumedKernel.so
在最后编译之前还需要在makefile中添加一些东西,防止编译失败:
1.确认 libcusolver.so
的路径,需要执行以下命令来查找 libcusolver.so
:
find /usr/local/cuda* -name "libcusolver.so"
我的位于 /usr/local/cuda-11.8/targets/x86_64-linux/lib
路径下。
2.修改 Makefile:在 LDFLAGS
中添加 -lcusolver
和 libcublas
,以显式链接 cusolver
和 libcublas
库。如:
LDFLAGS = -L/opt/netcdf/lib -L/opt/plumed/lib -L/usr/local/cuda-12.1/lib64
LIBS = -lnetcdf -lplumed -lplumedKernel -lcusolver -libcubla
然后使用下列命令进行编译:
cd /GPUMD/src
make clean
make -j$(nproc)
确认可执行文件是否生成:
ls gpumd nep
# 应看到 gpumd 和 nep 两个可执行文件
最后设置GPUMD的全局变量:
vim ~/.bashrc
export PATH=$PATH:/GPUMD/src
保存退出后:
source ~/.bashrc
gpumd
三、使用方法
GPUMD 使用简单的文本文件作为输入,主要包括:
input.gpumd
:主配置文件,定义模拟参数coord.xyz
:原子坐标文件potential.gpumd
:定义势能参数
进入需要模型的目录后,GPUMD的运行命令如下:
gpumd -i input.gpumd
平台镜像在GPUMD中安装了NetCDF和PLUMED,可通过 gpumd
运行