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