Note

视频演示链接:【Gromacs2024.2版安装全程及代码分享-纯干货】 https://www.bilibili.com/video/BV1GM4m1m7uq/?share_source=copy_web&vd_source=e986a18a26b36d1763a9c84f951a2ff0

准备工作-Preparatory work

检查系统编译环境-Check the system compilation environment

mpirun --version
cmake --version
gcc --version
nvcc --version
fftw-wisdom --version #It can be installed by Gromacs itself
lscpu  # check CPU information, such as SIMD
nvidia-smi # check nvidia driver and cuda

升级 GCC-Upgrade GCC

sudo yum -y install centos-release-scl
sudo yum install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
scl enable devtoolset-9 bash
echo "source /opt/rh/devtoolset-9/enable" >> ~/.bashrc
gcc --version

升级 CMake-Upgrade CMake

sudo yum install openssl-devel
sudo yum remove cmake3  # Uninstall the current cmake3
wget https://cmake.org/files/v3.29/cmake-3.29.6.tar.gz
tar -zxvf cmake-3.29.6.tar.gz
cd cmake-3.29.6
./bootstrap
make 
sudo make install

安装 OpenMPI-Install the OpenMPI

wget https://download.open-mpi.org/release/open-mpi/v5.0/openmpi-5.0.1.tar.bz2
tar xf openmpi-5.0.1.tar.bz2
cd openmpi-5.0.1
./configure --prefix=/usr/local/openmpi 
make -j $(nproc) all
sudo make install 
echo 'export PATH=/usr/local/openmpi/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
mpirun --version
ompi_info #详细信息

(安装快速傅立叶变换库FFTW-Install FFTW)

sudo yum remove fftw 
wget http://www.fftw.org/fftw-3.3.10.tar.gz 
tar -xvf fftw-3.3.10.tar.gz 
cd fftw-3.3.10 
./configure --enable-float --enable-sse2 --enable-avx2 --prefix=/jer/GMX2024.2/fftw3310/fftw-3.3.10  #改为实际路径
make 
sudo make install
echo "export LD_LIBRARY_PATH=/jer/GMX2024.2/fftw3310/fftw-3.3.10/lib:\$LD_LIBRARY_PATH" >> ~/.bashrc  # 如果安装到了非标准路径,更新环境变量,将 FFTW 的库路径添加到 LD_LIBRARY_PATH
source ~/.bashrc

重装 cuda toolkit-Reinstall the cuda toolkit

# 经nvidia-smi与nvcc --version检查发现两者版本不同,在CMake编译时会报错,笔者重新安装适配的cuda toolkit 12.4
# 卸载旧版cuda toolkit
sudo yum remove cuda
sudo yum autoremove
# 清理旧版本的cuda文件
sudo yum remove "*cublas*" "cuda*" 
sudo yum remove "*nvidia*"  
sudo yum autoremove 
# 安装
sudo yum-config-manager --add-repo https://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/cuda-rhel7.repo  # 添加 CUDA 12.4 的 YUM 源
sudo yum clean all  # 清除 YUM 缓存
sudo yum -y install cuda-toolkit-12-4  # 安装 CUDA Toolkit 12.4,笔者在此耗时半小时左右
echo -e "export PATH=/usr/local/cuda-12.4/bin:\$PATH\nexport LD_LIBRARY_PATH=/usr/local/cuda-12.4/lib64:\$LD_LIBRARY_PATH" >> ~/.bashrc && source ~/.bashrc && nvcc --version

下载 Gromacs 源代码-Download the Gromacs source code

#最好提前 mkdir 特定目录,比如: 用户名/GMX/GMX2024.2
wget https://ftp.gromacs.org/gromacs/gromacs-2024.2.tar.gz
wget https://ftp.gromacs.org/regressiontests/regressiontests-2024.2.tar.gz #测试包
tar -xvzf gromacs-2024.2.tar.gz
tar -xvzf regressiontests-2024.2.tar.gz

Gromacs 的编译与安装-Compile and install Gromacs

sudo update-alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.7 1 #check your path
sudo update-alternatives --config python3
python3 --version
echo "alias python3='/usr/local/bin/python3.7'" >> ~/.bashrc
source ~/.bashrc
# 由于yum依赖python3.6
sudo ln -sf /usr/bin/python3.6 /usr/bin/python #保证yum正常
/usr/local/bin/python3.7 -m ensurepip --upgrade 
/usr/local/bin/python3.7 -m pip install -U sphinx
#rm -rf build  #删除错误编译的build,重新cmake编译
mkdir build #创建一个构建目录 build 并运行 CMake 来配置编译选项。
cd build
cmake ../gromacs-2024.2 \
  -DCMAKE_C_COMPILER=gcc \
  -DPYTHON_EXECUTABLE=/usr/local/bin/python3.7 \
  -DPython3_ROOT_DIR='/usr/local/bin' \
  -DGMX_SIMD=AVX2_256 \
  -DGMX_MPI=OFF \ #若MPI报错则可关闭改选项
  -DGMX_GPU=CUDA \
  -DCMAKE_INSTALL_PREFIX=~/Software/GMX/2024.2-cuda \
  -DGMX_BUILD_OWN_FFTW=ON \
  -DREGRESSIONTEST_DOWNLOAD=OFF \
  -DREGRESSIONTEST_PATH=../regressiontests-2024.2 \
  -DGMX_CUDA_TARGET_SM="86" \
  -DGMX_CUDA_TARGET_COMPUTE="86"
make -j $(nproc) # 约用时4min
make check  # 约用时20min
make install

配置环境变量-Configuring environment variables

echo -e 'export PATH=/jer/GMX2024.2/build/bin:$PATH\nalias gmx2024="gmx"' >> ~/.bashrc && source ~/.bashrc
# 其中/jer/GMX2024.2/build/bin应改为自己实际路径
gmx2024 --version 

性能测试-Performance test

# mpi版Gromacs用mpirun,对于root用户,OpenMPI要求每次执行mpirun命令都得带着-allow-run-as-root选项才行,解决方法参考:http://sobereva.com/409
gmx2024 mpirun -allow-run-as-root -np 36 gmx_mpi mdrun -s benchMEM.tpr -noconfout -nsteps 10000 -pin on -nb gpu
# 普通单精度Gromacs,使用1颗cpu
gmx2024 mdrun -nt 36 -s benchMEM.tpr -noconfout -nsteps 10000 -pin on -nb gpu # 笔者单次测试结果68.346 ns/d
gmx2024 mdrun -ntmpi 4 -ntomp 9 -s benchMEM.tpr -noconfout -nsteps 10000 -pin on -nb gpu # 笔者单次测试结果53.701 ns/d
作者:木水,转载请注明出处。