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. 参考资源

相关推荐
生活很暖很治愈4 小时前
Linux基础开发工具
linux·服务器·git·vim
似霰5 小时前
Linux Shell 脚本编程——核心基础语法
linux·shell
LUCIFER8 小时前
[驱动进阶——MIPI摄像头驱动(五)]rk3588+OV13855摄像头驱动加载过程详细解析第四部分——ISP驱动
linux·驱动开发
暮云星影8 小时前
四、linux系统 应用开发:UI开发环境配置概述 (一)
linux·ui·arm
a程序小傲9 小时前
得物Java面试被问:RocketMQ的消息轨迹追踪实现
java·linux·spring·面试·职场和发展·rocketmq·java-rocketmq
Ghost Face...9 小时前
i386 CPU页式存储管理深度解析
java·linux·服务器
LEEE@FPGA9 小时前
zynq 是不是有了设备树,再linux中不需要编写驱动也能控制
linux·运维·单片机
RisunJan9 小时前
Linux命令-less(分页查看器)
linux·运维
梁正雄9 小时前
linux服务-MariaDB 10.6 Galera Cluster+garbd
linux·运维·mariadb