|
|
本帖最后由 Shinecyh 于 2025-12-22 10:57 编辑
综合了网上的资料,我编写了一个自动安装Amber25+pmemd的脚本。可以运行了试试,不过其中有些参数是针对我们学校超算进行设计的,可以先去掉后再运行,有报错的话可以喂给AI帮你解决。
去掉的参数:
-DCUDA_cublas_LIBRARY="/usr/local/cuda-12.2/lib64/libcublas.so.12.2.1.16" \
-DMKL_HOME="/opt/intel/mkl" \
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
需要注意的参数:
1.脚本最前面的一系列环境变量设置 (export ****),可以都注释掉,然后根据运行时的报错再逐一完善,因为每台机器的环境不一样,固定参数无法满足安装需求。新机器一般都不需要额外设置参数,但是超算集群,尤其是学校的集群,大概率是要额外设置这些信息的。建议会使用容器的,可以创建一个容器后在容器内进行编译(我就是这么做的),我的测试中Amber在容器内编译后是可以正常在宿主机上运行的。但是Gromacs对GLIBC有依赖,如果容器和宿主机GLIBC对不上,可以正常编译但是运行会报错。
2.注意,安装过程中很可能会提醒你安装了boost库,让你把路径添加到环境变量中,比如export C_INCLUDE_PATH="${HOME}/amber-installer/ambertools25_src/AmberTools/src/boost",在脚本中添加后再运行编译。
3.在安装过程中如果出现了报错,建议通过ake clean或者手动删除build目录再运行,因为有的设置会在./configure时就写入makefile,重新make时不会改动参数,导致编译时还是用的旧变量。
按照CPU-MPICPU-GPU-MPIGPU的顺序编译Ambertools,然后按照GPU-MPIGPU的顺序编译pmemd。具体操作可以看脚本的help
- #!/usr/bin/env bash
- # MIT License
- #
- # Copyright (c) 2025 Bundit Boonyarit
- #
- # Permission is hereby granted, free of charge, to any person obtaining a copy
- # of this software and associated documentation files (the "Software"), to deal
- # in the Software without restriction, including without limitation the rights
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- # copies of the Software, and to permit persons to whom the Software is
- # furnished to do so, subject to the following conditions:
- #
- # The above copyright notice and this permission notice shall be included in
- # all copies or substantial portions of the Software.
- #
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- # THE SOFTWARE.
- set -euo pipefail
- export C_INCLUDE_PATH=${HOME}/amber-installer/ambertools25_src/AmberTools/src/boost:$C_INCLUDE_PATH
- export C_INCLUDE_PATH=/usr/local/cuda-12.2/include:$C_INCLUDE_PATH
- #export CPLUS_INCLUDE_PATH=/usr/local/cuda-12.2/include:$CPLUS_INCLUDE_PATH
- export LD_LIBRARY_PATH=${HOME}/amber-installer/ambertools25_src/AmberTools/src/stage/lib:$LD_LIBRARY_PATH
- #export LD_LIBRARY_PATH=/usr/local/cuda-12.2/lib64:$LD_LIBRARY_PATH
- export PATH=/usr/local/cuda/bin:$PATH
- #export MKL_HOME=/opt/intel/mkl:$MKL_HOME
- # export C_INCLUDE_PATH="${HOME}/amber-installer/ambertools25_src/AmberTools/src/boost"
- export CPLUS_INCLUDE_PATH="/usr/local/cuda-12.2/include"
- # export LD_LIBRARY_PATH="${HOME}/amber-installer/ambertools25_src/AmberTools/src/stage/lib"
- # export LD_LIBRARY_PATH="/usr/local/cuda-12.2/lib64"
- # export PATH="/usr/local/cuda/bin"
- export MKL_HOME="/opt/intel/mkl"
- #export MKLROOT="/opt/intel/mkl"
- # ----------------------------------------------------------------------------
- # Colour codes
- # ----------------------------------------------------------------------------
- RED='\033[0;31m'
- GREEN='\033[0;32m'
- YELLOW='\033[1;33m'
- BLUE='\033[1;34m'
- NC='\033[0m' # No Colour
- # ----------------------------------------------------------------------------
- # Default installation prefixes (separated as requested)
- # ----------------------------------------------------------------------------
- INSTALL_PREFIX_AMBERTOOLS="${HOME}/ambertools25"
- INSTALL_PREFIX_PMEMD="${HOME}/pmemd24"
- # ----------------------------------------------------------------------------
- # Default build flags
- # ----------------------------------------------------------------------------
- BUILD_MPI=false
- BUILD_CUDA=false
- BUILD_AMBERTOOLS=false
- BUILD_PMEMD=false
- NPROC=$(nproc)
- # ----------------------------------------------------------------------------
- # Helper: usage message
- # ----------------------------------------------------------------------------
- usage() {
- echo -e "${YELLOW}Usage: $0 [OPTIONS]${NC}\n"
- echo "Options:"
- echo " -cpu Build serial CPU version"
- echo " -gpu Build serial GPU version with CUDA"
- echo " -mpi_cpu Build MPI‑parallel CPU version"
- echo " -mpi_gpu Build MPI‑parallel GPU version (MPI + CUDA)"
- echo " -ambertools Build AmberTools25"
- echo " -pmemd Build PMEMD24"
- echo " -path_ambertools <path> Override AmberTools25 installation prefix"
- echo " -path_pmemd <path> Override PMEMD24 installation prefix"
- echo " -nproc <n> Number of CPU cores for compilation (default: all)"
- echo " -h | --help Show this help message and exit"
- exit 1
- }
- # ----------------------------------------------------------------------------
- # CLI argument parsing
- # ----------------------------------------------------------------------------
- CPU_FLAG_SET=0
- GPU_FLAG_SET=0
- MPI_CPU_FLAG_SET=0
- MPI_GPU_FLAG_SET=0
- while [[ $# -gt 0 ]]; do
- case "$1" in
- -cpu) CPU_FLAG_SET=1; shift;;
- -gpu) GPU_FLAG_SET=1; shift;;
- -mpi_cpu) MPI_CPU_FLAG_SET=1;shift;;
- -mpi_gpu) MPI_GPU_FLAG_SET=1;shift;;
- -ambertools) BUILD_AMBERTOOLS=true; shift;;
- -pmemd) BUILD_PMEMD=true; shift;;
- -path_ambertools)
- [[ $# -lt 2 ]] && { echo -e "${RED}Error: -path_ambertools requires an argument.${NC}"; usage; }
- INSTALL_PREFIX_AMBERTOOLS="$2"; shift 2;;
- -path_pmemd)
- [[ $# -lt 2 ]] && { echo -e "${RED}Error: -path_pmemd requires an argument.${NC}"; usage; }
- INSTALL_PREFIX_PMEMD="$2"; shift 2;;
- -nproc)
- [[ $# -lt 2 ]] && { echo -e "${RED}Error: -nproc requires an argument.${NC}"; usage; }
- NPROC="$2"; shift 2;;
- -h|--help) usage;;
- *) echo -e "${RED}Unknown argument: $1${NC}"; usage;;
- esac
- done
- TOTAL_FLAGS=$((CPU_FLAG_SET + GPU_FLAG_SET + MPI_CPU_FLAG_SET + MPI_GPU_FLAG_SET))
- if [[ $TOTAL_FLAGS -ne 1 ]]; then
- echo -e "${RED}Error: choose exactly one build type (-cpu, -gpu, -mpi_cpu, -mpi_gpu).${NC}"
- usage
- fi
- if [[ "${BUILD_AMBERTOOLS}" = false && "${BUILD_PMEMD}" = false ]]; then
- echo -e "${RED}Error: specify at least one of -ambertools or -pmemd.${NC}"
- usage
- fi
- # ----------------------------------------------------------------------------
- # Configure build type
- # ----------------------------------------------------------------------------
- if [[ $CPU_FLAG_SET -eq 1 ]]; then BUILD_MPI=false; BUILD_CUDA=false;
- elif [[ $GPU_FLAG_SET -eq 1 ]]; then BUILD_MPI=false; BUILD_CUDA=true;
- elif [[ $MPI_CPU_FLAG_SET -eq 1 ]]; then BUILD_MPI=true; BUILD_CUDA=false;
- elif [[ $MPI_GPU_FLAG_SET -eq 1 ]]; then BUILD_MPI=true; BUILD_CUDA=true;
- fi
- # ----------------------------------------------------------------------------
- # Environment‑modules handling (optional)
- # ----------------------------------------------------------------------------
- if command -v module &>/dev/null && [[ -n "${LMOD_CMD:-}" ]]; then
- echo -e "${BLUE}Detected Lmod environment — purging loaded modules...${NC}"
- module purge
- fi
- # ----------------------------------------------------------------------------
- # Conda bootstrap (local Miniforge3) — unchanged from original script
- # ----------------------------------------------------------------------------
- if [[ -d ./miniforge3 ]]; then
- echo -e "${BLUE}Activating existing conda environment...${NC}"
- set +eu
- source ./miniforge3/bin/activate
- #set +eu
- #SOURCE CONDA
- conda activate amber-installer
- else
- MINIFORGE_INSTALLER="Miniforge3-$(uname)-$(uname -m).sh"
- [[ -f "$MINIFORGE_INSTALLER" ]] || curl -LO "https://github.com/conda-forge/miniforge/releases/latest/download/$MINIFORGE_INSTALLER"
- bash "$MINIFORGE_INSTALLER" -b -p ./miniforge3
- source ./miniforge3/bin/activate
- echo -e "${BLUE}Creating conda environment 'amber-installer'...${NC}"
- conda env create -f env.yml
- #set +eu
- #SOURCE CONDA
- set +eu
- conda activate amber-installer
- fi
- # ----------------------------------------------------------------------------
- # AmberTools25 build
- # ----------------------------------------------------------------------------
- if [[ "${BUILD_AMBERTOOLS}" = true ]]; then
- [[ -f ambertools25.tar.bz2 ]] || {
- echo -e "${RED}Error: ambertools25.tar.bz2 not found.${NC}\n${YELLOW}Download it from https://ambermd.org/GetAmber.php${NC}";
- exit 1;
- }
- echo -e "${BLUE}Extracting AmberTools25...${NC}"
- [[ -d ambertools25_src ]] || tar xvjf ambertools25.tar.bz2
- pushd ambertools25_src > /dev/null
- ./update_amber --update
- set +eu
- conda activate amber-installer
- # QUICK fix for mpi.h CMake flags (see original notes)
- sed -i '/set(CMAKE_C_FLAGS "")/s/^/# /' AmberTools/src/quick/CMakeLists.txt
- sed -i '/set(CMAKE_CXX_FLAGS "")/s/^/# /' AmberTools/src/quick/CMakeLists.txt
- sed -i '/set(CMAKE_Fortran_FLAGS "")/s/^/# /' AmberTools/src/quick/CMakeLists.txt
- mkdir -p build && cd build
- which gfortran
- echo -e "${BLUE}Configuring AmberTools25 (MPI=${BUILD_MPI}, CUDA=${BUILD_CUDA}, PREFIX=${INSTALL_PREFIX_AMBERTOOLS})...${NC}"
- #[[ -d CMakeFiles ]] && { echo "CMakeFiles detected — running make clean"; make clean; }
- cmake .. \
- -DCUDA_cublas_LIBRARY="/usr/local/cuda-12.2/lib64/libcublas.so.12.2.1.16" \
- -DMKL_HOME="/opt/intel/mkl" \
- -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
- -DCMAKE_INSTALL_PREFIX="${INSTALL_PREFIX_AMBERTOOLS}" \
- -DCOMPILER=GNU \
- -DMPI="${BUILD_MPI}" \
- -DCUDA="${BUILD_CUDA}" \
- -DINSTALL_TESTS=TRUE \
- -DDOWNLOAD_MINICONDA=TRUE
- echo -e "${BLUE}Building AmberTools25 with ${NPROC} cores...${NC}"
- make -j"${NPROC}" && make install
- popd > /dev/null
- echo -e "${GREEN}AmberTools25 installed to ${INSTALL_PREFIX_AMBERTOOLS}${NC}"
- fi
- # ----------------------------------------------------------------------------
- # PMEMD24 build
- # ----------------------------------------------------------------------------
- if [[ "${BUILD_PMEMD}" = true ]]; then
- [[ -f pmemd24.tar.bz2 ]] || {
- echo -e "${RED}Error: pmemd24.tar.bz2 not found.${NC}\n${YELLOW}Download it from https://ambermd.org/GetAmber.php${NC}";
- exit 1;
- }
- echo -e "${BLUE}Extracting PMEMD24...${NC}"
- [[ -d pmemd24_src ]] || tar xvjf pmemd24.tar.bz2
- pushd pmemd24_src > /dev/null
- ./update_pmemd --update
- mkdir -p build && cd build
- echo -e "${BLUE}Configuring PMEMD24 (MPI=${BUILD_MPI}, CUDA=${BUILD_CUDA}, PREFIX=${INSTALL_PREFIX_PMEMD})...${NC}"
- [[ -d CMakeFiles ]] && { echo "CMakeFiles detected — running make clean"; make clean; }
- cmake .. \
- -DCUDA_cublas_LIBRARY="/usr/local/cuda-12.2/lib64/libcublas.so.12.2.1.16" \
- -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
- -DCMAKE_INSTALL_PREFIX="${INSTALL_PREFIX_PMEMD}" \
- -DCOMPILER=GNU \
- -DMPI="${BUILD_MPI}" \
- -DCUDA="${BUILD_CUDA}" \
- -DDOWNLOAD_MINICONDA=FALSE \
- -DINSTALL_TESTS=TRUE \
- -DBUILD_PYTHON=FALSE \
- -DBUILD_PERL=FALSE \
- -DBUILD_GUI=FALSE \
- -DPMEMD_ONLY=TRUE \
- -DCHECK_UPDATES=FALSE
- echo -e "${BLUE}Building PMEMD24 with ${NPROC} cores...${NC}"
- make -j"${NPROC}" && make install
- popd > /dev/null
- echo -e "${GREEN}PMEMD24 installed to ${INSTALL_PREFIX_PMEMD}${NC}"
- fi
- # ----------------------------------------------------------------------------
- # Completion message
- # ----------------------------------------------------------------------------
- if [[ "${BUILD_AMBERTOOLS}" = true && "${BUILD_PMEMD}" = true ]]; then
- echo -e "${GREEN}Both AmberTools25 and PMEMD24 installations completed successfully.${NC}"
- elif [[ "${BUILD_AMBERTOOLS}" = true ]]; then
- echo -e "${GREEN}AmberTools25 installation completed successfully.${NC}"
- else
- echo -e "${GREEN}PMEMD24 installation completed successfully.${NC}"
- fi
复制代码 |
|