HPC 集群上 OpenMM GPU 多版本安装实战指南
HPC 集群上 OpenMM GPU 多版本安装实战指南本文记录了在 HPC 集群共享存储NFS上为不同 GPU 架构RTX 4090 / RTX 5090安装 OpenMM GPU 版本的完整流程涵盖踩坑经验和修复方案。目录1. 环境背景2. 最终成果概览3. 安装前的准备工作4. 正确的安装流程完整代码4.1 CUDA 12.1 环境RTX 40904.2 CUDA 12.8 环境RTX 50905. Module 文件配置6. 验证测试7. 踩坑记录与经验总结坑1conda 安装 CUDA toolkit 在 NFS 上卡死坑2ambertools 拉高 cuda-version 导致 PTX 版本不兼容坑3pip PyTorch 与 conda OpenMM 的 C ABI 不兼容坑4openmmforcefields 缺少 lxml 依赖坑5conda 与 pip 混装时 conda 强制降级 PyTorch坑6openmm-ml 安装超时或失败的多种解决方案8. 使用方法1. 环境背景项目说明集群类型HPC 共享存储NFS登录节点无 GPUGPU 节点cn01-cn09: RTX 4090驱动 555.42.02, CUDA ≤12.5cn10-cn19: RTX 5090驱动 590.48.01, CUDA 13.1系统 CUDA/public/software/cuda-12.1和/public/software/cuda-12.8包管理器mamba位于/public/software/mambaModule 系统Environment ModulesTCLmodulefiles 在/public/software/modules/modulefiles/安装目标/public/software/openmm/NFS 共享所有节点可见约束条件不允许apt-get install不允许修改已有软件不允许重复安装系统已有的 CUDA toolkit2. 最终成果概览环境CUDA 12.1RTX 4090CUDA 12.8RTX 5090路径/public/software/openmm/openmm-cu121/public/software/openmm/openmm-cu128OpenMM8.2.0 (conda)8.4.0 (conda)PyTorch2.5.1cu121 (pip)2.5.1cu124 (pip)AmberTools24.8 (conda)24.8 (conda)OpenFF-toolkit0.18.0 (conda)0.18.0 (conda)OpenMM-PLUMED2.1 (conda)2.1 (conda)OpenMM-ML1.5 (conda --no-deps)1.5 (conda --no-deps)MACE-torch0.3.16 (pip)0.3.16 (pip)openmmforcefields0.15.1 (pip)0.15.1 (pip)mdtraj1.11.1 (conda/pip)1.11.1 (conda/pip)pdbfixer1.12.0 (pip)1.12.0 (pip)lxml6.1.1 (pip)6.1.1 (pip)CUDA Platform✅ 已验证✅ 已验证3. 安装前的准备工作3.1 确认 GPU 驱动版本在 GPU 计算节点上执行nvidia-smi|head-4输出示例4090 节点| NVIDIA-SMI 555.42.02 Driver Version: 555.42.02 CUDA Version: 12.5 |关键规则nvidia-smi显示的 CUDA Version 是该驱动支持的最高 CUDA 版本。PyTorch 编译时使用的 CUDA 版本必须 ≤ 这个值。例如 4090 驱动 555.42.02 支持 CUDA ≤12.5所以不能用 CUDA 12.6 编译的 PyTorch。3.2 确认系统 CUDA 路径ls/public/software/cuda-12.1/bin/nvcc# 存在ls/public/software/cuda-12.8/bin/nvcc# 存在3.3 确认 mamba 可用/public/software/mamba/bin/mamba--version4. 正确的安装流程完整代码核心思路conda 装 CPU/科学计算包 → pip 装 CUDA 相关包 → 降级 cuda-version 修复 PTX 兼容性为什么不让 conda 装 CUDA因为 conda 安装 CUDA toolkit 需要解析数百个依赖在 NFS 共享存储上极慢可能卡死数小时。而 pip 的torchcu121wheel 自带 CUDA runtime体积小、安装快。4.1 CUDA 12.1 环境RTX 4090Step 1创建基础环境 ambertools openff-toolkit# 先装约束最多的包ambertools 和 openff-toolkit让 mamba 自动锁定兼容版本/public/software/mamba/bin/mamba create-y\-p/public/software/openmm/openmm-cu121\-cconda-forge\python3.11ambertools openff-toolkit为什么要先装 ambertoolsambertools 对 numpy、libboost、icu 等有严格的版本上限要求。如果先装了 openmm这些依赖版本较新再装 ambertools 就会冲突。先装 ambertools 可以让它锁定兼容的底层版本。Step 2安装 OpenMM OpenMM-PLUMEDsource/public/software/mamba/bin/activate /public/software/openmm/openmm-cu121 /public/software/mamba/bin/mambainstall-y\-cconda-forge\openmm openmm-plumedStep 3pip 安装 PyTorch CUDA 版# pip 的 torchcu121 自带 CUDA 12.1 runtime不需要系统安装 CUDA toolkit# pip 不检测 __cuda 虚拟包所以在无 GPU 的登录节点也能安装pipinstalltorch2.5.1\--index-url https://download.pytorch.org/whl/cu121为什么用 pip 而不是 condaconda 安装pytorch*cuda*需要 GPU 节点上有__cuda虚拟包登录节点没有conda 安装 CUDA 相关包在 NFS 上极慢可能卡死pip wheel 小巧快速自带完整 CUDA runtimeStep 4pip 安装其他科学计算包pipinstallmace-torch openmmforcefields mdtraj pdbfixer lxmllxml 是 openmmforcefields 的硬依赖调用GAFFTemplateGenerator时必须用到但 openmmforcefields 的setup.py没有声明这个依赖需要手动安装。Step 5conda --no-deps 安装 openmm-ml# openmm-ml 是 MACE 力场集成到 OpenMM 的桥梁提供 MLPotential 接口# 必须用 --no-deps否则 conda 会强制降级 pip 安装的 PyTorch/public/software/mamba/bin/mambainstall-y\-cconda-forge\--no-deps openmm-ml为什么必须用--no-depsopenmm-ml 依赖 PyTorch如果让 conda 自动解析依赖它会把 pip 安装的torch 2.5.1cu121替换为 conda 的 CPU 版本。Step 6降级 cuda-version关键步骤# ambertools 安装时会把 cuda-version 拉到 13.x# 如果不降级NVRTC 生成的 PTX 版本会超出 GPU 驱动支持范围# 导致运行时报 CUDA_ERROR_UNSUPPORTED_PTX_VERSION/public/software/mamba/bin/mambainstall-y\-cconda-forge\cuda-version12.1cuda-nvrtc12.1这是最容易遗漏的步骤详见坑2。Step 7验证# 登录节点验证导入不需要 GPUpython-c import torch; print(torch:, torch.__version__) import openmm; print(openmm:, openmm.__version__) from openmmplumed import PlumedForce; print(plumed: OK) from openff.toolkit.topology import Molecule; print(openff: OK) from openmmforcefields.generators import GAFFTemplateGenerator; print(GAFF: OK) import mdtraj; print(mdtraj:, mdtraj.__version__) import pdbfixer; print(pdbfixer: OK) import mace; print(mace: OK) print(All imports OK) 4.2 CUDA 12.8 环境RTX 5090流程完全相同只需替换 CUDA 版本号和 torch 的 index# Step 1: 创建环境/public/software/mamba/bin/mamba create-y\-p/public/software/openmm/openmm-cu128\-cconda-forge\python3.11ambertools openff-toolkit# Step 2: 安装 OpenMMsource/public/software/mamba/bin/activate /public/software/openmm/openmm-cu128 /public/software/mamba/bin/mambainstall-y-cconda-forge openmm openmm-plumed# Step 3: pip 安装 PyTorch CUDA 12.4 版本# 注意5090 驱动 590 支持 CUDA 13.1所以 cu124 完全兼容pipinstalltorch2.5.1\--index-url https://download.pytorch.org/whl/cu124# Step 4: 其他包pipinstallmace-torch openmmforcefields mdtraj pdbfixer lxml# Step 5: openmm-ml必须 --no-deps$MAMBAinstall-y-cconda-forge --no-deps openmm-ml# Step 6: 降级 cuda-version关键/public/software/mamba/bin/mambainstall-y\-cconda-forge\cuda-version12.8cuda-nvrtc12.8# Step 7: 验证同上5. Module 文件配置cu121 的 module 文件文件路径/public/software/modules/modulefiles/openmm/8.4-cu121#%Module1.0 proc ModulesHelp {} { global version modroot puts stdout \t loads OpenMM with CUDA 12.1 support\n puts stdout \t Includes: OpenMM-PLUMED, MACE-torch, AmberTools, OpenFF-toolkit\n puts stdout \t Use: source /public/software/mamba/bin/activate \$OPENMM_DIR\n } module-whatis OpenMM with CUDA 12.1 (PLUMED, MACE, AmberTools) conflict openmm set VERSION 8.4-cu121 set OPENMM_DIR /public/software/openmm/openmm-cu121 set CUDA_DIR /public/software/cuda-12.1 prepend-path PATH ${OPENMM_DIR}/bin prepend-path LD_LIBRARY_PATH ${OPENMM_DIR}/lib prepend-path LD_LIBRARY_PATH ${CUDA_DIR}/lib64 prepend-path PYTHONPATH ${OPENMM_DIR}/lib/python3.11/site-packages prepend-path OPENMM_DEFAULT_PLUGIN_DIR ${OPENMM_DIR}/lib/plugins setenv OPENMM_DIR ${OPENMM_DIR} if [ module-info mode load ] { system echo OpenMM CUDA 12.1 loaded system echo Activate: source /public/software/mamba/bin/activate ${OPENMM_DIR} } if [ module-info mode remove ] { system echo OpenMM CUDA 12.1 unloaded }cu128 的 module 文件文件路径/public/software/modules/modulefiles/openmm/8.4-cu128#%Module1.0 proc ModulesHelp {} { global version modroot puts stdout \t loads OpenMM with CUDA 12.8 support\n puts stdout \t Includes: OpenMM-PLUMED, MACE-torch, AmberTools, OpenFF-toolkit\n puts stdout \t Use: source /public/software/mamba/bin/activate \$OPENMM_DIR\n } module-whatis OpenMM with CUDA 12.8 (PLUMED, MACE, AmberTools) conflict openmm set VERSION 8.4-cu128 set OPENMM_DIR /public/software/openmm/openmm-cu128 set CUDA_DIR /public/software/cuda-12.8 prepend-path PATH ${OPENMM_DIR}/bin prepend-path PATH ${CUDA_DIR}/bin prepend-path LD_LIBRARY_PATH ${OPENMM_DIR}/lib prepend-path LD_LIBRARY_PATH ${CUDA_DIR}/lib64 prepend-path PYTHONPATH ${OPENMM_DIR}/lib/python3.11/site-packages prepend-path OPENMM_DEFAULT_PLUGIN_DIR ${OPENMM_DIR}/lib/plugins setenv OPENMM_DIR ${OPENMM_DIR} if [ module-info mode load ] { system echo OpenMM CUDA 12.8 loaded system echo Activate: source /public/software/mamba/bin/activate ${OPENMM_DIR} } if [ module-info mode remove ] { system echo OpenMM CUDA 12.8 unloaded }注意cu128 的 module 文件中额外加了PATH ${CUDA_DIR}/bin因为 5090 节点可能需要 nvcc 做 runtime 编译。6. 验证测试登录节点无 GPU—— 测试包导入source/public/software/mamba/bin/activate /public/software/openmm/openmm-cu121 python-c import torch; print(torch:, torch.__version__) import openmm; print(openmm:, openmm.__version__) from openmmplumed import PlumedForce; print(plumed: OK) from openff.toolkit.topology import Molecule; print(openff: OK) from openmmforcefields.generators import GAFFTemplateGenerator; print(GAFF: OK) import mdtraj, pdbfixer, mace, lxml print(All imports OK) GPU 计算节点 —— 测试 CUDA 功能# SSH 到 GPU 节点4090 示例sshcn01source/public/software/mamba/bin/activate /public/software/openmm/openmm-cu121 python-c from openmm import * from openmm.unit import * import torch # 测试 PyTorch CUDA print(torch:, torch.__version__, CUDA:, torch.cuda.is_available()) print(GPU:, torch.cuda.get_device_name(0)) # 测试 OpenMM CUDA Platform system System() system.addParticle(1.0) force NonbondedForce() force.addParticle(0.0, 1.0, 0.0) system.addForce(force) integrator LangevinMiddleIntegrator(300*kelvin, 1/picosecond, 0.002*picoseconds) platform Platform.getPlatformByName(CUDA) context Context(system, integrator, platform) context.setPositions([Vec3(0, 0, 0)]) print(OpenMM CUDA Platform: SUCCESS!) # 查看所有可用平台 print(Platforms:, [Platform.getPlatform(i).getName() for i in range(Platform.getNumPlatforms())]) 预期输出torch: 2.5.1cu121 CUDA: True GPU: NVIDIA GeForce RTX 4090 OpenMM CUDA Platform: SUCCESS! Platforms: [Reference, CPU, CUDA, OpenCL]7. 踩坑记录与经验总结坑1conda 安装 CUDA toolkit 在 NFS 上卡死现象执行mamba install pytorch2.5.1*cuda*时mamba 进程长时间处于D状态disk I/O sleep持续数小时无进展。原因conda 安装 CUDA 相关包pytorch CUDA、cuda-toolkit、libcufft 等时需要解压数百 MB 的大文件MKL 119MB、libcufft 184MB 等NFS 共享存储的随机 IO 性能极差。解决方案用 pip 安装 PyTorch CUDA 版。pip 的 wheel 是预编译好的单文件解压极快。# ❌ 错误做法conda 装 CUDA 包mambainstall-cconda-forgepytorch2.5.1*cuda* cuda-version12.6# ✅ 正确做法pip 装 torchcuXXpipinstalltorch2.5.1 --index-url https://download.pytorch.org/whl/cu121坑2ambertools 拉高 cuda-version 导致 PTX 版本不兼容现象在 GPU 节点上运行 OpenMM 时报错openmm.OpenMMException: Error loading CUDA module: CUDA_ERROR_UNSUPPORTED_PTX_VERSION (222)原因这是最隐蔽的一个坑。安装 ambertools 时conda 会自动安装cuda-version13.2和cuda-nvrtc13.2.78作为依赖。虽然环境名叫cu121但实际的 NVRTCCUDA runtime compiler是 13.2 版本它生成的 PTX 代码版本超出了 GPU 驱动支持范围。验证方法conda list|grepcuda-version# 输出: cuda-version 13.2 ← 这是问题所在conda list|grepcuda-nvrtc# 输出: cuda-nvrtc 13.2.78 ← NVRTC 版本也是 13.2解决方案安装完所有包后强制降级 cuda-version 和 cuda-nvrtc# cu121 环境mambainstall-y-cconda-forge cuda-version12.1cuda-nvrtc12.1# cu128 环境mambainstall-y-cconda-forge cuda-version12.8cuda-nvrtc12.8经验法则只要用了 ambertools就必须在最后一步检查并降级cuda-version和cuda-nvrtc。坑3pip PyTorch 与 conda OpenMM 的 C ABI 不兼容现象编译或加载 openmm-torch 时报错undefined symbol: _ZN6OpenMM18SerializationProxyC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE原因conda-forge 编译的 OpenMM 使用新 ABI_GLIBCXX_USE_CXX11_ABI1pip 安装的 PyTorch 2.5.1cu121 使用旧 ABI_GLIBCXX_USE_CXX11_ABI0openmm-torch 是 C 扩展链接时要求两端 ABI 一致影响范围openmm-torch 无法使用。但 openmm-ml、MACE-torch、openmmforcefields 等纯 Python 包不受影响。解决方案不装 openmm-torch。如果确实需要 openmm-torch则必须用 conda 安装 PyTorch CUDA 版但会遇到坑1的 NFS 问题。这是目前 conda pip 混合安装方案的已知限制。坑4openmmforcefields 缺少 lxml 依赖现象调用GAFFTemplateGenerator时报错ModuleNotFoundError: No module named lxml原因openmmforcefields 在generate_residue_template函数中from lxml import etree但setup.py没有声明 lxml 为依赖。解决方案pipinstalllxml坑5conda 与 pip 混装时 conda 强制降级 PyTorch现象用 pip 装好torch2.5.1cu121后再执行mamba install xxxPyTorch 被降级为 CPU 版本。原因conda 的依赖解析器不知道 pip 安装的包。当安装新包时conda 会根据自己的规则重新解析环境发现 pytorch 没有满足约束就装一个 CPU 版本。解决方案# 方法1所有 conda 操作在 pip install torch 之前完成推荐# 先 conda 装完所有需要的包最后再 pip install torch# 方法2使用 --no-deps 避免依赖解析mambainstall--no-deps-cconda-forge openmm-ml# 方法3用 conda-meta/pinned 锁定版本不完全可靠echopytorch 2.5.1/path/to/env/conda-meta/pinned坑6openmm-ml 安装超时或失败的多种解决方案现象执行mamba install openmm-ml时超时或安装后 conda 降级了 PyTorch。原因多个 mamba 进程同时运行竞争锁文件NFS 上常见不加--no-deps时 conda 会降级 pip 安装的 PyTorch解决方案按优先级排序# 方案 Aconda --no-deps首选环境干净时几乎必成功mambainstall-y-cconda-forge --no-deps openmm-ml# 方案 Bpip 从 GitHub 安装需网络pipinstallgithttps://github.com/openmm/openmm-ml.git# 方案 C手动下载源码 pip 本地安装# 在有网络的机器上下载 https://github.com/openmm/openmm-ml/archive/refs/heads/main.zip# 传到服务器后unzipopenmm-ml-main.zipcdopenmm-ml-main pipinstall.# 方案 D从 conda 缓存直接拷贝openmm-ml 是纯 Python 包# 适用于之前下载过但安装失败的情况cp-r/public/software/mamba/pkgs/openmm-ml-*/site-packages/openmmml\/public/software/openmm/openmm-cu121/lib/python3.11/site-packages/经验之前安装失败是因为环境状态混乱 多个 mamba 进程竞争锁。环境重建干净后方案 A 秒成功。所以遇到超时时先确认没有其他 mamba 进程在跑ps aux | grep mamba。8. 使用方法加载环境# 在 4090 节点上module load openmm/8.4-cu121source/public/software/mamba/bin/activate /public/software/openmm/openmm-cu121# 在 5090 节点上module load openmm/8.4-cu128source/public/software/mamba/bin/activate /public/software/openmm/openmm-cu128MACE 力场模型路径预训练模型位于共享目录/public/software/openmm/models/mace-off-main/ ├── mace_off23/ │ ├── MACE-OFF23_small.model (7.1MB) │ ├── MACE-OFF23_medium.model (18MB) │ ├── MACE-OFF23_large.model (53MB) │ └── MACE-OFF23b_medium.model (18MB) └── mace_off24/ └── MACE-OFF24_medium.model (18MB)常用 import 头文件fromopenmmimport*fromopenmm.appimport*fromopenmm.unitimport*fromopenmmplumedimportPlumedForcefromopenmmforcefields.generatorsimportGAFFTemplateGeneratorfromopenff.toolkit.topologyimportMoleculeimportmdtrajasmdimportpdbfixerimportnumpyasnp附录安装命令速查表cu121RTX 4090CUDA ≤12.5MAMBA/public/software/mamba/bin/mambaENV/public/software/openmm/openmm-cu121$MAMBAcreate-y-p$ENV-cconda-forgepython3.11ambertools openff-toolkitsource$MAMBAactivate$ENV$MAMBAinstall-y-cconda-forge openmm openmm-plumed pipinstalltorch2.5.1 --index-url https://download.pytorch.org/whl/cu121 pipinstallmace-torch openmmforcefields mdtraj pdbfixer lxml$MAMBAinstall-y-cconda-forge --no-deps openmm-ml$MAMBAinstall-y-cconda-forge cuda-version12.1cuda-nvrtc12.1cu128RTX 5090CUDA ≤13.1MAMBA/public/software/mamba/bin/mambaENV/public/software/openmm/openmm-cu128$MAMBAcreate-y-p$ENV-cconda-forgepython3.11ambertools openff-toolkitsource$MAMBAactivate$ENV$MAMBAinstall-y-cconda-forge openmm openmm-plumed pipinstalltorch2.5.1 --index-url https://download.pytorch.org/whl/cu124 pipinstallmace-torch openmmforcefields mdtraj pdbfixer lxml$MAMBAinstall-y-cconda-forge --no-deps openmm-ml$MAMBAinstall-y-cconda-forge cuda-version12.8cuda-nvrtc12.8