AMBER 24 生产环境部署完全指南(5090可用)

AMBER 24 生产环境部署完全指南

维护者 : HPC 管理员
集群环境: Slurm + 异构 GPU(RTX 4090 & RTX 5090)


📋 目录

  1. 核心理念与架构决策
  2. 环境准备与依赖安装
  3. [CUDA 与 GCC 版本匹配表](#CUDA 与 GCC 版本匹配表)
  4. [获取 AMBER 24 源码](#获取 AMBER 24 源码)
  5. 一次性编译全部版本
  6. 神经网络势能(ANI)配置
  7. [PTX 兼容代码验证](#PTX 兼容代码验证)
  8. [创建 Module 文件](#创建 Module 文件)
  9. 验证与性能测试
  10. 常见错误与解决方案
  11. [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 的理由

  1. 你的集群已有 GNU/9.3.0 module
  2. 与 CUDA 12.5 完美兼容
  3. 避免重新编译 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. 参考资源

相关推荐
A小辣椒1 天前
TShark:Wireshark CLI 功能
linux
A小辣椒1 天前
TShark:基础知识
linux
AlfredZhao2 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush43 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5203 天前
Linux 11 动态监控指令top
linux
不会C语言的男孩3 天前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言