0. 概述
Gromacs是用于研究生物分子体系的分子动力学程序包。它可以用分子动力学、随机动力学或者路径积分方法模拟溶液或晶体中的任意分子,进行分子能量的最小化,分析构象等。它的模拟程序包包含GROMACS力场(蛋白质、核苷酸、糖等),研究的范围可以包括玻璃和液晶、到聚合物、晶体和生物分子溶液。GROMACS是一个功能强大的分子动力学的模拟软件,其在模拟大量分子系统的牛顿运动方面具有极大的优势。
该教程主要介绍了在Centos7.4系统中,通过源码对Gromacs 2020.6 GPU版本进行从头编译。
1. 显卡及CUDA驱动安装
1.1 禁用 Nouveau 驱动程序
ssh进入装有显卡的计算节点
编辑/etc/modprobe.d/blacklist-nouveau.conf
vi /etc/modprobe.d/blacklist-nouveau.conf
插入
blacklist nouveau
options nouveau modeset=0
dracut --force
reboot
1.2 CUDA Toolkit安装
以CUDA Toolkit 10.2 为例(需要其他版本自行前往https://developer.nvidia.com/zh-cn/cuda-toolkit获取)
wget https://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda_10.2.89_440.33.01_linux.run
chmod +x cuda_10.2.89_440.33.01_linux.run
sh cuda_10.2.89_440.33.01_linux.run
accept-->options-->Driver Option-->选择Do not install any of the OpenGL-related driver files-->DONE-->DONE-->Install
安装完成输入nvidia-smi查看显卡状况
2. Gromacs GPU版本编译
2.1 GCC环境
编译Gromacs2020以上版本需要GCC 7以上的版本,Centos 7自带的GCC版本较低,编译gcc太麻烦可以使用centos提供的scl功能快速切换gcc版本
yum install centos-release-scl
yum install scl-utils
yum install devtoolset-7-toolchain
scl enable devtoolset-7 bash
退出gcc环境
exit
(Gromacs编译完成后再退出)
2.2 Conda环境安装Cmake
PATH=/home/app/miniconda3/bin:$PATH)
conda create -n gmx2020_gpu python=3.8.3
conda activate gmx2020_gpu
conda install cmake==3.19.6
cd /home/app/miniconda3/envs/gmx2020_gpu/lib
rm -rf libstdc++.so.6 libstdc++.so
ln -s libstdc++.so.6.0.28 libstdc++.so
ln -s libstdc++.so.6.0.28 libstdc++.so.6
2.3 Gromacs编译
cd /home/app/
下载Gromacs2020.6源码
wget ftp://ftp.gromacs.org/gromacs/gromacs-2020.6.tar.gz
(需要其他版本自行前往https://manual.gromacs.org/documentation/)下载
tar -zxvf gromacs-2020.6.tar.gz
cd gromacs-2020.6
mkdir build && cd build
cmake .. -DGMX_BUILD_OWN_FFTW=ON -DREGRESSIONTEST_DOWNLOAD=ON -DCMAKE_INSTALL_PREFIX=/home/app/gmx2020_gpu -DGMX_SIMD=AVX_256 (-DGMX_GPU=CUDA编译gromacs2021以上的GPU版本需要加上)
make -j
make install
完成后/home/app目录下会产生一个gmx2020_gpu的目录,编译完成(命令行中所有目录根据实际情况输入)。
2.4 Gromacs任务slurm队列提交
单机运行
source /home/app/gmx2020_gpu/bin/GMXRC
gmx mdrun -v -deffnm md -nt 8 -gpu_id 0
slurm队列提交
gromacs_gpu版本slurm提交脚本
#!/bin/bash
#SBATCH -N 1 ##使用一个节点
#SBATCH --cpus-per-task=8 ##每个任务分配8个cpu
#SBATCH --gpus-per-task=1 ##每个任务分配1个gpu
#SBATCH -p WHEEL ##WHEEL分区
#SBATCH -J 2021 ##任务名字
#SBATCH -t 24:00:00 ##对作业分配的总运行时间设置限制。如果请求的时间限制超过分区的时间限制,作业将被挂起。
#SBATCH -o output
#SBATCH --nodelist=compute-0-0 ##请求特定的主机列表
cd $SLURM_SUBMIT_DIR
source /home/app/gmx202020_gpu/bin/GMXRC
gmx mdrun -v -deffnm md -nt 8