第2章 GROMACS软件安装与环境配置

装软件这事儿,说简单也简单,说坑也真不少。我个人习惯先把官网源码下载到本地,然后一步一步手动编译。为什么?因为包管理器里的版本往往落后一两年,而且你没法自己控制GPU加速、MPI并行这些关键开关。下面我把完整的编译、配置、验证流程拆开讲,顺便说说那些我踩过的坑。

2.1 获取GROMACS源码

去GROMACS官方发布页(这里不贴URL)找到最新稳定版。我一般选tar.gz压缩包,干净。

wget https://ftp.gromacs.org/gromacs/gromacs-2024.2.tar.gz
tar xzf gromacs-2024.2.tar.gz
cd gromacs-2024.2

你想想看,这一步最容易出问题的是网络超时。国内的话,可以试试中科大镜像。我记得有回实验网断了,直接拿U盘拷的老版本,结果编译器不兼容,白折腾半天。

2.2 编译安装:CMake配置

GROMACS推荐用CMake构建。这是我的典型配置命令:

cmake -B build \
  -DCMAKE_INSTALL_PREFIX=/opt/gromacs-2024.2 \
  -DGMX_GPU=CUDA \
  -DGMX_MPI=ON \
  -DGMX_BUILD_OWN_FFTW=ON \
  -DGMX_OPENMP=ON \
  -DGMX_FFT_LIBRARY=fftw3
cmake --build build -j $(nproc)
make -C build install
如果只用CPU跑,把 -DGMX_GPU=CUDA 改成 -DGMX_GPU=OFF。我现在个人习惯在 build 目录外执行命令,这样源码目录干净。

这里有几个参数值得注意,我整理了一张表:

CMake参数作用我踩过的坑
-DGMX_GPU=CUDA启用NVIDIA GPU加速忘记装CUDA Toolkit,配置时报错找不到cuda.h
-DGMX_MPI=ON支持多节点并行集群上没装MPI库,编译通过但运行报MPI_Init错误
-DGMX_BUILD_OWN_FFTW=ON自动编译FFTW库系统FFTW版本太旧,导致某些功能缺失
-DGMX_OPENMP=ON单节点多核并行必须配合编译器支持OpenMP,否则默默退化为串行

配置阶段最容易报错的就是GPU相关路径。如果你有NVIDIA卡但没装CUDA,或者装了但路径不对,CMake会直接退出。别慌,看提示信息,它一般会告诉你缺哪个文件。我曾经手残把CUDA安装到了自定义目录,漏了 -DCMAKE_CUDA_COMPILER=/usr/local/cuda/bin/nvcc,排查了半小时。

2.3 设置环境变量

装完只是第一步,你得让系统知道GROMACS在哪儿。我通常把下面几行加到 ~/.bashrc 或 ~/.zshrc:

# GROMACS 2024.2
export GMX_PREFIX=/opt/gromacs-2024.2
export PATH=$GMX_PREFIX/bin:$PATH
export LD_LIBRARY_PATH=$GMX_PREFIX/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=$GMX_PREFIX/lib/pkgconfig:$PKG_CONFIG_PATH
不要忘记执行 source ~/.bashrc 或者重新登录终端。我有一回怎么都找不到 gmx 命令,就是因为忘了source,还在用旧的shell环境。

如果你的集群使用module环境,可以写一个modulefile。但说实话,我更喜欢直接改rc文件,简单粗暴,不容易搞混版本。

还有一个常见的坑:多个GROMACS版本共存时,PATH 顺序决定调用哪个。我建议把最新的版本路径放在最前面。曾经我在同事机器上调试,他装了2023和2024两个版本,2023的二进制先被搜到,导致我明明编译了新版本却一直在跑旧版,核磁数据处理全偏了。

2.4 验证安装

验证分三个层次:能不能运行、功能是否正常、性能是否达标。

第一层:运行命令

gmx --version

输出应该包含版本号、编译选项、GPU支持等。类似这样:

GROMACS version: 2024.2
Executable: /opt/gromacs-2024.2/bin/gmx
CPU: x86_64 (Intel Xeon ...)
GPU support: CUDA (version 12.2)
MPI support: yes
OpenMP support: yes

第二层:跑个简单测试

GROMACS自带了测试例子,我一般用 spc216 水盒子验证基本动力学:

cd /tmp
cp -r $GMX_PREFIX/share/gromacs/tutorials/water_box .
cd water_box
gmx grompp -f pme.mdp -c spc216.gro -p topol.top -o test.tpr
gmx mdrun -deffnm test -v

如果最后输出 Finished mdrun on rank 0 并且生成了 test.xtc、test.edr 等文件,说明基本功能正常。

第三层:检查GPU加速

跑上面的例子时,加上 -nb gpu 看看是否真的调用了显卡:

gmx mdrun -deffnm test -nb gpu -v

查看输出日志里的 Using GPU 字样。如果没有出现,检查CMake配置是否有GPU支持,或者是不是用了 -DGMX_GPU=CUDA 但实际驱动没装好。

我曾经在服务器上编译了GPU版本,但管理员后来升级驱动没通知我,导致CUDA版本不匹配,mdrun直接Segmentation fault。所以验证时一定要跑一个真实的GPU例子,光看 --version 是不够的。

2.5 知识结构图:安装全流程

下面这张图总结了从源码到运行的完整链路,每个节点都有可能出现的问题我也标注了:

GROMACS安装与验证全流程 获取源码 tar.gz 或 git clone CMake配置 GPU/MPI/FFTW选项 编译&安装 make install 设置环境变量 PATH/LD_LIBRARY_PATH 验证安装 gmx --version + 模型跑起来 常见编译/验证问题 • CUDA版本不匹配 → 运行报段错误或找不到设备 • MPI库缺失 → 运行时卡在MPI_Init • LD_LIBRARY_PATH没设 → 提示无法加载libgromacs.so

看懂这张图,基本就能把整个安装流程串起来。我自己每次在新机器上装GROMACS,都会按这个顺序检查一遍,很少出大问题。

2.6 环境验证脚本

为了省事,我写了一个简单的验证脚本,把它放在 /usr/local/bin/check_gmx:

#!/bin/bash
echo "=== GROMACS Environment Check ==="
gmx --version 2>&1 | head -5
echo "---"
which gmx
echo "---"
echo "LD_LIBRARY_PATH:"
echo $LD_LIBRARY_PATH
echo "---"
echo "简单测试:生成tpr并运行1步"
cd /tmp
rm -rf gmx_test &> /dev/null
mkdir gmx_test && cd gmx_test
cp $GMX_PREFIX/share/gromacs/tutorials/water_box/* . 2>/dev/null
gmx grompp -f pme.mdp -c spc216.gro -p topol.top -o test.tpr &> /dev/null
gmx mdrun -deffnm test -nsteps 1 &> /dev/null
if [ -f test.xtc ]; then
    echo "结果:成功!test.xtc 已生成。"
else
    echo "结果:失败,请检查配置。"
fi
cd /tmp && rm -rf gmx_test

把这个脚本放到 $PATH 里,以后换到新环境直接运行 check_gmx 就能看到所有关键信息。省得每次手动敲一堆命令。

如果脚本提示找不到 pme.mdp,可能是因为你安装时没有安装教程文件。可以在CMake配置中加上 -DGMX_INSTALL_TUTORIALS=ON。