第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
-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 但实际驱动没装好。
--version 是不够的。2.5 知识结构图:安装全流程
下面这张图总结了从源码到运行的完整链路,每个节点都有可能出现的问题我也标注了:
看懂这张图,基本就能把整个安装流程串起来。我自己每次在新机器上装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。