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构建,这样好清理。
拉取代码与配置
从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
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核给其他任务。
4.4 本章知识结构图
下面这张SVG图比较清楚地展示了我讲的三个安装路径和测试要点。你可以作为参考:
好了,这节课就到这儿。你装完GROMACS之后,建议马上跑一个简短的模拟验证。我在生产环境里见过不少同事装了就跑,跑了才发现没有GPU加速,白白浪费资源。别着急,花几分钟验证一下,后面整个工作流跑起来才能放心。