第1章 GROMACS概述与安装
大家好,我是你们这门课的老朋友。咱们今天先不急着敲键盘,得先把地基打牢。GROMACS这个东西,说白了就是分子动力学模拟圈子里的“倚天剑”。我个人习惯从它的历史讲起,因为知道来龙去脉,能帮你更好地理解它为什么是现在这个样子。
1.1 GROMACS的前世今生
GROMACS诞生于荷兰格罗宁根大学,这几个字母拆开就是GROningen MAchine for Chemical Simulations。90年代初,那会儿做生物分子模拟还是一件很奢侈的事,算力贵得离谱。几位大神觉得现有的软件跑得太慢,干脆自己撸了一个出来。
你想想看,一个从大学实验室走出来的代码,能活到今天还成了行业标准,靠的是什么?我总结了两点:
- 性能炸裂: 它对并行计算的支持几乎是天生的。别的软件跑一个体系要几天,GROMACS可能只要几个小时。
- 开源免费: 学术圈的人手紧,这玩意儿不要钱,代码还能自己改,自然成了香饽饽。
我在项目中遇到过好几次这样的情况:一个新来的师弟问“老大,咱们做蛋白配体模拟用什么?”,我头也不抬“GROMACS”。为什么?因为它的力场库全,CHARMM、AMBER、OPLS都能用,兼容性特别好。
核心应用领域:
- 蛋白质折叠与构象变化
- 药物分子与靶点的自由能计算
- 膜蛋白与脂双层的相互作用
- 聚合物与材料界面性质
1.2 安装之前,先想清楚你要什么
安装这事儿,很多新手一上来就懵了。其实没那么复杂。你先搞清楚自己要用GPU加速吗?还是说只是跑跑几百个原子的小体系?
我个人习惯把安装方式分成三类:包管理器安装、预编译二进制安装、源码编译安装。别急着选,看看下面的表格,你心里就有数了。
| 安装方式 | 优势 | 劣势 | 适合人群 |
|---|---|---|---|
| 包管理器 | 命令一行搞定,无脑快 | 版本通常滞后,优化少 | 新手快速上手 |
| 预编译二进制 | 官方提供,性能较好 | 灵活性差,不能改编译参数 | 普通用户,不想折腾编译 |
| 源码编译 | 可定制,性能最强 | 过程繁琐,容易踩坑 | 老手,需要特定优化 |
嗯,这里要注意。如果你只是为了学这门课跑点小例子,包管理器装个2023版就够了。但如果你是做科研、算大体系,我建议你老老实实源码编译。为什么?因为你能用上现代CPU的AVX指令集、还能把CUDA的核函数调优拉满。我曾经因为没注意编译器版本,浪费了整整一个下午排查一个奇怪的“段错误”,最后发现是gcc版本太高导致的ABI不兼容。
1.3 在Linux上编译安装(最推荐,也最常用)
说实话,90%的GROMACS用户都在Linux上干活。为什么?因为集群、超算中心全是Linux环境。你在Windows上装好了,到服务器上一看还是得重新学。所以,我建议你直接上Linux。
1.3.1 依赖环境准备
先把基础库装上。Ubuntu/Debian系的话,执行这个:
sudo apt update
sudo apt install build-essential cmake git libfftw3-dev libblas-dev liblapack-dev
# 如果你有Nvidia显卡
sudo apt install nvidia-cuda-toolkit
CentOS/RHEL系的话,稍微不一样:
sudo yum groupinstall "Development Tools"
sudo yum install cmake fftw-devel blas-devel lapack-devel
# CUDA需要从Nvidia官网下载.run文件安装
我记得有次给一个课题组部署环境时,他们用的gcc版本很旧,结果编译到一半就崩了。所以,先检查一下版本:
gcc --version
# 我个人习惯用 gcc 8.x 或 9.x,太新或太老都容易出幺蛾子
1.3.2 下载源码并配置CMake
去官网或者GitHub拉最新的稳定版。我一般习惯用2023.4这个版本,经过大量测试比较稳。
wget https://ftp.gromacs.org/gromacs/gromacs-2023.4.tar.gz
tar -xzf gromacs-2023.4.tar.gz
cd gromacs-2023.4
mkdir build && cd build
接下来是关键。CMake的参数配置直接决定了你的软件性能。别偷懒。
cmake .. \
-DGMX_BUILD_OWN_FFTW=ON \
-DGMX_GPU=CUDA \
-DGMX_FFT_LIBRARY=fftw3 \
-DCMAKE_INSTALL_PREFIX=/usr/local/gromacs
make -j$(nproc) && sudo make install
你想想看,为什么我要把-DGMX_BUILD_OWN_FFTW=ON加上?因为系统自带的FFTW可能没打开AVX支持,GROMACS自己编译的FFTW能给你的FFT计算提速至少30%。
小技巧: 如果你是在本地单机上做练习,-j$(nproc)用满CPU所有核没问题。但在共享服务器上,记得用-j4或者-j8,别把人家的负载拉满了,小心被管理员骂。
1.3.3 配置环境变量
安装完后,别急着开心。要让它能在终端里直接敲“gmx”就能用:
echo "source /usr/local/gromacs/bin/GMXRC" >> ~/.bashrc
source ~/.bashrc
1.4 在Windows上安装(适合初学者尝鲜)
很多学生手头的电脑是Windows的。这没问题,GROMACS在Windows上有两种玩法。
1.4.1 方法一:WSL2(强烈推荐)
说白了,就是在Windows里装一个“Linux虚拟机”,但性能开销很小。我个人觉得这是最好的方案,没有之一。
# 在PowerShell里执行,管理员模式
wsl --install -d Ubuntu-22.04
# 然后你就能得到一个Ubuntu终端
sudo apt update && sudo apt upgrade -y
# 接着按照上面的Linux步骤走一遍就行
用WSL2的好处是,文件是互通的。你可以在Windows桌面写脚本,在WSL里跑模拟。甚至还能调用Windows本地的Nvidia显卡(需要Win11 + WSL2 CUDA支持)。
1.4.2 方法二:原生Windows编译
这条路比较窄。需要用Cygwin或者MSYS2模拟Linux环境。我一般不推荐,因为坑太多了。你想啊,GROMACS大量用POSIX系统调用和进程间通信,Windows原生API模拟得再好也差口气。
# MSYS2 环境下示例
pacman -S mingw-w64-x86_64-gcc mingw-w64-x86_64-cmake mingw-w64-x86_64-fftw
wget https://ftp.gromacs.org/gromacs/gromacs-2023.4.tar.gz
tar xvf gromacs-2023.4.tar.gz
cd gromacs-2023.4
mkdir build && cd build
cmake .. -G "MSYS Makefiles" -DGMX_BUILD_OWN_FFTW=ON
make -j8 && make install
我在项目中遇到过,有同事用这个方法编译成功了,但是跑模拟时路径分隔符的处理总出问题。所以,听我一句劝,能用WSL就别折腾原生。
1.5 在macOS上安装(M芯片用户特别关注)
Mac用户现在越来越多了。尤其是M1/M2/M3芯片,ARM架构的能效比吊打Intel。但老话说得好,“新架构总要交点学费”。
我最推荐的方式是Homebrew,它搞定了底层库的依赖:
brew update && brew upgrade
brew install gromacs
# 这条命令会帮你装好FFTW、OpenMPI等依赖
但注意!Homebrew默认装的是不带GPU加速的版本。如果你要用Mac的M系列芯片做并行,得手动指定:
brew install gromacs --with-cpu-optimizations
# 这会打开ARM的NEON指令集优化
如果你非要源码编译,记得关掉x86模拟:
cmake .. \
-DCMAKE_OSX_ARCHITECTURES=arm64 \
-DGMX_MPI=OFF \
-DGMX_OPENMP=ON \
-DGMX_GPU=OPENCL \
-DGMX_BUILD_OWN_FFTW=ON
make -j$(sysctl -n hw.ncpu) && make install
我曾经在M1 Pro上跑过一个5000原子的体系,用OpenCL加速后,速度比纯CPU快了将近3倍。不过OpenCL在macOS上算是被苹果半放弃了,性能比不上CUDA,但够用。
GMX_GPU=OPENCL这条路可能走不通。建议直接用CLANG的-DGMX_ACCELERATION=ARM_NEON来榨干CPU。
1.6 验证安装:跑个最简单的例子
装没装好,跑一下就知道了。别信什么“安装过程无报错就算成功”,我就吃过这个亏。
# 检查版本
gmx --version
# 你应该能看到类似这样的输出
# GROMACS: gmx, version 2023.4
# ...
# 跑一个最简单的能量最小化
gmx pdb2gmx -f 1AKI.pdb -o processed.gro -water spce
gmx grompp -f em.mdp -c processed.gro -o em.tpr
gmx mdrun -deffnm em
如果你看到终端里数据刷刷地滚,最后出来一个em.gro文件,恭喜你,入坑成功。如果出现“command not found”,别急,八成是环境变量没source对。
我个人习惯在安装完之后,马上把gmx --version的输出存到一个文本文件里。为什么?因为以后你发文章时,方法部分要写清楚软件版本。留着总没坏处。
1.7 本章知识体系总览
下面这张图是我画的,能帮你把这一章的知识串起来。从为什么选GROMACS,到怎么装,再到怎么验证,一气呵成。