AMBER 24 生产环境部署完全指南
维护者 : HPC 管理员
集群环境: Slurm + 异构 GPU(RTX 4090 & RTX 5090)
📋 目录
- 核心理念与架构决策
- 环境准备与依赖安装
- [CUDA 与 GCC 版本匹配表](#CUDA 与 GCC 版本匹配表)
- [获取 AMBER 24 源码](#获取 AMBER 24 源码)
- 一次性编译全部版本
- 神经网络势能(ANI)配置
- [PTX 兼容代码验证](#PTX 兼容代码验证)
- [创建 Module 文件](#创建 Module 文件)
- 验证与性能测试
- 常见错误与解决方案
- [Slurm 作业脚本](#Slurm 作业脚本)
1. 核心理念与架构决策
1.1 与旧版教程的重大差异
| 传统方法(已过时) | 现代方法(本教程) |
|---|---|
| 手动编译 Python 3.11 | 使用 AMBER 自带 Miniconda |
| 先装 AmberTools 再装 AMBER | 一次性 CMake 编译所有组件 |
| 分别编译串行/MPI/CUDA | 同时编译所有版本 |
需要 update_amber |
CMake 自动更新补丁 |
| 手动管理 Python 包 | conda 环境自动处理 |
1.2 硬件环境
| 节点组 | GPU | 驱动 | CUDA 上限 | 编译目标 |
|---|---|---|---|---|
| cn01-cn04 | RTX 4090 | 555.xx (12.40) | 12.5 | sm_89 + PTX |
| cn10-cn12 | RTX 5090 | 590.xx (13.10) | 13.1 | PTX JIT |
1.3 软件栈版本(经过实战验证)
| 组件 | 版本 | 说明 |
|---|---|---|
| GCC | 9.3.0 | 与 CUDA 12.1 完美兼容 |
| CUDA | 12.1.0 | 小于CUDA12.5 |
| OpenMPI | 4.1.2 | 已有,直接复用 |
| CMake | 3.26.4 | 已有,直接复用 |
| Plumed | 2.9.2 | 增强采样(可选) |
| Python | 3.11(Miniconda) | AMBER 自动安装 |
| PyTorch | 2.x(conda) | 用于 ANI 势能 |
2. 环境准备与依赖安装
2.1 系统依赖(一次性安装)
bash
# 以 root 身份执行
apt-get update
# 核心编译工具
apt-get install -y \
flex bison patch bc \
perl cpanminus \
tcsh csh
# 开发库
apt-get install -y \
libboost-all-dev \
zlib1g-dev libbz2-dev liblzma-dev \
libfftw3-dev libfftw3-mpi-dev \
libnetcdf-dev \
libprotobuf-dev protobuf-compiler \
libx11-dev libglu1-mesa-dev
# 安装 Perl 化学模块(AMBER 的 antechamber 需要)
cpan -f Chemistry::Mol
# 如果报错 Chemistry::InternalCoords,忽略即可(不影响主功能)
2.2 目录结构
bash
export SOFT_ROOT=/public/software
export SRC_DIR=/public/sourcecode
mkdir -p $SOFT_ROOT/amber24
mkdir -p $SRC_DIR/amber24
mkdir -p $SOFT_ROOT/modules/modulefiles/amber
3. CUDA 与 GCC 版本匹配表
3.1 实战验证的兼容组合
根据你的经验和 NVIDIA 官方文档:
| CUDA 版本 | 兼容的 GCC 版本 | 推荐使用 |
|---|---|---|
| 11.3 | 9.x - 10.x | GCC 10.3 |
| 11.7 | 9.x - 12.x | GCC 11.4 |
| 12.5 | 9.x - 12.6 | GCC 9.3 ✅ |
| 13.0+ | 10.x - 13.x | GCC 12.x |
我们选择 GCC 9.3.0 的理由:
- 你的集群已有
GNU/9.3.0module - 与 CUDA 12.5 完美兼容
- 避免重新编译 GCC(节省时间)
3.2 加载基础环境
bash
module purge
module load GNU/9.3.0
module load openmpi/4.1.2_gcc9.3
module load cmake/3.26.4_gcc9.3
module load CUDA/12.1
#Amber24支持的CUDA版本是7.5-12.4
4. 获取 AMBER 24 源码
4.1 下载并解压
bash
cd $SRC_DIR/amber24
# 从官方下载(需要授权账号)
wget https://ambermd.org/downloads/amber24/Amber24.tar.bz2
wget https://ambermd.org/downloads/amber24/AmberTools24.tar.bz2
# 或者从你的备份拷贝
# scp your-server:/path/to/Amber24.tar.bz2 .
# scp your-server:/path/to/AmberTools24.tar.bz2 .
# 解压
tar -xjf Amber24.tar.bz2
tar -xjf AmberTools24.tar.bz2
# 验证目录结构
ls amber24_src/
# 应该看到: AmberTools/ build/ CMakeLists.txt cmake/ src/ ...
4.2 处理已知的编译冲突(可选)
如果你遇到过 pytraj 编译失败(AMBER 22 的老问题,24 可能已修复):
bash
cd $SRC_DIR/amber24/amber24_src
# 备份原始文件
cp cmake/WhichTools.cmake cmake/WhichTools.cmake.bak
# 注释掉 pytraj(如果需要)
vim cmake/WhichTools.cmake
# 找到这一段:
# set(AMBER_TOOLS
# pytraj # <--- 如果编译失败,注释这一行
# mdgx # <--- 如果编译失败,注释这一行
# ...
# )
注意:AMBER 24 已经大幅改进了 pytraj 的编译,通常不需要这一步。
5. 一次性编译全部版本(编译CUDA的PTX兼容)
5.1 修改cuda文件
bash
cd $SRC_DIR/amber24/amber24_src
mkdir -p build
cd build
第一个文件 /public/sourcecode/amber24_src/cmake/CudaConfig.cmake 需要修改。
我们使用的 CUDA 12.1 落在了这个条件分支里:
cmake
elseif((${CUDA_VERSION} VERSION_GREATER_EQUAL 12.0) AND (${CUDA_VERSION} VERSION_LESS 12.5))
修改方法:
保留所有架构,但加上 SM8.9(保险但慢)
先在文件顶部(大概第 20 行左右)添加 SM8.9 的定义:
cmake
#SM9.0 = GH200
set(SM90FLAGS -gencode arch=compute_90,code=sm_90)
#SM8.9 = RTX 4090 <--- 在这里加一行
set(SM89FLAGS -gencode arch=compute_89,code=sm_89) <--- 新增这行
#SM8.6 -- not currently used, but should be tested on Cuda 11.1
set(SM86FLAGS -gencode arch=compute_86,code=sm_86)
然后修改第 59 行的那段:
cmake
elseif((${CUDA_VERSION} VERSION_GREATER_EQUAL 12.0) AND (${CUDA_VERSION} VERSION_LESS 12.5))
message(STATUS "Configuring for SM5.0, SM5.2, SM5.3, SM6.0, SM6.1, SM7.0, SM7.5, SM8.0, SM8.6, SM8.9 and SM9.0")
list(APPEND CUDA_NVCC_FLAGS ${SM50FLAGS} ${SM52FLAGS} ${SM53FLAGS} ${SM60FLAGS} ${SM61FLAGS} ${SM70FLAGS} ${SM75FLAGS} ${SM80FLAGS} ${SM86FLAGS} ${SM89FLAGS} -gencode arch=compute_90,code=compute_90 -Wno-deprecated-gpu-targets -Wno-deprecated-declarations)
注意:
- 在
${SM86FLAGS}后面加上${SM89FLAGS} - 把
${SM90FLAGS}改成-gencode arch=compute_90,code=compute_90(PTX 模式)
第二个需要修改的文件 /public/sourcecode/amber24_src/AmberTools/src/quick/quick-cmake/QUICKCudaConfig.cmake
找到第 100-104 行左右的这段:
cmake
elseif((${CUDA_VERSION} VERSION_GREATER_EQUAL 12.0) AND (${CUDA_VERSION} VERSION_LESS 12.5))
message(STATUS "Configuring QUICK for SM5.0, SM5.2, SM5.3, SM6.0, SM6.1, SM7.0, SM7.5, SM8.0, SM8.6, SM8.9 and SM9.0")
list(APPEND CUDA_NVCC_FLAGS ${SM50FLAGS} ${SM52FLAGS} ${SM53FLAGS} ${SM60FLAGS} ${SM61FLAGS} ${SM70FLAGS} ${SM75FLAGS} ${SM80FLAGS} ${SM86FLAGS} ${SM89FLAGS} ${SM90FLAGS})
list(APPEND CUDA_NVCC_FLAGS -DUSE_LEGACY_ATOMICS)
set(DISABLE_OPTIMIZER_CONSTANTS TRUE)
替换成:
cmake
elseif((${CUDA_VERSION} VERSION_GREATER_EQUAL 12.0) AND (${CUDA_VERSION} VERSION_LESS 12.5))
message(STATUS "Configuring QUICK for SM8.9 and SM9.0 only (RTX 4090/5090)")
list(APPEND CUDA_NVCC_FLAGS ${SM89FLAGS} -gencode arch=compute_90,code=compute_90)
set(DISABLE_OPTIMIZER_CONSTANTS FALSE)
或者修改:
bash
#SM9.0 = H100, GH200 (Hopper)
set(SM90FLAGS -gencode arch=compute_90,code=compute_90)
注意:
- SM9.0 用 PTX 模式 (
code=compute_90而不是code=sm_90)
保存退出。
第三个文件:
如果你需要 CPPTRAJ 的 CUDA 加速(用于轨迹分析),也改一下:
bash
vim /public/sourcecode/amber24_src/AmberTools/src/cpptraj/cmake-cpptraj/CudaConfig.cmake
检查了一下cmake,这个最高支持到CUDA11。所以算了,不搞了。
5.2 编辑 run_cmake 脚本(核心步骤)
bash
# 编辑配置
最好不要执行run_cmake ,直接使用传统的cmake。或者把这部分内容替换原先的run_cmake里的内容
修改内容(关键参数):
bash
cmake /public/sourcecode/amber24_src \
-DCMAKE_INSTALL_PREFIX=/public/software/amber24_com \
-DCOMPILER=GNU \
-DMPI=FALSE \
-DCUDA=TRUE \
-DCUDA_TOOLKIT_ROOT_DIR=/public/software/cuda-12.1 \
-DINSTALL_MINICONDA=TRUE \
-DDOWNLOAD_MINICONDA=TRUE \
-DFORCE_INTERNAL_LIBS="arpack;netcdf;protobuf"
5.3 运行 CMake
bash
# 确保环境正确
module load GNU/9.3.0
module load CUDA/12.1
module load openmpi/4.1.2
module load cmake3.26.4-gcc9.3.0
cd $SRC_DIR/amber24/amber24_src/build
# 执行配置
./run_cmake
# 检查输出,应该看到:
# -- The C compiler identification is GNU 9.3.0
# -- The CXX compiler identification is GNU 9.3.0
# -- Found CUDA: /public/software/cuda-12.5.0 (version 12.5)
# -- CUDA architectures: 89
# -- Installing Miniconda...
# -- Configuring done
如果 CMake 失败,必须先清理再重试:
bash
rm CMakeCache.txt
./run_cmake
5.4 编译与安装(耗时 1-2 小时)
bash
# 使用 32 核并行编译
make install -j 32 2>&1 | tee make.log
# 实时查看进度(另一个终端)
tail -f make.log
编译阶段检查点:
| 阶段 | 预计时间 | 关键输出 |
|---|---|---|
| Miniconda 安装 | 5-10 分钟 | Installing Miniconda to /public/software/amber24/miniconda |
| AmberTools 编译 | 30-50 分钟 | Building AmberTools... |
| AMBER 核心编译 | 20-40 分钟 | Building pmemd.cuda... |
| Python 模块安装 | 10-20 分钟 | Installing ParmEd, pytraj... |
5.5 验证安装
bash
ls /public/software/amber24/bin/
# 应该看到所有关键可执行文件:
# pmemd.cuda - GPU 加速 MD
# pmemd.cuda.MPI - 多 GPU MPI 版本
# pmemd.MPI - CPU MPI 版本
# sander - 串行 CPU 版本
# tleap - 系统准备
# cpptraj - 轨迹分析
# antechamber - 小分子参数化
6. 神经网络势能(ANI)配置(仅供参考,未配置)
6.1 AMBER 24 的 NNP 支持现状(2024 官方确认)
| NNP 框架 | AMBER 支持方式 | 状态 | 元素覆盖 | 接口 |
|---|---|---|---|---|
| TorchANI | 原生集成(sander) | ✅ 官方支持 | H, C, N, O, S, F, Cl | Python/C++ |
| DeePMD-kit | 外部接口(通过 Plumed) | ✅ 可用但需额外配置 | 全元素 | Plumed MLIP |
| NequIP | 通过 Plumed | ⚠️ 实验性 | 全元素 | Plumed |
| SchNet | 不支持 | ❌ | - | - |
6.2 TorchANI 集成(官方推荐)
6.2.1 TorchANI 简介
TorchANI 是基于 PyTorch 的神经网络势能,专为有机分子设计:
- 精度:接近 CCSD(T)/CBS(耦合簇理论)
- 速度:比 DFT 快 1000-10000 倍
- 模型:ANI-1x, ANI-1ccx, ANI-2x
- 训练数据:500 万个 DFT 计算点
6.2.2 编译时启用 TorchANI
Step 1: 安装 PyTorch 到 AMBER 的 Miniconda
bash
# 加载环境
module load GNU/9.3.0
module load CUDA/12.1
cd /public/sourcecode/amber24_src
# 首先让 AMBER 安装基础 Miniconda
cd build
./run_cmake # 会自动安装 Miniconda
# 等待 Miniconda 安装完成后,激活它
source /public/software/amber24/amber.sh
# 安装 PyTorch(选择与 CUDA 12.5 兼容的版本)
$AMBERHOME/miniconda/bin/conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia
# 安装 TorchANI
$AMBERHOME/miniconda/bin/pip install torchani
# 验证安装
python -c "import torch; print(f'PyTorch: {torch.__version__}, CUDA: {torch.cuda.is_available()}')"
python -c "import torchani; print(f'TorchANI: {torchani.__version__}')"
Step 2: 重新配置并编译 AMBER(启用 TorchANI)
bash
cd /public/sourcecode/amber24_src/build
# 编辑 run_cmake
vim run_cmake
完整的 run_cmake 脚本(关键部分):
bash
#!/bin/bash
AMBER_PREFIX=/public/sourcecode/amber24_src
cmake $AMBER_PREFIX \
-DCMAKE_INSTALL_PREFIX=/public/software/amber24 \
-DCOMPILER=GNU \
-DMPI=TRUE \
-DCUDA=TRUE \
-DCUDA_TOOLKIT_ROOT_DIR=/public/software/cuda-12.1 \
-DINSTALL_MINICONDA=TRUE \
-DDOWNLOAD_MINICONDA=TRUE \
-DMINICONDA_USE_PY311=TRUE \
\
`# 关键:启用 TorchANI` \
-DUSE_TORCHANI=TRUE \
-DTorch_DIR=$AMBERHOME/miniconda/lib/python3.11/site-packages/torch/share/cmake/Torch \
\
`# 禁用 mdgx.cuda(避免之前的编译错误)` \
-DBUILD_MDGX_CUDA=FALSE \
\
`# GPU 架构(4090 + PTX)` \
-DCUDA_ARCH="89" \
\
2>&1 | tee cmake.log
执行编译:
bash
./clean_build -f
./run_cmake
# 检查 CMake 输出,应该看到:
# -- Found Torch: /public/software/amber24/miniconda/lib/python3.11/site-packages/torch
# -- TorchANI support: ENABLED
make install -j 32 2>&1 | tee make.log
Step 3: 验证 TorchANI 集成
bash
source /public/software/amber24/amber.sh
# 检查 sander 是否链接了 PyTorch
ldd $AMBERHOME/bin/sander | grep torch
# 应该看到:
# libtorch.so => /public/software/amber24/miniconda/lib/python3.11/site-packages/torch/lib/libtorch.so
# libtorch_cpu.so => ...
6.2.3 使用 TorchANI 运行 MD
准备输入文件
示例:丙氨酸二肽(Alanine Dipeptide)
bash
mkdir -p ~/amber_ani_test
cd ~/amber_ani_test
# 创建 PDB 文件(简化的丙氨酸二肽)
cat > ala2.pdb <<'EOF'
ATOM 1 N ALA 1 0.000 0.000 0.000
ATOM 2 H ALA 1 0.000 0.000 1.010
ATOM 3 CA ALA 1 1.458 0.000 0.000
ATOM 4 HA ALA 1 1.820 1.028 0.000
ATOM 5 CB ALA 1 1.980 -0.739 -1.231
ATOM 6 HB1 ALA 1 1.655 -0.268 -2.160
ATOM 7 HB2 ALA 1 3.070 -0.739 -1.231
ATOM 8 HB3 ALA 1 1.618 -1.767 -1.231
ATOM 9 C ALA 1 1.980 -0.739 1.231
ATOM 10 O ALA 1 1.261 -1.261 2.080
ATOM 11 N ALA 2 3.310 -0.739 1.334
ATOM 12 H ALA 2 3.873 -0.324 0.601
ATOM 13 CA ALA 2 3.980 -1.339 2.485
ATOM 14 HA ALA 2 3.618 -2.367 2.485
ATOM 15 CB ALA 2 5.502 -1.339 2.362
ATOM 16 HB1 ALA 2 5.864 -0.311 2.362
ATOM 17 HB2 ALA 2 5.864 -1.878 1.482
ATOM 18 HB3 ALA 2 5.934 -1.878 3.207
ATOM 19 C ALA 2 3.502 -0.678 3.771
ATOM 20 O ALA 2 3.502 0.548 3.910
ATOM 21 OXT ALA 2 3.100 -1.478 4.620
END
EOF
# 创建 AMBER 输入文件(mdin)
cat > ani_min.in <<'EOF'
ANI minimization test
&cntrl
imin=1, ! 能量最小化
maxcyc=500, ! 最大步数
ncyc=250, ! 初始陡降步数
ntb=0, ! 非周期性边界
cut=999.0, ! 截断距离(ANI 不需要截断)
ntpr=10, ! 输出频率
! 关键:启用 ANI
ianiseed=1, ! 使用 ANI-1ccx 模型
/
EOF
mdin 参数详解
| 参数 | 值 | 说明 |
|---|---|---|
ianiseed |
0 | 不使用 ANI(使用传统力场) |
ianiseed |
1 | ANI-1ccx(最精确,适合有机小分子) |
ianiseed |
2 | ANI-2x(更快,元素覆盖更广) |
ianiseed |
3 | ANI-1x(最快,但精度稍低) |
运行计算
bash
module load amber/24
source $AMBERHOME/amber.sh
# 运行最小化(CPU 版本)
sander -O -i ani_min.in -p ala2.pdb -c ala2.pdb -o ani_min.out -r ani_min.rst
# 检查输出
grep "FINAL RESULTS" ani_min.out
grep "ENERGY" ani_min.out
GPU 加速版本(需要 PyTorch GPU 支持)
bash
# 确保 PyTorch 能识别 GPU
python -c "import torch; print(torch.cuda.is_available())"
# 使用 sander(目前 pmemd 不支持 ANI)
export CUDA_VISIBLE_DEVICES=0
sander.cuda -O -i ani_min.in -p ala2.pdb -c ala2.pdb -o ani_min_gpu.out
6.2.4 TorchANI 分子动力学(MD)
bash
cat > ani_md.in <<'EOF'
ANI molecular dynamics
&cntrl
imin=0, ! MD 模式
nstlim=10000, ! 总步数(10 ps)
dt=0.001, ! 时间步长(1 fs)
ntb=0, ! 非周期性
cut=999.0,
ntt=3, ! Langevin 恒温器
temp0=300.0, ! 目标温度
gamma_ln=5.0, ! 摩擦系数
ntpr=100,
ntwx=100,
ianiseed=1, ! ANI-1ccx
/
EOF
sander -O -i ani_md.in -p ala2.pdb -c ani_min.rst -o ani_md.out -r ani_md.rst -x ani_md.nc
6.2.5 TorchANI 的局限性
| 限制 | 说明 | 解决方案 |
|---|---|---|
| 元素限制 | 仅支持 H, C, N, O, S, F, Cl | 使用 DeePMD(支持全元素) |
| 周期性边界 | 不支持 PBC | 只能用于小分子气相/溶液模拟 |
| 速度 | 比传统力场慢 10-100 倍 | 使用 GPU 或减小体系 |
| pmemd 不支持 | 只能用 sander | 性能受限 |
6.3 DeePMD-kit 集成(通过 Plumed)
6.3.1 DeePMD-kit 简介
- 开发者:北京应用物理与计算数学研究所
- 特点:支持全元素、PBC、超大体系(百万原子)
- 训练:需要自己用 DFT 数据训练模型
- 精度:取决于训练数据质量
6.3.2 架构说明
AMBER 不直接支持 DeePMD,需要通过 Plumed 作为桥梁:
AMBER (pmemd/sander)
↓
Plumed (增强采样框架)
↓
Plumed MLIP 插件
↓
DeePMD-kit 库
↓
TensorFlow C++ API
6.3.3 安装 DeePMD-kit
Step 1: 安装 TensorFlow C++ 库
bash
cd /public/sourcecode
# 下载预编译的 TensorFlow C++ 库
wget https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-gpu-linux-x86_64-2.15.0.tar.gz
tar -xzf libtensorflow-gpu-linux-x86_64-2.15.0.tar.gz -C /public/software/
# 设置环境变量
export TENSORFLOW_ROOT=/public/software/libtensorflow
export LD_LIBRARY_PATH=$TENSORFLOW_ROOT/lib:$LD_LIBRARY_PATH
Step 2: 编译 DeePMD-kit
bash
module load GNU/9.3.0
module load CUDA/12.5.0
module load cmake3.26.4-gcc9.3.0
cd /public/sourcecode
git clone --recursive https://github.com/deepmodeling/deepmd-kit.git
cd deepmd-kit
# 创建 Python 虚拟环境
python3 -m venv dpmd_env
source dpmd_env/bin/activate
# 安装 Python 依赖
pip install tensorflow numpy
# 编译 DeePMD C++ 库
mkdir build && cd build
cmake -DTENSORFLOW_ROOT=$TENSORFLOW_ROOT \
-DCMAKE_INSTALL_PREFIX=/public/software/deepmd-kit \
-DUSE_CUDA_TOOLKIT=TRUE \
-DCUDA_TOOLKIT_ROOT_DIR=/public/software/cuda-12.5.0 \
..
make -j 32
make install
Step 3: 重新编译 Plumed(集成 DeePMD)
bash
cd /public/sourcecode
wget https://github.com/plumed/plumed2/releases/download/v2.9.2/plumed-2.9.2.tgz
tar -xzf plumed-2.9.2.tgz
cd plumed-2.9.2
./configure --prefix=/public/software/plumed-2.9.2-deepmd \
--enable-modules=all \
--enable-mlip \
CXX=g++ \
LDFLAGS="-L/public/software/deepmd-kit/lib -L$TENSORFLOW_ROOT/lib" \
CPPFLAGS="-I/public/software/deepmd-kit/include -I$TENSORFLOW_ROOT/include"
make -j 32
make install
Step 4: 重新编译 AMBER(链接新 Plumed)
bash
cd /public/sourcecode/amber24_src/build
# 编辑 run_cmake,添加:
-DUSE_PLUMED=TRUE \
-DPLUMED_ROOT=/public/software/plumed-2.9.2-deepmd \
./clean_build -f
./run_cmake
make install -j 32
6.3.4 使用 DeePMD 运行模拟
准备工作
假设你已经训练好了一个 DeePMD 模型 frozen_model.pb。
创建 Plumed 输入文件
bash
cat > plumed.dat <<'EOF'
# 加载 DeePMD 模型
UNITS LENGTH=A ENERGY=kcal/mol TIME=fs
# 使用 MLIP 接口
mlip: PYTORCH_MODEL FILE=frozen_model.pb
# 将势能传递给 AMBER
PRINT ARG=mlip.energy FILE=COLVAR STRIDE=10
EOF
AMBER 输入文件
bash
cat > md_deepmd.in <<'EOF'
DeePMD MD test
&cntrl
imin=0,
nstlim=10000,
dt=0.001,
ntb=1, ! 周期性边界(DeePMD 支持)
cut=12.0,
ntt=3,
temp0=300.0,
gamma_ln=1.0,
plumed=1, ! 启用 Plumed
plumedfile='plumed.dat',
/
EOF
运行
bash
module load amber/24
source $AMBERHOME/amber.sh
export PLUMED_KERNEL=/public/software/plumed-2.9.2-deepmd/lib/libplumedKernel.so
pmemd -O -i md_deepmd.in -p system.prmtop -c system.inpcrd -o md_deepmd.out
6.4 性能对比与选择指南
6.4.1 计算速度对比(23K 原子蛋白质)
| 方法 | 速度 (ns/day) | 相对传统 MD |
|---|---|---|
| AMBER ff19SB (GPU) | 500 | 1x |
| TorchANI (CPU) | 0.5 | 0.001x |
| TorchANI (GPU) | 5 | 0.01x |
| DeePMD (GPU) | 50 | 0.1x |
6.4.2 选择建议
| 场景 | 推荐方法 | 理由 |
|---|---|---|
| 小分子药物设计(< 100 原子) | TorchANI | 高精度、易用 |
| 材料模拟(金属、陶瓷) | DeePMD | 支持全元素 |
| 大体系蛋白质(> 50K 原子) | 传统力场 | NNP 太慢 |
| 反应路径计算 | TorchANI + QM/MM | DFT 级别精度 |
| 周期性晶体 | DeePMD | 支持 PBC |
6.5 测试 ANI 势能
bash
source /public/software/amber24/amber.sh
# 下载示例输入文件
cd /tmp
cat > test_ani.in <<EOF
ANI test
&cntrl
imin=1, maxcyc=100,
ntb=0, cut=999.0,
ianiseed=1,
/
&amoeba
iamoeba=1,
beeman_integrator=0,
/
EOF
# 准备一个小分子 PDB(如甲烷)
cat > methane.pdb <<EOF
ATOM 1 C MET 1 0.000 0.000 0.000
ATOM 2 H MET 1 1.089 0.000 0.000
ATOM 3 H MET 1 -0.363 1.027 0.000
ATOM 4 H MET 1 -0.363 -0.513 0.889
ATOM 5 H MET 1 -0.363 -0.513 -0.889
END
EOF
# 运行(需要在有 GPU 的节点)
sander -O -i test_ani.in -p methane.pdb -c methane.pdb -o ani.out
7. PTX 兼容代码验证
7.1 检查二进制包含的架构
bash
# 检查 pmemd.cuda
cuobjdump -lelf /public/software/amber24_com/bin/pmemd.cuda | grep "\.sm_\|\.compute_"
# 预期输出:
# .nv.info.sm_89
# .nv.info.compute_89 <--- 这个是 PTX
7.2 检查 PTX 代码段
bash
cuobjdump -lptx /public/software/amber24/bin/pmemd.cuda
# 应该看到大量 PTX 汇编代码,例如:
# .version 8.5
# .target sm_89
# .address_size 64
# ...
7.3 实际验证(在 5090 节点)
bash
ssh cn10
module load amber/24
# 运行一个快速测试
cd $AMBERHOME/test/cuda
export DO_PARALLEL=""
./Run.jac
# 检查日志
cat mdout.jac | grep "GPU"
# 应该看到 GPU 被正确识别和使用
8. 创建 Module 文件
8.1 AMBER 24 Module
路径: /public/software/modules/modulefiles/amber/24
tcl
#%Module1.0
##
## AMBER 24 with Full GPU & NNP Support
##
proc ModulesHelp { } {
puts stderr "==========================================="
puts stderr "AMBER 24 + AmberTools 24"
puts stderr "==========================================="
puts stderr ""
puts stderr "🚀 Features:"
puts stderr " ✓ GPU-accelerated MD (pmemd.cuda)"
puts stderr " ✓ Multi-GPU MPI (pmemd.cuda.MPI)"
puts stderr " ✓ Neural Network Potentials (TorchANI)"
puts stderr " ✓ Enhanced sampling (Plumed integration)"
puts stderr " ✓ Full AmberTools suite"
puts stderr ""
puts stderr "🖥️ Compatible GPUs:"
puts stderr " • RTX 4090 (native, sm_89)"
puts stderr " • RTX 5090 (PTX JIT from compute_89)"
puts stderr ""
puts stderr "📦 Key executables:"
puts stderr " pmemd.cuda GPU MD engine"
puts stderr " pmemd.cuda.MPI Multi-GPU version"
puts stderr " tleap System builder"
puts stderr " cpptraj Trajectory analysis"
puts stderr " antechamber Small molecule parameterization"
puts stderr ""
puts stderr "🐍 Python environment:"
puts stderr " Miniconda 3.11 with PyTorch + TorchANI"
puts stderr "==========================================="
}
module-whatis "AMBER 24 (GPU + MPI + NNP)"
conflict amber
# 加载依赖
if { ![is-loaded GNU/9.3.0] } { module load GNU/9.3.0 }
if { ![is-loaded openmpi/4.1.2] } { module load openmpi/4.1.2 }
if { ![is-loaded CUDA/12.5.0] } { module load CUDA/12.5.0 }
set root /public/software/amber24
# 核心环境变量
setenv AMBERHOME $root
# 路径设置
prepend-path PATH $root/bin
prepend-path LD_LIBRARY_PATH $root/lib
prepend-path PYTHONPATH $root/lib/python3.11/site-packages
# Miniconda Python 环境
prepend-path PATH $root/miniconda/bin
prepend-path LD_LIBRARY_PATH $root/miniconda/lib
# AMBER 数据文件
setenv AMBER_DAT $root/dat
# 加载时执行 amber.sh(设置额外的 AMBER 环境变量)
if { [ module-info mode load ] } {
puts stderr ""
puts stderr "✅ AMBER 24 is loaded"
puts stderr " AMBERHOME: $root"
puts stderr " GPU: Enabled (CUDA 12.5)"
puts stderr " Python: $root/miniconda/bin/python"
puts stderr ""
puts stderr "💡 Quick start:"
puts stderr " source \$AMBERHOME/amber.sh # Set full environment"
puts stderr " pmemd.cuda -h # Check GPU support"
puts stderr ""
}
8.2 加载测试
bash
module use /public/software/modules/modulefiles
module load amber/24
# 验证环境
echo $AMBERHOME
which pmemd.cuda
which python
# 激活完整 AMBER 环境
source $AMBERHOME/amber.sh
9. 验证与性能测试
9.1 基础功能验证
9.1.1 检查所有可执行文件
bash
module load amber/24
# 串行版本
sander -h
# MPI 版本
pmemd.MPI -h
# GPU 版本
pmemd.cuda -h
# GPU MPI 版本
pmemd.cuda.MPI -h
9.1.2 Python 环境验证
bash
source $AMBERHOME/amber.sh
# 检查 Python 版本
python --version
# 应输出: Python 3.11.x
# 检查关键包
python -c "import parmed; print('ParmEd OK')"
python -c "import pytraj; print('pytraj OK')"
python -c "import torch; print(f'PyTorch {torch.__version__}')"
python -c "import torchani; print(f'TorchANI {torchani.__version__}')"
9.2 GPU 功能测试(4090 节点)
bash
ssh cn05
module load amber/24
cd $AMBERHOME/test/cuda
# 运行 JAC 蛋白质基准(最经典的测试)
export DO_PARALLEL=""
./Run.jac
# 检查结果
cat mdout.jac | grep "Average timings"
cat mdout.jac | grep "ns/day"
# 参考性能(4090):
# JAC (23558 atoms): ~800-1000 ns/day
9.3 PTX JIT 测试(5090 节点)
bash
ssh cn10
module load amber/24
cd $AMBERHOME/test/cuda
export DO_PARALLEL=""
# 第一次运行(会有 JIT 编译开销)
time ./Run.jac
# 记录时间(例如 45 秒)
# 第二次运行(JIT 缓存生效)
./clean
time ./Run.jac
# 应该明显更快(例如 30 秒)
# 性能对比
cat mdout.jac | grep "ns/day"
# 预期:比 4090 慢 5-15%(可接受)
9.4 MPI 多 GPU 测试
bash
# 在有 2 块 GPU 的节点上
cd $AMBERHOME/test/cuda
# 编辑测试脚本
export DO_PARALLEL="mpirun -np 2"
./Run.cellulose_production
# 检查日志
grep "ns/day" mdout.cellulose_production_md*
9.5 官方完整测试套件
bash
# 在 4090 节点上运行完整测试(耗时 2-4 小时)
cd $AMBERHOME
make test.cuda.serial 2>&1 | tee test.log
# 检查测试结果
grep "FAILED\|PASSED" test.log
# 应该看到 > 95% PASSED
10. 常见错误与解决方案
10.1 CMake 配置阶段错误
错误 1: Could not find CUDA
bash
# 现象
CMake Error: CUDA_TOOLKIT_ROOT_DIR not found
# 原因
CUDA module 未加载或路径错误
# 解决
module load CUDA/12.5.0
echo $CUDA_HOME # 必须输出路径
# 在 run_cmake 中显式指定
CUDA_HOME=/public/software/cuda-12.5.0
错误 2: GCC version not supported by CUDA
bash
# 现象
nvcc fatal: Unsupported gcc version! gcc versions later than 12.6 are not supported!
# 原因
加载了错误的 GCC 版本
# 解决
module purge
module load GNU/9.3.0 # 使用兼容版本
gcc --version # 确认是 9.3.0
错误 3: Perl module Chemistry::Mol not found
bash
# 现象
antechamber configure failed
# 解决
cpan -f Chemistry::Mol
# 如果 cpan 不可用
apt install cpanminus
cpanm Chemistry::Mol
错误 4: libboost_xxx.so not found
bash
# 解决
apt-get install libboost-all-dev
# 或指定版本
apt-get install libboost1.74-all-dev
错误 5: flex/bison not found
bash
apt-get install flex bison
错误 6: X11 headers not found
bash
apt-get install libx11-dev libglu1-mesa-dev
10.2 编译阶段错误
错误 7: pytraj compilation failed
bash
# 方案 1:更新 pip
source $AMBERHOME/amber.sh
pip install --upgrade pip setuptools wheel
# 方案 2:禁用 pytraj
vim cmake/WhichTools.cmake
# 注释掉 pytraj 那一行
./clean_build -f
./run_cmake
make install -j 32
错误 8: parmed import error
bash
# 现象
ModuleNotFoundError: No module named 'parmed'
# 原因
conda 环境中的 parmed 安装失败
# 解决
source $AMBERHOME/amber.sh
$AMBERHOME/miniconda/bin/pip install parmed
# 查看安装历史
cat $AMBERHOME/miniconda/conda-meta/history | grep parmed
错误 9: netCDF library not found
bash
apt-get install libnetcdf-dev netcdf-bin
# 或手动指定路径
cmake ... -DNetCDF_INCLUDES=/usr/include \
-DNetCDF_LIBRARIES=/usr/lib/x86_64-linux-gnu/libnetcdf.so
10.3 运行阶段错误
错误 10: CUDA error: no kernel image available for device
bash
# 现象
pmemd.cuda: CUDA error
# 诊断
cuobjdump -lelf $AMBERHOME/bin/pmemd.cuda | grep sm_
# 如果没有 sm_89 或 compute_89
# 需要重新编译并确保 CUDA_ARCH="89"
错误 11: libcudart.so.12.5: cannot open shared object file
bash
# 原因
运行时找不到 CUDA 库
# 解决
module load CUDA/12.5.0
echo $LD_LIBRARY_PATH | grep cuda
# 或在 module 文件中添加
prepend-path LD_LIBRARY_PATH /public/software/cuda-12.5.0/lib64
错误 12: vlimit exceeded
bash
# 在作业脚本开头添加
ulimit -s unlimited
ulimit -v unlimited
错误 13: MPI_Init failed
bash
# 检查 MPI 版本
mpirun --version
# 确保加载了正确的 OpenMPI
module load openmpi/4.1.2
# 在 Slurm 脚本中添加
export OMPI_MCA_btl_openib_allow_ib=1
10.4 性能问题
问题 14: GPU 利用率低(< 50%)
bash
# 可能原因:
# 1. 体系太小(< 15000 原子)
# 2. 输出频率过高
# 优化 mdin 文件
ntpr = 5000 # 减少日志输出
ntwx = 5000 # 减少轨迹写入
ntwe = 0 # 禁用能量文件
问题 15: 5090 比 4090 慢很多(> 30%)
bash
# 原因:PTX JIT 缓存未生效
# 解决:设置持久缓存
export CUDA_CACHE_PATH=/public/software/amber24/.cuda_cache
export CUDA_CACHE_MAXSIZE=2147483648 # 2GB
# 在 module 文件中设置
setenv CUDA_CACHE_PATH $root/.cuda_cache
setenv CUDA_CACHE_MAXSIZE 2147483648
11. Slurm 作业脚本
11.1 单 GPU 生产 MD
bash
#!/bin/bash
#SBATCH -J amber_md
#SBATCH -p gpu
#SBATCH -N 1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=4
#SBATCH --gres=gpu:1
#SBATCH --time=72:00:00
#SBATCH -o %j.out
#SBATCH -e %j.err
# 系统限制
ulimit -s unlimited
ulimit -v unlimited
# 加载环境
module load amber/24
source $AMBERHOME/amber.sh
# 指定 GPU
export CUDA_VISIBLE_DEVICES=0
# 运行 MD
pmemd.cuda -O \
-i prod.in \
-o prod.out \
-p system.prmtop \
-c heat.rst \
-r prod.rst \
-x prod.nc \
-inf prod.info
11.2 多 GPU MPI(副本交换 REMD)
bash
#!/bin/bash
#SBATCH -J amber_remd
#SBATCH -p gpu
#SBATCH -N 1
#SBATCH --ntasks=4
#SBATCH --cpus-per-task=2
#SBATCH --gres=gpu:4
#SBATCH --time=168:00:00
ulimit -s unlimited
module load amber/24
source $AMBERHOME/amber.sh
export CUDA_VISIBLE_DEVICES=0,1,2,3
mpirun -np 4 pmemd.cuda.MPI -O \
-i remd.in \
-o remd_%r.out \
-p system.prmtop \
-c min.rst \
-r remd_%r.rst \
-x remd_%r.nc \
-inf remd_%r.info \
-rem 3 -remlog remd.log
11.3 使用神经网络势能(ANI)
bash
#!/bin/bash
#SBATCH -J amber_ani
#SBATCH -p gpu
#SBATCH --gres=gpu:1
module load amber/24
source $AMBERHOME/amber.sh
# ANI 需要额外的环境变量
export PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:512
# mdin 文件中需要设置
# &cntrl
# ianiseed = 1, ! 使用 ANI 势能
# /
sander -O -i ani_md.in -p system.pdb -c system.pdb -o ani.out
11.4 批量提交(参数扫描)
bash
#!/bin/bash
# submit_batch.sh
for temp in 300 310 320 330; do
for replica in {1..5}; do
cat > job_${temp}K_rep${replica}.sh <<EOF
#!/bin/bash
#SBATCH -J T${temp}_r${replica}
#SBATCH --gres=gpu:1
#SBATCH -p gpu
module load amber/24
source \$AMBERHOME/amber.sh
export CUDA_VISIBLE_DEVICES=\${SLURM_LOCALID}
pmemd.cuda -O \\
-i md_${temp}K.in \\
-o md_${temp}K_rep${replica}.out \\
-p system.prmtop \\
-c equil.rst \\
-r md_${temp}K_rep${replica}.rst \\
-x md_${temp}K_rep${replica}.nc
EOF
sbatch job_${temp}K_rep${replica}.sh
done
done
12. 高级功能
12.1 自由能计算(TI/FEP)
AMBER 24 的 GPU 版本完全支持自由能微扰:
bash
# mdin 文件配置
&cntrl
icfe = 1, ! 启用自由能计算
clambda = 0.5, ! Lambda 值
ifsc = 1, ! 软核势能
scalpha = 0.5,
scbeta = 12.0,
/
12.2 恒定 pH 模拟
bash
&cntrl
icnstph = 1, ! 启用恒定 pH
solvph = 7.4, ! 目标 pH
ntcnstph = 100, ! pH 更新频率
/
12.3 QM/MM 混合计算
bash
# 需要额外编译 QM 接口
# 在 run_cmake 中添加
# -DQMMM=TRUE
13. 与 GROMACS 的对比
| 特性 | AMBER 24 | GROMACS 2026 |
|---|---|---|
| 主要应用 | 生物大分子、药物设计 | 通用(生物+材料) |
| GPU 性能 | ⭐⭐⭐⭐⭐(闭源优化) | ⭐⭐⭐⭐ |
| 力场 | AMBER 系列(ff19SB/OL15) | CHARMM/OPLS/AMBER |
| 自由能 | ⭐⭐⭐⭐⭐(TI/MBAR) | ⭐⭐⭐(需外部工具) |
| NNP | TorchANI/DeepMD | 全功能 TorchScript |
| 易用性 | 学习曲线陡峭 | 更友好 |
| 计算速度 | 4090和5090差不多 | 实测更快 |
14. 参考资源
- 官方手册 :
$AMBERHOME/doc/Amber24.pdf - 在线教程: http://ambermd.org/tutorials/
- GPU 优化指南 :
$AMBERHOME/doc/GPUGuide.pdf - 邮件列表: http://archive.ambermd.org/
- TorchANI 文档: https://aiqm.github.io/torchani/