4. GROMACS安装与测试:源码编译、容器化安装、GPU支持验证

说实话,GROMACS的安装让我踩过不少坑。当年我还在用老版本的时候,编译一次就是一下午。现在好多了,但选择哪种安装方式,还得看你的使用场景。

我个人习惯把GROMACS安装分成三个流派:源码编译、容器化安装、还有包管理器安装。这节课我们重点讲前两种,因为包管理器装出来的版本通常比较老,生产环境不太够用。

4.1 源码编译:从源代码开始掌控一切

源码编译听起来挺吓人,其实就那么几行命令。复杂的是你非得想清楚自己要什么。

GROMACS的CMake选项非常多。我举个例子,你跑分子动力学模拟,可能需要单精度,也可能是双精度。嗯,这里要注意,一般MD模拟用单精度就够,双精度跑起来慢不少。

依赖安装

先把基础依赖装上。Ubuntu系统可以这样:

sudo apt update
sudo apt install build-essential cmake git \
                 libfftw3-dev libopenmpi-dev \
                 libblas-dev liblapack-dev

我个人习惯用CMake的out-of-source构建,这样好清理。

小提示:如果你在集群上编译,记得先module load好编译器。我见过同事没加载就开搞,结果fftw库找不到,折腾了大半天。

拉取代码与配置

从GitHub上拉下来,切到你需要的版本。GROMACS现在采用的是git tag管理版本:

git clone https://github.com/gromacs/gromacs.git
cd gromacs
git checkout v2024.1

我自己一般用2024.1,比较稳定。然后创建build目录:

mkdir build
cd build
cmake .. -DGMX_BUILD_OWN_FFTW=ON \
         -DGMX_MPI=ON \
         -DGMX_GPU=CUDA \
         -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda \
         -DCMAKE_INSTALL_PREFIX=/opt/gromacs

这里有几个关键参数你得记住:

CMake参数 作用
-DGMX_BUILD_OWN_FFTW=ON 自动编译FFTW,省得你到处找库
-DGMX_MPI=ON 开启MPI并行
-DGMX_GPU=CUDA 支持NVIDIA GPU加速
-DCMAKE_INSTALL_PREFIX 安装路径

编译与安装

make -j$(nproc)
make install

我曾经在多核服务器上一口气用48个核编译,结果内存不够,直接OOM了。后来我学会了先用 -j8 试水。你想想看,就算慢一点,总比编译到一半崩掉好。

安装成功后,把bin目录加到PATH里:

echo 'export PATH=/opt/gromacs/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

4.2 容器化安装:Docker与Singularity

容器化安装现在越来越流行,特别是Nextflow里。为什么?因为它环境隔离,干净利落。

GROMACS官方提供了Docker镜像和Singularity镜像。我个人更偏爱Singularity,因为它在HPC集群上不需要root权限,而且兼容性更好。

拉取Docker镜像

docker pull gromacs/gromacs:latest

然后运行一个简单的模拟来测试:

docker run --rm gromacs/gromacs:latest \
       gmx_mpi mdrun -version

使用Singularity

把Docker镜像转成SIF文件:

singularity pull gromacs.sif docker://gromacs/gromacs:latest

然后就可以用了:

singularity exec gromacs.sif gmx_mpi mdrun -v
注意:容器内路径和宿主机路径是个麻烦事。我曾经在Nextflow里直接绑定宿主机的/scratch,结果容器内写文件时权限不对。建议用绝对路径,并在容器定义时做好volume映射。

4.3 GPU支持验证

装完了到底能不能用GPU加速?不验证一下心里没底。

检查可用GPU

先看看你的GPU信息:

nvidia-smi
nvcc --version

嗯,如果这两条命令输出来都正常,说明驱动和CUDA toolkit是有的。

编译时开启GPU支持

我在前面CMake参数里已经加了 -DGMX_GPU=CUDA。如果你用AMD的ROCm,那就换成 -DGMX_GPU=HIP。我个人只碰到过NVIDIA,所以讲CUDA。

运行测试

运行一个简单的测试:

gmx_mpi mdrun -ntmpi 1 -ntomp 4 -gpu_id 0 \
       -deffnm test -v

看输出里是不是有这行:

Using 1 MPI process and 4 OpenMP threads per MPI process
Using GPU (CUDA) device 0: Tesla V100-SXM2-32GB

为什么会这样?因为GROMACS会自动检测GPU。如果没看到,那说明CUDA库链接有问题,或者你编译时忘开参数了。

性能对比

我做过一个简单测试,同样的体系,CPU只用20个核跑,要100分钟;用一块V100跑,12分钟结束。你想想看,GPU加速不仅在时间上省了80%,还能省出大量CPU核给其他任务。

一句话总结:源码编译适合定制化需求,容器化适合快速部署和Nextflow集成。GPU支持一定要在生产环境前充分验证,否则跑着跑着发现没加速就尴尬了。

4.4 本章知识结构图

下面这张SVG图比较清楚地展示了我讲的三个安装路径和测试要点。你可以作为参考:

GROMACS安装与测试知识体系 安装方式选择 源码编译 依赖安装 CMake配置 make & install 环境变量 容器化安装 Docker镜像 Singularity转换 路径映射 权限控制 GPU支持验证 nvidia-smi检查 CUDA编译参数 mdrun测试 性能对比 验证与测试:运行 gmx_mpi mdrun -version 选择任何一条路径,最后都需要做功能验证与GPU支持确认

好了,这节课就到这儿。你装完GROMACS之后,建议马上跑一个简短的模拟验证。我在生产环境里见过不少同事装了就跑,跑了才发现没有GPU加速,白白浪费资源。别着急,花几分钟验证一下,后面整个工作流跑起来才能放心。