GROMACS / 安装与编译

GROMACS 安装:Windows(WSL2)、Linux 与 GPU 版编译常见问题

本页按 GROMACS 2026.4(2026 年 10 月 2 日发布)的官方安装指南和源码核对,给出路线选择、可直接执行的 CPU 版与 CUDA 版构建命令、WSL2 的 GPU 前提、make check 失败的判断方法、常见报错对照,以及安装后确认 GPU 真正参与计算的日志行。

直接答案

Windows 用户推荐在 WSL2 的 Ubuntu 24.04 中从源码编译:NVIDIA 驱动只装在 Windows 侧,WSL 内只装 cuda-toolkit-12-x,然后执行 cmake .. -DGMX_GPU=CUDA -DCMAKE_CUDA_ARCHITECTURES=<计算能力> -DGMX_BUILD_OWN_FFTW=ON -DREGRESSIONTEST_DOWNLOAD=ON,再 make、make check、make install。Linux 步骤相同。GROMACS 2026 要求 CMake ≥ 3.28、GCC ≥ 11、CUDA ≥ 12.1,显卡计算能力 ≥ 5.0;计算能力低于 7.5 的显卡(GTX 10 系、V100)只能用 CUDA 12.x。安装后用 gmx mdrun -nb gpu -pme gpu -update gpu 跑一个水盒子,并在 md.log 中确认出现 “Mapping of GPU IDs” 和 “update and constrain coordinates on the GPU”。

路线

表中版本信息核对日期为 2026-10-10。需要 GPU 加速时,只有前两种路线能装上当前版本并自行选择 CUDA 版本。

路线能装到的版本NVIDIA GPU适用条件主要限制
WSL2 + 源码编译任意版本,当前 2026.4支持(CUDA)Windows 10/11 个人电脑,有 NVIDIA 显卡WSL2 中 nvidia-smi 功能受限;多 GPU 时不能按索引筛选设备;源码须放在 Linux 文件系统内
Linux 源码编译任意版本,当前 2026.4支持(CUDA/SYCL/HIP)工作站、服务器、集群需要 CMake ≥ 3.28、GCC ≥ 11;CentOS 7(GCC 4.8.5)和 Rocky/RHEL 8(GCC 8.5)需先装新编译器
conda-forge2026.3(官方已发布 2026.4)仅 linux-64 有 CUDA 构建没有 root 权限、只想快速用上不支持 Windows;CUDA 构建依赖 cuda-toolkit 12.9,驱动须支持 12.9;x86 最高只编到 AVX2_256;打包时未运行回归测试
Ubuntu apt24.04 为 2023.3,22.04 为 2021.4否只做教学或 CPU 小体系版本落后两到三年,依赖中没有 CUDA 运行库
NVIDIA NGC 容器最新标签 2023.2(2023-08 更新)支持已有 Docker/Singularity 的 GPU 服务器版本停更;示例命令中的 GMX_ENABLE_DIRECT_GPU_COMM 属于 2022/2023 的用法
原生 Windows(MSVC)可自行编译支持(CUDA,官方测试过)必须在 Windows 原生环境运行官方不提供 Windows 二进制;GMX_BUILD_OWN_FFTW 不可用,需 MKL、fftpack 或自建 FFTW;不支持 PLUMED;CMake < 4.3 编译 CUDA 版检测不到 OpenMP_CUDA
来源:GROMACS 2026.4 安装指南与 Known issues;conda-forge gromacs-feedstock 配方;packages.ubuntu.com;NGC GROMACS 容器页;NVIDIA CUDA on WSL 用户指南。

版本差异

网上多数中文教程以 2018–2021 版为例。下表列出在 2026.x 中已经改变的要求和写法。

项目GROMACS 2026.x旧教程写法照抄的后果
CMake≥ 3.28(2025 起)cmake3、3.13–3.17配置阶段直接失败;Ubuntu 22.04 的 apt 版本 3.22.1 不够,24.04 的 3.28.3 够
C++ 编译器GCC ≥ 11、Clang ≥ 14、MSVC 2019;Intel 经典编译器 icc 不再支持GCC 5–7CentOS 7、Rocky 8 自带 GCC 无法编译
启用 CUDA-DGMX_GPU=CUDA-DGMX_GPU=ON报错 Invalid value for GMX_GPU: ON. Pick one of: OFF, CUDA, OpenCL, SYCL, HIP
CUDA 路径-DCUDAToolkit_ROOT=/usr/local/cuda-12.9-DCUDA_TOOLKIT_ROOT_DIR=…GROMACS 2026 的 CMake 脚本不再读取该变量,配置结束时只提示 Manually-specified variables were not used by the project: CUDA_TOOLKIT_ROOT_DIR(本页用 CMake 4.4 实测);多版本 CUDA 并存时可能找到另一个 nvcc,需在 cmake 输出中核对实际版本
GPU 架构-DCMAKE_CUDA_ARCHITECTURES=89-DGMX_CUDA_TARGET_SM=…仍可用但给出弃用警告,2026 起统一改用 CMake 标准变量
CUDA 版本≥ 12.1,计算能力 ≥ 5.0CUDA 9–11CUDA 11.x 配置阶段即失败
CUDA 132025.3 起支持;CUDA 13 不能为计算能力 < 7.5 的显卡编译未提及GTX 10 系、P100、V100 用 CUDA 13 编译后无法使用 GPU;2025.0–2025.2 配 CUDA 13 链接失败
AMD 显卡HIP 后端 2026 起支持完整卸载;或 SYCL + AdaptiveCppOpenCLOpenCL 已弃用,且不支持 RDNA 系列 AMD 显卡和 Volta 及以后的 NVIDIA 显卡
GPU 更新与约束-update auto 默认在 GPU 上执行(2023 起)需手动加 -update gpu 或设 GMX_FORCE_UPDATE_DEFAULT_GPU旧环境变量 GMX_GPU_DD_COMMS、GMX_GPU_PME_PP_COMMS 已删除,设置后不起作用
MPI需 MPI 3.0(2026 起)MPI 2.x单机运行用内置 thread-MPI 即可,不需要编译 MPI 版
PLUMED2025 起自带接口,运行时加载必须先 plumed patch常规用法不再需要打补丁,详见 PLUMED 一节
来源:GROMACS 2026.4 安装指南;2025 与 2026 版 release notes(Portability、Miscellaneous);2026.4 源码 CMakeLists.txt 与 cmake/gmxManageCuda.cmake;NVIDIA CUDA Features Archive。

Linux

GMX_BUILD_OWN_FFTW=ON 会下载 FFTW 3.3.10 并以单精度和 GROMACS 推荐的 SIMD 选项编译。官方不推荐使用发行版的 FFTW 包,因为发行版默认包是双精度,编译选项也未针对 GROMACS 优化。

cmake 输出中要确认两行:SIMD 指令集是否与 CPU 匹配(例如 AVX2_256 或 AVX_512),以及 CUDA 版的 “Compiling GROMACS for CUDA architectures: …”。在登录节点编译、在计算节点运行时,SIMD 要按计算节点设置 -DGMX_SIMD;用 AVX-512 编译的程序在只支持 AVX2 的机器上会因非法指令退出。GPU 运行时官方建议优先用 AVX2_256。

CUDA 编译时 nvcc 默认用 CMAKE_CXX_COMPILER 作为主机编译器。系统 GCC 比 CUDA 支持的版本新时,同时指定 -DCMAKE_C_COMPILER=gcc-12 -DCMAKE_CXX_COMPILER=g++-12 这类旧版编译器,不要修改 CUDA 的 host_config.h。

CPU 版(单精度、thread-MPI)bash
# Ubuntu 24.04(含 WSL2 中的 Ubuntu 24.04);22.04 的 apt cmake 是 3.22,需先用 pip install cmake 升级
sudo apt update
sudo apt install -y build-essential cmake wget perl

wget https://ftp.gromacs.org/gromacs/gromacs-2026.4.tar.gz
tar xfz gromacs-2026.4.tar.gz
cd gromacs-2026.4
mkdir build && cd build

cmake .. \
  -DGMX_BUILD_OWN_FFTW=ON \
  -DREGRESSIONTEST_DOWNLOAD=ON \
  -DCMAKE_INSTALL_PREFIX=$HOME/opt/gromacs-2026.4

make -j $(nproc)
make check
make install
echo 'source $HOME/opt/gromacs-2026.4/bin/GMXRC' >> ~/.bashrc
source $HOME/opt/gromacs-2026.4/bin/GMXRC
gmx --version
CUDA 版bash
# 前提:nvcc 可用(nvcc --version),nvidia-smi 能看到显卡
export PATH=/usr/local/cuda-12.9/bin:$PATH

cd gromacs-2026.4
mkdir build-cuda && cd build-cuda

# CMAKE_CUDA_ARCHITECTURES 填显卡计算能力去掉小数点:
# RTX 20/T4=75, A100=80, RTX 30/A40=86, RTX 40/L40=89, H100=90, RTX 50=120
# 不写则按 50..120 中 nvcc 支持的架构全部编译,编译更慢、二进制更大
cmake .. \
  -DGMX_GPU=CUDA \
  -DCUDAToolkit_ROOT=/usr/local/cuda-12.9 \
  -DCMAKE_CUDA_ARCHITECTURES=89 \
  -DGMX_BUILD_OWN_FFTW=ON \
  -DREGRESSIONTEST_DOWNLOAD=ON \
  -DCMAKE_INSTALL_PREFIX=$HOME/opt/gromacs-2026.4-cuda

make -j $(nproc)
make check
make install
source $HOME/opt/gromacs-2026.4-cuda/bin/GMXRC
gmx --version | grep -E "GPU support|CUDA targets|CUDA driver|CUDA runtime|SIMD"
服务器无法联网时bash
# 服务器无法访问 fftw.org 或 ftp.gromacs.org 时,先在别处下载这两个文件再传上去
#   http://www.fftw.org/fftw-3.3.10.tar.gz
#   https://ftp.gromacs.org/regressiontests/regressiontests-2026.4.tar.gz
tar xfz regressiontests-2026.4.tar.gz -C $HOME/src

cmake .. \
  -DGMX_GPU=CUDA \
  -DGMX_BUILD_OWN_FFTW=ON \
  -DGMX_BUILD_OWN_FFTW_URL=$HOME/src/fftw-3.3.10.tar.gz \
  -DREGRESSIONTEST_PATH=$HOME/src/regressiontests-2026.4 \
  -DCMAKE_INSTALL_PREFIX=$HOME/opt/gromacs-2026.4-cuda

Windows

完成以上步骤后,按上一节的 CUDA 版命令编译即可。WSL2 的已知限制:nvidia-smi 只提供部分功能;多 GPU 机器上不能按索引号筛选显卡;不支持 CPU 与 GPU 并发访问同一内存。单卡运行 GROMACS 不受这些限制影响。

Windows 侧powershell
# Windows PowerShell(管理员)
wsl --install -d Ubuntu-24.04
wsl --update

# 可选:%UserProfile%\.wslconfig,修改后执行 wsl --shutdown 再进入
# [wsl2]
# memory=16GB
# processors=8
WSL 内安装 CUDA toolkitbash
# 在 WSL 的 Ubuntu 中执行;先确认 Windows 驱动已透传
nvidia-smi

wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update
# 只装 toolkit 元包;不要装 cuda、cuda-12-9 或 cuda-drivers,它们会带入 Linux 驱动
sudo apt-get install -y cuda-toolkit-12-9

echo 'export PATH=/usr/local/cuda-12.9/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
nvcc --version

# 源码和 build 目录放在 Linux 文件系统,不要放 /mnt/c
mkdir -p ~/src && cd ~/src
  1. 01

    在 Windows 上安装或更新 NVIDIA 驱动

    NVIDIA 的 WSL 指南规定,这是唯一需要安装的驱动,不要在 WSL 内安装任何 Linux 显示驱动。Windows 驱动会以 libcuda.so 的形式映射进 WSL2,nvidia-smi 位于 /usr/lib/wsl/lib。WSL 中 nvidia-smi 右上角显示的 CUDA Version 应不低于你要安装的 toolkit 版本。

  2. 02

    安装 WSL2 和 Ubuntu 24.04

    CUDA 只支持 WSL 2,不支持 WSL 1。Ubuntu 24.04 的 apt 自带 CMake 3.28.3 和 GCC 13.2,满足 GROMACS 2026 的要求,可以省去手动升级 CMake。

  3. 03

    只安装 cuda-toolkit-12-x 元包

    使用 NVIDIA 的 wsl-ubuntu 仓库。cuda、cuda-12-x、cuda-drivers 这三个元包会安装 Linux 驱动并覆盖 WSL 的 libcuda 映射,导致 GPU 不可用。CUDA 12.9 能为计算能力 5.0 到 12.0 的显卡编译,包括 RTX 50 系列,也包括 GTX 10 系。

  4. 04

    源码与 build 目录放在 ~ 下

    微软建议在 Linux 命令行工作时把文件放在 /home/<用户名>,不要放在 /mnt/c。在 /mnt/c 下编译速度慢,GROMACS 论坛也有人在该路径下编译时出现 “Clock skew detected” 警告。

  5. 05

    编译时内存不足就降并行数

    WSL2 默认只分配 Windows 内存的 50%。make -j 中途出现 “c++: fatal error: Killed signal terminated program cc1plus” 是内存耗尽,可减小 -j 的数值,或在 .wslconfig 中调大 memory 后执行 wsl --shutdown。

conda

conda-forge CUDA 构建bash
# 只适用于 linux-64(含 WSL2)。CUDA 构建要求驱动支持 CUDA 12.9
conda create -n gmx -c conda-forge "gromacs=2026.3=nompi_cuda*"
conda activate gmx
gmx --version | grep -E "GPU support|SIMD"

# CPU/OpenCL 构建
# conda create -n gmx-cpu -c conda-forge "gromacs=2026.3=nompi_h*"
国内网络:conda-forge 与 pip 用清华 TUNA 镜像bash
# ~/.condarc(TUNA 帮助页给出的 conda-forge 写法;改完先 conda clean -i)
# channels:
#   - conda-forge
#   - nodefaults
# show_channel_urls: true
# custom_channels:
#   conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
conda clean -i
conda create -n gmx -c conda-forge "gromacs=2026.3=nompi_cuda*"

# 用 mamba 时改用 mirrored_channels
# channels:
#   - conda-forge
# mirrored_channels:
#   conda-forge:
#     - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge

# 源码编译时用 pip 升级 CMake(需要 ≥ 3.28)
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple "cmake>=3.28"

版本落后官方一个补丁版

核对日期当天 conda-forge 最新为 2026.3,官方为 2026.4。bioconda 的 gromacs 停在 2021.3,不要从 bioconda 安装。

CUDA 构建只有 linux-64

aarch64、ppc64le 和 macOS 没有 CUDA 构建,Windows 完全没有构建。CUDA 构建会在环境中安装 cuda-toolkit 12.9,并通过 __cuda 虚拟包检查驱动。

SIMD 最高 AVX2_256

配方在 x86 上只编译 SSE2、AVX_256、AVX2_256 三种版本,启动时按 CPU 选择。支持 AVX-512 的 CPU 在纯 CPU 运行时可能比自编译版本慢。

打包时没跑回归测试

配方中 REGRESSIONTEST_DOWNLOAD 被注释掉,打包测试只执行 gmx -version。需要可信结果时,自行下载 regressiontests-2026.3 并运行 gmxtest.pl。

测试

官方安装指南的判断标准是:个别测试失败可能是编译器 bug,也可能只是容差略紧。应查看脚本指出的输出文件;失败若确实存在,就换一个更新的编译器重新编译。仍无法通过时,到 GROMACS 论坛发帖,并附上硬件描述和 gmx mdrun -version 的完整输出。

GROMACS 论坛中最常见的情况是 GPU 构建大量测试显示 Timeout。开发者的解释是测试默认会使用检测到的全部核心和 GPU,CPU 或 GPU 被其他任务占用时就会超时。一个 2021.1 案例中,GPU 检测开启时有 23 项超时,设置 GMX_DISABLE_GPU_DETECTION=1 后只剩 1 项。只有超时、且 CPU 模式能通过时,可以先用下一节的水盒子自检确认 GPU 运行正常;数值比较失败(输出中出现 reference 与计算值不符)则不应忽略。

定位失败测试bash
# 只看失败项
make check 2>&1 | tee check.log
grep -A40 "tests FAILED" check.log

# 1. 排除 GPU 因素:CPU 通过而 GPU 超时,多半是 GPU 被其他进程占用
GMX_DISABLE_GPU_DETECTION=1 make check

# 2. 多 GPU 机器只让测试看到一张卡
CUDA_VISIBLE_DEVICES=0 make check

# 3. 慢机器或 WSL 中超时:放宽超时倍数后重新配置
cmake .. -DGMX_TEST_TIMEOUT_FACTOR=3 && make check

# 4. 单独重跑某个测试,看完整输出
ctest -R MdrunTests --output-on-failure

报错

报错原文(节选)原因处理
Invalid value for GMX_GPU: ON沿用 2021 年以前的写法改为 -DGMX_GPU=CUDA
Could not find `nvcc` executable in path specified by variable CUDAToolkit_ROOT=/usr/local/cuda-12.9CUDAToolkit_ROOT 指向的目录下没有 bin/nvcc(本页在无 CUDA 的机器上实测的 CMake 原文)用 ls /usr/local/ 确认实际安装的 CUDA 目录,改正 CUDAToolkit_ROOT
CMake 3.28 or higher is required系统 CMake 太旧(Ubuntu 22.04 为 3.22.1,CentOS 7 更旧)pip install cmake,或使用 Kitware 官方二进制
#error -- unsupported GNU version! gcc versions later than … are not supported!GCC 比当前 CUDA 支持的主机编译器新安装 CUDA 支持的 GCC,用 -DCMAKE_C_COMPILER/-DCMAKE_CXX_COMPILER 指定;或升级 CUDA
nvcc fatal : Unsupported gpu architecture 'compute_xx'CMAKE_CUDA_ARCHITECTURES 或旧 GMX_CUDA_TARGET_SM 中写了当前 CUDA 不支持的架构(例如 CUDA 13 中的 61)改为显卡实际计算能力;计算能力低于 7.5 的显卡改用 CUDA 12.x
undefined reference to `void gmx::nbnxn_kernel_prune_cuda<true>(…)'GROMACS 2025.0–2025.2 配 CUDA 13升级到 2025.3 以上,或改用 CUDA 12.9,或加 -DCMAKE_CUDA_FLAGS=-static-global-template-stub=false
Unknown CUDA architecture: native / ptxas error : Value of threads per SM … is out of rangeCMake 版本旧或使用旧源码更新源码,删除 build 目录后重新配置,显式写 -DCMAKE_CUDA_ARCHITECTURES=86-real 这类值
Cannot find FFTW 3 (with correct precision - libfftw3f for mixed-precision GROMACS …)只装了双精度 FFTW,或 CMAKE_PREFIX_PATH 未指向 FFTW使用 -DGMX_BUILD_OWN_FFTW=ON;需要离线编译时加 -DGMX_BUILD_OWN_FFTW_URL=绝对路径
Cannot build FFTW3 automatically (GMX_BUILD_OWN_FFTW=ON) in Visual Studio / with ninjaWindows 原生构建或使用 Ninja 生成器时不支持自动构建 FFTW改用 -DGMX_FFT_LIBRARY=mkl,或先自行编译 FFTW
WARNING: The gmx binary does not include support for the CUDA architecture of the GPU ID #0编译时指定的 CMAKE_CUDA_ARCHITECTURES 不含该显卡架构按日志建议的值重新编译,例如 -DCMAKE_CUDA_ARCHITECTURES=89
Cannot run short-ranged nonbonded interactions on a GPU because no GPU is detected.二进制带 GPU 支持,但运行时找不到可用 GPU:驱动不可用,或 WSL 中装了 Linux 驱动检查 nvidia-smi;WSL 中卸载 cuda-drivers 类软件包
Nonbonded interactions on the GPU were requested with -nb gpu, but the GROMACS binary has been built without GPU support.二进制本身没有 GPU 支持,gmx --version 中 GPU support 一行为 disabled(本页用 conda-forge 2026.3 CPU 版实测)安装 CUDA 构建或按上文重新编译
make 中途 Killed signal terminated program cc1plus编译内存不足,常见于 WSL2 和小内存虚拟机减小 -j 的数值,或增加内存
mdrun -plumed 在 MPI 并行时启动即报 MPI_ERR_COMM2026.0–2026.3 的缺陷升级到 2026.4
来源:GROMACS 2026.4 源码中的报错字符串;GROMACS 论坛帖 12528、13012、1837;2025.3 与 2026.4 release notes。

核对

先运行 gmx --version,确认 GPU support 一行是 CUDA,CUDA targets 中包含你的显卡架构,CUDA driver 不低于 CUDA runtime。启用 PLUMED 接口的构建会在 Plumed support 一行显示状态。

然后跑一个水盒子。mdrun 的 -nb、-pme、-update 默认都是 auto:检测不到可用 GPU 时会静默改用 CPU,只有运行速度变慢。自检时显式写 gpu,GPU 不可用就会直接报错退出。

水盒子 GPU 自检(约 1.2 万原子,50 ps)bash
mkdir -p ~/gmx-gpu-test && cd ~/gmx-gpu-test

# 5 nm 立方水盒子,约 4000 个 SPC/E 水分子
gmx solvate -cs spc216.gro -box 5 5 5 -o water.gro
cat > topol.top <<'EOF'
#include "oplsaa.ff/forcefield.itp"
#include "oplsaa.ff/spce.itp"

[ system ]
SPC/E water box

[ molecules ]
EOF
echo "SOL $(grep -c OW water.gro)" >> topol.top

cat > em.mdp <<'EOF'
integrator    = steep
emtol         = 1000
nsteps        = 5000
cutoff-scheme = Verlet
coulombtype   = PME
rcoulomb      = 1.0
rvdw          = 1.0
EOF

cat > md.mdp <<'EOF'
integrator     = md
dt             = 0.002
nsteps         = 25000
cutoff-scheme  = Verlet
coulombtype    = PME
rcoulomb       = 1.0
rvdw           = 1.0
tcoupl         = V-rescale
tc-grps        = System
tau-t          = 0.1
ref-t          = 300
gen-vel        = yes
gen-temp       = 300
constraints    = h-bonds
nstcalcenergy  = 100
nstenergy      = 1000
nstlog         = 5000
EOF

gmx grompp -f em.mdp -c water.gro -p topol.top -o em.tpr
gmx mdrun -s em.tpr -c em.gro -g em.log
gmx grompp -f md.mdp -c em.gro -p topol.top -o md.tpr

# 显式写 gpu:GPU 不可用时直接报错,不会静默回退到 CPU
gmx mdrun -s md.tpr -g md.log -nb gpu -pme gpu -update gpu -ntmpi 1

grep -A2 "Mapping of GPU IDs" md.log
grep -E "PP task|PME tasks" md.log
grep "Performance:" md.log
md.log 中应出现的行(单卡示例)text
  GPU info:
    Number of GPUs detected: 1
    #0: NVIDIA NVIDIA GeForce RTX 4090, compute cap.: 8.9, ECC:  no, stat: compatible

1 GPU selected for this run.
Mapping of GPU IDs to the 2 GPU tasks in the 1 rank on this node:
  PP:0,PME:0
PP tasks will do non-perturbed short-ranged interactions on the GPU
PP task will update and constrain coordinates on the GPU
PME tasks will do all aspects on the GPU
  • stat: compatible:显卡被识别且架构已编译。显示 “not in set of targeted devices” 时需按显卡架构重新编译。
  • Mapping of GPU IDs 一行列出 PP 和 PME:两类任务都在 GPU 上。只有 PP 时,PME 在 CPU 上计算。
  • PP task will update and constrain coordinates on the GPU:已进入 GPU-resident 模式。显示 CPU 说明体系或参数不满足条件,例如使用了虚拟位点、质量或约束的自由能扰动、副本交换,或在区域分解下使用了 constraints = all-bonds。
  • 日志中出现含 “does not include kernels compiled natively” 的 NOTE:GPU 内核通过 PTX 即时编译运行,性能可能下降,应按日志给出的架构值重新编译。
  • Performance 一行的 ns/day:与 -nb cpu -pme cpu -update cpu 的结果对比,同一体系 GPU 版应快得多;两者接近说明 GPU 没有参与计算。
  • 本页实测(CPU 对照,不代表 GPU 速度):conda-forge GROMACS 2026.3 CPU 版在 Apple M2(8 核,测试时机器上同时运行其他任务)上运行上面的脚本:gmx solvate 生成 4055 个水分子、12165 个原子;能量最小化 12 步达到 Fmax < 1000;mdrun 加 -nb gpu 时直接报 Nonbonded interactions on the GPU were requested with -nb gpu, but the GROMACS binary has been built without GPU support.;改用 -nb cpu -pme cpu -update cpu -ntmpi 1 后,50 ps 在机器负载高时为 14.4 ns/day,负载较低时(1 分钟平均负载约 13)用 -nsteps 10000 -resethway 测得 27.8 ns/day;md.log 中为 Using SIMD4xM 4x4 nonbonded short-range kernels,没有 Mapping of GPU IDs 和 PP task 行。GPU 版在同一体系上应快得多,两者接近说明 GPU 没有参与计算。

运行参数

GPU-resident 模式(-update gpu)下,官方建议把 nstcalcenergy 和温度、压力耦合间隔设为 50–100 步以上,因为频繁计算维里和能量的开销不会体现在日志的周期计数表中;同时使用 constraints = h-bonds,这既是 GPU-resident 的前提之一,也符合多数力场的参数化方式。

在同一张卡上并行跑多个模拟时,如果不加 -update gpu,也不开 MPS 或 MIG,NVIDIA 的测试中多模拟吞吐没有提升。单个 A100 跑 2.4 万原子的 RNAse 体系为 1,083 ns/day,跑 9.6 万原子的 ADH 体系为 378 ns/day(GROMACS 2021.2),可作为估算同级别显卡速度的参照。

场景推荐命令依据
单卡、单个模拟gmx mdrun -s md.tpr -nb gpu -pme gpu -update gpu -ntmpi 1 -ntomp <物理核数>有 GPU 时默认就是每卡一个 rank;显式写出是为了让失败可见
CPU 较强、GPU 较弱gmx mdrun -s md.tpr -ntmpi 4 -nb gpu -pme cpu官方示例:长程 PME 留在 CPU,bonded 自动分配到 GPU
单节点多卡gmx mdrun -s md.tpr -ntmpi 4 -nb gpu -pme gpu -npme 1 -update gpuPME 在 GPU 上时 -npme 只能为 1;每卡 1–3 个 rank,GPU-resident 加直接通信时每卡 1 个 rank 最好
一张卡跑多个小体系每个模拟单独 -update gpu,配合 CUDA MPS,并用 -pin on -pinoffset 分开 CPU 核NVIDIA 在 A100 上测得 2.4 万原子体系总吞吐提升 1.8 倍,9.6 万原子提升 1.3 倍;不加 -update gpu 时性能约低一半
节点与他人共享gmx mdrun -s md.tpr -gpu_id 1 -pin on -pinoffset 0 -nt 8-gpu_id 限定可用显卡;-pin 避免线程互相抢核
来源:GROMACS mdrun-performance 用户指南;NVIDIA 技术博客 Maximizing GROMACS Throughput with Multiple Simulations per GPU Using MPS and MIG(GROMACS 2021.2,DGX A100)。

经验

以下来自计算化学公社 Sobereva 博客和 GROMACS 论坛,多数有一手文档可以对照。

单机并行不要编 MPI 版

经验做法:单台机器上用默认的 thread-MPI 加 OpenMP,比 MPI 版少一步安装,效率也更高;只有跨节点并行才编 -DGMX_MPI=ON,生成的程序名为 gmx_mpi。官方安装指南同样说明单机多核无需任何 MPI 设置。

国内下载 FFTW 慢就离线给路径

经验做法:GMX_BUILD_OWN_FFTW 在国内访问 fftw.org 常卡住。先用浏览器下载 fftw-3.3.10.tar.gz,再用 -DGMX_BUILD_OWN_FFTW_URL=绝对路径 交给 CMake,MD5 会自动校验。

虚拟机里 make -j 卡住

经验做法:VMware 等虚拟机中并行编译偶尔卡住或报错,去掉 -j 或改为 -j 4 重新 make。WSL2 中对应的现象通常是内存耗尽导致 cc1plus 被杀。

日志里出现 plain-C 内核或 Compiled SIMD is None 就重编

md.log 中 “Using plain-C-4x4 4x4 nonbonded short-range kernels” 或启动时 “Compiled SIMD is None, but AVX2_256 might be faster (see log).” 说明没有用上 SIMD,速度会慢数倍;正常构建显示的是 “Using SIMD4xM 4x4 nonbonded short-range kernels” 这类 SIMD 内核(以上为 GROMACS 2026.4 源码中的原文,SIMD4xM 一行为本页实测)。旧教程中的 “Using the slow plain C kernels” 是旧版本的写法。重新 cmake 时显式加 -DGMX_SIMD=AVX2_256(或 CPU 支持的最高指令集)。gcc 太旧不支持 AVX-512 而报错时,也可以退到 AVX2_256。

双精度版另装一份

经验做法:简正振动分析的能量极小化和 Hessian 对角化需要双精度,加 -DGMX_DOUBLE=ON 另编一份,程序名为 gmx_d,可与单精度版装在同一目录。双精度版不支持 GPU,速度约为单精度的一半,轨迹和能量文件大一倍。

同一张 4090,整机不同速度差 2 倍

GROMACS 论坛实测(2023 版,-nb gpu -bonded gpu -update gpu -ntomp 12):约 3 万原子体系在两台 4090 主机上分别约 900 和 1500 ns/day,约 10 万原子为 170 和 360 ns/day。开发者建议用完全相同的输入和命令(例如 -nsteps 100000 -ntmpi 1 -pin on -nb gpu -pme gpu -update gpu -bonded gpu)对比,再用 Nsight Systems 查看 GPU 内核耗时。估算自己机器的速度时,把这组数当作同代显卡的大致范围。

Sobereva 预编译的原生 Windows 版最高到 2020.6

Sobereva 在 sobereva.com/458 提供自己编译的 Windows 64 位版:2018.8 CPU 版,2019.6、2020.3 CUDA 版(AVX),2020.6 CUDA 版(AVX2,NVIDIA 驱动需 ≥ 471.11)。用法:解压后把 bin 目录加入 Path;没有装 Visual Studio 2019 的机器先装 VC_redist.x64;CUDA 版不需要装 CUDA toolkit,只要驱动够新。它是命令行程序,双击 gmx.exe 会闪退。这些版本没有 gmx dssp(2023 起)、新版 gmx hbond(2024 起)和自带的 amber19sb.ff(2026 起),适合在 Windows 上准备输入文件和练习;用当前版本做正式模拟,按上文走 WSL2 编译。

国内常被引用的安装教程,哪些已经过时

Jerkwin 的《GROMACS程序编译》页首标注“本手册已过时, 不再更新”,示例为 2016.4,用的是 -DGMX_GPU=on、-DFFTWF_INCLUDE_DIR 等写法;《GROMACS中文手册》仍有隐式溶剂(2019 版删除)和 group 截断方案(2020 版删除)的章节。Sobereva 的《GROMACS的安装方法》最近更新于 2026 年 5 月,gcc 和 cmake 的版本要求是新的,可以参考;文中 CUDA 部分仍写 -DCUDA_TOOLKIT_ROOT_DIR,GROMACS 2026 不再读取这个变量,要改用 -DCUDAToolkit_ROOT(见上文版本差异表)。同文还提到,新 gcc 编译老版本 GROMACS 也会失败,例如 Rocky Linux 9 的 gcc 11.2.1 编不了 2018.8。

PLUMED

GROMACS 2025 起源码自带 PLUMED 2.10 的接口,官方说明该接口兼容任意 PLUMED 版本。在非 Windows 系统上默认启用(GMX_USE_PLUMED=AUTO),编译时只需要系统提供 dlopen,不需要预先安装 PLUMED。运行时用环境变量 PLUMED_KERNEL 指向内核库,并加 -plumed plumed.dat。

原生接口不支持:ENERGY 集体变量、副本交换、λ 动力学;使用多于 1 个 thread-MPI rank 时 PLUMED 报错退出,所以单机运行加 -ntmpi 1,多 rank 需编译 MPI 版。2026.0–2026.3 中 MPI 并行的 mdrun -plumed 启动即中止,2026.4 已修复。

需要 ENERGY、多 walker 或 OPES multithermal 时仍要打补丁。补丁按 GROMACS 具体版本号提供:PLUMED 2.10.1(2026 年 7 月发布)提供 gromacs-2022.5、2023.5、2024.3、2025.0 四个补丁;gromacs-2026.0 补丁目前只在 PLUMED 的开发分支中。打补丁的流程是在 GROMACS 源码根目录、运行 cmake 之前执行 plumed patch -p,PLUMED 文档建议同时设置 -DGMX_THREAD_MPI=OFF -DGMX_MPI=ON。

GROMACS 文档中内核库写作 libPlumedKernel.so,PLUMED 默认安装的文件名是 libplumedKernel.so。Linux 文件名区分大小写,照抄文档会找不到文件。

原生接口用法bash
# 1. 编译 PLUMED(与 GROMACS 无先后要求)
wget https://github.com/plumed/plumed2/releases/download/v2.10.1/plumed-2.10.1.tgz
tar xzf plumed-2.10.1.tgz && cd plumed-2.10.1
./configure --prefix=$HOME/opt/plumed-2.10.1
make -j $(nproc) && make install

# 2. GROMACS 2025/2026 编译时强制启用接口(AUTO 找不到 dlopen 时只打印一条 STATUS 信息并关闭接口,ON 会直接报错)
cmake .. -DGMX_GPU=CUDA -DGMX_USE_PLUMED=ON -DGMX_BUILD_OWN_FFTW=ON
gmx --version | grep -i plumed

# 3. 运行时指定内核库。PLUMED 实际文件名是 libplumedKernel.so(小写 p)
export PLUMED_KERNEL=$HOME/opt/plumed-2.10.1/lib/libplumedKernel.so
gmx mdrun -s md.tpr -plumed plumed.dat -ntmpi 1

智能体

指令示例:“在一张 GPU 上准备 GROMACS 2026 GPU 环境,用 5 nm 水盒子分别以 -update gpu 和 -update cpu 各跑 50 ps,报告两者的 ns/day,并贴出 md.log 中的 GPU 映射行和 gmx --version 输出。”

智能体会在隔离云电脑中使用预装的 GROMACS 2026.3 GPU 版,或在需要其他版本时按本页命令编译;按任务租用 GPU;生成 topol.top、em.mdp、md.mdp 和 tpr 文件,运行两组模拟,从日志中提取 ns/day 和 GPU 映射行,最后对结果做对抗审阅,检查 GPU 是否确实参与计算。工作区保留脚本、参数文件、日志和结果,关闭本机后任务继续运行。

你仍需自己核对:论文方法部分写的 GROMACS 版本与实际使用的版本一致;md.log 中 update 与 PME 的执行位置符合预期;正式体系的力场、水模型和 mdp 参数由你决定,水盒子自检不能代替正式体系的平衡检查。

参考资料

常见问题

Windows 能不能不用 WSL 直接安装 GROMACS?

可以用 MSVC 原生编译,官方也在 Windows 上测试过 CUDA,但官方不提供 Windows 二进制。原生编译时不能用 GMX_BUILD_OWN_FFTW,也不支持 PLUMED;CMake 低于 4.3 编译 CUDA 版还需加 -G Ninja 或手动设置 OpenMP_CUDA 参数。需要 GPU 和后续扩展时,WSL2 路线的问题更少。

conda 装的 GROMACS 能用 GPU 加速吗?

conda-forge 在 linux-64(含 WSL2)上提供 CUDA 构建,安装时用 "gromacs=2026.3=nompi_cuda*" 指定。驱动需要支持 CUDA 12.9。Windows 和 macOS 没有 CUDA 构建,bioconda 的版本停在 2021.3。

GTX 1080、1660 这类老显卡还能用 GPU 版吗?

GTX 1080 计算能力 6.1,可以用,但必须用 CUDA 12.1–12.9 编译,CUDA 13 已不能为计算能力低于 7.5 的显卡生成代码。GTX 1660 计算能力 7.5,CUDA 12 和 13 都可以。GROMACS 2026 要求计算能力至少 5.0。

CentOS 7 上安装报错怎么办?

CentOS 7 自带 GCC 4.8.5 和 CMake 2.8,GROMACS 2025 起要求 GCC 11 和 CMake 3.28,Rocky/RHEL 8 自带的 GCC 8.5 也不够。可以安装新版 GCC(例如 gcc-toolset)和 pip 版 CMake 后再编译,也可以改用 Ubuntu 24.04 或容器。

怎么确认 GROMACS 用上了 GPU?

运行 gmx mdrun -nb gpu -pme gpu -update gpu,检查 md.log 中是否有 “Mapping of GPU IDs … PP:0,PME:0” 和 “PP task will update and constrain coordinates on the GPU”。只用默认的 auto 参数时,检测不到 GPU 也不会报错,只是速度变慢。

make check 有几个测试没过,还能用吗?

只有 Timeout,且 GMX_DISABLE_GPU_DETECTION=1 make check 能通过时,多半是测试时 GPU 或 CPU 被占用,可以在空闲时重跑或单卡重跑。数值比较失败按官方建议处理:换更新的编译器重新编译,仍失败就带上 gmx mdrun -version 的输出到论坛求助。

把 GROMACS 环境和 GPU 交给 Scientify

Scientify 的科学智能体在隔离云电脑中运行,分子模拟环境已预装 GROMACS 2026.3 GPU 版,交付前在 GPU 上运行水盒子模拟自检。需要 GPU 时按任务租用、按秒计费,用完释放;关闭本机后模拟继续运行,参数文件和日志保留在工作区。新注册用户免费获得 5 美元等值额度。