Amber + Cuda 安装教程

0. 前言

0.1 本文目标

本指南旨在为计算化学、生物物理及药物设计等领域的研究生和科研人员,提供一份在Linux系统上手工源码安装Amber20的清晰、可复现的详细教程。我们尤其关注可能遇到的典型问题,并提供了经过验证的解决方案,旨在获得一个稳定、高性能的Amber20环境。

0.2 Amber 简介

Amber是一个广泛应用于生物分子体系分子动力学模拟的著名软件套件。它主要包含两大部分:AmberTools:一套丰富的工具集,用于准备模拟体系、分析轨迹文件、处理参数等。Amber:核心动力学模拟程序,特别是其高效的pmemd模块。
选择源码安装而非预编译版本,可以带来诸多好处:性能优化:针对特定的CPU架构(如支持的AVX指令集)进行编译,充分发挥硬件性能。灵活性:可以更精细地控制编译选项和依赖库。

0.3 关于本文与参考方法

在撰写本手册时,我们参考了互联网上多种安装方法,其中包括 Amber 安装指南。该指南为Amber的安装提供了非常有价值的总体框架和思路。
然而,在实践中我们发现,随着基础软件环境(如gcc、CUDA、Python版本)的快速迭代,完全遵循该指南在某些环节会遇到挑战。例如,在较新的系统上可能遇到Python环境配置错误、CMake配置失败或部分模块因代码规范问题编译失败等情况。
因此,本手册并非对现有指南的简单重复,而是在其基础上结合社区反馈和实测经验,进行了问题预判与内容增强。我们将在后续章节中详细指出这些已知问题并提供具体的解决方案,例如:在环境准备部分强调关键依赖库的版本。在安装过程中修正CMake的配置细节。
声明:安装过程复杂且高度依赖于具体环境。我们虽已尽力确保内容的准确性,但无法保证在所有系统上都能一次成功。请将本文作为核心参考,并根据系统的实际情况进行适当调整。

1. 环境

Ubuntu 24.04.1 LTS

gcc-9.5.0

gcc对于源码安装Amber非常重要,建议在安装Amber前阅读Amber官网的安装手册根据Amber版本确定gcc版本。以Amber20为例,本次安装选择gcc-9.5.0版本。
此外,对于终端上的多个gcc版本,推荐使用update-alternatives方式进行版本管理,如下所示:

# 安装 gcc 9 和 g++ 9(如果尚未安装)
sudo apt install gcc-9 g++-9 gfortran-9
# 配置 update-alternatives
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 90
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-13 130(假设需要其他新版本的gcc)
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-9 90
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-13 130
sudo update-alternatives --install /usr/bin/gfortran gfortran /usr/bin/gfortran-9 90
sudo update-alternatives --install /usr/bin/gfortran gfortran /usr/bin/gfortran-13 130
# 选择 gcc 9 作为默认版本
sudo update-alternatives --config gcc
# 在提示中选择 gcc-9 对应的编号
sudo update-alternatives --config g++
# 在提示中选择 g++-9 对应的编号
sudo update-alternatives --config gfortran
# 在提示中选择 gfortran-9 对应的编号

cmake-3.28.3

python-3.8.5

此处是指南的一个修正点。实际上对于Amber20的安装和使用,更推荐使用python3.9的版本。在后续Amber自带的MMPBSA.py的使用过程中存在部分依赖包需要重新安装的情况,依赖包最低要求python3.9版本。
python-3.8.x或python-3.9.x不影响Amber20本身的编译和安装,但如果需要安装比Amber20更加新的版本时,需仔细参考Amber官网对于Python版本的要求。

GeForce RTX 4090*2

Driver Version:580.95.05
CUDA Version:11.8
Amber20不支持CUDA版本超过11.x,其他版本的Amber所需的CUDA版本请参考Amber官网的安装手册,多版本CUDA管理参考此前对多版本gcc的管理。

其他依赖的安装

sudo apt -y update
sudo apt -y install tcsh make
sudo apt -y install  flex bison patch 
sudo apt -y install  bc xorg-dev libbz2-dev wget libreadline-dev

同时,推荐使用自建立的conda虚拟环境进行Amber安装,以方便进行环境管理。

conda create -n Amber20 python=3.8.5
conda intall numpy scipy matplotlib pandas

2. Amber20安装

2.1 下载 & 解压

Amber20.tar.bz2 AmberTools21.tar.bz2(本次安装使用的AmberTools版本为AmberTools21,其他版本的安装过程本质上相同,根据系统的实际情况进行适当调整)

tar jxvf Amber20.tar.bz2
tar jxvf AmberTools21.tar.bz2

2.2 编译 & 安装

进入编译文件夹

cd amber20_src/build

修改run_cmake内容(以安装GPU非并行版本为例)

-DCUDA=FLASE  True
-DDOWNLOAD_MINICONDA=True  False

由于本次安装使用的系统版本较新(Ubuntu 24.04.1 LTS),因此需要修改AmberTools/src/leap/src/leap/getline.c的部分内容,在该文件中注释掉或删除以下两行(line117 & line133)

// extern int write();
// extern int read();

编译和安装,此处使用100个CPU线程进行,根据系统配置的实际情况进行适当调整。

make -j 100 install

(可选)Amber运行环境的隔离

对于此前创建的Amber20这个环境,创建并编辑anaconda3/envs/amber20/etc/conda/activate.d/amber.sh 和 anaconda3/envs/amber20/etc/conda/deactivate.d/amber.sh

<activate.d/amber.sh>
#!/bin/bash
echo "Loading Amber environment…"
# 保存原始的环境变量
export _CONDA_OLD_PATH="$PATH"
export _CONDA_OLD_PERL5LIB="$PERL5LIB"
export _CONDA_OLD_PYTHONPATH="$PYTHONPATH"
export _CONDA_OLD_LD_LIBRARY_PATH="$LD_LIBRARY_PATH"
# 加载 Amber
if [ -f "/home/user/softwares/amber20/amber.sh" ]; then
source /home/user/softwares/amber20/amber.sh
export AMBER_CONDA_ACTIVE=1
echo "Amber environment loaded successfully"
else
echo "Error: amber.sh not found"
fi

<deactivate.d/amber.sh>
#!/bin/bash
SCRIPT_NAME="AMBER"
echo "Unloading Amber environment..."
# 移除 Amber 路径
export PATH=$(echo "$PATH" | sed -e 's|:/home/user/softwares/amber20/bin||g' \
                                -e 's|/home/user/softwares/amber20/bin:||g')
# 恢复其他环境变量
if [ -n "$_CONDA_OLD_LD_LIBRARY_PATH" ]; then
    export LD_LIBRARY_PATH="$_CONDA_OLD_LD_LIBRARY_PATH"
    unset _CONDA_OLD_LD_LIBRARY_PATH
else
    unset LD_LIBRARY_PATH 2>/dev/null || true
fi
if [ -n "$_CONDA_OLD_PYTHONPATH" ]; then
    export PYTHONPATH="$_CONDA_OLD_PYTHONPATH"
    unset _CONDA_OLD_PYTHONPATH
else
    unset PYTHONPATH 2>/dev/null || true
fi
if [ -n "$_CONDA_OLD_PERL5LIB" ]; then
    export PERL5LIB="$_CONDA_OLD_PERL5LIB"
    unset _CONDA_OLD_PERL5LIB
else
    unset PERL5LIB 2>/dev/null || true
fi
# 取消设置 Amber 特定的环境变量
unset AMBERHOME
unset AMBER_CONDA_ACTIVE
echo "Amber environment unloaded"

上述步骤完成后,激活Amber20环境,可以看到成功安装pmemd.cuda,混合精度浮点版本pmemd.cuda_SPFP与支持双精度浮点版本pmemd.cuda_DPFP。其中pmemd.cuda默认为pmemd.cuda_SPFP。

3. 部分模块修正

Amber本体和AmberTools21安装之后,在运行MMPBSA.py时会出现两个报错:

Traceback (most recent call last):
  File "/home/user/softwares/amber20/bin/MMPBSA.py", line 4, in <module>
    __import__('pkg_resources').run_script('MMPBSA.py==16.0', 'MMPBSA.py')
  File "/home/user/softwares/anaconda3/envs/amber20/lib/python3.8/site-packages/pkg_resources/__init__.py", line 754, in run_script
    self.require(requires)[0].run_script(script_name, ns)
  File "/home/user/softwares/anaconda3/envs/amber20/lib/python3.8/site-packages/pkg_resources/__init__.py", line 1754, in run_script
    exec(script_code, namespace, namespace)
  File "/home/user/softwares/amber20/lib/python3.8/site-packages/./MMPBSA.py-16.0-py3.8.egg/EGG-INFO/scripts/MMPBSA.py", line 45, in <module>
ImportError: Could not import Amber Python modules. Please make sure you have sourced /home/user/softwares/amber20/amber.sh (if you are using sh/ksh/bash/zsh) or /home/user/softwares/amber20/amber.csh (if you are using csh/tcsh)
    from alamdcrd import MutantMdcrd, GlyMutantMdcrd
ModuleNotFoundError: No module named 'alamdcrd'

两个报错均为缺少MMPBSA的依赖包,其中parmed可以通过将环境python升级为3.9之后,通过conda/pip install的方式进行安装,但升级python之后会对初始MMPBSA的python egg文件包的解析发生错误。
因此,首先推荐在安装前使用python-3.9.x版本进行Amber20和AmberTools21的编译和安装。(更正指南
若采取先使用python-3.8.x进行编译和安装,后升级python-3.9.x版本的方式,由于alamdcrd不支持外部安装,因此需要对MMPBSA的python egg文件进行解压,同时重塑MMPBSA.py启动器

cd $AMBERHOME/lib/python3.8/site-packages/
unzip -q MMPBSA.py-16.0-py3.8.egg -d MMPBSA_py
cd %AMBERHOME/bin/
vi MMPBSA.py

修改MMPBSA.py为以下内容:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Fixed launcher for AmberTools MMPBSA.py (Amber20)
Complete implementation following the correct initialization sequence
"""

import sys
import os
import importlib

# === locate AMBERHOME ===
AMBERHOME = os.environ.get("AMBERHOME")
if not AMBERHOME:
    sys.stderr.write("ERROR: AMBERHOME not set. Please source amber.sh first.\n")
    sys.exit(1)

# === add Amber python libs to path(确保MMPBSA_mods在搜索路径中) ===
amber_python_lib = os.path.join(AMBERHOME, "lib", "python3.8", "site-packages")
sys.path.insert(0, amber_python_lib)  # 父目录
sys.path.insert(0, os.path.join(amber_python_lib, "MMPBSA_py"))  # MMPBSA_py根目录
sys.path.insert(0, os.path.join(amber_python_lib, "MMPBSA_py", "MMPBSA_mods"))  # 直接添加模块所在目录(双重保险)

try:
    # 关键修改:从MMPBSA_mods目录导入alamdcrd(匹配文件实际位置)
    from MMPBSA_mods import alamdcrd
    mmp_main = importlib.import_module("MMPBSA_py.MMPBSA_mods.main")
    from MMPBSA_mods.fake_mpi import MPI as FakeMPI
except ImportError as e:
    if "alamdcrd" in str(e):
        sys.stderr.write(f"ERROR: 找不到 alamdcrd 模块!请确认文件位置:\n")
        sys.stderr.write(f"预期路径:{os.path.join(amber_python_lib, 'MMPBSA_py', 'MMPBSA_mods', 'alamdcrd.py')}\n")
        sys.stderr.write(f"当前搜索路径:{sys.path}\n")
    else:
        sys.stderr.write(f"ERROR: 无法导入必要模块:{e}\n")
    sys.exit(1)

def run_mmpbsa_complete():
    """Run MMPBSA with complete initialization sequence"""
    try:
        # 过滤异常参数(保留之前的修复)
        valid_argv = [arg for arg in sys.argv if not arg.endswith('MMPBSA.py')]

        # 初始化异常处理和信号处理
        mmp_main.setup_run()

        # 创建应用实例
        app = mmp_main.MMPBSA_App(MPI=FakeMPI())

        # 处理帮助命令
        if '-h' in valid_argv or '--help' in valid_argv:
            app.get_cl_args(valid_argv)
            return 0

        # 完整计算流程
        app.get_cl_args(valid_argv)
        app.read_input_file()
        app.process_input()
        app.check_for_bad_input()
        app.loadcheck_prmtops()
        app.file_setup()  # 初始化外部程序和轨迹
        app.run_mmpbsa()
        app.parse_output_files()
        app.write_final_outputs()
        app.finalize()

        return 0

    except SystemExit as e:
        return e.code if isinstance(e.code, int) else 0
    except Exception as e:
        sys.stderr.write(f"ERROR running MMPBSA: {e}\n")
        import traceback
        traceback.print_exc()
        return 1

if __name__ == "__main__":
exit_code = run_mmpbsa_complete()
sys.exit(exit_code)

在此之后,终端输入MMPBSA.py -h可以正常运行

4. 总结

以上是Amber20与AmberTools21的老版本计算软件套组在Ubuntu 24.04 LTS这一较新系统环境下的安装与配置。回顾整个流程,本次安装的核心挑战与解决思路可概括为以下几点:
环境适配:在新系统上安装旧版科学软件,首要任务是确保基础环境(如GCC 9、CUDA 11)的兼容性。通过 update-alternatives 等工具管理多版本编译器是解决此类问题的有效方法。
源码修正:由于系统库和标准的演进,直接编译旧版源码常会遇到阻碍。本次安装中,我们通过注释 leap/src/leap/getline.c 中过时的 extern 声明,解决了与新Glibc的兼容性问题,这是手动安装中典型的“排雷”步骤。
Python环境需前瞻规划:对于AmberTools中高度依赖Python生态的工具(如MMPBSA.py),初始Python版本的选择至关重要。我们纠正了使用Python 3.8可能带来的潜在问题,并提供了两种方案:首选方案是在安装伊始就使用Python 3.9;补救方案是在使用Python 3.8安装后,通过解压egg文件与重写启动器脚本的方式进行修复。
环境隔离与管理:利用Conda虚拟环境并在激活/退出脚本中精细控制Amber环境变量,实现了Amber与系统环境及其他工作环境的完美隔离。

(作者:张凯)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注