GROMACS安装实战:WSL2与Colab双环境完整指南
2026/9/17 3:55:02 网站建设 项目流程

我最早碰GROMACS是在课题组服务器上,后来因为权限和网络问题,不得不长期在自己Windows笔记本上跑模拟,再后来临时任务增多,又开始用Colab这种云端Notebook环境。折腾了好几轮之后,固定下来一套自己觉得最顺手的组合:日常练习和小型体系用WSL2跑,临时验证就丢到Colab里。这篇内容不是那种干巴巴的安装手册,而是把我在WSL2和Colab里装GROMACS的完整流程、编译参数、性能取舍以及踩过的坑全部记下来,给同样在Windows上做分子动力学模拟的朋友一个可以照着抄的作业。

先交代一下为什么要这么折腾。GROMACS是目前分子动力学模拟领域用得最多的开源软件之一,适合做蛋白、核酸、脂膜、聚合物这类体系的模拟,性能和社区成熟度都很高。它本质上是高度优化的C++程序,编译时依赖CMake、编译器、FFTW,可选MPI和CUDA/OpenCL加速,所以“安装”这个动作从来不是解压一个二进制完事,而是要把工具链、依赖库和加速框架正确接起来。绝大多数人日常用Windows,在Windows原生环境里编译GROMACS会碰到不少兼容性和性能问题,所以我会推荐走两条路:WSL2和Colab。往下我会先讲清楚怎么选,再分别给出完整操作,最后集中整理高频问题。

1. 安装前先定路线:WSL2和Colab到底怎么选

1.1 WSL2的优势和代价

WSL2从实现上说,是一个运行在Windows里的轻量虚拟机,内核是微软维护的精简版Linux内核。对GROMACS这种典型的Linux生态软件,WSL2最大的意义在于:你能在Windows上直接用apt、gcc、gfortran、OpenMPI这些熟悉的工具,甚至NVIDIA的CUDA也能通过驱动转发的方式直接映射进Linux端,省去装双系统或开Hyper-V图形化虚拟机的麻烦。

但WSL2也不是没有代价。首先是虚拟磁盘问题,WSL2默认把整个Linux文件系统放在一个vhdx虚拟盘里,默认路径在C盘用户目录下,C盘空间不充裕的话很容易爆盘。其次,WSL2在跨文件系统读写时性能非常差,如果你把源码放在/mnt/c下再进Linux编译,make过程会慢得让人怀疑人生。我的经验是,源码、构建目录、运行数据全部放在Linux原生文件系统,也就是home目录下面,编译体验会好非常多。

1.2 Colab的极简与局限

Colab是云端的Notebook环境,打开浏览器就能得到一个Ubuntu虚拟机,默认还带一块GPU。它的最大优点是零安装门槛:不需要你配置任何本地环境,页面点开就能跑Shell和Python。对GROMACS来说,Colab的GPU通常是Tesla T4、V100这类数据中心卡,免费额度下足够支撑教学和中等规模的生产任务。

局限也很明显。第一是会话不持久,免费Colab会话只能延续几个小时,超时或者关页面后,实例里的所有apt安装包、编译产物都会清空。第二是环境不固定,每次打开的GPU型号可能都不一样,要写脚本时不能假设一定是什么卡。第三,长期大规模跑模拟不现实,超过时长上限还是要回本地或集群。所以Colab适合“快速验证流程”“小体系跑通”“临时算一算”,不适合“拿来当免费服务器天天跑”。

这里把两条路的适用场景整理一下:

对比维度WSL2Colab
前置显卡要求有NVIDIA独显更佳,纯CPU也能跑不需要本地显卡,云端GPU
环境持久性持久,装一次长期可用会话结束后环境丢失
安装可控性完全可控,编译参数任调有限制,但常规够用
适合场景本地批量模拟、长期项目快速验证、教学演示、临时任务
成本电费和硬件成本免费额度,高级GPU另付费

这两种方式不是二选一,而是互补。我自己经常在Colab里先把参数和流程调通,再到WSL2里跑长任务,或者反过来,两边用同一套tpr文件无缝切换。

2. WSL2环境下完整安装GROMACS:从装系统到跑通测试

2.1 把WSL2和Ubuntu 22.04装到位

在Windows 10或11上安装WSL2,最省事的是以管理员身份打开PowerShell,运行:

wsl --install

这条命令会把WSL2的内核、虚拟化平台组件和默认Linux发行版一起装好。如果你希望指定系统版本,像我习惯用22.04 LTS,可以加参数:

wsl --install -d Ubuntu-22.04

首次启动会要求创建用户名和密码,这步我一直建议设置普通用户,不要直接用root。后面编译、安装软件都用普通用户加sudo,出问题的概率会低很多。装完后,运行wsl -l -v确认一下版本的Level是2,如果看到的是Version 1,执行wsl --set-version Ubuntu-22.04 2切换。

如果过程中提示“此计算机上未启用虚拟化”,那需要进BIOS打开CPU虚拟化开关。不同品牌主板叫法不一样,常见是Intel VT-x或AMD SVM,还有一个分支叫VT-d,一般只和直通设备有关,但经常同时出现,一并打开即可。这个操作本身不复杂,关键是重启后再回来确认WSL能正常启动。

C盘空间紧张的,建议不要任由WSL2把虚拟磁盘放在系统盘。最方便的做法是安装完立刻用wsl --exportwsl --import把整个发行版迁移到D盘目录,之后默认就固定在那里了。这个步骤虽然有点绕,但相比后面C盘被轨迹文件塞满再想办法,早做早轻松。

2.2 装好编译工具链和核心依赖库

进入WSL2终端,第一件事更新软件源:

sudo apt update && sudo apt upgrade -y

然后一次性装齐GROMACS编译需要的依赖:

sudo apt install -y build-essential cmake g++ gfortran libfftw3-dev libopenmpi-dev libblas-dev liblapack-dev ocl-icd-opencl-dev

我来逐个解释这些包到底是干嘛的。build-essential包含gcc、g++和make,这是最基础的C/C++编译工具链;cmake是GROMACS的构建系统工具,版本不能太老,2023版GROMACS要求CMake 3.18以上;gfortran是FORTRAN编译器,GROMACS某些线性代数相关代码路径会用到;libfftw3-dev是FFTW快速傅里叶变换库,GROMACS的PME静电计算离不开它;libopenmpi-dev提供MPI并行支持,决定你能不能跑-ntmpi多进程并行;libblas-dev和liblapack-dev是基础线性代数库;ocl-icd-opencl-dev是OpenCL运行时开发头文件,如果后面想用OpenCL后端时用得上。

有几点特别提醒:如果系统自带的CMake版本太旧,不要硬着头皮用旧版配新版GROMACS,后患很多。可以在WSL2里用pip install cmake装一个更新版,或者去CMake官网下载二进制包后手动加进PATH。另外,如果打算用CUDA加速,还需要单独装CUDA Toolkit,里面才带nvcc编译器。WSL2里不需要安装Linux版的NVIDIA显示驱动,驱动由Windows端统一提供,这点和原生Linux很不一样。

2.3 下载GROMACS源码并使用CMake配置编译

源码可以从官方网站的下载区拿,选稳定版本即可。以2023.2版本为例,在WSL2终端里执行:

wget https://ftp.gromacs.org/gromacs/gromacs-2023.2.tar.gz tar xzf gromacs-2023.2.tar.gz cd gromacs-2023.2 mkdir build cd build

然后进入CMake配置。这里有几个参数,我建议不要无脑抄,每一条都最好理解一下再决定开还是关:

cmake .. -DGMX_BUILD_MPI=ON -DGMX_GPU=ON -DGMX_SIMD=AVX2_256 -DGMX_BUILD_OWN_FFTW=ON -DCMAKE_INSTALL_PREFIX=/usr/local/gromacs

GMX_BUILD_MPI=ON开启MPI并行支持,这样后面能使用gmx mdrun -ntmpi N -ntomp M那种多进程加多线程的混合并行模式。只跑单机多核的可以不开,但开上对以后兼容集群有好处,建议保持ON。GMX_GPU=ON启用GPU加速后端,前提是你有NVIDIA独显并且安装好了CUDA Toolkit;没显卡的机器把这一项改成OFF,或者让它自动检测,不要强行开。GMX_SIMD=AVX2_256是CPU指令集优化级别,AVX2覆盖了绝大部分近十年的x86处理器,如果CPU较老可以选SSE2,要是非常新的处理器且支持AVX512,CMake会自动探测,你也手动指定。GMX_BUILD_OWN_FFTW=ON的意思是让GROMACS编译时自己构建一份FFTW,能避免系统FFTW库版本和优化标志不匹配带来的隐藏性能问题,对新手特别友好,缺点是编译时间会增加几分钟。CMAKE_INSTALL_PREFIX=/usr/local/gromacs指定安装路径,后面source环境变量就要用这个路径。

配置完看到输出里没有error,就可以编译了:

make -j$(nproc) sudo make install

-j后面跟的是并行编译线程数,$(nproc)会读取当前CPU逻辑核数。逻辑核很多但内存只有8G的机器,建议保守一点用make -j4,否则多个编译器进程同时开,内存不足时会被系统直接杀进程,编译到一半失败还要重新来。

安装完成后,把环境变量写进shell配置:

echo 'source /usr/local/gromacs/bin/GMXRC' >> ~/.bashrc source ~/.bashrc gmx --version

如果能看到版本号、编译参数列表以及GPU支持信息,就说明这一步基本成功了。

2.4 用真实小体系跑通mdrun验证安装

编译成功不等于整个环境就能正常计算,我建议装完立刻用一个最小体系做冒烟测试。这里直接给你一个能跑通的小流程,假设你已经有一个蛋白或一个分子结构的PDB文件:

gmx pdb2gmx -f protein.pdb -o conf.gro -water spce gmx editconf -f conf.gro -o box.gro -c -d 1.0 -bt cubic gmx solvate -cp box.gro -cs spc216 -o solv.gro -p topol.top gmx grompp -f em.mdp -c solv.gro -p topol.top -o em.tpr gmx mdrun -deffnm em

一套最小体系至少要包含拓扑生成、建盒子、加溶剂、生成tpr、执行能量最小化这几个步骤。跑的时候注意看终端输出,如果顺利会打印出步骤和耗时,最后生成em.gro、em.trr这些文件。再用nvidia-smi看一下GPU占用,如果mdrun进程挂在GPU上,说明加速链路是通的;用htop能看到多核并行负载分布。

注意:能量最小化用的em.mdp文件里最重要的一行是integrator = steep,这是最陡下降法,不设置会默认走别的积分器,可能直接报错。实际测试时从GROMACS官网教程页复制一份标准mdp改几个参数就行,不熟悉格式不要手写。

3. Colab上部署GROMACS:打开浏览器就能跑模拟

3.1 先摸清Colab实例的环境底细

Colab的Notebook运行在云端Ubuntu虚拟机里,如果你选择了GPU运行时,可以通过!nvidia-smi直接看到显卡型号。免费用户最常遇到的是Tesla T4,16GB显存,单精度浮点性能在8TFLOPS左右,跑教学级和中等规模的蛋白体系绰绰有余。Colab默认预装了Python、CUDA驱动、cuDNN这些基础组件,但没有GROMACS,所以部署GROMACS这件事需要你自己完成。

另一个关键点是每次启动Notebook时,Colab给的内存大约是12GB上下,磁盘空间也有限。编译大型工程时如果make -j$(nproc)直接开满,多个编译器进程很容易把内存吃爆。在Colab里编译GROMACS的时候,我自己一般用make -j2make -j4,速度慢一点没关系,稳定不崩更重要。

3.2 最省事的路线:apt安装系统版GROMACS

如果只是想快速跑通流程、验证一个tpr能不能正常执行,那么用Ubuntu软件源自带的GROMACS是最快的。在Colab单元格里执行:

!apt-get update !apt-get install -y gromacs !gmx --version

安装完成后,直接就能用gmx命令。这句话看起来很简单,但背后其实省掉了一个多小时编译时间以及无数个潜在坑。Ubuntu源里的gromacs包虽然不是最新(比如可能是2021.x),但基本功能完整,支持CPU运行和一些常用功能,应付课程作业完全足够。

要注意的是,软件源自带的版本大概率没有针对当前Colab GPU做过CUDA优化,甚至可能根本没有GPU支持,所以对性能要求较高的任务,apt方式并不是最佳选择。它更适合用来验证流程本身,之后想要性能再去编译更合适的版本。

3.3 在Colab里从源码编译,拿到新版本和GPU加速

如果要在Colab里使用较新的GROMACS版本并启用GPU加速,那就绕不开源码编译。核心步骤和WSL2里非常相似,区别在于每行命令前面加感叹号,或者使用%cd切换目录:

!wget https://ftp.gromacs.org/gromacs/gromacs-2024.2.tar.gz !tar xzf gromacs-2024.2.tar.gz %cd gromacs-2024.2 !mkdir build && cd build !cmake .. -DGMX_GPU=CUDA -DGMX_SIMD=AVX2_256 -DGMX_BUILD_OWN_FFTW=ON -DCMAKE_INSTALL_PREFIX=/usr/local/gromacs !make -j2 !make install !echo 'source /usr/local/gromacs/bin/GMXRC' >> ~/.bashrc

这里我把GPU参数写成了-DGMX_GPU=CUDA,这是GROMACS 2024系列推荐的写法。如果你用2023及更早版本,旧写法是-DGMX_GPU=ON;两种写法混用会出现CMake配置报错,所以要先确认版本对参数的对应关系。另外因为Colab GPU型号不固定,第一次打开时可以跑一句!nvidia-smi --query-gpu=name --format=csv看看型号,然后根据显卡算力给CMake传-DGMX_CUDA_TARGET_COMPUTE_VERSION,常见对应关系是T4对应75、V100对应70、A100对应80。不指定的话新版本一般也能自动识别,但旧版本确实容易在这里栽跟头。

编译完成后,不要急着跑大任务,先验证一下:

!source /usr/local/gromacs/bin/GMXRC && gmx --version

3.4 把装好的环境保存下来,避免每次重编译

Colab会话结束之后,所有非挂载目录的内容都会清空,这意味着你辛苦编译好的GROMACS也会消失。基础的应对思路是把环境打包传到云盘,下次复制回来继续用。

一个比较靠谱的做法是把安装目录拷到Google Drive里,Colab里的云盘挂载是/content/drive

from google.colab import drive drive.mount('/content/drive') !cp -r /usr/local/gromacs /content/drive/MyDrive/gromacs_env/

下次新建Notebook时,直接把云盘里的环境复制回系统路径即可:

!cp -r /content/drive/MyDrive/gromacs_env/gromacs /usr/local/ !echo 'source /usr/local/gromacs/bin/GMXRC' >> ~/.bashrc

需要注意的是,云盘同步速度一般,环境目录本身可能几百MB,拷贝一次还算能接受,但千万不要把轨迹文件也这么同步,几十GB的数据建议直接写到云盘挂载目录或再另找网盘渠道。我的习惯是把安装目录和运行脚本作为“环境资产”放云盘,把模拟产物按任务单独组织,这样复用环境时不污染云盘空间。

4. 安装实战中的高频问题与排查手段

4.1 WSL2环境本身的常见故障

WSL2的问题,十条有八条出在环境初始化阶段。我把自己和身边人遇到过的典型情况整理一下:

  • wsl --install提示“拒绝访问”或“无法加载”:大概率是PowerShell没用管理员模式打开,或者Windows系统版本太旧。先更新Windows再试。
  • 提示“此计算机上未启用虚拟化”:这是BIOS里虚拟化开关未打开,进BIOS找到Intel VT-x或AMD SVM开启,重启之后重新执行WSL命令。
  • 内核相关报错,比如“WSL2 kernel update not found”:在PowerShell执行wsl --update,手动升级内核组件。
  • WSL2启动后卡住或没有输出:执行wsl --shutdown强制重启Linux子系统,很多临时卡顿都能这样解决。
  • 一直提示版本不是2:执行wsl --set-default-version 2设置默认版本,再wsl --set-version Ubuntu-22.04 2转换已有发行版。
  • 文件放Windows目录下编译速度奇慢:这是WSL2跨文件系统IO性能导致的,解决办法就是把源码移到Linux这边,别用/mnt/c下的路径。

4.2 GROMACS编译阶段最容易踩的坑

编译GROMACS的报错,大体分两类:一类是找不到依赖库,另一类是参数写错或版本不匹配。

依赖库类错误最经典的是Could NOT find FFTW3。如果没有设置GMX_BUILD_OWN_FFTW=ON,系统又没装libfftw3-dev,CMake配置阶段就会直接失败。解决方法是先装依赖再重新配置,或者干脆开启自编译选项,让GROMACS自己搞定FFTW。还有一种是CUDA_SDK_ROOT_DIR-NOTFOUND或找不到nvcc,说明CUDA Toolkit没装好,要么补装对应版本,要么检查环境变量是不是没写入PATH。每个版本的GROMACS对CUDA支持版本都有明确范围,新配旧或旧配新都会导致类似报错。

参数写错类错误常见于GPU后端参数。比如用老版本却写了新版本的-DGMX_GPU=CUDA,或者新版本却用老写法,都会直接报 “Unrecognized CMake variable” 或类似的提示。这类问题没啥快捷技巧,就是先确认版本,再看该版本官方文档对应参数到底是哪个格式。

4.3 Colab里的编辑器缓存与会话丢失问题

Colab里遇到最多的问题是环境重启后一片空白,或者编译到一半会话断开。

编译时间太长导致会话断开,属于Colab的闲置超时机制在起作用。解决办法是别让单个单元格长时间没有任何输出,把编译输出重定向到日志文件,隔一段时间打印一行进度,这样能有效避免被判定为闲置。或者干脆把任务拆成几个单元格,configure、make、install分开跑,每个步骤都不算长,交互不容易断。

编译时内存爆掉,这是很常见的。免费Colab内存约12GB,直接-j$(nproc)开满几十个编译进程,内存不够就会被内核杀进程。我在Colab里编译GROMACS习惯固定用-j2,即便编译时间拉长到一小时以上,也可以换来较高的成功率。

环境变量丢失这类小事也很烦。每次开启新会话、新shell,之前写进.bashrc的source语句不会自动加载,执行命令前要先手动source ~/.bashrc,或者直接在单元格里写!source /usr/local/gromacs/bin/GMXRC && gmx --version验证环境。

4.4 让模拟跑得更快的几点实操心得

安装熬过去之后,真正影响效率的往往是运行参数和加速配置。我用同样的体系在WSL2和Colab上都跑过,总结出几条很实用的经验:

  • 多核并行时-ntomp按物理核数设置,不要盲目用逻辑核数。超线程在mdrun这种计算密集任务里经常带来负收益。
  • GPU加速不是万能的,体系特别小时,数据在CPU和GPU之间来回搬运反而更慢。先用一个几百原子的小体系测一下,对比纯CPU和GPU的运行时间,再决定是不是每件事都该开GPU。
  • 轨迹写入本身很占IO,不要一上来就把所有坐标都写入到轨迹文件。根据你的分析目标,控制nstxoutnstvoutnstxtcout的写入频率,能省下大量磁盘空间和写入时间。
  • 无论是WSL2还是Colab,都把结果文件放在独立目录里,用清晰的命名规则区分不同体系、不同温度、不同力场。分子动力学模拟的生产数据动辄几十GB,没有良好的文件管理习惯会很快乱成一团。

最后再分享一个我个人的小习惯:每次装完GROMACS,我不会直接跑正式模拟,而是先用gmx mdrun -nsteps 1000这类极短步数的任务完整走一遍流程。这个测试只要几分钟,却能验证CPU并行、GPU加速、轨迹写入、拓扑读取这些关键环节是否全部正常。等这句命令跑通,再去提交动辄几十万步的正式模拟,心里才有底。说到底,GROMACS的安装并不是真正目的,能让它稳定地产出轨迹和能量数据才是正经事。希望这篇经验整理能帮你少走点弯路。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询